summaryrefslogtreecommitdiffstats
path: root/afb-client/bower_components/foundation-apps
diff options
context:
space:
mode:
Diffstat (limited to 'afb-client/bower_components/foundation-apps')
-rw-r--r--afb-client/bower_components/foundation-apps/.bower.json57
-rw-r--r--afb-client/bower_components/foundation-apps/CHANGELOG.md301
-rw-r--r--afb-client/bower_components/foundation-apps/LICENSE22
-rwxr-xr-xafb-client/bower_components/foundation-apps/README.md83
-rw-r--r--afb-client/bower_components/foundation-apps/bin/gulp-dynamic-routing.js56
-rwxr-xr-xafb-client/bower_components/foundation-apps/bower.json48
-rwxr-xr-xafb-client/bower_components/foundation-apps/dist/css/foundation-apps.css6146
-rwxr-xr-xafb-client/bower_components/foundation-apps/dist/css/foundation-apps.min.css1
-rw-r--r--afb-client/bower_components/foundation-apps/dist/js/foundation-apps-templates.js170
-rw-r--r--afb-client/bower_components/foundation-apps/dist/js/foundation-apps-templates.min.js1
-rwxr-xr-xafb-client/bower_components/foundation-apps/dist/js/foundation-apps.js3136
-rwxr-xr-xafb-client/bower_components/foundation-apps/dist/js/foundation-apps.min.js2
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/account.svg44
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/action.svg38
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/ban.svg17
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/bell.svg22
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/bookmark.svg14
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/cart.svg35
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/chevron.svg28
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/circle-check.svg25
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/circle-x.svg25
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/cog.svg17
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/comment-square.svg14
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/dashboard.svg38
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/document.svg28
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/envelope.svg44
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/flag.svg24
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/home.svg28
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/lock.svg55
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/magnifying-glass.svg26
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/person.svg62
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/reload.svg19
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/share-boxed.svg17
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/star.svg14
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/thumb.svg38
-rwxr-xr-xafb-client/bower_components/foundation-apps/iconic/zoom.svg56
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/app.js35
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion-item.html4
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion.html2
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion.js107
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet-button.html6
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet-content.html8
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet.html3
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet.js226
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/common/common.js171
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/iconic/iconic.js186
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/interchange/interchange.js94
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/modal/modal.html9
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/modal/modal.js291
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/notification/notification-set.html9
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/notification/notification-static.html12
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/notification/notification.html12
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/notification/notification.js417
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/offcanvas/offcanvas.html5
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/offcanvas/offcanvas.js102
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/panel/panel.html6
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/panel/panel.js144
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/popup/popup.html2
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/popup/popup.js160
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/tabs/tab-content.html8
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/tabs/tab.html3
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/tabs/tabs.html8
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/components/tabs/tabs.js311
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/foundation.js22
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/services/foundation.core.animation.js129
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/services/foundation.core.js163
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.animations.js125
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.js156
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/services/foundation.mediaquery.js198
-rw-r--r--afb-client/bower_components/foundation-apps/js/angular/vendor/markdown.js10
-rwxr-xr-xafb-client/bower_components/foundation-apps/js/angular/vendor/svgDirs.js101
-rwxr-xr-xafb-client/bower_components/foundation-apps/js/vendor/iconic.min.js6
-rwxr-xr-xafb-client/bower_components/foundation-apps/scss/_global.scss131
-rw-r--r--afb-client/bower_components/foundation-apps/scss/_settings.scss614
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_accordion.scss72
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_action-sheet.scss265
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_block-list.scss350
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_button-group.scss197
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_button.scss205
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_card.scss93
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_extras.scss54
-rwxr-xr-xafb-client/bower_components/foundation-apps/scss/components/_forms.scss458
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_grid.scss420
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_iconic.scss95
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_label.scss134
-rwxr-xr-xafb-client/bower_components/foundation-apps/scss/components/_list.scss19
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_menu-bar.scss363
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_modal.scss126
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_motion.scss524
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_notification.scss207
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_off-canvas.scss169
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_panel.scss134
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_popup.scss68
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_switch.scss130
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_tabs.scss100
-rw-r--r--afb-client/bower_components/foundation-apps/scss/components/_title-bar.scss135
-rwxr-xr-xafb-client/bower_components/foundation-apps/scss/components/_typography.scss345
-rwxr-xr-xafb-client/bower_components/foundation-apps/scss/components/_utilities.scss160
-rwxr-xr-xafb-client/bower_components/foundation-apps/scss/foundation.scss50
-rw-r--r--afb-client/bower_components/foundation-apps/scss/helpers/_breakpoints.scss154
-rwxr-xr-xafb-client/bower_components/foundation-apps/scss/helpers/_functions.scss343
-rw-r--r--afb-client/bower_components/foundation-apps/scss/helpers/_images.scss19
-rw-r--r--afb-client/bower_components/foundation-apps/scss/helpers/_mixins.scss123
-rw-r--r--afb-client/bower_components/foundation-apps/scss/vendor/_normalize.scss425
104 files changed, 20684 insertions, 0 deletions
diff --git a/afb-client/bower_components/foundation-apps/.bower.json b/afb-client/bower_components/foundation-apps/.bower.json
new file mode 100644
index 0000000..ff37b75
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/.bower.json
@@ -0,0 +1,57 @@
+{
+ "name": "foundation-apps",
+ "version": "1.1.0",
+ "main": [
+ "dist/css/foundation-apps.css",
+ "dist/js/foundation-apps.js"
+ ],
+ "dependencies": {
+ "viewport-units-buggyfill": "~0.4.1",
+ "tether": "~0.6.5",
+ "fastclick": "~1.0.3",
+ "angular": "~1.3.4",
+ "angular-ui-router": "~0.2.12",
+ "angular-animate": "~1.3.4",
+ "hammerjs": "~2.0.4"
+ },
+ "homepage": "https://github.com/zurb/foundation-apps",
+ "description": "A responsive, Angular-powered framework for web apps from ZURB.",
+ "keywords": [
+ "web apps",
+ "responsive design",
+ "angular"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "bower_components",
+ "build",
+ "docs",
+ "node_modules",
+ "tests",
+ "CONTRIBUTING.md",
+ "Gemfile",
+ "Gemfile.lock",
+ "gulpfile.js",
+ "karma.conf.js",
+ "package.json",
+ "scss/_includes.scss"
+ ],
+ "devDependencies": {
+ "angular-mocks": "~1.3.4",
+ "angular-highlightjs": "~0.3.2",
+ "allmighty-autocomplete": "*",
+ "marked": "~0.3.2",
+ "jsdiff": "~1.0.8",
+ "bootcamp": "~1.1.7"
+ },
+ "_release": "1.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.1.0",
+ "commit": "7fc29d6a309a7018a452bdf996e27053a32023c1"
+ },
+ "_source": "git://github.com/zurb/foundation-apps.git",
+ "_target": "~1.1.0",
+ "_originalSource": "foundation-apps"
+} \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/CHANGELOG.md b/afb-client/bower_components/foundation-apps/CHANGELOG.md
new file mode 100644
index 0000000..75f5096
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/CHANGELOG.md
@@ -0,0 +1,301 @@
+# Version 1.1 — Weisshorn
+
+*March 17, 2015*
+
+### General
+
+- **The CLI has been updated to version 1.1.** It includes a streamlined install process, better error-handling, better cross-platform support, and *no Ruby dependency*. Run `npm update -g foundation-cli` to get it.
+- **The documentation is way better.** We did a sweep of every docs page to fix typos, improve examples, and generally make things more clear. Enjoy!
+- **Foundation for Apps is now libsass-first.** We're still testing the codebase in both Ruby Sass 3.4+ and libsass 3.1+, but our documentation and template stack now compile with libsass by default. **This means Ruby is no longer a hard dependency of the framework.**
+- **Directive templates are now compiled to one file.** We're using [ng-html2js](https://github.com/yaru22/ng-html2js) to package up all of our directive templates into a single JavaScript file. This means you no longer need to include the `components` folder in a public directory! This method still works, but you can also just include the `templates.js` file and you're good to go.
+ - The templates file is included in the Bower and npm packages, under `dist/js/foundation-apps-templates.js`.
+ - A third CDN URL has been created for the template files.
+ - Thanks to @MikaAK for submitting the pull request that implemented this!
+
+### Sass Variable Changes
+
+These Sass variables changed. If you're upgrading an existing project, you'll need to update your `_settings.scss` file manually.
+
+**Added:** `$button-background-hover: scale-color($button-background, $lightness: -15%)`
+**Added:** `$motion-class-showhide: (in: "ng-hide-remove", out: "ng-hide-add");`
+**Added:** `$motion-class-showhide-active: (in: "ng-hide-remove-active", out: "ng-hide-add-active");`
+**Added:** `$input-background-disabled: smartscale($input-background)`
+**Added:** `$input-cursor-disabled: not-allowed`
+**Changed:** `$button-tag-selector` is now `false` (previously `true`)
+**Removed:** `$panel-animation-speed`
+
+**You don't need to add the new variables to your settings file,** unless you want to change their default values.
+
+**The old variables are still in the codebase, but aren't being used.** They'll be permanently removed in version 1.2.
+
+### Template Changes
+
+- Sass is now compiled using libsass.
+- Directive templates are compiled into a `templates.js` file, instead of being referenced using hardcoded paths to HTML files.
+- **If you have an existing project, you don't need to change anything to upgrade to v1.1.**
+
+### New Features
+
+- **Improved view animation!** In and out animations on views will now play simultaneously. Thanks to @AntJanus, @stryju, and @jeanieshark for all their hard work in solving this difficult problem!
+- `ui-view` elements no longer need the attribute `ng-class="['ui-animation']"` to animate properly; just having `ui-view` is enough.
+- Prior to v1.1, view animations only worked if the states were created using our front matter routing plugin. Now you can enable view animation in manually-defined states by adding an `animation` property to the state object.
+
+```js
+$stateProvider
+ .state('home', {
+ url: '/',
+ templateUrl: 'templates/home.html',
+ animation: {
+ enter: 'slideInDown',
+ leave: 'fadeOut'
+ }
+ });
+```
+
+- #461: Added a `$background-hover` parameter to the `button-style()` mixin. You can pass in a color, or the `auto` keyword to automatically set a color based on the `$background` parameter.
+- #462: Added styles for disabled form elements. They're automatically applied to any `<input>` element with the `disabled` or `readonly` attributes, or a `<fieldset>` with `disabled`. The styles can also be added manually by adding the `.disabled` class.
+- #475: The path the `zf-iconic` directive uses to search for icon files can now be changed width the `IconicProvider` provider. Use `IconicProvider.setAssetPath(path)` to set the path. Thanks to @gjungb for implementing this!
+- #495: The front matter routing plugin now supports ui-router's abstract states. Just add `abstract: true` to a view template to make it go.
+- Added support for ngAnimate's "show" and "hide" events. This means you can now use Motion UI classes with `ng-show` and `ng-hide`.
+- Added a `.noscroll` class for grid blocks and content blocks. I bet you can guess what it does!
+- You can now pass a scope to a modal created with `ModalFactory`, by passing it through the `contentScope` property on the modal's configuration object.
+
+### Bug Fixes
+
+- #191: `<input type="range">` elements are properly styled in Internet Explorer 10+.
+- #396: Prevent a `$digest already in progress` error from occuring with panels and off-canvas.
+- #397: The `FoundationApi` service now has an `unsubscribe` method, which allows us to remove event listeners from elements that have been removed from the DOM.
+- #467: The settings variables for buttons were placed above button group, which prevents an issue with undefined variables.
+- #472: Fixed the `color` attribute of static notifications not applying.
+- #478: Fixed an issue with modals where `scope.$root` could be `null` after a state change.
+- #483: Fixed notifications with `autoclose` not automatically closing under some circumstances.
+- #486: The `ModalFactory` factory will fetch the modal template before initialization.
+- #489: Deprecated `$panel-animation-speed`, an unused Sass variable for panels. It will be removed in a future version of the framework.
+- #511: Panels that have converted into a block won't play their in/out animations if triggered by an open or close event.
+- #530: Visibility classes will not conflict with Angular's `.ng-hide` class.
+- The `<button>` tag is no longer styled as a `.button` element by default.
+- Any element with `zf-open`, `zf-close`, or `zf-toggle` applied gets the `cursor: pointer` property.
+- Removed the dropdown arrow that Internet Explorer 10+ adds to `<select>` elements.
+- Prevented ghosting issues in WebKit with views that are mid-transition, by adding `-webkit-transform-style: preserve3d`.
+- Fixed landscape/portrait visibility classes not hiding properly.
+- Images inside cards will stretch to the width of the container.
+- Added a missing secondary coloring class to Iconic (`.iconic-color-secondary`).
+
+*The British physicist John Tyndall was the first person to ascend Weisshorn. When the climb was at its most bleak, Tyndall strengthened his resolve with patriotic thoughts:*
+
+> I thought of Englishmen in battle, of the qualities which had made them famous: it was mainly the quality of not knowing when to yield - of fighting for duty even after they had ceased to be animated by hope. Such thoughts helped to lift me over the rocks.
+
+# Version 1.0.3
+
+*February 16, 2015*
+
+### General
+
+- The Bower and npm packages now include a `dist` folder, which contains compiled CSS and JavaScript files, in minified and unminified flavors.
+- The Sass is now fully compatible with libsass. It's been tested in node-sass 1.2.3. Eventually our documentation and template stack will be compiled with node-sass instead of Ruby Sass, but we'll continue to test both.
+
+### Breaking Changes
+
+These Sass variables changed. If you're updating an existing project, you'll need to update your `_settings.scss` file manually.
+
+- **Added:** `$badge-diameter: 1.5rem`
+- **Renamed:** `$badge-font-color` is now `$badge-color`
+- **Removed:** `$badge-padding`
+- **Removed:** `$badge-radius`
+
+The old variables are still in the codebase but aren't being used. They'll be permanently removed in version 1.1.
+
+### Template Changes
+
+The Gulpfile used in the [template stack](https://github.com/zurb/foundation-apps-template) now uses the `gulp-load-plugins` library to streamline use of plugins. **If you have an existing project, you don't need to change anything to upgrade.**
+
+### New Features
+
+- **Stacking notifications.** (#388) Dynamically-called notifications will now stack when you call more than one.
+- **Responsive Iconic icons.** (#408) Iconic icons are now fluid by default, which means they will adjust their geometry based on the width of the parent container.
+- **Staggered animations.** (#394) When using our motion classes in conjunction with the `ng-repeat`, you can now add a stagger class to make items animate in sequence. Add the class `.stagger`, `.short-stagger`, or `.long-stagger` to an element to enable the stagger effect.
+- #376: Added `.info` and `.dark` coloring classes to buttons.
+- #436: The items in a menu bar can be aligned with `.align-right`, `.align-center`, `.align-justify`, or `.align-spaced`. These classes mimic the behavior of the grid alignment classes.
+- Notifications can now be assigned a timeout by adding the `autoclose` attribute. The value of `autoclose` is the number of milliseconds to wait before closing.
+- The speed of all animations has been increased slightly. The default felt just a *little* too slow.
+
+### Bug Fixes
+
+**CSS:**
+
+- #194: Fixed modals not scrolling when they overflow their parent.
+- #412: `<button>` and `<input>` elements can be used as prefix/postfix elements in forms now, in addition to `<a>`.
+- #417: Added padding to `<select>` elements to prevent the text from overlapping with the arrow.
+- #435: Fixed a misnamed parameter in the `grid-block()` mixin.
+- #438: Fixed display issues with `<select>` elements in Firefox.
+- #453: Fixed block list checkboxes being misaligned.
+- Fixed the `.dialog` class and sizing classes of modals not working.
+- The CSS for badges was refactored so they're sized with width and height instead of padding.
+- The pointer cursor is now used when hovering over any anchor (`<a>`) or any element with the `ui-sref` attribute.
+
+**JavaScript:**
+
+- #363: Fixed `zf-close` not working when placed outside of a component.
+- #420: Fixed panel/block animations triggering even though the element is in block mode.
+- #427: Fixed the `pin-at` directive not passing its value to Tether.
+- #448: Fixed invalid `$scope.params` property on the DefaultController controller.
+- If a component is closed or opened while a transition is in progress, the transition will reverse.
+
+# Version 1.0.2
+
+*December 23, 2014*
+
+**Foundation for Apps is now on npm!** `npm install foundation-apps`
+
+**Upgrading from an older version?** We changed how our Angular plugins are structured, which means an existing app's build process will need to be changed slightly.
+
+- **If you're using our template stack as-is:**
+ - Replace your existing `Gulpfile.js` with the [new Gulpfile](https://github.com/zurb/foundation-apps-template/blob/master/gulpfile.js).
+ - Copy the [new app.js](https://github.com/zurb/foundation-apps-template/blob/master/client/assets/js/app.js) file into the folder `client/assets/js/`.
+- If you need to upgrade a project with a custom build process:
+ - To capture every plugin's JavaScript files in a single blob, use `bower_components/foundation-apps/js/angular/**/*.js`.
+ - The Bower package no longer includes an `app.js` file. You can use our template stack's file as a baseline to write your own.
+ - To capture every plugin's HTML template, use `bower_components/foundation-apps/js/angular/components/**/*.html`.
+
+**Codebase changes:**
+
+- #282: The Angular code has been refactored to be more streamlined and more modular. Each UI component now has its own folder, which includes the component's JavaScript and HTML template. The template stack has been updated to properly compile the new asset structure. **If you're upgrading an existing project, follow the above instructions to get everything set.**
+ - The Bower package no longer includes an `app.js` file. Instead, a sample file has been included in the `client` folder of the template stack.
+- #108: Every Sass function now has a unit test. Run `gulp sass:test` to run the test suite.
+- #338: The Sass settings file is now automatically generated based on the variables inside each component's Sass file, with the command `gulp settings`. The [settings parser plguin](https://github.com/zurb/foundation-settings-parser) will be maintained as a separate codebase. The plugin pulls the variables out of each Sass file, after which:
+ - Every component's variables are combined into one settings file, organized by component.
+ - Each individual component's variables are output as an HTML partial, to be displayed on that component's documentation.
+
+**New features:**
+
+- **Touch support!** We added the [Hammer.js Angular library](http://ryanmullins.github.io/angular-hammer/) to our codebase, which allows you to trigger functions with touch gestures, using directives like `hm-swipeup` and `hm-pinchin`.
+ - We added one custom directive, `zf-touch-close`, which allows you to trigger the `close` event on an element by swiping. We'll add more features in future versions.
+- #301: Menu bars can now switch between the expanded and condensed styles at different screen sizes, using these classes: `condense`, `medium-condense`, `large-condense`, `medium-expand`, `large-expand`.
+- #335: Menu bars can now be wrapped in a `menu-bar-group` container, which allows two menu bars to sit on the same row, aligned to the left and the right. Learn more [here](http://foundation.zurb.com/apps/docs/#!/menu-bar).
+- #342: The `src` attribute of an Iconic icon can now be dynamically inserted. Instead of `data-src`, define the icon's source with the `dyn-src` attribute on a `zf-iconic` element.
+
+**Bug fixes:**
+
+- Added proper styles for checkboxes, radio buttons, and their text labels.
+- Fixed a bug with IE10 and 11 where the last item in a wrapping grid would wrap to the next line.
+- Fixed an issue with panels not properly functioning as grid containers.
+- #320: Fixed the `clearall` event for notifications not removing elements from the view.
+- #321: Fixed `zf-hard-toggle` not closing open action sheets.
+- #328: Fixed an issue with collapible items in accordions.
+- #331: Allow action sheets to be closed with `zf-hard-toggle`.
+- #337: Improved the behavior of components animating in and out when toggled on and off rapidly.
+- #343: The settings file now imports the functions file, to make `rem-calc()` and other functions accessible when modifying settings.
+- #351: Fixed a bug where images were not added to notifications created with the publish API.
+- #326: Fixed detached off-canvas menus overlapping with regular ones.
+- #356: Fixed `$small-font-color` not being properly applied to `<small>` elements.
+
+# Version 1.0.1
+
+*December 12, 2014*
+
+Lots of fixes for the Sass, JavaScript, and documentation. Thanks so much to everyone who's been giving feedback, reporting bugs, and most importantly, *fixing our typos* this past week.
+
+## CSS
+
+- Fixed an alignment issue with action sheet dropdowns.
+- #157: Fixed misbehaving box shadows on panels.
+- #180: Added a PNG fallback for the SVG icons used in block lists, for IE10.
+- #212: Corrected a misused parameter in the `grid-frame()` and `grid-block()` mixins.
+- #215: Removed unused text direction variables.
+- #225: Fixed some components not working inside of an off-canvas menu because of selector specificity.
+- #226: Configured the Gulpfile to catch Sass errors instead of exiting.
+- #268: Changed `map-serialize()` to escape quotes in the outputted JSON.
+- #247: Set the `$accordion-title-background-active` variable to be relative to `$accordion-title-background`.
+ - #261: `$tab-title-background-active` got the same treatment.
+- #295: Fixed a error that came up when creating a media query with `@include breakpoint(xxlarge only)`.
+- #326: Fixed detached off-canvas menus overlapping with regular ones.
+
+## JavaScript
+
+- Added the `zf-hard-toggle` directive, to force other open components to close when the targeted component opens.
+- Integrated the FastClick library.
+- #199: Modals can be configured to not close when clicked outside of.
+- #258: Accordions can be set to allow every item to be closed at once with `collapsible="true"`.
+- #260: Added the element restriction to action sheets.
+- #274: Added a timeout to hide elements that are missing an animationOut class.
+- #290: Updated the Gulpfile to properly run `copy` when template pages are added or removed.
+
+# Version 1.0.0 — Matterhorn
+
+Welcome to Foundation for Apps 1.0.0! Thanks for swinging by to try it out.
+
+Our initial release of the framework includes:
+
+ - **An awesome, responsive flexbox-based grid** for creating robust, responsive app layouts.
+ - **The Motion UI library** for easily animating pages and components. You can also use our mixins to write custom animations.
+ - **Our Gulp-powered Angular helpers** which allow you to harness the power of the Angular UI Router library without writing any JavaScript.
+
+The framework also includes these sweet components:
+ - Block list
+ - Button
+ - Button group
+ - Card
+ - Forms
+ - Label and badge
+ - Menu bar
+ - Switch
+ - Title bar
+ - Typography
+ - Visibility and utility classes
+
+These components are also available as Angular directives:
+ - Accordion
+ - Action sheet
+ - Modal
+ - Notification
+ - Off-canvas
+ - Panel
+ - Popup
+ - Tabs
+
+## How to Contribute
+
+We love feedback! Help us find bugs and suggest improvements or new features. Follow us on Twitter at [@ZURBFoundation](https://twitter.com/zurbfoundation) to keep up-to-date with what's new, or to just shoot the breeze.
+
+If you find a problem or have an idea, open a [new issue](https://github.com/zurb/foundation-apps/issues) on GitHub. When filing a bug report, make sure you specify the browser and operating system you're on, and toss us a screenshot or show us how we can recreate the issue.
+
+## Known Issues
+
+ - Some issues with the flexbox grid in IE10
+ - Mobile Safari doesn't place fixed-position elements (modals, notifications) at the right z-index — #190
+ - Range sliders aren't properly styled in IE10+ — #191
+
+*The iconic Matterhorn gets its name from the German words Matte, meaning "meadow", and Horn, which means "peak".*
+
+# Version 1.0.0 RC1 — Mont Blanc
+
+It's our 1.0 release candidate! Thanks for stopping by to take a look.
+
+## How to mess with it
+
+If you want a quick way to jump in, check out our [starter template](https://github.com/zurb/foundation-apps-template), which has a basic directory structure and a blank index file for you to work with. Follow the instructions in the [readme](https://github.com/zurb/foundation-apps-template/blob/master/readme.md) to get going.
+
+The first thing you'll probably want to check out is the grid. If you compile this repo on your machine, you can find the grid documentation at <http://localhost:8080/#!/grid>. You can also view the source of that file [here](https://github.com/zurb/foundation-apps/blob/master/docs/templates/grid.html).
+
+To incorporate our Sass components and Angular directives into your own project, install Foundation using Bower:
+
+```bash
+bower install zurb/foundation-apps
+```
+
+The JavaScript is organized into common components, specific directives, and vendor files. There's also a sample `app.js` that shows how to import the Foundation modules, but you'll likely want to set up your Angular application your own way.
+
+## How to contribute
+
+We love feedback! We have a few [discussion topics](https://github.com/zurb/foundation-apps/issues?q=is%3Aopen+is%3Aissue+label%3Adiscussion) open on our issue tracker, but if you have more specific feedback, please open a new issue! If you encounter any bugs, let us know as well. Be sure to specify the browser and operating system you're using, and show us how we can recreate the issue. Code samples are great!
+
+## What's left
+
+The codebase is very close to feature-complete. Here are the things we're still working on:
+ - Fully-working motion classes (see #113)
+ - Loose ends on components (see #109, #110, #111)
+ - Animation on directives (see #107)
+ - Unit tests for Angular and Sass (see #106)
+ - A finished settings file
+ - The command-line interface (being built in a separate repo, currently private)
+ - Testing, testing, testing \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/LICENSE b/afb-client/bower_components/foundation-apps/LICENSE
new file mode 100644
index 0000000..3b15ebc
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2014 ZURB, inc.
+
+MIT License
+
+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.
diff --git a/afb-client/bower_components/foundation-apps/README.md b/afb-client/bower_components/foundation-apps/README.md
new file mode 100755
index 0000000..336a9bb
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/README.md
@@ -0,0 +1,83 @@
+# Foundation for Apps
+
+[![Build Status](https://travis-ci.org/zurb/foundation-apps.svg)](https://travis-ci.org/zurb/foundation-apps)
+
+This is [Foundation for Apps](http://foundation.zurb.com/apps), an Angular-powered framework for building powerful responsive web apps, from your friends at [ZURB](http://zurb.com).
+
+## Requirements
+
+You'll need the following software installed to get started.
+
+ * [Node.js](http://nodejs.org): Use the installer provided on the NodeJS website.
+ * [Git](http://git-scm.com/downloads): Use the installer for your OS.
+ * Windows users can also try [Git for Windows](http://git-for-windows.github.io/).
+ * [Ruby](https://www.ruby-lang.org/en/): Use the installer for your OS. For Windows users, [JRuby](http://jruby.org/) is a popular alternative.
+ * With Ruby installed, run `gem install bundler sass`.
+ * [Gulp](http://gulpjs.com/) and [Bower](http://bower.io): Run `[sudo] npm install -g gulp bower`
+
+## Get Started
+
+The Sass and JavaScript components are available on Bower and npm.
+```
+bower install foundation-apps --save
+npm install foundation-apps --save
+```
+
+You can also use our command-line interface to quickly setup a basic Foundation for Apps project. It includes a pre-built Gulpfile that compiles an Angular-powered web app for you.
+
+Install it with this command:
+```
+npm install -g foundation-cli bower gulp
+```
+
+Now you can make a new project:
+```
+foundation-apps new myApp
+cd myApp
+```
+
+While working on your project, run:
+```
+npm start
+```
+
+This will assemble the templates, static assets, Sass, and JavaScript. You can view the test server at this URL:
+```
+http://localhost:8080
+```
+
+## Building this Repo
+
+If you want to work with the source code directly or compile our documentation, follow these steps:
+```
+git clone https://github.com/zurb/foundation-apps.git
+cd foundation-apps
+npm install
+```
+
+While you're working on the code, run:
+```
+npm start
+```
+
+The documentation can be viewed at the same URL as above.
+
+### Directory Structure
+
+* `build`: This is where our documentation is assembled. **Don't edit these files directly, as they're overwritten every time you make a change!**
+* `docs`: The Foundation for Apps documentation.
+* `scss`: The Sass components.
+* `js`: The Angular modules and directives, and other external libraries.
+* `iconic`: A set of 24 icons from the folks at [Iconic](https://useiconic.com/).
+* `dist`: Compiled CSS and JavaScript files, in minified and unmified flavors.
+* `tests`: Unit tests for the Angular modules.
+
+## Versioning
+
+Foundation for Apps follows semver, so we won't introduce breaking changes in minor or patch versions. The `master` branch will always have the newest changes, so it's not necessarily production ready. The `stable` branch will always have the most recent stable version of the framework.
+
+## Contributing
+
+We love feedback! Help us find bugs and suggest improvements or new features. Follow us on Twitter at [@ZURBFoundation](https://twitter.com/zurbfoundation) to keep up-to-date with what's new, or to just shoot the breeze.
+
+If you find a problem or have an idea, open a [new issue](https://github.com/zurb/foundation-apps/issues) on GitHub. When filing a bug report, make sure you specify the browser and operating system you're on, and toss us a screenshot or show us how we can recreate the issue.
diff --git a/afb-client/bower_components/foundation-apps/bin/gulp-dynamic-routing.js b/afb-client/bower_components/foundation-apps/bin/gulp-dynamic-routing.js
new file mode 100644
index 0000000..3dc5350
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/bin/gulp-dynamic-routing.js
@@ -0,0 +1,56 @@
+var through = require('through2');
+var gutil = require('gulp-util');
+var fm = require('front-matter');
+var PluginError = gutil.PluginError;
+var path = require('path');
+var fs = require('fs');
+
+module.exports = function(options) {
+ var configs = [];
+ var directory = options.dir || process.cwd();
+
+ function bufferContents(file, enc, cb) {
+ var config;
+ var content;
+
+ if(file.isNull()) return cb(null, file);
+
+ if(file.isBuffer()) {
+ try {
+ content = fm(String(file.contents));
+ } catch (e) {
+ return cb(new PluginError('Gulp Dynamic Routing', e));
+ }
+
+ if(content.attributes.name) {
+ file.contents = new Buffer(content.body);
+ config = content.attributes;
+ var relativePath = path.relative(directory + path.sep + options.root, file.path);
+ config.path = relativePath.split(path.sep).join('/');
+ configs.push(config);
+ }
+ }
+
+ this.push(file);
+
+ return cb();
+ }
+
+ function endStream(cb) {
+ var self = this;
+ var appPath = options.path;
+
+ configs.sort(function(a, b) {
+ return a.url < b.url;
+ });
+
+
+ fs.writeFile(appPath, 'var foundationRoutes = ' + JSON.stringify(configs) + '; \n', function(err) {
+ if(err) throw err;
+ cb();
+ });
+
+ }
+
+ return through.obj(bufferContents, endStream);
+};
diff --git a/afb-client/bower_components/foundation-apps/bower.json b/afb-client/bower_components/foundation-apps/bower.json
new file mode 100755
index 0000000..3a1f1d5
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/bower.json
@@ -0,0 +1,48 @@
+{
+ "name": "foundation-apps",
+ "version": "1.1.0",
+ "main": [
+ "dist/css/foundation-apps.css",
+ "dist/js/foundation-apps.js"
+ ],
+ "dependencies": {
+ "viewport-units-buggyfill": "~0.4.1",
+ "tether": "~0.6.5",
+ "fastclick": "~1.0.3",
+ "angular": "~1.3.4",
+ "angular-ui-router": "~0.2.12",
+ "angular-animate": "~1.3.4",
+ "hammerjs": "~2.0.4"
+ },
+ "homepage": "https://github.com/zurb/foundation-apps",
+ "description": "A responsive, Angular-powered framework for web apps from ZURB.",
+ "keywords": [
+ "web apps",
+ "responsive design",
+ "angular"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "bower_components",
+ "build",
+ "docs",
+ "node_modules",
+ "tests",
+ "CONTRIBUTING.md",
+ "Gemfile",
+ "Gemfile.lock",
+ "gulpfile.js",
+ "karma.conf.js",
+ "package.json",
+ "scss/_includes.scss"
+ ],
+ "devDependencies": {
+ "angular-mocks": "~1.3.4",
+ "angular-highlightjs": "~0.3.2",
+ "allmighty-autocomplete": "*",
+ "marked": "~0.3.2",
+ "jsdiff": "~1.0.8",
+ "bootcamp": "~1.1.7"
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/dist/css/foundation-apps.css b/afb-client/bower_components/foundation-apps/dist/css/foundation-apps.css
new file mode 100755
index 0000000..8e9b0c9
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/dist/css/foundation-apps.css
@@ -0,0 +1,6146 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+html {
+ font-family: sans-serif;
+ /* 1 */
+ -ms-text-size-adjust: 100%;
+ /* 2 */
+ -webkit-text-size-adjust: 100%;
+ /* 2 */ }
+
+/**
+ * Remove default margin.
+ */
+body {
+ margin: 0; }
+
+/* HTML5 display definitions
+ ========================================================================== */
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary {
+ display: block; }
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+audio, canvas, progress, video {
+ display: inline-block;
+ /* 1 */
+ vertical-align: baseline;
+ /* 2 */ }
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+audio:not([controls]) {
+ display: none;
+ height: 0; }
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+[hidden], template {
+ display: none; }
+
+/* Links
+ ========================================================================== */
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+a {
+ background: transparent; }
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+a:active, a:hover {
+ outline: 0; }
+
+/* Text-level semantics
+ ========================================================================== */
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+abbr[title] {
+ border-bottom: 1px dotted; }
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+b, strong {
+ font-weight: bold; }
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+dfn {
+ font-style: italic; }
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0; }
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+mark {
+ background: #ff0;
+ color: #000; }
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+small {
+ font-size: 80%; }
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline; }
+
+sup {
+ top: -0.5em; }
+
+sub {
+ bottom: -0.25em; }
+
+/* Embedded content
+ ========================================================================== */
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+img {
+ border: 0; }
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+svg:not(:root) {
+ overflow: hidden; }
+
+/* Grouping content
+ ========================================================================== */
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+figure {
+ margin: 1em 40px; }
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+hr {
+ 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
+ * (include `-moz` to future-proof).
+ */
+input[type="search"] {
+ -webkit-appearance: textfield;
+ /* 1 */
+ /* 2 */
+ box-sizing: content-box; }
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none; }
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em; }
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+legend {
+ border: 0;
+ /* 1 */
+ padding: 0;
+ /* 2 */ }
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+textarea {
+ overflow: auto; }
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+optgroup {
+ font-weight: bold; }
+
+/* Tables
+ ========================================================================== */
+/**
+ * Remove most spacing between table cells.
+ */
+table {
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+td, th {
+ padding: 0; }
+
+meta.foundation-version {
+ font-family: "1.1.0"; }
+
+meta.foundation-mq {
+ font-family: "small=0&medium=40rem&large=75rem&xlarge=90rem&xxlarge=120rem"; }
+
+/*
+ GLOBAL
+ ------
+
+ Global styles and settings for Foundation for Apps are stored here. This file must always
+ be imported, no matter what.
+
+ Includes:
+ -
+*/
+html, body {
+ height: 100%;
+ font-size: 100%; }
+
+html {
+ box-sizing: border-box; }
+
+*, *:before, *:after {
+ box-sizing: inherit; }
+
+body {
+ background: #fff;
+ color: #222;
+ padding: 0;
+ margin: 0;
+ font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
+ font-weight: normal;
+ font-style: normal;
+ line-height: 1;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale; }
+
+img {
+ max-width: 100%;
+ height: auto;
+ -ms-interpolation-mode: bicubic;
+ display: inline-block;
+ vertical-align: middle; }
+
+a, [ui-sref], [zf-open], [zf-close], [zf-toggle] {
+ cursor: pointer; }
+
+#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object {
+ max-width: none !important; }
+
+.padding {
+ padding: 1rem; }
+
+.iconic {
+ width: 1rem;
+ height: 1rem;
+ vertical-align: middle; }
+ a > .iconic {
+ margin-top: -2px;
+ margin-right: 0.25rem; }
+ a > .iconic * {
+ fill: #00558b;
+ stroke: #00558b; }
+ a > .iconic *.iconic-property-accent {
+ fill: #00558b;
+ stroke: #00558b; }
+
+.iconic * {
+ fill: #00558b;
+ stroke: #00558b; }
+ .iconic *.iconic-property-accent {
+ fill: #00558b;
+ stroke: #00558b; }
+
+.iconic-color-primary * {
+ fill: #00558b;
+ stroke: #00558b; }
+ .iconic-color-primary *.iconic-property-accent {
+ fill: #00558b;
+ stroke: #00558b; }
+
+.iconic-color-success * {
+ fill: #43AC6A;
+ stroke: #43AC6A; }
+ .iconic-color-success *.iconic-property-accent {
+ fill: #43AC6A;
+ stroke: #43AC6A; }
+
+.iconic-color-warning * {
+ fill: #F08A24;
+ stroke: #F08A24; }
+ .iconic-color-warning *.iconic-property-accent {
+ fill: #F08A24;
+ stroke: #F08A24; }
+
+.iconic-color-alert * {
+ fill: #F04124;
+ stroke: #F04124; }
+ .iconic-color-alert *.iconic-property-accent {
+ fill: #F04124;
+ stroke: #F04124; }
+
+.iconic-color-dark * {
+ fill: #232323;
+ stroke: #232323; }
+ .iconic-color-dark *.iconic-property-accent {
+ fill: #232323;
+ stroke: #232323; }
+
+.iconic-color-secondary * {
+ fill: #f1f1f1;
+ stroke: #f1f1f1; }
+ .iconic-color-secondary *.iconic-property-accent {
+ fill: #f1f1f1;
+ stroke: #f1f1f1; }
+
+/*
+ ACTION SHEET
+ ------------
+
+ A dropdown menu that sticks to the bottom of the screen on small devices, and becomes a dropdown menu on larger devices.
+*/
+/*
+ Styles for the list inside an action sheet.
+ Don't include this mixin if you want to build custom controls inside the sheet.
+*/
+/*
+ Styles for the action sheet container. Action sheets pin to the top or bottom of the screen.
+*/
+.action-sheet-container {
+ position: relative;
+ display: inline-block; }
+ .action-sheet-container .button {
+ margin-left: 0;
+ margin-right: 0; }
+
+.action-sheet {
+ position: fixed;
+ left: 0;
+ z-index: 1000;
+ width: 100%;
+ padding: 1rem;
+ background: white;
+ text-align: center;
+ transition-property: -webkit-transform opacity;
+ transition-property: transform opacity;
+ transition-duration: 0.25s;
+ transition-timing-function: ease-out;
+ box-shadow: 0 -3px 10px rgba(0, 0, 0, 0.25);
+ bottom: 0;
+ -webkit-transform: translateY(100%);
+ transform: translateY(100%); }
+ .action-sheet.is-active {
+ -webkit-transform: translateY(0%);
+ transform: translateY(0%); }
+ .action-sheet ul {
+ margin: -1rem;
+ margin-top: 0;
+ list-style-type: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none; }
+ .action-sheet ul:first-child {
+ margin-top: -1rem; }
+ .action-sheet ul:first-child li:first-child {
+ border-top: 0; }
+ .action-sheet ul a {
+ display: block;
+ padding: 0.8rem;
+ line-height: 1;
+ color: #000;
+ border-top: 1px solid #ccc; }
+ .action-sheet ul a:hover {
+ color: #000;
+ background: #f2f2f2; }
+ .action-sheet ul .alert > a {
+ color: #F04124; }
+ .action-sheet ul .disabled > a {
+ pointer-events: none;
+ color: #999; }
+ @media only screen and (min-width: 40em) {
+ .action-sheet {
+ /*
+ Core styles
+ */
+ position: absolute;
+ left: 50%;
+ width: 300px;
+ border-radius: 4px;
+ opacity: 0;
+ pointer-events: none;
+ /*
+ Menu shadow
+ */
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.25);
+ /*
+ Active state
+ */
+ /*
+ Menu tail
+ */
+ /*
+ Positioning
+ */
+ top: auto;
+ bottom: 0;
+ -webkit-transform: translateX(-50%) translateY(110%);
+ transform: translateX(-50%) translateY(110%); }
+ .action-sheet.is-active {
+ opacity: 1;
+ pointer-events: auto; }
+ .action-sheet::before, .action-sheet::after {
+ content: '';
+ position: absolute;
+ left: 50%;
+ display: block;
+ width: 0px;
+ height: 0px;
+ border-left: 10px solid transparent;
+ border-right: 10px solid transparent;
+ margin-left: -10px; }
+ .action-sheet.is-active {
+ -webkit-transform: translateX(-50%) translateY(100%);
+ transform: translateX(-50%) translateY(100%); }
+ .action-sheet::before, .action-sheet::after {
+ top: -10px;
+ bottom: auto;
+ border-top: 0;
+ border-bottom: 10px solid white; }
+ .action-sheet::before {
+ top: -12px;
+ border-bottom-color: rgba(0, 0, 0, 0.15); }
+ .action-sheet.top {
+ /*
+ Core styles
+ */
+ position: absolute;
+ left: 50%;
+ width: 300px;
+ border-radius: 4px;
+ opacity: 0;
+ pointer-events: none;
+ /*
+ Menu shadow
+ */
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.25);
+ /*
+ Active state
+ */
+ /*
+ Menu tail
+ */
+ /*
+ Positioning
+ */
+ top: 0;
+ bottom: auto;
+ -webkit-transform: translateX(-50%) translateY(-120%);
+ transform: translateX(-50%) translateY(-120%); }
+ .action-sheet.top.is-active {
+ opacity: 1;
+ pointer-events: auto; }
+ .action-sheet.top::before, .action-sheet.top::after {
+ content: '';
+ position: absolute;
+ left: 50%;
+ display: block;
+ width: 0px;
+ height: 0px;
+ border-left: 10px solid transparent;
+ border-right: 10px solid transparent;
+ margin-left: -10px; }
+ .action-sheet.top.is-active {
+ -webkit-transform: translateX(-50%) translateY(-110%);
+ transform: translateX(-50%) translateY(-110%); }
+ .action-sheet.top::before, .action-sheet.top::after {
+ top: auto;
+ bottom: -10px;
+ border-top: 10px solid white;
+ border-bottom: 0; }
+ .action-sheet.top::before {
+ bottom: -12px;
+ border-top-color: rgba(0, 0, 0, 0.15); } }
+ .action-sheet.primary {
+ background: #00558b;
+ color: #fff;
+ border: 0; }
+ .action-sheet.primary::before {
+ display: none; }
+ .action-sheet.primary::before, .action-sheet.primary::after {
+ border-top-color: #00558b; }
+ .action-sheet.primary.top::before, .action-sheet.primary.top::after {
+ border-bottom-color: #00558b; }
+ .action-sheet.primary ul {
+ margin: -1rem;
+ margin-top: 0;
+ list-style-type: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none; }
+ .action-sheet.primary ul:first-child {
+ margin-top: -1rem; }
+ .action-sheet.primary ul:first-child li:first-child {
+ border-top: 0; }
+ .action-sheet.primary ul a {
+ display: block;
+ padding: 0.8rem;
+ line-height: 1;
+ color: #fff;
+ border-top: 1px solid #006cb0; }
+ .action-sheet.primary ul a:hover {
+ color: #fff;
+ background: #00609e; }
+ .action-sheet.primary ul .alert > a {
+ color: #F04124; }
+ .action-sheet.primary ul .disabled > a {
+ pointer-events: none;
+ color: #999; }
+ .action-sheet.dark {
+ background: #232323;
+ color: #fff;
+ border: 0; }
+ .action-sheet.dark::before {
+ display: none; }
+ .action-sheet.dark::before, .action-sheet.dark::after {
+ border-top-color: #232323; }
+ .action-sheet.dark.top::before, .action-sheet.dark.top::after {
+ border-bottom-color: #232323; }
+ .action-sheet.dark ul {
+ margin: -1rem;
+ margin-top: 0;
+ list-style-type: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none; }
+ .action-sheet.dark ul:first-child {
+ margin-top: -1rem; }
+ .action-sheet.dark ul:first-child li:first-child {
+ border-top: 0; }
+ .action-sheet.dark ul a {
+ display: block;
+ padding: 0.8rem;
+ line-height: 1;
+ color: #fff;
+ border-top: 1px solid #393939; }
+ .action-sheet.dark ul a:hover {
+ color: #fff;
+ background: #2e2e2e; }
+ .action-sheet.dark ul .alert > a {
+ color: #F04124; }
+ .action-sheet.dark ul .disabled > a {
+ pointer-events: none;
+ color: #999; }
+
+/*
+ BLOCK LIST
+ ----------
+
+ A generic list component that can accomodate a variety of styles and controls.
+
+ Features:
+ - Icons
+ - Labels
+ - Chevrons
+ - Text fields
+ - Dropdown menus
+ - Checkbox/radio inputs
+*/
+/*
+ Adds styles for a block list container.
+
+ $font-size: global font size for the list.
+ $full-bleed: when "true", the margins of the list invert to line it up with the edge of a padded element.
+*/
+.block-list {
+ margin-bottom: 1rem;
+ line-height: 1;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none; }
+ .block-list, .block-list ul {
+ list-style-type: none; }
+ .block-list ul {
+ margin-left: 0; }
+
+/*
+ Styles block list headers on the selector you include this mixin in (normally a <header>).
+
+ $color - color of the header.
+ $font-size - font size of the header.
+ $offset - left margin to add to the header, to line it up with the list items.
+*/
+/*
+ Styles block list items on the selector you include this mixin in (normally an <li>).
+
+ $color - color of items.
+ $color-hover - color of items on hover.
+ $background - background of items.
+ $background-hover - background of items on hover.
+ $border - border between items.
+ $padding - padding on items.
+*/
+/*
+ Adds label styles to the class you include this mixin in.
+
+ $color - color of the label.
+ $left-class - extra class to flip the orientation of the label.
+ $left-padding - left padding to use for left-hand labels.
+*/
+/*
+ Adds support for chevrons, which appear on the right-hand side of the item.
+
+ $color - color of the chevron.
+ $padding - include the global padding of block list items here.
+*/
+/*
+ Adds icon styles. Call this mixin on a block list container.
+
+ $size - size of the icon as a percentage (decimal) of the list item's height.
+ $item-selector - overrides the 'li' selector used for list items.
+*/
+/*
+ Adds support for text fields, select menus, and checkbox/radio groups in block lists.
+
+ $color - color of select menu arrow.
+ $background-hover - color of select menu when hovered over.
+ $padding - include the global padding of block list items here.
+ $dropdown-class - class to use for list items that contain a dropdown.
+ $switch-class - class to use for switches inside list items.
+*/
+.block-list {
+ font-size: 1rem;
+ margin-left: -1rem;
+ margin-right: -1rem; }
+ .block-list input[type="text"], .block-list input[type="password"], .block-list input[type="date"], .block-list input[type="datetime"], .block-list input[type="datetime-local"], .block-list input[type="month"], .block-list input[type="week"], .block-list input[type="email"], .block-list input[type="number"], .block-list input[type="search"], .block-list input[type="tel"], .block-list input[type="time"], .block-list input[type="url"], .block-list input[type="color"], .block-list textarea {
+ margin: 0;
+ border: 0;
+ line-height: 1;
+ height: auto;
+ padding: 0.8rem 1rem;
+ color: inherit; }
+ .block-list input[type="text"]:hover, .block-list input[type="text"]:focus, .block-list input[type="password"]:hover, .block-list input[type="password"]:focus, .block-list input[type="date"]:hover, .block-list input[type="date"]:focus, .block-list input[type="datetime"]:hover, .block-list input[type="datetime"]:focus, .block-list input[type="datetime-local"]:hover, .block-list input[type="datetime-local"]:focus, .block-list input[type="month"]:hover, .block-list input[type="month"]:focus, .block-list input[type="week"]:hover, .block-list input[type="week"]:focus, .block-list input[type="email"]:hover, .block-list input[type="email"]:focus, .block-list input[type="number"]:hover, .block-list input[type="number"]:focus, .block-list input[type="search"]:hover, .block-list input[type="search"]:focus, .block-list input[type="tel"]:hover, .block-list input[type="tel"]:focus, .block-list input[type="time"]:hover, .block-list input[type="time"]:focus, .block-list input[type="url"]:hover, .block-list input[type="url"]:focus, .block-list input[type="color"]:hover, .block-list input[type="color"]:focus, .block-list textarea:hover, .block-list textarea:focus {
+ border: 0; }
+ .block-list li > input[type="checkbox"], .block-list li > input[type="radio"] {
+ position: absolute;
+ left: -9999px; }
+ .block-list li > input[type="checkbox"] + label, .block-list li > input[type="radio"] + label {
+ display: block;
+ font-size: 1rem;
+ margin: 0; }
+ .block-list li > input[type="checkbox"]:checked + label::before, .block-list li > input[type="radio"]:checked + label::before {
+ background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="32" height="32" viewBox="0 0 32 32"><path fill="black" d="M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zm6.906 8.875l2.219 2.031-12.063 13.281-6.188-6.188 2.125-2.125 3.938 3.938 9.969-10.938z"/></svg>');
+ content: '';
+ background-size: 100% 100%;
+ width: 1.5em;
+ height: 1.5em;
+ color: #00558b;
+ float: right;
+ pointer-events: none;
+ margin-top: -0.25em; }
+ @media screen and (min-width: 0\0) {
+ .block-list li > input[type="checkbox"]:checked + label::before, .block-list li > input[type="radio"]:checked + label::before {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdlJREFUeNrMl0FugzAQRY3TRZeoFyhVL0BOkGTXJezaHZwguUnECaCrdFd6gqQnCN11Uyk5QekNOlONJWMVGMCgfGlkEIY3HnsG2xFM3d96PjQB2AJsWdPtAPYOln+dTwXnuw4DHEGzBvNFN6EDCTiS9XIAwB40acNoucKoxODIie0AwAOCu8KOSnIiNx/MakK+A7sW9oTferxx3fP3T1nURoBG/irGVahHwjHm/Ggx7E3TMVdrQmoP0gngghhpZQ3QvG/EdPLUelARWI8Aycjq9Md0qMIdbcNhjmOKLoY7quk3l1Rebeqg4AwFkmq7LWGOh1pmNY0etZAWSq0OX8HoS4JvWuCopbSY26EGR/CW86K0BF+pwkLwlPuyHJhOCl5oe4ZtF++vOqST+GdOYwO+71pN2VNAjmQGPCe42weuHDg0PI8olUwnYrXTGQJH9gxq8l1LKvrQx4O6/YY32Kp/ugb3ey7gZ4xAzuhYiYTxB/UHZFAuaREVXZ2g6yFlvEC2yoKEmbsRZYNgVLk2JeaOaG+xLHN+WCszDWMqLGOrJFa1DlApjSdwoHJGqGzLIb0+cas0wh5Bh780ngswx8GJD7h8sHg2wLA/mfDLPZpdxOF0quP5rwADAAFIzSRvu1m5AAAAAElFTkSuQmCC'); } }
+ .block-list .with-dropdown {
+ color: inherit; }
+ .block-list .with-dropdown select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ outline: 0;
+ background: 0;
+ border: 0;
+ height: auto;
+ padding: 0.8rem 1rem;
+ margin: 0;
+ font-size: 1em;
+ line-height: 1;
+ color: inherit;
+ background-color: transparent; }
+ .block-list .switch {
+ position: absolute;
+ top: 50%;
+ right: 1rem;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%); }
+ .block-list.with-icons li > a, .block-list.with-icons li > span, .block-list.with-icons li > label {
+ padding-left: 2.8rem; }
+ .block-list.with-icons li img, .block-list.with-icons li .iconic {
+ position: absolute;
+ top: 0.26rem;
+ left: 0.26rem;
+ width: 2.08rem;
+ height: 2.08rem;
+ border-radius: 8px;
+ pointer-events: none; }
+ .block-list header {
+ margin-top: 1em;
+ color: #666666;
+ font-weight: bold;
+ margin-bottom: 0.5em;
+ margin-left: 1rem;
+ font-size: 0.8em;
+ cursor: default;
+ text-transform: uppercase; }
+ .block-list li {
+ position: relative;
+ border-bottom: 1px solid #d0d0d0; }
+ .block-list li:first-child {
+ border-top: 1px solid #d0d0d0; }
+ .block-list li > a, .block-list li > span, .block-list li > label {
+ display: block;
+ padding: 0.8rem 1rem;
+ padding-left: 1rem;
+ color: #000;
+ line-height: 1; }
+ .block-list li > span {
+ cursor: default; }
+ .block-list li > a, .block-list li > label {
+ cursor: pointer; }
+ .block-list li > a:hover, .block-list li > label:hover {
+ color: #000; }
+ .block-list li > a:hover, .block-list li > label:hover, .block-list li select:hover {
+ background: #f4f4f4; }
+ .block-list li.caution > a, .block-list li.caution > a:hover {
+ color: #F04124; }
+ .block-list li.disabled > a {
+ cursor: default; }
+ .block-list li.disabled > a, .block-list li.disabled > a:hover {
+ color: #999; }
+ .block-list li.disabled > a:hover {
+ background: transparent; }
+ .block-list li.with-chevron::after {
+ content: '\203A';
+ display: block;
+ position: absolute;
+ right: 1rem;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+ font-weight: bold;
+ color: #666666;
+ font-size: 2em; }
+ .block-list li.with-chevron .block-list-label {
+ padding-right: 1.5rem; }
+ .block-list li .block-list-label {
+ display: inline-block;
+ float: right;
+ padding: 0;
+ color: #999999;
+ pointer-events: none; }
+ .block-list li .block-list-label.left {
+ margin-left: 0.8rem;
+ float: none; }
+
+.button, .button-group > li > a, .button-group > li > label, .button-group > li > button {
+ display: inline-block;
+ border: 0;
+ text-align: center;
+ line-height: 1;
+ cursor: pointer;
+ -webkit-appearance: none;
+ -webkit-font-smoothing: antialiased;
+ transition: background 0.25s ease-out;
+ vertical-align: middle;
+ padding: 0.85em 1em;
+ margin: 0 1rem 1rem 0;
+ font-size: 0.9rem;
+ border-radius: 0; }
+
+.button {
+ font-size: 0.9rem;
+ display: inline-block;
+ width: auto;
+ margin: 0 1rem 1rem 0;
+ background: #00558b;
+ color: #fff; }
+ .button .iconic {
+ width: 1em;
+ height: 1em;
+ vertical-align: middle;
+ margin-right: 0.25em;
+ margin-top: -2px; }
+ .button:hover, .button:focus {
+ background: #004876;
+ color: #fff; }
+ .button .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button.tiny {
+ font-size: 0.63rem; }
+ .button.tiny .iconic {
+ width: 1em;
+ height: 1em;
+ vertical-align: middle;
+ margin-right: 0.25em;
+ margin-top: -2px; }
+ .button.small {
+ font-size: 0.72rem; }
+ .button.small .iconic {
+ width: 1em;
+ height: 1em;
+ vertical-align: middle;
+ margin-right: 0.25em;
+ margin-top: -2px; }
+ .button.large {
+ font-size: 1.17rem; }
+ .button.large .iconic {
+ width: 1em;
+ height: 1em;
+ vertical-align: middle;
+ margin-right: 0.25em;
+ margin-top: -2px; }
+ .button.expand {
+ display: block;
+ width: 100%;
+ margin-left: 0;
+ margin-right: 0; }
+ .button.secondary {
+ background: #f1f1f1;
+ color: #000; }
+ .button.secondary:hover, .button.secondary:focus {
+ background: #cdcdcd;
+ color: #000; }
+ .button.secondary .iconic * {
+ fill: #000;
+ stroke: #000; }
+ .button.secondary .iconic *.iconic-property-accent {
+ fill: #000;
+ stroke: #000; }
+ .button.success {
+ background: #43AC6A;
+ color: #fff; }
+ .button.success:hover, .button.success:focus {
+ background: #39925a;
+ color: #fff; }
+ .button.success .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button.success .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button.warning {
+ background: #F08A24;
+ color: #fff; }
+ .button.warning:hover, .button.warning:focus {
+ background: #dc750f;
+ color: #fff; }
+ .button.warning .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button.warning .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button.alert {
+ background: #F04124;
+ color: #fff; }
+ .button.alert:hover, .button.alert:focus {
+ background: #dc2c0f;
+ color: #fff; }
+ .button.alert .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button.alert .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button.info {
+ background: #A0D3E8;
+ color: #000; }
+ .button.info:hover, .button.info:focus {
+ background: #71bddd;
+ color: #000; }
+ .button.info .iconic * {
+ fill: #000;
+ stroke: #000; }
+ .button.info .iconic *.iconic-property-accent {
+ fill: #000;
+ stroke: #000; }
+ .button.dark {
+ background: #232323;
+ color: #fff; }
+ .button.dark:hover, .button.dark:focus {
+ background: #1e1e1e;
+ color: #fff; }
+ .button.dark .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button.dark .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button.hollow {
+ border: 1px solid #00558b;
+ background: transparent;
+ color: #00558b; }
+ .button.hollow:hover, .button.hollow:focus {
+ border-color: #008ee8;
+ background: transparent;
+ color: #008ee8; }
+ .button.hollow .iconic * {
+ fill: #00558b;
+ stroke: #00558b; }
+ .button.hollow .iconic *.iconic-property-accent {
+ fill: #00558b;
+ stroke: #00558b; }
+ .button.hollow:hover .iconic * {
+ fill: #008ee8;
+ stroke: #008ee8; }
+ .button.hollow:hover .iconic *.iconic-property-accent {
+ fill: #008ee8;
+ stroke: #008ee8; }
+ .button.hollow.secondary {
+ border: 1px solid #f1f1f1;
+ background: transparent;
+ color: #f1f1f1; }
+ .button.hollow.secondary:hover, .button.hollow.secondary:focus {
+ border-color: #f4f4f4;
+ background: transparent;
+ color: #f4f4f4; }
+ .button.hollow.secondary .iconic * {
+ fill: #f1f1f1;
+ stroke: #f1f1f1; }
+ .button.hollow.secondary .iconic *.iconic-property-accent {
+ fill: #f1f1f1;
+ stroke: #f1f1f1; }
+ .button.hollow.secondary:hover .iconic * {
+ fill: #f4f4f4;
+ stroke: #f4f4f4; }
+ .button.hollow.secondary:hover .iconic *.iconic-property-accent {
+ fill: #f4f4f4;
+ stroke: #f4f4f4; }
+ .button.hollow.success {
+ border: 1px solid #43AC6A;
+ background: transparent;
+ color: #43AC6A; }
+ .button.hollow.success:hover, .button.hollow.success:focus {
+ border-color: #6dc68e;
+ background: transparent;
+ color: #6dc68e; }
+ .button.hollow.success .iconic * {
+ fill: #43AC6A;
+ stroke: #43AC6A; }
+ .button.hollow.success .iconic *.iconic-property-accent {
+ fill: #43AC6A;
+ stroke: #43AC6A; }
+ .button.hollow.success:hover .iconic * {
+ fill: #6dc68e;
+ stroke: #6dc68e; }
+ .button.hollow.success:hover .iconic *.iconic-property-accent {
+ fill: #6dc68e;
+ stroke: #6dc68e; }
+ .button.hollow.warning {
+ border: 1px solid #F08A24;
+ background: transparent;
+ color: #F08A24; }
+ .button.hollow.warning:hover, .button.hollow.warning:focus {
+ border-color: #f4a75b;
+ background: transparent;
+ color: #f4a75b; }
+ .button.hollow.warning .iconic * {
+ fill: #F08A24;
+ stroke: #F08A24; }
+ .button.hollow.warning .iconic *.iconic-property-accent {
+ fill: #F08A24;
+ stroke: #F08A24; }
+ .button.hollow.warning:hover .iconic * {
+ fill: #f4a75b;
+ stroke: #f4a75b; }
+ .button.hollow.warning:hover .iconic *.iconic-property-accent {
+ fill: #f4a75b;
+ stroke: #f4a75b; }
+ .button.hollow.alert {
+ border: 1px solid #F04124;
+ background: transparent;
+ color: #F04124; }
+ .button.hollow.alert:hover, .button.hollow.alert:focus {
+ border-color: #f4715b;
+ background: transparent;
+ color: #f4715b; }
+ .button.hollow.alert .iconic * {
+ fill: #F04124;
+ stroke: #F04124; }
+ .button.hollow.alert .iconic *.iconic-property-accent {
+ fill: #F04124;
+ stroke: #F04124; }
+ .button.hollow.alert:hover .iconic * {
+ fill: #f4715b;
+ stroke: #f4715b; }
+ .button.hollow.alert:hover .iconic *.iconic-property-accent {
+ fill: #f4715b;
+ stroke: #f4715b; }
+ .button.hollow.info {
+ border: 1px solid #A0D3E8;
+ background: transparent;
+ color: #A0D3E8; }
+ .button.hollow.info:hover, .button.hollow.info:focus {
+ border-color: #b8deee;
+ background: transparent;
+ color: #b8deee; }
+ .button.hollow.info .iconic * {
+ fill: #A0D3E8;
+ stroke: #A0D3E8; }
+ .button.hollow.info .iconic *.iconic-property-accent {
+ fill: #A0D3E8;
+ stroke: #A0D3E8; }
+ .button.hollow.info:hover .iconic * {
+ fill: #b8deee;
+ stroke: #b8deee; }
+ .button.hollow.info:hover .iconic *.iconic-property-accent {
+ fill: #b8deee;
+ stroke: #b8deee; }
+ .button.hollow.dark {
+ border: 1px solid #232323;
+ background: transparent;
+ color: #232323; }
+ .button.hollow.dark:hover, .button.hollow.dark:focus {
+ border-color: #5a5a5a;
+ background: transparent;
+ color: #5a5a5a; }
+ .button.hollow.dark .iconic * {
+ fill: #232323;
+ stroke: #232323; }
+ .button.hollow.dark .iconic *.iconic-property-accent {
+ fill: #232323;
+ stroke: #232323; }
+ .button.hollow.dark:hover .iconic * {
+ fill: #5a5a5a;
+ stroke: #5a5a5a; }
+ .button.hollow.dark:hover .iconic *.iconic-property-accent {
+ fill: #5a5a5a;
+ stroke: #5a5a5a; }
+ .button.disabled {
+ opacity: 0.5;
+ cursor: default;
+ pointer-events: none; }
+
+.button-group {
+ margin: 0;
+ margin-bottom: 1rem;
+ list-style-type: none;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ border-radius: 0;
+ overflow: hidden;
+ font-size: 0.9rem; }
+ .button-group > li {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto; }
+ .button-group > li > a, .button-group > li > label, .button-group > li > button {
+ border-radius: 0;
+ font-size: inherit;
+ display: block;
+ margin: 0; }
+ .button-group > li > input + label {
+ margin-left: 0; }
+ .button-group > li:not(:last-child) > a, .button-group > li:not(:last-child) > label, .button-group > li:not(:last-child) > button {
+ border-right: 1px solid #004068; }
+ .button-group .iconic {
+ width: 1em;
+ height: 1em;
+ vertical-align: middle;
+ margin-right: 0.25em;
+ margin-top: -2px; }
+
+.button-group.segmented, .button-group.segmented.secondary, .button-group.segmented.success, .button-group.segmented.warning, .button-group.segmented.alert {
+ border: 1px solid #00558b;
+ transition-property: background color; }
+ .button-group.segmented > li > input[type="radio"] {
+ position: absolute;
+ left: -9999px; }
+ .button-group.segmented > li > a, .button-group.segmented.secondary > li > a, .button-group.segmented.success > li > a, .button-group.segmented.warning > li > a, .button-group.segmented.alert > li > a, .button-group.segmented > li > label, .button-group.segmented.secondary > li > label, .button-group.segmented.success > li > label, .button-group.segmented.warning > li > label, .button-group.segmented.alert > li > label, .button-group.segmented > li > button, .button-group.segmented.secondary > li > button, .button-group.segmented.success > li > button, .button-group.segmented.warning > li > button, .button-group.segmented.alert > li > button {
+ margin-right: 0;
+ background: transparent; }
+
+.button-group {
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ border-radius: 0; }
+ .button-group > li {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto; }
+ .button-group > li > a, .button-group > li > label, .button-group > li > button {
+ background: #00558b;
+ color: #fff;
+ border-color: #004876; }
+ .button-group > li > a:hover, .button-group > li > a:focus, .button-group > li > label:hover, .button-group > li > label:focus, .button-group > li > button:hover, .button-group > li > button:focus {
+ background: #004876;
+ color: #fff; }
+ .button-group > li > a .iconic *, .button-group > li > label .iconic *, .button-group > li > button .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group > li > a .iconic *.iconic-property-accent, .button-group > li > label .iconic *.iconic-property-accent, .button-group > li > button .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group > li.is-active > a, .button-group > li.is-active > label, .button-group > li.is-active > button {
+ background: #004876; }
+ .button-group.secondary > li > a, .button-group.secondary > li > label, .button-group.secondary > li > button {
+ background: #f1f1f1;
+ color: #000;
+ border-color: #cdcdcd; }
+ .button-group.secondary > li > a:hover, .button-group.secondary > li > a:focus, .button-group.secondary > li > label:hover, .button-group.secondary > li > label:focus, .button-group.secondary > li > button:hover, .button-group.secondary > li > button:focus {
+ background: #cdcdcd;
+ color: #000; }
+ .button-group.secondary > li > a .iconic *, .button-group.secondary > li > label .iconic *, .button-group.secondary > li > button .iconic * {
+ fill: #000;
+ stroke: #000; }
+ .button-group.secondary > li > a .iconic *.iconic-property-accent, .button-group.secondary > li > label .iconic *.iconic-property-accent, .button-group.secondary > li > button .iconic *.iconic-property-accent {
+ fill: #000;
+ stroke: #000; }
+ .button-group.secondary > li.is-active > a, .button-group.secondary > li.is-active > label, .button-group.secondary > li.is-active > button {
+ background: #cdcdcd; }
+ .button-group.success > li > a, .button-group.success > li > label, .button-group.success > li > button {
+ background: #43AC6A;
+ color: #fff;
+ border-color: #39925a; }
+ .button-group.success > li > a:hover, .button-group.success > li > a:focus, .button-group.success > li > label:hover, .button-group.success > li > label:focus, .button-group.success > li > button:hover, .button-group.success > li > button:focus {
+ background: #39925a;
+ color: #fff; }
+ .button-group.success > li > a .iconic *, .button-group.success > li > label .iconic *, .button-group.success > li > button .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.success > li > a .iconic *.iconic-property-accent, .button-group.success > li > label .iconic *.iconic-property-accent, .button-group.success > li > button .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.success > li.is-active > a, .button-group.success > li.is-active > label, .button-group.success > li.is-active > button {
+ background: #39925a; }
+ .button-group.warning > li > a, .button-group.warning > li > label, .button-group.warning > li > button {
+ background: #F08A24;
+ color: #fff;
+ border-color: #dc750f; }
+ .button-group.warning > li > a:hover, .button-group.warning > li > a:focus, .button-group.warning > li > label:hover, .button-group.warning > li > label:focus, .button-group.warning > li > button:hover, .button-group.warning > li > button:focus {
+ background: #dc750f;
+ color: #fff; }
+ .button-group.warning > li > a .iconic *, .button-group.warning > li > label .iconic *, .button-group.warning > li > button .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.warning > li > a .iconic *.iconic-property-accent, .button-group.warning > li > label .iconic *.iconic-property-accent, .button-group.warning > li > button .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.warning > li.is-active > a, .button-group.warning > li.is-active > label, .button-group.warning > li.is-active > button {
+ background: #dc750f; }
+ .button-group.alert > li > a, .button-group.alert > li > label, .button-group.alert > li > button {
+ background: #F04124;
+ color: #fff;
+ border-color: #dc2c0f; }
+ .button-group.alert > li > a:hover, .button-group.alert > li > a:focus, .button-group.alert > li > label:hover, .button-group.alert > li > label:focus, .button-group.alert > li > button:hover, .button-group.alert > li > button:focus {
+ background: #dc2c0f;
+ color: #fff; }
+ .button-group.alert > li > a .iconic *, .button-group.alert > li > label .iconic *, .button-group.alert > li > button .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.alert > li > a .iconic *.iconic-property-accent, .button-group.alert > li > label .iconic *.iconic-property-accent, .button-group.alert > li > button .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.alert > li.is-active > a, .button-group.alert > li.is-active > label, .button-group.alert > li.is-active > button {
+ background: #dc2c0f; }
+ .button-group > li.secondary > a, .button-group > li.secondary > label, .button-group > li.secondary > button {
+ background: #f1f1f1;
+ color: #000;
+ border-color: #f1f1f1; }
+ .button-group > li.secondary > a:hover, .button-group > li.secondary > a:focus, .button-group > li.secondary > label:hover, .button-group > li.secondary > label:focus, .button-group > li.secondary > button:hover, .button-group > li.secondary > button:focus {
+ background: #cdcdcd;
+ color: #000; }
+ .button-group > li.secondary > a:hover, .button-group > li.secondary > a:focus, .button-group > li.secondary > label:hover, .button-group > li.secondary > label:focus, .button-group > li.secondary > button:hover, .button-group > li.secondary > button:focus {
+ border-color: #b5b5b5; }
+ .button-group > li.secondary > a .iconic *, .button-group > li.secondary > label .iconic *, .button-group > li.secondary > button .iconic * {
+ fill: #000;
+ stroke: #000; }
+ .button-group > li.secondary > a .iconic *.iconic-property-accent, .button-group > li.secondary > label .iconic *.iconic-property-accent, .button-group > li.secondary > button .iconic *.iconic-property-accent {
+ fill: #000;
+ stroke: #000; }
+ .button-group > li.success > a, .button-group > li.success > label, .button-group > li.success > button {
+ background: #43AC6A;
+ color: #fff;
+ border-color: #43AC6A; }
+ .button-group > li.success > a:hover, .button-group > li.success > a:focus, .button-group > li.success > label:hover, .button-group > li.success > label:focus, .button-group > li.success > button:hover, .button-group > li.success > button:focus {
+ background: #39925a;
+ color: #fff; }
+ .button-group > li.success > a:hover, .button-group > li.success > a:focus, .button-group > li.success > label:hover, .button-group > li.success > label:focus, .button-group > li.success > button:hover, .button-group > li.success > button:focus {
+ border-color: #32814f; }
+ .button-group > li.success > a .iconic *, .button-group > li.success > label .iconic *, .button-group > li.success > button .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group > li.success > a .iconic *.iconic-property-accent, .button-group > li.success > label .iconic *.iconic-property-accent, .button-group > li.success > button .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group > li.warning > a, .button-group > li.warning > label, .button-group > li.warning > button {
+ background: #F08A24;
+ color: #fff;
+ border-color: #F08A24; }
+ .button-group > li.warning > a:hover, .button-group > li.warning > a:focus, .button-group > li.warning > label:hover, .button-group > li.warning > label:focus, .button-group > li.warning > button:hover, .button-group > li.warning > button:focus {
+ background: #dc750f;
+ color: #fff; }
+ .button-group > li.warning > a:hover, .button-group > li.warning > a:focus, .button-group > li.warning > label:hover, .button-group > li.warning > label:focus, .button-group > li.warning > button:hover, .button-group > li.warning > button:focus {
+ border-color: #c2670d; }
+ .button-group > li.warning > a .iconic *, .button-group > li.warning > label .iconic *, .button-group > li.warning > button .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group > li.warning > a .iconic *.iconic-property-accent, .button-group > li.warning > label .iconic *.iconic-property-accent, .button-group > li.warning > button .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group > li.alert > a, .button-group > li.alert > label, .button-group > li.alert > button {
+ background: #F04124;
+ color: #fff;
+ border-color: #F04124; }
+ .button-group > li.alert > a:hover, .button-group > li.alert > a:focus, .button-group > li.alert > label:hover, .button-group > li.alert > label:focus, .button-group > li.alert > button:hover, .button-group > li.alert > button:focus {
+ background: #dc2c0f;
+ color: #fff; }
+ .button-group > li.alert > a:hover, .button-group > li.alert > a:focus, .button-group > li.alert > label:hover, .button-group > li.alert > label:focus, .button-group > li.alert > button:hover, .button-group > li.alert > button:focus {
+ border-color: #c2270d; }
+ .button-group > li.alert > a .iconic *, .button-group > li.alert > label .iconic *, .button-group > li.alert > button .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group > li.alert > a .iconic *.iconic-property-accent, .button-group > li.alert > label .iconic *.iconic-property-accent, .button-group > li.alert > button .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.segmented {
+ border-color: #00558b; }
+ .button-group.segmented > li > a, .button-group.segmented > li > label, .button-group.segmented > li > button {
+ border-color: #00558b;
+ color: #00558b; }
+ .button-group.segmented > li > a:hover, .button-group.segmented > li > label:hover, .button-group.segmented > li > button:hover {
+ background: rgba(0, 85, 139, 0.25);
+ color: #00558b; }
+ .button-group.segmented > li > a .iconic *, .button-group.segmented > li > label .iconic *, .button-group.segmented > li > button .iconic * {
+ fill: #00558b;
+ stroke: #00558b; }
+ .button-group.segmented > li > a .iconic *.iconic-property-accent, .button-group.segmented > li > label .iconic *.iconic-property-accent, .button-group.segmented > li > button .iconic *.iconic-property-accent {
+ fill: #00558b;
+ stroke: #00558b; }
+ .button-group.segmented > li.is-active > a, .button-group.segmented > li.is-active > a:hover, .button-group.segmented > li > input:checked + label, .button-group.segmented > li > input:checked + label:hover {
+ background: #00558b;
+ color: #fff; }
+ .button-group.segmented > li.is-active > a .iconic *, .button-group.segmented > li > input:checked + label .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.segmented > li.is-active > a .iconic *.iconic-property-accent, .button-group.segmented > li > input:checked + label .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.segmented.secondary {
+ border-color: #f1f1f1; }
+ .button-group.segmented.secondary > li > a, .button-group.segmented.secondary > li > label, .button-group.segmented.secondary > li > button {
+ border-color: #f1f1f1;
+ color: #f1f1f1; }
+ .button-group.segmented.secondary > li > a:hover, .button-group.segmented.secondary > li > label:hover, .button-group.segmented.secondary > li > button:hover {
+ background: rgba(241, 241, 241, 0.25);
+ color: #f1f1f1; }
+ .button-group.segmented.secondary > li > a .iconic *, .button-group.segmented.secondary > li > label .iconic *, .button-group.segmented.secondary > li > button .iconic * {
+ fill: #f1f1f1;
+ stroke: #f1f1f1; }
+ .button-group.segmented.secondary > li > a .iconic *.iconic-property-accent, .button-group.segmented.secondary > li > label .iconic *.iconic-property-accent, .button-group.segmented.secondary > li > button .iconic *.iconic-property-accent {
+ fill: #f1f1f1;
+ stroke: #f1f1f1; }
+ .button-group.segmented.secondary > li.is-active > a, .button-group.segmented.secondary > li.is-active > a:hover, .button-group.segmented.secondary > li > input:checked + label, .button-group.segmented.secondary > li > input:checked + label:hover {
+ background: #f1f1f1;
+ color: #000; }
+ .button-group.segmented.secondary > li.is-active > a .iconic *, .button-group.segmented.secondary > li > input:checked + label .iconic * {
+ fill: #000;
+ stroke: #000; }
+ .button-group.segmented.secondary > li.is-active > a .iconic *.iconic-property-accent, .button-group.segmented.secondary > li > input:checked + label .iconic *.iconic-property-accent {
+ fill: #000;
+ stroke: #000; }
+ .button-group.segmented.success {
+ border-color: #43AC6A; }
+ .button-group.segmented.success > li > a, .button-group.segmented.success > li > label, .button-group.segmented.success > li > button {
+ border-color: #43AC6A;
+ color: #43AC6A; }
+ .button-group.segmented.success > li > a:hover, .button-group.segmented.success > li > label:hover, .button-group.segmented.success > li > button:hover {
+ background: rgba(67, 172, 106, 0.25);
+ color: #43AC6A; }
+ .button-group.segmented.success > li > a .iconic *, .button-group.segmented.success > li > label .iconic *, .button-group.segmented.success > li > button .iconic * {
+ fill: #43AC6A;
+ stroke: #43AC6A; }
+ .button-group.segmented.success > li > a .iconic *.iconic-property-accent, .button-group.segmented.success > li > label .iconic *.iconic-property-accent, .button-group.segmented.success > li > button .iconic *.iconic-property-accent {
+ fill: #43AC6A;
+ stroke: #43AC6A; }
+ .button-group.segmented.success > li.is-active > a, .button-group.segmented.success > li.is-active > a:hover, .button-group.segmented.success > li > input:checked + label, .button-group.segmented.success > li > input:checked + label:hover {
+ background: #43AC6A;
+ color: #fff; }
+ .button-group.segmented.success > li.is-active > a .iconic *, .button-group.segmented.success > li > input:checked + label .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.segmented.success > li.is-active > a .iconic *.iconic-property-accent, .button-group.segmented.success > li > input:checked + label .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.segmented.warning {
+ border-color: #F08A24; }
+ .button-group.segmented.warning > li > a, .button-group.segmented.warning > li > label, .button-group.segmented.warning > li > button {
+ border-color: #F08A24;
+ color: #F08A24; }
+ .button-group.segmented.warning > li > a:hover, .button-group.segmented.warning > li > label:hover, .button-group.segmented.warning > li > button:hover {
+ background: rgba(240, 138, 36, 0.25);
+ color: #F08A24; }
+ .button-group.segmented.warning > li > a .iconic *, .button-group.segmented.warning > li > label .iconic *, .button-group.segmented.warning > li > button .iconic * {
+ fill: #F08A24;
+ stroke: #F08A24; }
+ .button-group.segmented.warning > li > a .iconic *.iconic-property-accent, .button-group.segmented.warning > li > label .iconic *.iconic-property-accent, .button-group.segmented.warning > li > button .iconic *.iconic-property-accent {
+ fill: #F08A24;
+ stroke: #F08A24; }
+ .button-group.segmented.warning > li.is-active > a, .button-group.segmented.warning > li.is-active > a:hover, .button-group.segmented.warning > li > input:checked + label, .button-group.segmented.warning > li > input:checked + label:hover {
+ background: #F08A24;
+ color: #fff; }
+ .button-group.segmented.warning > li.is-active > a .iconic *, .button-group.segmented.warning > li > input:checked + label .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.segmented.warning > li.is-active > a .iconic *.iconic-property-accent, .button-group.segmented.warning > li > input:checked + label .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.segmented.alert {
+ border-color: #F04124; }
+ .button-group.segmented.alert > li > a, .button-group.segmented.alert > li > label, .button-group.segmented.alert > li > button {
+ border-color: #F04124;
+ color: #F04124; }
+ .button-group.segmented.alert > li > a:hover, .button-group.segmented.alert > li > label:hover, .button-group.segmented.alert > li > button:hover {
+ background: rgba(240, 65, 36, 0.25);
+ color: #F04124; }
+ .button-group.segmented.alert > li > a .iconic *, .button-group.segmented.alert > li > label .iconic *, .button-group.segmented.alert > li > button .iconic * {
+ fill: #F04124;
+ stroke: #F04124; }
+ .button-group.segmented.alert > li > a .iconic *.iconic-property-accent, .button-group.segmented.alert > li > label .iconic *.iconic-property-accent, .button-group.segmented.alert > li > button .iconic *.iconic-property-accent {
+ fill: #F04124;
+ stroke: #F04124; }
+ .button-group.segmented.alert > li.is-active > a, .button-group.segmented.alert > li.is-active > a:hover, .button-group.segmented.alert > li > input:checked + label, .button-group.segmented.alert > li > input:checked + label:hover {
+ background: #F04124;
+ color: #fff; }
+ .button-group.segmented.alert > li.is-active > a .iconic *, .button-group.segmented.alert > li > input:checked + label .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.segmented.alert > li.is-active > a .iconic *.iconic-property-accent, .button-group.segmented.alert > li > input:checked + label .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .button-group.tiny {
+ font-size: 0.63rem; }
+ .button-group.small {
+ font-size: 0.72rem; }
+ .button-group.large {
+ font-size: 1.17rem; }
+ .button-group.expand {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex; }
+ .button-group.expand > li {
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1; }
+ .button-group.expand > li > a, .button-group.expand > li > label, .button-group.expand > li > button {
+ display: block;
+ width: 100%;
+ margin-left: 0;
+ margin-right: 0; }
+ .button-group li.disabled > a, .button-group li.disabled > label, .button-group li.disabled > button {
+ opacity: 0.5;
+ cursor: default;
+ pointer-events: none; }
+
+/*
+ Cards
+
+ Structure:
+
+ titles
+ lists
+*/
+.card {
+ border: 1px solid #ededed;
+ margin-bottom: 0.5rem;
+ background: #fff;
+ color: #000;
+ border-radius: 4px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+ overflow: hidden; }
+ .card h1, .card h2, .card h3, .card h4, .card h5, .card h6 {
+ color: inherit; }
+ .card ul {
+ margin-bottom: 0; }
+ .card img {
+ width: 100%; }
+ .card.primary {
+ border: 0;
+ margin-bottom: 0.5rem;
+ background: #00558b;
+ color: #fff;
+ border-radius: 4px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+ overflow: hidden; }
+ .card.primary h1, .card.primary h2, .card.primary h3, .card.primary h4, .card.primary h5, .card.primary h6 {
+ color: inherit; }
+ .card.primary ul {
+ margin-bottom: 0; }
+ .card.primary img {
+ width: 100%; }
+ .card.primary .card-divider {
+ background: #0065a5;
+ padding: 1rem; }
+ .card.success {
+ border: 0;
+ margin-bottom: 0.5rem;
+ background: #43AC6A;
+ color: #fff;
+ border-radius: 4px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+ overflow: hidden; }
+ .card.success h1, .card.success h2, .card.success h3, .card.success h4, .card.success h5, .card.success h6 {
+ color: inherit; }
+ .card.success ul {
+ margin-bottom: 0; }
+ .card.success img {
+ width: 100%; }
+ .card.success .card-divider {
+ background: #4ab873;
+ padding: 1rem; }
+ .card.warning {
+ border: 0;
+ margin-bottom: 0.5rem;
+ background: #F08A24;
+ color: #fff;
+ border-radius: 4px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+ overflow: hidden; }
+ .card.warning h1, .card.warning h2, .card.warning h3, .card.warning h4, .card.warning h5, .card.warning h6 {
+ color: inherit; }
+ .card.warning ul {
+ margin-bottom: 0; }
+ .card.warning img {
+ width: 100%; }
+ .card.warning .card-divider {
+ background: #f19233;
+ padding: 1rem; }
+ .card.alert {
+ border: 0;
+ margin-bottom: 0.5rem;
+ background: #F04124;
+ color: #fff;
+ border-radius: 4px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+ overflow: hidden; }
+ .card.alert h1, .card.alert h2, .card.alert h3, .card.alert h4, .card.alert h5, .card.alert h6 {
+ color: inherit; }
+ .card.alert ul {
+ margin-bottom: 0; }
+ .card.alert img {
+ width: 100%; }
+ .card.alert .card-divider {
+ background: #f14e33;
+ padding: 1rem; }
+ .card.dark {
+ border: 0;
+ margin-bottom: 0.5rem;
+ background: #232323;
+ color: #fff;
+ border-radius: 4px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+ overflow: hidden; }
+ .card.dark h1, .card.dark h2, .card.dark h3, .card.dark h4, .card.dark h5, .card.dark h6 {
+ color: inherit; }
+ .card.dark ul {
+ margin-bottom: 0; }
+ .card.dark img {
+ width: 100%; }
+ .card.dark .card-divider {
+ background: #323232;
+ padding: 1rem; }
+
+.card-divider {
+ background: #ededed;
+ padding: 1rem; }
+
+.card-section {
+ padding: 1rem; }
+
+/*
+ Odds and ends.
+*/
+.close-button {
+ position: absolute;
+ color: #999;
+ top: 1rem;
+ right: 1rem;
+ font-size: 2em;
+ line-height: 0.5;
+ cursor: pointer; }
+ .close-button:hover {
+ color: #333; }
+
+.thumbnail, ul.thumbnails > li img {
+ padding: 0.5rem;
+ box-shadow: 0 3px 15px rgba(0, 0, 0, 0.25); }
+
+ul.thumbnails > li {
+ margin-bottom: 1rem; }
+ ul.thumbnails > li a {
+ display: block; }
+
+/*
+ FORMS
+ -----
+
+ Our form styles include basic resets for text fields, select menus, and so on, along with some of our own custom components.
+
+ Includes:
+ - Text fields
+ - Text areas
+ - Select menus
+ - Checkboxes and radio buttons
+ - Range slider
+ - Progress bars and meters
+*/
+input[type="text"], input[type="password"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="week"], input[type="email"], input[type="number"], input[type="search"], input[type="tel"], input[type="time"], input[type="url"], input[type="color"], textarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ display: block;
+ width: 100%;
+ height: 2.4rem;
+ padding: 0.5rem;
+ margin: 0 0 1rem 0;
+ border: 1px solid #ccc;
+ border-radius: 0;
+ background: #fff;
+ color: #000;
+ font-size: 1rem;
+ -webkit-font-smoothing: antialiased;
+ vertical-align: middle; }
+ input[type="text"]:hover, input[type="password"]:hover, input[type="date"]:hover, input[type="datetime"]:hover, input[type="datetime-local"]:hover, input[type="month"]:hover, input[type="week"]:hover, input[type="email"]:hover, input[type="number"]:hover, input[type="search"]:hover, input[type="tel"]:hover, input[type="time"]:hover, input[type="url"]:hover, input[type="color"]:hover, textarea:hover {
+ border: 1px solid #bbb;
+ background: #fff;
+ color: #000; }
+ input[type="text"]:focus, input[type="password"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="week"]:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="time"]:focus, input[type="url"]:focus, input[type="color"]:focus, textarea:focus {
+ outline: 0;
+ border: 1px solid #999;
+ background: #fff;
+ color: #000; }
+ label > input[type="text"], label > input[type="password"], label > input[type="date"], label > input[type="datetime"], label > input[type="datetime-local"], label > input[type="month"], label > input[type="week"], label > input[type="email"], label > input[type="number"], label > input[type="search"], label > input[type="tel"], label > input[type="time"], label > input[type="url"], label > input[type="color"], label > textarea {
+ margin-top: 0.5rem; }
+
+input[type="search"] {
+ box-sizing: border-box; }
+
+input.disabled, input[disabled], input[readonly], fieldset[disabled] input {
+ cursor: false; }
+ input.disabled, input.disabled:hover, input[disabled], input[disabled]:hover, input[readonly], input[readonly]:hover, fieldset[disabled] input, fieldset[disabled] input:hover {
+ background-color: #f2f2f2; }
+
+label {
+ display: block;
+ font-size: 0.9rem;
+ margin-bottom: 0.5rem;
+ color: #333; }
+ label > input, label > textarea {
+ margin-top: 0.5rem; }
+
+input[type="checkbox"], input[type="radio"] {
+ width: 1rem;
+ height: 1rem; }
+ label > input[type="checkbox"], label > input[type="radio"] {
+ margin-right: 0.25rem; }
+ input[type="checkbox"] + label, input[type="radio"] + label {
+ display: inline-block;
+ margin-left: 0.5rem;
+ margin-right: 1rem;
+ margin-bottom: 0;
+ vertical-align: baseline; }
+
+.inline-label {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ margin-bottom: 1rem; }
+ label > .inline-label {
+ margin-top: 0.5rem; }
+ .inline-label > input, .inline-label > select {
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ margin: 0; }
+ .inline-label > .form-label {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ background: #eee;
+ color: #333;
+ border: 1px solid #ccc;
+ padding: 0 0.5rem;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .inline-label > .form-label:first-child {
+ border-right: 0; }
+ .inline-label > .form-label:last-child {
+ border-left: 0; }
+ .inline-label > a, .inline-label > button, .inline-label > input[type="button"], .inline-label > input[type="submit"] {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin: 0;
+ border-radius: 0; }
+
+textarea {
+ height: auto;
+ width: 100%;
+ min-height: 50px; }
+
+select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ display: block;
+ width: 100%;
+ height: 2.4rem;
+ padding: 0.5rem;
+ margin: 0 0 1rem 0;
+ font-size: 1rem;
+ color: #000;
+ border-radius: 0;
+ border: 1px solid #ccc;
+ background: #fafafa url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="32" height="24" viewBox="0 0 32 24"><polygon points="0,0 32,0 16,24" style="fill: black"></polygon></svg>') right 10px center no-repeat;
+ background-size: 8px 8px;
+ padding-right: 1.625rem; }
+ select:hover {
+ background-color: #f0f0f0; }
+ select:focus {
+ outline: 0; }
+ select::-ms-expand {
+ display: none; }
+
+input[type="range"] {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ display: block;
+ width: 100%;
+ height: auto;
+ cursor: pointer;
+ margin-top: 0.25rem;
+ margin-bottom: 0.25rem;
+ border: 0;
+ line-height: 1; }
+ input[type="range"]:focus {
+ outline: 0; }
+ input[type="range"]::-webkit-slider-runnable-track {
+ height: 1rem;
+ background: #ddd; }
+ input[type="range"]::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ background: #00558b;
+ width: 1.5rem;
+ height: 1.5rem;
+ margin-top: -0.25rem; }
+ input[type="range"]::-moz-range-track {
+ -moz-appearance: none;
+ height: 1rem;
+ background: #ccc; }
+ input[type="range"]::-moz-range-thumb {
+ -moz-appearance: none;
+ background: #00558b;
+ width: 1.5rem;
+ height: 1.5rem;
+ margin-top: -0.25rem; }
+ input[type="range"]::-ms-track {
+ height: 1rem;
+ background: #ddd;
+ color: transparent;
+ border: 0;
+ overflow: visible;
+ border-top: 0.25rem solid #fff;
+ border-bottom: 0.25rem solid #fff; }
+ input[type="range"]::-ms-thumb {
+ background: #00558b;
+ width: 1.5rem;
+ height: 1.5rem;
+ border: 0; }
+ input[type="range"]::-ms-fill-lower, input[type="range"]::-ms-fill-upper {
+ background: #ddd; }
+
+output {
+ line-height: 1.5rem;
+ vertical-align: middle;
+ margin-left: 0.5em; }
+
+input[type="number"]::-webkit-outer-spin-button {
+ -webkit-appearance: none;
+ background: #00558b; }
+
+progress, meter {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ display: block;
+ width: 100%;
+ height: 1.5rem;
+ margin-bottom: 1rem;
+ background: #ccc;
+ border: 0; }
+
+progress::-webkit-progress-bar {
+ background: #ccc; }
+progress::-webkit-progress-value {
+ background: #00558b; }
+progress::-moz-progress-bar {
+ background: #00558b; }
+progress.high::-webkit-progress-value {
+ background: #43AC6A; }
+progress.high::-moz-progress-bar {
+ background: #43AC6A; }
+progress.medium::-webkit-progress-value {
+ background: #e7cf00; }
+progress.medium::-moz-progress-bar {
+ background: #e7cf00; }
+progress.low::-webkit-progress-value {
+ background: #F04124; }
+progress.low::-moz-progress-bar {
+ background: #F04124; }
+
+meter {
+ background: #ccc; }
+ meter::-webkit-meter-bar {
+ background: #ccc; }
+ meter::-webkit-meter-optimum-value {
+ background: #43AC6A; }
+ meter::-webkit-meter-suboptimum-value {
+ background: #e7cf00; }
+ meter::-webkit-meter-even-less-good-value {
+ background: #F04124; }
+ meter::-moz-meter-bar {
+ background: #00558b; }
+ meter:-moz-meter-optimum::-moz-meter-bar {
+ background: #43AC6A; }
+ meter:-moz-meter-sub-optimum::-moz-meter-bar {
+ background: #e7cf00; }
+ meter:-moz-meter-sub-sub-optimum::-moz-meter-bar {
+ background: #F04124; }
+
+/*
+ PANEL
+ -----
+
+ The friendly panel is an all-purpose container for hiding content off-screen.
+
+ Features:
+ - Position at top, right, bottom, or left
+ - Anchor to grid block or window
+ - Define max width or height
+ - Transform into grid block depending on screen size
+*/
+.panel {
+ display: block;
+ position: absolute;
+ z-index: 100;
+ overflow-y: auto;
+ display: none; }
+ .is-active.panel {
+ display: block; }
+
+.panel {
+ /*
+ Basic styles
+ */
+ padding: 0;
+ background: #fff; }
+
+.panel-top {
+ /*
+ Direction
+ */
+ top: 0;
+ left: 0;
+ width: 100%;
+ /*
+ Sizing
+ */
+ height: 300px;
+ /*
+ Shadows
+ */ }
+ .panel-top.is-active {
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.25); }
+
+.panel-right {
+ /*
+ Direction
+ */
+ top: 0;
+ right: 0;
+ height: 100%;
+ /*
+ Sizing
+ */
+ width: 100%;
+ /*
+ Shadows
+ */ }
+ @media only screen and (min-width: 18.75em) {
+ .panel-right {
+ width: 300px; } }
+ .panel-right.is-active {
+ box-shadow: -3px 0 10px rgba(0, 0, 0, 0.25); }
+
+.panel-bottom {
+ /*
+ Direction
+ */
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ /*
+ Sizing
+ */
+ height: 300px;
+ /*
+ Shadows
+ */ }
+ .panel-bottom.is-active {
+ box-shadow: 2px -3px 10px rgba(0, 0, 0, 0.25); }
+
+.panel-left {
+ /*
+ Direction
+ */
+ top: 0;
+ left: 0;
+ height: 100%;
+ /*
+ Sizing
+ */
+ width: 100%;
+ /*
+ Shadows
+ */ }
+ @media only screen and (min-width: 18.75em) {
+ .panel-left {
+ width: 300px; } }
+ .panel-left.is-active {
+ box-shadow: 3px 0 10px rgba(0, 0, 0, 0.25); }
+
+.panel-fixed {
+ position: fixed; }
+
+/*
+ THE GRID
+ --------
+
+ Foundation's magical, flexbox-powered grid.
+
+ Features:
+ - Horizontal or vertical grids
+ - Auto-sizing or percentage width grid blocks
+ - Independently-scrollable blocks
+ - Column alignment
+ - Source ordering
+ - Offsets
+*/
+/*
+ Define the size of a grid block. Blocks are flex items. By default, they stretch to fill all available space, based on the size of sibling blocks. This is the "expand" behavior.
+
+ If set to "shrink", the block will contract and only fill as much space as it needs for its content.
+
+ If set to a number, the block will be given a percentage width, based on the total number of columns (12 by default). Percentage widths don't work if a block is inside a vertical grid.
+
+ @group grid
+
+ @param {number|string} $size - Sizing behavior of the block. Should be expand, shrink, or a number.
+
+ @output The flex-basis, flex-grow, and flex-shrink properties.
+*/
+/*
+ Set the orientation of blocks within this block. The grid is re-oriented by changing the flex direction of the block.
+
+ @group grid
+
+ @param {string} $orientation - Direction of the grid, either horizontal or vertical.
+
+ @output A flex-flow property to match the direction given.
+*/
+/*
+ Stretch a grid's child blocks across its cross-axis, making every column appear to have the same height.
+
+ @group grid
+
+ @param {bool} $stretch - Stretch blocks if true, or align blocks to top if false.
+
+ @output Sets align-items to "stretch" if $stretch is true, or "flex-start" (the default value) if false.
+*/
+/*
+ Set the alignment of blocks within a grid.
+
+ left: Items align to the left.
+ right: Items align to the right.
+ center: Items align to the center.
+ justify: Items are spaced equally apart so they occupy the space of the entire grid.
+ spaced: Items are given equal space to their left and right.
+
+ @group grid
+
+ @param {string} $align - Alignment to use.
+
+ @output An appropriate justify-content value.
+*/
+/*
+ Set the source order of a block. Items with lower numbers appear first. If multiple items have the same number, the one in the HTML first will appear first.
+
+ @group grid
+
+ @param {number} $order - Position in source order.
+
+ @output An order property.
+*/
+/*
+ Collapse a content block by removing the padding.
+
+ @group grid
+
+ @param {bool} $collapse - Collapses the block if true.
+
+ @output A padding value.
+
+ @todo No way to reverse collapse using this mixin. Solution:
+ - If true, add padding: 0;
+ - If false, add padding: 1rem;
+ - If null, add nothing, to cut down on CSS output
+ - Make null the default value
+*/
+/*
+ Constrain the size of a block to the size of the average grid row, and center-align it. This imitates the behavior of ordinary Foundation rows.
+
+ @group grid
+
+ @param {bool} $container - Adds container styles if true.
+
+ @output A maximum width and the good old margin: 0 auto for center alignment.
+*/
+/*
+ Add negative margins to a block, equal to the padding of a content block. This aligns the edges of a block nested inside a content block.
+
+ @group grid
+
+ @param {bool} $nest - Adds negative margins if true.
+
+ @output Negative margin values.
+*/
+/*
+ Offset a block by adding a left margin.
+
+ @group grid
+
+ @param {number | bool} $offset - If false, nothing is output. If a number, offsets the column by the specified number of columns.
+
+ @output A left margin based on the number of columns specified, and the global number of columns.
+*/
+/*
+ Resets styles set by panels. Use this when a panel transforms into a block on larger screens.
+
+ @group grid
+
+ @output Resets to transform, position, and a few visual styles.
+*/
+/*
+ Frames are containers that stretch to the full dimmensions of the browser window.
+*/
+/*
+ Groups are collections of content items. They're the "rows" of Foundation for Apps.
+*/
+/*
+ Blocks are containers for actual content. They're the "columns" of Foundation for Apps.
+*/
+.vertical.grid-frame, .vertical.grid-block, .vertical.small-grid-block, .vertical.medium-grid-block, .vertical.large-grid-block {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch; }
+.small-vertical.grid-frame, .small-vertical.grid-block, .small-vertical.small-grid-block, .small-vertical.medium-grid-block, .small-vertical.large-grid-block {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch; }
+.small-horizontal.grid-frame, .small-horizontal.grid-block, .small-horizontal.small-grid-block, .small-horizontal.medium-grid-block, .small-horizontal.large-grid-block {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap; }
+@media only screen and (min-width: 40em) {
+ .medium-vertical.grid-frame, .medium-vertical.grid-block, .medium-vertical.small-grid-block, .medium-vertical.medium-grid-block, .medium-vertical.large-grid-block {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch; }
+ .medium-horizontal.grid-frame, .medium-horizontal.grid-block, .medium-horizontal.small-grid-block, .medium-horizontal.medium-grid-block, .medium-horizontal.large-grid-block {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap; } }
+@media only screen and (min-width: 75em) {
+ .large-vertical.grid-frame, .large-vertical.grid-block, .large-vertical.small-grid-block, .large-vertical.medium-grid-block, .large-vertical.large-grid-block {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch; }
+ .large-horizontal.grid-frame, .large-horizontal.grid-block, .large-horizontal.small-grid-block, .large-horizontal.medium-grid-block, .large-horizontal.large-grid-block {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap; } }
+.align-right.grid-frame, .align-right.grid-block, .align-right.small-grid-block, .align-right.medium-grid-block, .align-right.large-grid-block {
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end; }
+.align-center.grid-frame, .align-center.grid-block, .align-center.small-grid-block, .align-center.medium-grid-block, .align-center.large-grid-block {
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+.align-justify.grid-frame, .align-justify.grid-block, .align-justify.small-grid-block, .align-justify.medium-grid-block, .align-justify.large-grid-block {
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between; }
+.align-spaced.grid-frame, .align-spaced.grid-block, .align-spaced.small-grid-block, .align-spaced.medium-grid-block, .align-spaced.large-grid-block {
+ -webkit-justify-content: space-around;
+ -ms-flex-pack: distribute;
+ justify-content: space-around; }
+.wrap.grid-frame, .wrap.grid-block, .wrap.small-grid-block, .wrap.medium-grid-block, .wrap.large-grid-block {
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start; }
+
+.shrink.grid-block, .shrink.grid-content, .shrink.small-grid-block, .shrink.small-grid-content, .shrink.medium-grid-block, .shrink.medium-grid-content, .shrink.large-grid-block, .shrink.large-grid-content {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto; }
+.noscroll.grid-block, .noscroll.grid-content, .noscroll.small-grid-block, .noscroll.small-grid-content, .noscroll.medium-grid-block, .noscroll.medium-grid-content, .noscroll.large-grid-block, .noscroll.large-grid-content {
+ overflow: hidden; }
+
+.grid-frame {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 100vh;
+ position: relative;
+ overflow: hidden;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-order: 0;
+ -ms-flex-order: 0;
+ order: 0; }
+
+.grid-block {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 100vh;
+ position: relative;
+ overflow: hidden;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-order: 0;
+ -ms-flex-order: 0;
+ order: 0;
+ height: auto;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar; }
+
+.grid-content {
+ display: block;
+ padding: 0 1rem;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto; }
+ .grid-content.collapse {
+ padding: 0; }
+ .grid-content .grid-block {
+ margin-left: -1rem;
+ margin-right: -1rem;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ overflow: visible; }
+ .grid-content .grid-block.nowrap {
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch; }
+ .grid-content .grid-block .grid-content {
+ overflow: visible; }
+
+.grid-container {
+ max-width: 56.25rem;
+ margin: 0 auto; }
+ .grid-container.contain-left {
+ max-width: 56.25rem;
+ margin: 0 auto 0 0; }
+ .grid-container.contain-right {
+ max-width: 56.25rem;
+ margin: 0 0 0 auto; }
+
+.small-grid-block {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 100vh;
+ position: relative;
+ overflow: hidden;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-order: 0;
+ -ms-flex-order: 0;
+ order: 0;
+ height: auto;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar; }
+ .small-grid-block.panel {
+ -webkit-transform: none;
+ transform: none;
+ position: relative;
+ width: auto;
+ height: auto;
+ z-index: auto;
+ box-shadow: none;
+ background: transparent;
+ top: auto;
+ right: auto;
+ bottom: auto;
+ left: auto; }
+
+.small-grid-content {
+ display: block;
+ padding: 0 1rem;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto; }
+ .small-grid-content.panel {
+ -webkit-transform: none;
+ transform: none;
+ position: relative;
+ width: auto;
+ height: auto;
+ z-index: auto;
+ box-shadow: none;
+ background: transparent;
+ top: auto;
+ right: auto;
+ bottom: auto;
+ left: auto; }
+
+@media only screen and (min-width: 40em) {
+ .medium-grid-block {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 100vh;
+ position: relative;
+ overflow: hidden;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-order: 0;
+ -ms-flex-order: 0;
+ order: 0;
+ height: auto;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar; }
+ .medium-grid-block.panel {
+ -webkit-transform: none;
+ transform: none;
+ position: relative;
+ width: auto;
+ height: auto;
+ z-index: auto;
+ box-shadow: none;
+ background: transparent;
+ top: auto;
+ right: auto;
+ bottom: auto;
+ left: auto; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-grid-content {
+ display: block;
+ padding: 0 1rem;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto; }
+ .medium-grid-content.panel {
+ -webkit-transform: none;
+ transform: none;
+ position: relative;
+ width: auto;
+ height: auto;
+ z-index: auto;
+ box-shadow: none;
+ background: transparent;
+ top: auto;
+ right: auto;
+ bottom: auto;
+ left: auto; } }
+
+@media only screen and (min-width: 75em) {
+ .large-grid-block {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 100vh;
+ position: relative;
+ overflow: hidden;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -webkit-order: 0;
+ -ms-flex-order: 0;
+ order: 0;
+ height: auto;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar; }
+ .large-grid-block.panel {
+ -webkit-transform: none;
+ transform: none;
+ position: relative;
+ width: auto;
+ height: auto;
+ z-index: auto;
+ box-shadow: none;
+ background: transparent;
+ top: auto;
+ right: auto;
+ bottom: auto;
+ left: auto; } }
+
+@media only screen and (min-width: 75em) {
+ .large-grid-content {
+ display: block;
+ padding: 0 1rem;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto; }
+ .large-grid-content.panel {
+ -webkit-transform: none;
+ transform: none;
+ position: relative;
+ width: auto;
+ height: auto;
+ z-index: auto;
+ box-shadow: none;
+ background: transparent;
+ top: auto;
+ right: auto;
+ bottom: auto;
+ left: auto; } }
+
+.order-1 {
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1; }
+
+.order-2 {
+ -webkit-order: 2;
+ -ms-flex-order: 2;
+ order: 2; }
+
+.order-3 {
+ -webkit-order: 3;
+ -ms-flex-order: 3;
+ order: 3; }
+
+.order-4 {
+ -webkit-order: 4;
+ -ms-flex-order: 4;
+ order: 4; }
+
+.order-5 {
+ -webkit-order: 5;
+ -ms-flex-order: 5;
+ order: 5; }
+
+.order-6 {
+ -webkit-order: 6;
+ -ms-flex-order: 6;
+ order: 6; }
+
+.order-7 {
+ -webkit-order: 7;
+ -ms-flex-order: 7;
+ order: 7; }
+
+.order-8 {
+ -webkit-order: 8;
+ -ms-flex-order: 8;
+ order: 8; }
+
+.order-9 {
+ -webkit-order: 9;
+ -ms-flex-order: 9;
+ order: 9; }
+
+.order-10 {
+ -webkit-order: 10;
+ -ms-flex-order: 10;
+ order: 10; }
+
+.order-11 {
+ -webkit-order: 11;
+ -ms-flex-order: 11;
+ order: 11; }
+
+.order-12 {
+ -webkit-order: 12;
+ -ms-flex-order: 12;
+ order: 12; }
+
+.small-1 {
+ -webkit-flex: 0 0 8.33333%;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%; }
+
+.small-order-1 {
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1; }
+
+.small-offset-1 {
+ margin-left: 8.33333%; }
+
+.small-up-1 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-1 > li, .small-up-1 > div, .small-up-1 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 100%;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%; }
+
+.small-2 {
+ -webkit-flex: 0 0 16.66667%;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%; }
+
+.small-order-2 {
+ -webkit-order: 2;
+ -ms-flex-order: 2;
+ order: 2; }
+
+.small-offset-2 {
+ margin-left: 16.66667%; }
+
+.small-up-2 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-2 > li, .small-up-2 > div, .small-up-2 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 50%;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%; }
+
+.small-3 {
+ -webkit-flex: 0 0 25%;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%;
+ max-width: 25%; }
+
+.small-order-3 {
+ -webkit-order: 3;
+ -ms-flex-order: 3;
+ order: 3; }
+
+.small-offset-3 {
+ margin-left: 25%; }
+
+.small-up-3 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-3 > li, .small-up-3 > div, .small-up-3 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 33.33333%;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%; }
+
+.small-4 {
+ -webkit-flex: 0 0 33.33333%;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%; }
+
+.small-order-4 {
+ -webkit-order: 4;
+ -ms-flex-order: 4;
+ order: 4; }
+
+.small-offset-4 {
+ margin-left: 33.33333%; }
+
+.small-up-4 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-4 > li, .small-up-4 > div, .small-up-4 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 25%;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%; }
+
+.small-5 {
+ -webkit-flex: 0 0 41.66667%;
+ -ms-flex: 0 0 41.66667%;
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%; }
+
+.small-order-5 {
+ -webkit-order: 5;
+ -ms-flex-order: 5;
+ order: 5; }
+
+.small-offset-5 {
+ margin-left: 41.66667%; }
+
+.small-up-5 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-5 > li, .small-up-5 > div, .small-up-5 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 20%;
+ -ms-flex: 0 0 20%;
+ flex: 0 0 20%; }
+
+.small-6 {
+ -webkit-flex: 0 0 50%;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%;
+ max-width: 50%; }
+
+.small-order-6 {
+ -webkit-order: 6;
+ -ms-flex-order: 6;
+ order: 6; }
+
+.small-offset-6 {
+ margin-left: 50%; }
+
+.small-up-6 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-6 > li, .small-up-6 > div, .small-up-6 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 16.66667%;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%; }
+
+.small-7 {
+ -webkit-flex: 0 0 58.33333%;
+ -ms-flex: 0 0 58.33333%;
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%; }
+
+.small-order-7 {
+ -webkit-order: 7;
+ -ms-flex-order: 7;
+ order: 7; }
+
+.small-offset-7 {
+ margin-left: 58.33333%; }
+
+.small-up-7 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-7 > li, .small-up-7 > div, .small-up-7 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 14.28571%;
+ -ms-flex: 0 0 14.28571%;
+ flex: 0 0 14.28571%; }
+
+.small-8 {
+ -webkit-flex: 0 0 66.66667%;
+ -ms-flex: 0 0 66.66667%;
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%; }
+
+.small-order-8 {
+ -webkit-order: 8;
+ -ms-flex-order: 8;
+ order: 8; }
+
+.small-offset-8 {
+ margin-left: 66.66667%; }
+
+.small-up-8 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-8 > li, .small-up-8 > div, .small-up-8 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 12.5%;
+ -ms-flex: 0 0 12.5%;
+ flex: 0 0 12.5%; }
+
+.small-9 {
+ -webkit-flex: 0 0 75%;
+ -ms-flex: 0 0 75%;
+ flex: 0 0 75%;
+ max-width: 75%; }
+
+.small-order-9 {
+ -webkit-order: 9;
+ -ms-flex-order: 9;
+ order: 9; }
+
+.small-offset-9 {
+ margin-left: 75%; }
+
+.small-up-9 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-9 > li, .small-up-9 > div, .small-up-9 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 11.11111%;
+ -ms-flex: 0 0 11.11111%;
+ flex: 0 0 11.11111%; }
+
+.small-10 {
+ -webkit-flex: 0 0 83.33333%;
+ -ms-flex: 0 0 83.33333%;
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%; }
+
+.small-order-10 {
+ -webkit-order: 10;
+ -ms-flex-order: 10;
+ order: 10; }
+
+.small-offset-10 {
+ margin-left: 83.33333%; }
+
+.small-up-10 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-10 > li, .small-up-10 > div, .small-up-10 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 10%;
+ -ms-flex: 0 0 10%;
+ flex: 0 0 10%; }
+
+.small-11 {
+ -webkit-flex: 0 0 91.66667%;
+ -ms-flex: 0 0 91.66667%;
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%; }
+
+.small-order-11 {
+ -webkit-order: 11;
+ -ms-flex-order: 11;
+ order: 11; }
+
+.small-offset-11 {
+ margin-left: 91.66667%; }
+
+.small-up-11 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-11 > li, .small-up-11 > div, .small-up-11 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 9.09091%;
+ -ms-flex: 0 0 9.09091%;
+ flex: 0 0 9.09091%; }
+
+.small-12 {
+ -webkit-flex: 0 0 100%;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ max-width: 100%; }
+
+.small-order-12 {
+ -webkit-order: 12;
+ -ms-flex-order: 12;
+ order: 12; }
+
+.small-offset-12 {
+ margin-left: 100%; }
+
+.small-up-12 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .small-up-12 > li, .small-up-12 > div, .small-up-12 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 8.33333%;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%; }
+
+@media only screen and (min-width: 40em) {
+ .medium-1 {
+ -webkit-flex: 0 0 8.33333%;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%; }
+ .medium-order-1 {
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1; }
+ .medium-offset-1 {
+ margin-left: 8.33333%; }
+ .medium-up-1 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-1 > li, .medium-up-1 > div, .medium-up-1 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 100%;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-2 {
+ -webkit-flex: 0 0 16.66667%;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%; }
+ .medium-order-2 {
+ -webkit-order: 2;
+ -ms-flex-order: 2;
+ order: 2; }
+ .medium-offset-2 {
+ margin-left: 16.66667%; }
+ .medium-up-2 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-2 > li, .medium-up-2 > div, .medium-up-2 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 50%;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-3 {
+ -webkit-flex: 0 0 25%;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%;
+ max-width: 25%; }
+ .medium-order-3 {
+ -webkit-order: 3;
+ -ms-flex-order: 3;
+ order: 3; }
+ .medium-offset-3 {
+ margin-left: 25%; }
+ .medium-up-3 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-3 > li, .medium-up-3 > div, .medium-up-3 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 33.33333%;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-4 {
+ -webkit-flex: 0 0 33.33333%;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%; }
+ .medium-order-4 {
+ -webkit-order: 4;
+ -ms-flex-order: 4;
+ order: 4; }
+ .medium-offset-4 {
+ margin-left: 33.33333%; }
+ .medium-up-4 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-4 > li, .medium-up-4 > div, .medium-up-4 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 25%;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-5 {
+ -webkit-flex: 0 0 41.66667%;
+ -ms-flex: 0 0 41.66667%;
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%; }
+ .medium-order-5 {
+ -webkit-order: 5;
+ -ms-flex-order: 5;
+ order: 5; }
+ .medium-offset-5 {
+ margin-left: 41.66667%; }
+ .medium-up-5 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-5 > li, .medium-up-5 > div, .medium-up-5 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 20%;
+ -ms-flex: 0 0 20%;
+ flex: 0 0 20%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-6 {
+ -webkit-flex: 0 0 50%;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%;
+ max-width: 50%; }
+ .medium-order-6 {
+ -webkit-order: 6;
+ -ms-flex-order: 6;
+ order: 6; }
+ .medium-offset-6 {
+ margin-left: 50%; }
+ .medium-up-6 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-6 > li, .medium-up-6 > div, .medium-up-6 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 16.66667%;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-7 {
+ -webkit-flex: 0 0 58.33333%;
+ -ms-flex: 0 0 58.33333%;
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%; }
+ .medium-order-7 {
+ -webkit-order: 7;
+ -ms-flex-order: 7;
+ order: 7; }
+ .medium-offset-7 {
+ margin-left: 58.33333%; }
+ .medium-up-7 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-7 > li, .medium-up-7 > div, .medium-up-7 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 14.28571%;
+ -ms-flex: 0 0 14.28571%;
+ flex: 0 0 14.28571%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-8 {
+ -webkit-flex: 0 0 66.66667%;
+ -ms-flex: 0 0 66.66667%;
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%; }
+ .medium-order-8 {
+ -webkit-order: 8;
+ -ms-flex-order: 8;
+ order: 8; }
+ .medium-offset-8 {
+ margin-left: 66.66667%; }
+ .medium-up-8 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-8 > li, .medium-up-8 > div, .medium-up-8 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 12.5%;
+ -ms-flex: 0 0 12.5%;
+ flex: 0 0 12.5%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-9 {
+ -webkit-flex: 0 0 75%;
+ -ms-flex: 0 0 75%;
+ flex: 0 0 75%;
+ max-width: 75%; }
+ .medium-order-9 {
+ -webkit-order: 9;
+ -ms-flex-order: 9;
+ order: 9; }
+ .medium-offset-9 {
+ margin-left: 75%; }
+ .medium-up-9 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-9 > li, .medium-up-9 > div, .medium-up-9 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 11.11111%;
+ -ms-flex: 0 0 11.11111%;
+ flex: 0 0 11.11111%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-10 {
+ -webkit-flex: 0 0 83.33333%;
+ -ms-flex: 0 0 83.33333%;
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%; }
+ .medium-order-10 {
+ -webkit-order: 10;
+ -ms-flex-order: 10;
+ order: 10; }
+ .medium-offset-10 {
+ margin-left: 83.33333%; }
+ .medium-up-10 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-10 > li, .medium-up-10 > div, .medium-up-10 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 10%;
+ -ms-flex: 0 0 10%;
+ flex: 0 0 10%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-11 {
+ -webkit-flex: 0 0 91.66667%;
+ -ms-flex: 0 0 91.66667%;
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%; }
+ .medium-order-11 {
+ -webkit-order: 11;
+ -ms-flex-order: 11;
+ order: 11; }
+ .medium-offset-11 {
+ margin-left: 91.66667%; }
+ .medium-up-11 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-11 > li, .medium-up-11 > div, .medium-up-11 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 9.09091%;
+ -ms-flex: 0 0 9.09091%;
+ flex: 0 0 9.09091%; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-12 {
+ -webkit-flex: 0 0 100%;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ max-width: 100%; }
+ .medium-order-12 {
+ -webkit-order: 12;
+ -ms-flex-order: 12;
+ order: 12; }
+ .medium-offset-12 {
+ margin-left: 100%; }
+ .medium-up-12 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .medium-up-12 > li, .medium-up-12 > div, .medium-up-12 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 8.33333%;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-1 {
+ -webkit-flex: 0 0 8.33333%;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%; }
+ .large-order-1 {
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1; }
+ .large-offset-1 {
+ margin-left: 8.33333%; }
+ .large-up-1 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-1 > li, .large-up-1 > div, .large-up-1 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 100%;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-2 {
+ -webkit-flex: 0 0 16.66667%;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%; }
+ .large-order-2 {
+ -webkit-order: 2;
+ -ms-flex-order: 2;
+ order: 2; }
+ .large-offset-2 {
+ margin-left: 16.66667%; }
+ .large-up-2 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-2 > li, .large-up-2 > div, .large-up-2 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 50%;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-3 {
+ -webkit-flex: 0 0 25%;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%;
+ max-width: 25%; }
+ .large-order-3 {
+ -webkit-order: 3;
+ -ms-flex-order: 3;
+ order: 3; }
+ .large-offset-3 {
+ margin-left: 25%; }
+ .large-up-3 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-3 > li, .large-up-3 > div, .large-up-3 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 33.33333%;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-4 {
+ -webkit-flex: 0 0 33.33333%;
+ -ms-flex: 0 0 33.33333%;
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%; }
+ .large-order-4 {
+ -webkit-order: 4;
+ -ms-flex-order: 4;
+ order: 4; }
+ .large-offset-4 {
+ margin-left: 33.33333%; }
+ .large-up-4 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-4 > li, .large-up-4 > div, .large-up-4 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 25%;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-5 {
+ -webkit-flex: 0 0 41.66667%;
+ -ms-flex: 0 0 41.66667%;
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%; }
+ .large-order-5 {
+ -webkit-order: 5;
+ -ms-flex-order: 5;
+ order: 5; }
+ .large-offset-5 {
+ margin-left: 41.66667%; }
+ .large-up-5 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-5 > li, .large-up-5 > div, .large-up-5 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 20%;
+ -ms-flex: 0 0 20%;
+ flex: 0 0 20%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-6 {
+ -webkit-flex: 0 0 50%;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%;
+ max-width: 50%; }
+ .large-order-6 {
+ -webkit-order: 6;
+ -ms-flex-order: 6;
+ order: 6; }
+ .large-offset-6 {
+ margin-left: 50%; }
+ .large-up-6 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-6 > li, .large-up-6 > div, .large-up-6 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 16.66667%;
+ -ms-flex: 0 0 16.66667%;
+ flex: 0 0 16.66667%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-7 {
+ -webkit-flex: 0 0 58.33333%;
+ -ms-flex: 0 0 58.33333%;
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%; }
+ .large-order-7 {
+ -webkit-order: 7;
+ -ms-flex-order: 7;
+ order: 7; }
+ .large-offset-7 {
+ margin-left: 58.33333%; }
+ .large-up-7 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-7 > li, .large-up-7 > div, .large-up-7 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 14.28571%;
+ -ms-flex: 0 0 14.28571%;
+ flex: 0 0 14.28571%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-8 {
+ -webkit-flex: 0 0 66.66667%;
+ -ms-flex: 0 0 66.66667%;
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%; }
+ .large-order-8 {
+ -webkit-order: 8;
+ -ms-flex-order: 8;
+ order: 8; }
+ .large-offset-8 {
+ margin-left: 66.66667%; }
+ .large-up-8 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-8 > li, .large-up-8 > div, .large-up-8 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 12.5%;
+ -ms-flex: 0 0 12.5%;
+ flex: 0 0 12.5%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-9 {
+ -webkit-flex: 0 0 75%;
+ -ms-flex: 0 0 75%;
+ flex: 0 0 75%;
+ max-width: 75%; }
+ .large-order-9 {
+ -webkit-order: 9;
+ -ms-flex-order: 9;
+ order: 9; }
+ .large-offset-9 {
+ margin-left: 75%; }
+ .large-up-9 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-9 > li, .large-up-9 > div, .large-up-9 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 11.11111%;
+ -ms-flex: 0 0 11.11111%;
+ flex: 0 0 11.11111%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-10 {
+ -webkit-flex: 0 0 83.33333%;
+ -ms-flex: 0 0 83.33333%;
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%; }
+ .large-order-10 {
+ -webkit-order: 10;
+ -ms-flex-order: 10;
+ order: 10; }
+ .large-offset-10 {
+ margin-left: 83.33333%; }
+ .large-up-10 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-10 > li, .large-up-10 > div, .large-up-10 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 10%;
+ -ms-flex: 0 0 10%;
+ flex: 0 0 10%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-11 {
+ -webkit-flex: 0 0 91.66667%;
+ -ms-flex: 0 0 91.66667%;
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%; }
+ .large-order-11 {
+ -webkit-order: 11;
+ -ms-flex-order: 11;
+ order: 11; }
+ .large-offset-11 {
+ margin-left: 91.66667%; }
+ .large-up-11 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-11 > li, .large-up-11 > div, .large-up-11 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 9.09091%;
+ -ms-flex: 0 0 9.09091%;
+ flex: 0 0 9.09091%; } }
+
+@media only screen and (min-width: 75em) {
+ .large-12 {
+ -webkit-flex: 0 0 100%;
+ -ms-flex: 0 0 100%;
+ flex: 0 0 100%;
+ max-width: 100%; }
+ .large-order-12 {
+ -webkit-order: 12;
+ -ms-flex-order: 12;
+ order: 12; }
+ .large-offset-12 {
+ margin-left: 100%; }
+ .large-up-12 {
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none; }
+ .large-up-12 > li, .large-up-12 > div, .large-up-12 > section {
+ padding: 0 1rem 1rem;
+ -webkit-flex: 0 0 8.33333%;
+ -ms-flex: 0 0 8.33333%;
+ flex: 0 0 8.33333%; } }
+
+.grid-content .modal .grid-block {
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap; }
+
+/*
+ TITLE BAR
+ ---------
+
+ A navigational component which can display the current screen the user is on, along with additional controls or menu items.
+
+ The title bar includes classes to create center, left, and right sections, which can be used in any combination. However, in the markup, the sections must come in this order:
+ - Center
+ - Left
+ - Right
+*/
+.title-bar {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ overflow: visible; }
+ .title-bar .title {
+ font-weight: bold; }
+ .title-bar .left, .title-bar .center, .title-bar .right {
+ display: block;
+ white-space: nowrap;
+ overflow: visible; }
+ .title-bar .left:first-child:last-child, .title-bar .center:first-child:last-child, .title-bar .right:first-child:last-child {
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ margin: 0; }
+ .title-bar .left {
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1;
+ -webkit-flex: 0 0 25%;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%; }
+ .title-bar .center {
+ -webkit-order: 2;
+ -ms-flex-order: 2;
+ order: 2;
+ -webkit-flex: 0 0 50%;
+ -ms-flex: 0 0 50%;
+ flex: 0 0 50%;
+ text-align: center; }
+ .title-bar .right {
+ -webkit-order: 3;
+ -ms-flex-order: 3;
+ order: 3;
+ -webkit-flex: 0 0 25%;
+ -ms-flex: 0 0 25%;
+ flex: 0 0 25%;
+ text-align: right; }
+ .title-bar .left:first-child {
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto; }
+ .title-bar .left:first-child + .right:last-child {
+ -webkit-flex: 1 1 auto;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto; }
+ .title-bar .center:first-child:not(:last-child) {
+ margin-left: 25%; }
+ .title-bar .center + .left {
+ margin-right: -25%; }
+
+.title-bar {
+ background: #eee;
+ color: #000;
+ padding: 1rem;
+ border-bottom: 1px solid #ccc; }
+ .title-bar.primary {
+ background: #00558b;
+ color: #fff;
+ padding: 1rem;
+ border-bottom: 1px solid #ccc; }
+ .title-bar.primary a, .title-bar.primary a:hover {
+ color: #fff; }
+ .title-bar.primary .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .title-bar.primary .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .title-bar.dark {
+ background: #232323;
+ color: #fff;
+ padding: 1rem;
+ border-bottom: 1px solid #ccc; }
+ .title-bar.dark a, .title-bar.dark a:hover {
+ color: #fff; }
+ .title-bar.dark .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .title-bar.dark .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+
+.title-bar-bottom {
+ border-bottom: 0;
+ border-top: 1px solid #ccc; }
+
+/*
+ Label
+*/
+.label {
+ line-height: 1;
+ white-space: nowrap;
+ display: inline-block;
+ cursor: default; }
+
+.label {
+ font-size: 0.8rem;
+ padding: 0.33333rem 0.5rem;
+ background: #00558b;
+ border-radius: 0;
+ color: #fff; }
+ .label.primary {
+ background: #00558b;
+ border-radius: 0;
+ color: #fff; }
+ .label.success {
+ background: #43AC6A;
+ border-radius: 0;
+ color: #fff; }
+ .label.warning {
+ background: #F08A24;
+ border-radius: 0;
+ color: #fff; }
+ .label.alert {
+ background: #F04124;
+ border-radius: 0;
+ color: #fff; }
+ .label.dark {
+ background: #232323;
+ border-radius: 0;
+ color: #fff; }
+
+/*
+ Badge
+*/
+.badge {
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ border-radius: 1000px; }
+
+.badge {
+ font-size: 0.8em;
+ width: 1.5rem;
+ height: 1.5rem;
+ background: #00558b;
+ color: #fff; }
+ .badge.secondary {
+ background: #f1f1f1;
+ color: #000; }
+ .badge.primary {
+ background: #00558b;
+ color: #fff; }
+ .badge.success {
+ background: #43AC6A;
+ color: #fff; }
+ .badge.warning {
+ background: #F08A24;
+ color: #fff; }
+ .badge.alert {
+ background: #F04124;
+ color: #fff; }
+ .badge.dark {
+ background: #232323;
+ color: #fff; }
+
+.inline-list {
+ list-style-type: none;
+ text-align: left; }
+ .inline-list li, .inline-list dt, .inline-list dd {
+ display: inline-block;
+ margin-left: -2px;
+ margin-right: -2px; }
+ .inline-list li {
+ margin-right: 1rem;
+ margin-left: 0; }
+
+/*
+ MENU BAR
+ --------
+
+ A generic, flexible menu component.
+
+ Features:
+ - Orient horizontally and vertically
+ - Change orientation at certain breakpoints
+ - Items with icons above, below, or to the left or right
+ - Text labels for vertical menus and badges for horizontal menus
+*/
+.menu-bar {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ margin: 0;
+ list-style-type: none; }
+ .menu-bar > li {
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .menu-bar > li > a {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ padding: 1rem;
+ font-size: 1rem;
+ line-height: 1; }
+
+/*
+ Set the alignment of menu items (li) within a menu-bar
+
+ left: Items align to the left.
+ right: Items align to the right.
+ center: Items align to the center.
+ justify: Items are spaced equally apart so they occupy the space of the entire grid.
+ spaced: Items are given equal space to their left and right.
+
+ @group menu-bar
+
+ @param {string} $align - Alignment to use.
+
+ @output An appropriate justify-content value.
+*/
+/*
+ CSS output
+*/
+.menu-bar {
+ background: #fff; }
+ .menu-bar > li > a {
+ color: #000; }
+ .menu-bar > li > a:hover {
+ background: #ededed;
+ color: #000; }
+ .menu-bar .is-active > a {
+ background: #ededed;
+ color: #000; }
+ .menu-bar .iconic * {
+ fill: #000;
+ stroke: #000; }
+ .menu-bar .iconic *.iconic-property-accent {
+ fill: #000;
+ stroke: #000; }
+ .menu-bar, .menu-bar.horizontal {
+ /*
+ Orientation
+ */
+ overflow-x: hidden;
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ /*
+ Stretch
+ */ }
+ .menu-bar > li > a, .menu-bar.horizontal > li > a {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap; }
+ .menu-bar.vertical {
+ /*
+ Orientation
+ */
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap;
+ /*
+ Stretch
+ */ }
+ .menu-bar.vertical > li > a {
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap; }
+ .menu-bar.condense > li {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto; }
+ .menu-bar.align-right {
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end; }
+ .menu-bar.align-center {
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ .menu-bar.align-justify {
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between; }
+ .menu-bar.align-spaced {
+ -webkit-justify-content: space-around;
+ -ms-flex-pack: distribute;
+ justify-content: space-around; }
+ .menu-bar.small-condense li {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto; }
+ .menu-bar.small-expand li {
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto; }
+ .menu-bar.small-align-left {
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start; }
+ .menu-bar.small-align-right {
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end; }
+ .menu-bar.small-align-center {
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ .menu-bar.small-align-justify {
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between; }
+ .menu-bar.small-align-spaced {
+ -webkit-justify-content: space-around;
+ -ms-flex-pack: distribute;
+ justify-content: space-around; }
+ @media only screen and (min-width: 40em) {
+ .menu-bar.medium-condense li {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto; }
+ .menu-bar.medium-expand li {
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto; }
+ .menu-bar.medium-align-left {
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start; }
+ .menu-bar.medium-align-right {
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end; }
+ .menu-bar.medium-align-center {
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ .menu-bar.medium-align-justify {
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between; }
+ .menu-bar.medium-align-spaced {
+ -webkit-justify-content: space-around;
+ -ms-flex-pack: distribute;
+ justify-content: space-around; } }
+ @media only screen and (min-width: 75em) {
+ .menu-bar.large-condense li {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto; }
+ .menu-bar.large-expand li {
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto; }
+ .menu-bar.large-align-left {
+ -webkit-justify-content: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start; }
+ .menu-bar.large-align-right {
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end; }
+ .menu-bar.large-align-center {
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ .menu-bar.large-align-justify {
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between; }
+ .menu-bar.large-align-spaced {
+ -webkit-justify-content: space-around;
+ -ms-flex-pack: distribute;
+ justify-content: space-around; } }
+ .menu-bar.small-horizontal {
+ /*
+ Orientation
+ */
+ overflow-x: hidden;
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ /*
+ Stretch
+ */ }
+ .menu-bar.small-horizontal > li > a {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap; }
+ .menu-bar.small-vertical {
+ /*
+ Orientation
+ */
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap;
+ /*
+ Stretch
+ */ }
+ .menu-bar.small-vertical > li > a {
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap; }
+ @media only screen and (min-width: 40em) {
+ .menu-bar.medium-horizontal {
+ /*
+ Orientation
+ */
+ overflow-x: hidden;
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ /*
+ Stretch
+ */ }
+ .menu-bar.medium-horizontal > li > a {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap; }
+ .menu-bar.medium-vertical {
+ /*
+ Orientation
+ */
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap;
+ /*
+ Stretch
+ */ }
+ .menu-bar.medium-vertical > li > a {
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap; } }
+ @media only screen and (min-width: 75em) {
+ .menu-bar.large-horizontal {
+ /*
+ Orientation
+ */
+ overflow-x: hidden;
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ /*
+ Stretch
+ */ }
+ .menu-bar.large-horizontal > li > a {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap; }
+ .menu-bar.large-vertical {
+ /*
+ Orientation
+ */
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap;
+ /*
+ Stretch
+ */ }
+ .menu-bar.large-vertical > li > a {
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap; } }
+ .menu-bar > li > img, .menu-bar > li > .iconic, .menu-bar.icon-top > li > img, .menu-bar.icon-top > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar > li > a, .menu-bar.icon-top > li > a {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap; }
+ .menu-bar > li > a > img, .menu-bar > li > a > .iconic, .menu-bar.icon-top > li > a > img, .menu-bar.icon-top > li > a > .iconic {
+ margin: 0 0 1rem 0; }
+ .menu-bar.icon-right > li > img, .menu-bar.icon-right > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.icon-right > li > a {
+ -webkit-flex-flow: row-reverse nowrap;
+ -ms-flex-flow: row-reverse nowrap;
+ flex-flow: row-reverse nowrap; }
+ .menu-bar.icon-right > li > a > img, .menu-bar.icon-right > li > a > .iconic {
+ margin: 0 0 0 1rem; }
+ .menu-bar.icon-bottom > li > img, .menu-bar.icon-bottom > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.icon-bottom > li > a {
+ -webkit-flex-flow: column-reverse nowrap;
+ -ms-flex-flow: column-reverse nowrap;
+ flex-flow: column-reverse nowrap; }
+ .menu-bar.icon-bottom > li > a > img, .menu-bar.icon-bottom > li > a > .iconic {
+ margin: 1rem 0 0 0; }
+ .menu-bar.icon-left > li > img, .menu-bar.icon-left > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.icon-left > li > a {
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .menu-bar.icon-left > li > a > img, .menu-bar.icon-left > li > a > .iconic {
+ margin: 0 1rem 0 0; }
+ .menu-bar.small-icon-top > li > img, .menu-bar.small-icon-top > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.small-icon-top > li > a {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap; }
+ .menu-bar.small-icon-top > li > a > img, .menu-bar.small-icon-top > li > a > .iconic {
+ margin: 0 0 1rem 0; }
+ .menu-bar.small-icon-right > li > img, .menu-bar.small-icon-right > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.small-icon-right > li > a {
+ -webkit-flex-flow: row-reverse nowrap;
+ -ms-flex-flow: row-reverse nowrap;
+ flex-flow: row-reverse nowrap; }
+ .menu-bar.small-icon-right > li > a > img, .menu-bar.small-icon-right > li > a > .iconic {
+ margin: 0 0 0 1rem; }
+ .menu-bar.small-icon-bottom > li > img, .menu-bar.small-icon-bottom > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.small-icon-bottom > li > a {
+ -webkit-flex-flow: column-reverse nowrap;
+ -ms-flex-flow: column-reverse nowrap;
+ flex-flow: column-reverse nowrap; }
+ .menu-bar.small-icon-bottom > li > a > img, .menu-bar.small-icon-bottom > li > a > .iconic {
+ margin: 1rem 0 0 0; }
+ .menu-bar.small-icon-left > li > img, .menu-bar.small-icon-left > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.small-icon-left > li > a {
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .menu-bar.small-icon-left > li > a > img, .menu-bar.small-icon-left > li > a > .iconic {
+ margin: 0 1rem 0 0; }
+ @media only screen and (min-width: 40em) {
+ .menu-bar.medium-icon-top > li > img, .menu-bar.medium-icon-top > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.medium-icon-top > li > a {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap; }
+ .menu-bar.medium-icon-top > li > a > img, .menu-bar.medium-icon-top > li > a > .iconic {
+ margin: 0 0 1rem 0; } }
+ @media only screen and (min-width: 40em) {
+ .menu-bar.medium-icon-right > li > img, .menu-bar.medium-icon-right > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.medium-icon-right > li > a {
+ -webkit-flex-flow: row-reverse nowrap;
+ -ms-flex-flow: row-reverse nowrap;
+ flex-flow: row-reverse nowrap; }
+ .menu-bar.medium-icon-right > li > a > img, .menu-bar.medium-icon-right > li > a > .iconic {
+ margin: 0 0 0 1rem; } }
+ @media only screen and (min-width: 40em) {
+ .menu-bar.medium-icon-bottom > li > img, .menu-bar.medium-icon-bottom > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.medium-icon-bottom > li > a {
+ -webkit-flex-flow: column-reverse nowrap;
+ -ms-flex-flow: column-reverse nowrap;
+ flex-flow: column-reverse nowrap; }
+ .menu-bar.medium-icon-bottom > li > a > img, .menu-bar.medium-icon-bottom > li > a > .iconic {
+ margin: 1rem 0 0 0; } }
+ @media only screen and (min-width: 40em) {
+ .menu-bar.medium-icon-left > li > img, .menu-bar.medium-icon-left > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.medium-icon-left > li > a {
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .menu-bar.medium-icon-left > li > a > img, .menu-bar.medium-icon-left > li > a > .iconic {
+ margin: 0 1rem 0 0; } }
+ @media only screen and (min-width: 75em) {
+ .menu-bar.large-icon-top > li > img, .menu-bar.large-icon-top > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.large-icon-top > li > a {
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap; }
+ .menu-bar.large-icon-top > li > a > img, .menu-bar.large-icon-top > li > a > .iconic {
+ margin: 0 0 1rem 0; } }
+ @media only screen and (min-width: 75em) {
+ .menu-bar.large-icon-right > li > img, .menu-bar.large-icon-right > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.large-icon-right > li > a {
+ -webkit-flex-flow: row-reverse nowrap;
+ -ms-flex-flow: row-reverse nowrap;
+ flex-flow: row-reverse nowrap; }
+ .menu-bar.large-icon-right > li > a > img, .menu-bar.large-icon-right > li > a > .iconic {
+ margin: 0 0 0 1rem; } }
+ @media only screen and (min-width: 75em) {
+ .menu-bar.large-icon-bottom > li > img, .menu-bar.large-icon-bottom > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.large-icon-bottom > li > a {
+ -webkit-flex-flow: column-reverse nowrap;
+ -ms-flex-flow: column-reverse nowrap;
+ flex-flow: column-reverse nowrap; }
+ .menu-bar.large-icon-bottom > li > a > img, .menu-bar.large-icon-bottom > li > a > .iconic {
+ margin: 1rem 0 0 0; } }
+ @media only screen and (min-width: 75em) {
+ .menu-bar.large-icon-left > li > img, .menu-bar.large-icon-left > li > .iconic {
+ margin: 0;
+ width: 25px;
+ height: 25px; }
+ .menu-bar.large-icon-left > li > a {
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .menu-bar.large-icon-left > li > a > img, .menu-bar.large-icon-left > li > a > .iconic {
+ margin: 0 1rem 0 0; } }
+ .menu-bar.label-side > li {
+ position: relative; }
+ .menu-bar.label-side > li > a {
+ padding-right: 3.2rem; }
+ .menu-bar.label-side .menu-bar-label {
+ display: block;
+ font-size: 0.9rem;
+ width: 1.2rem;
+ height: 1.2rem;
+ line-height: 1.2rem;
+ text-align: center;
+ border-radius: 1000px;
+ background: red;
+ color: #fff;
+ position: absolute;
+ pointer-events: none;
+ right: 1rem;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%); }
+ .menu-bar.label-corner > li {
+ position: relative; }
+ .menu-bar.label-corner > li > a {
+ padding-right: 3.2rem; }
+ .menu-bar.label-corner .menu-bar-label {
+ display: block;
+ font-size: 0.9rem;
+ width: 1.2rem;
+ height: 1.2rem;
+ line-height: 1.2rem;
+ text-align: center;
+ border-radius: 1000px;
+ background: red;
+ color: #fff;
+ position: absolute;
+ pointer-events: none;
+ right: 1rem;
+ top: 1rem; }
+ .menu-bar.primary {
+ background: #00558b; }
+ .menu-bar.primary > li > a {
+ color: #fff; }
+ .menu-bar.primary > li > a:hover {
+ background: #0065a5;
+ color: #fff; }
+ .menu-bar.primary .is-active > a {
+ background: #0065a5;
+ color: #fff; }
+ .menu-bar.primary .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .menu-bar.primary .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .menu-bar.dark {
+ background: #232323; }
+ .menu-bar.dark > li > a {
+ color: #fff; }
+ .menu-bar.dark > li > a:hover {
+ background: #323232;
+ color: #fff; }
+ .menu-bar.dark .is-active > a {
+ background: #323232;
+ color: #fff; }
+ .menu-bar.dark .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .menu-bar.dark .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .menu-bar > li.title {
+ padding: 1rem;
+ cursor: default;
+ font-weight: bold; }
+
+.menu-group {
+ 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;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ @media only screen and (min-width: 40em) {
+ .menu-group {
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap; } }
+ .menu-group > .menu-group-left, .menu-group > .menu-group-right {
+ -webkit-flex: 1 1 100%;
+ -ms-flex: 1 1 100%;
+ flex: 1 1 100%; }
+ @media only screen and (min-width: 40em) {
+ .menu-group > .menu-group-left, .menu-group > .menu-group-right {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto; } }
+ .menu-group .menu-bar {
+ margin: 0; }
+ .menu-group .menu-bar > li {
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto; }
+ .menu-group.primary {
+ background-color: #00558b; }
+ .menu-group.primary .menu-bar {
+ background: #00558b; }
+ .menu-group.primary .menu-bar > li > a {
+ color: #fff; }
+ .menu-group.primary .menu-bar > li > a:hover {
+ background: #0065a5;
+ color: #fff; }
+ .menu-group.primary .menu-bar .is-active > a {
+ background: #0065a5;
+ color: #fff; }
+ .menu-group.primary .menu-bar .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .menu-group.primary .menu-bar .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+ .menu-group.dark {
+ background-color: #232323; }
+ .menu-group.dark .menu-bar {
+ background: #232323; }
+ .menu-group.dark .menu-bar > li > a {
+ color: #fff; }
+ .menu-group.dark .menu-bar > li > a:hover {
+ background: #323232;
+ color: #fff; }
+ .menu-group.dark .menu-bar .is-active > a {
+ background: #323232;
+ color: #fff; }
+ .menu-group.dark .menu-bar .iconic * {
+ fill: #fff;
+ stroke: #fff; }
+ .menu-group.dark .menu-bar .iconic *.iconic-property-accent {
+ fill: #fff;
+ stroke: #fff; }
+
+/*
+ MODAL
+ -----
+
+ The humble modal hides off-canvas until summoned with an fa-open directive. Modals appear over an overlay that darkens the rest of the page, and have a maxmimum width. You can construct a grid inside a modal, or attach panels to it.
+
+ Note that the modal overlay is hardcoded into the CSS, because whether or not you build your modal semantically, the overlay is always required and will always look the same.
+*/
+.modal {
+ position: relative;
+ z-index: 1001;
+ background: #fff;
+ -webkit-flex: 0 0 auto;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ width: 100%;
+ height: 100vh;
+ max-height: 100%;
+ overflow: hidden;
+ padding: 1rem; }
+ @media only screen and (min-width: 40em) {
+ .modal {
+ height: auto;
+ max-width: 600px; } }
+ .modal .grid-content, .modal .grid-block {
+ margin: 0; }
+ .modal .close-button, .modal [fa-close] {
+ z-index: 1001; }
+
+.modal {
+ max-width: 600px;
+ border-radius: 0px; }
+ .tiny > .modal {
+ max-width: 300px; }
+ .small > .modal {
+ max-width: 500px; }
+ .large > .modal {
+ max-width: 800px; }
+ .dialog > .modal {
+ height: auto; }
+ .collapse > .modal {
+ padding: 0; }
+
+.modal-overlay {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ background-color: rgba(51, 51, 51, 0.7);
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ .modal-overlay.is-active {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex; }
+
+@-webkit-keyframes shake {
+ 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% {
+ -webkit-transform: translateX(7%);
+ transform: translateX(7%); }
+
+ 5%, 15%, 25%, 35%, 45%, 55%, 65%, 75%, 85%, 95% {
+ -webkit-transform: translateX(-7%);
+ transform: translateX(-7%); }
+
+ 100% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0); } }
+
+@keyframes shake {
+ 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% {
+ -webkit-transform: translateX(7%);
+ transform: translateX(7%); }
+
+ 5%, 15%, 25%, 35%, 45%, 55%, 65%, 75%, 85%, 95% {
+ -webkit-transform: translateX(-7%);
+ transform: translateX(-7%); }
+
+ 100% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0); } }
+
+@-webkit-keyframes spin-cw {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg); }
+
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg); } }
+
+@keyframes spin-cw {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg); }
+
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg); } }
+
+@-webkit-keyframes spin-ccw {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg); }
+
+ 100% {
+ -webkit-transform: rotate(-360deg);
+ transform: rotate(-360deg); } }
+
+@keyframes spin-ccw {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg); }
+
+ 100% {
+ -webkit-transform: rotate(-360deg);
+ transform: rotate(-360deg); } }
+
+@-webkit-keyframes wiggle {
+ 40%, 50%, 60% {
+ -webkit-transform: rotate(7deg);
+ transform: rotate(7deg); }
+
+ 35%, 45%, 55%, 65% {
+ -webkit-transform: rotate(-7deg);
+ transform: rotate(-7deg); }
+
+ 0%, 30%, 70%, 100% {
+ -webkit-transform: rotate(0);
+ transform: rotate(0); } }
+
+@keyframes wiggle {
+ 40%, 50%, 60% {
+ -webkit-transform: rotate(7deg);
+ transform: rotate(7deg); }
+
+ 35%, 45%, 55%, 65% {
+ -webkit-transform: rotate(-7deg);
+ transform: rotate(-7deg); }
+
+ 0%, 30%, 70%, 100% {
+ -webkit-transform: rotate(0);
+ transform: rotate(0); } }
+
+/*
+ Transitions
+ */
+.slideInDown.ng-enter, .slideInDown.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translateY(-100%);
+ transform: translateY(-100%); }
+.slideInDown.ng-enter.ng-enter-active, .slideInDown.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: translateX(0) translateY(0);
+ transform: translateX(0) translateY(0); }
+
+.slideInLeft.ng-enter, .slideInLeft.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translateX(100%);
+ transform: translateX(100%); }
+.slideInLeft.ng-enter.ng-enter-active, .slideInLeft.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: translateX(0) translateY(0);
+ transform: translateX(0) translateY(0); }
+
+.slideInUp.ng-enter, .slideInUp.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translateY(100%);
+ transform: translateY(100%); }
+.slideInUp.ng-enter.ng-enter-active, .slideInUp.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: translateX(0) translateY(0);
+ transform: translateX(0) translateY(0); }
+
+.slideInRight.ng-enter, .slideInRight.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translateX(-100%);
+ transform: translateX(-100%); }
+.slideInRight.ng-enter.ng-enter-active, .slideInRight.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: translateX(0) translateY(0);
+ transform: translateX(0) translateY(0); }
+
+.slideOutBottom.ng-leave, .slideOutBottom.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translateX(0) translateY(0);
+ transform: translateX(0) translateY(0); }
+.slideOutBottom.ng-leave.ng-leave-active, .slideOutBottom.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: translateY(100%);
+ transform: translateY(100%); }
+
+.slideOutRight.ng-leave, .slideOutRight.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translateX(0) translateY(0);
+ transform: translateX(0) translateY(0); }
+.slideOutRight.ng-leave.ng-leave-active, .slideOutRight.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: translateX(100%);
+ transform: translateX(100%); }
+
+.slideOutUp.ng-leave, .slideOutUp.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translateX(0) translateY(0);
+ transform: translateX(0) translateY(0); }
+.slideOutUp.ng-leave.ng-leave-active, .slideOutUp.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: translateY(-100%);
+ transform: translateY(-100%); }
+
+.slideOutLeft.ng-leave, .slideOutLeft.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translateX(0) translateY(0);
+ transform: translateX(0) translateY(0); }
+.slideOutLeft.ng-leave.ng-leave-active, .slideOutLeft.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: translateX(-100%);
+ transform: translateX(-100%); }
+
+.fadeIn.ng-enter, .fadeIn.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: opacity;
+ opacity: 0; }
+.fadeIn.ng-enter.ng-enter-active, .fadeIn.ng-hide-remove.ng-hide-remove-active {
+ opacity: 1; }
+
+.fadeOut.ng-leave, .fadeOut.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: opacity;
+ opacity: 1; }
+.fadeOut.ng-leave.ng-leave-active, .fadeOut.ng-hide-add.ng-hide-add-active {
+ opacity: 0; }
+
+.hingeInFromTop.ng-enter, .hingeInFromTop.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: perspective(2000px) rotateX(-90deg);
+ transform: perspective(2000px) rotateX(-90deg);
+ -webkit-transform-origin: top;
+ transform-origin: top;
+ opacity: 0; }
+.hingeInFromTop.ng-enter.ng-enter-active, .hingeInFromTop.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ opacity: 1; }
+
+.hingeInFromRight.ng-enter, .hingeInFromRight.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: perspective(2000px) rotateY(-90deg);
+ transform: perspective(2000px) rotateY(-90deg);
+ -webkit-transform-origin: right;
+ transform-origin: right;
+ opacity: 0; }
+.hingeInFromRight.ng-enter.ng-enter-active, .hingeInFromRight.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ opacity: 1; }
+
+.hingeInFromBottom.ng-enter, .hingeInFromBottom.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: perspective(2000px) rotateX(90deg);
+ transform: perspective(2000px) rotateX(90deg);
+ -webkit-transform-origin: bottom;
+ transform-origin: bottom;
+ opacity: 0; }
+.hingeInFromBottom.ng-enter.ng-enter-active, .hingeInFromBottom.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ opacity: 1; }
+
+.hingeInFromLeft.ng-enter, .hingeInFromLeft.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: perspective(2000px) rotateY(90deg);
+ transform: perspective(2000px) rotateY(90deg);
+ -webkit-transform-origin: left;
+ transform-origin: left;
+ opacity: 0; }
+.hingeInFromLeft.ng-enter.ng-enter-active, .hingeInFromLeft.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ opacity: 1; }
+
+.hingeInFromMiddleX.ng-enter, .hingeInFromMiddleX.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: perspective(2000px) rotateX(-90deg);
+ transform: perspective(2000px) rotateX(-90deg);
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ opacity: 0; }
+.hingeInFromMiddleX.ng-enter.ng-enter-active, .hingeInFromMiddleX.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ opacity: 1; }
+
+.hingeInFromMiddleY.ng-enter, .hingeInFromMiddleY.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: perspective(2000px) rotateY(-90deg);
+ transform: perspective(2000px) rotateY(-90deg);
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ opacity: 0; }
+.hingeInFromMiddleY.ng-enter.ng-enter-active, .hingeInFromMiddleY.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ opacity: 1; }
+
+.hingeOutFromTop.ng-leave, .hingeOutFromTop.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ -webkit-transform-origin: top;
+ transform-origin: top;
+ opacity: 1; }
+.hingeOutFromTop.ng-leave.ng-leave-active, .hingeOutFromTop.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: perspective(2000px) rotateX(-90deg);
+ transform: perspective(2000px) rotateX(-90deg);
+ opacity: 0; }
+
+.hingeOutFromRight.ng-leave, .hingeOutFromRight.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ -webkit-transform-origin: right;
+ transform-origin: right;
+ opacity: 1; }
+.hingeOutFromRight.ng-leave.ng-leave-active, .hingeOutFromRight.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: perspective(2000px) rotateY(-90deg);
+ transform: perspective(2000px) rotateY(-90deg);
+ opacity: 0; }
+
+.hingeOutFromBottom.ng-leave, .hingeOutFromBottom.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ -webkit-transform-origin: bottom;
+ transform-origin: bottom;
+ opacity: 1; }
+.hingeOutFromBottom.ng-leave.ng-leave-active, .hingeOutFromBottom.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: perspective(2000px) rotateX(90deg);
+ transform: perspective(2000px) rotateX(90deg);
+ opacity: 0; }
+
+.hingeOutFromLeft.ng-leave, .hingeOutFromLeft.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ -webkit-transform-origin: left;
+ transform-origin: left;
+ opacity: 1; }
+.hingeOutFromLeft.ng-leave.ng-leave-active, .hingeOutFromLeft.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: perspective(2000px) rotateY(90deg);
+ transform: perspective(2000px) rotateY(90deg);
+ opacity: 0; }
+
+.hingeOutFromMiddleX.ng-leave, .hingeOutFromMiddleX.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ opacity: 1; }
+.hingeOutFromMiddleX.ng-leave.ng-leave-active, .hingeOutFromMiddleX.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: perspective(2000px) rotateX(-90deg);
+ transform: perspective(2000px) rotateX(-90deg);
+ opacity: 0; }
+
+.hingeOutFromMiddleY.ng-leave, .hingeOutFromMiddleY.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ opacity: 1; }
+.hingeOutFromMiddleY.ng-leave.ng-leave-active, .hingeOutFromMiddleY.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: perspective(2000px) rotateY(-90deg);
+ transform: perspective(2000px) rotateY(-90deg);
+ opacity: 0; }
+
+.zoomIn.ng-enter, .zoomIn.ng-hide-remove {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, property;
+ transition-property: transform, property;
+ -webkit-transform: scale(1.5);
+ transform: scale(1.5);
+ opacity: 0; }
+.zoomIn.ng-enter.ng-enter-active, .zoomIn.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ opacity: 1; }
+
+.zoomOut.ng-leave, .zoomOut.ng-hide-add {
+ transition-duration: 500ms;
+ transition-timing-function: ease;
+ transition-delay: 0;
+ transition-property: -webkit-transform, property;
+ transition-property: transform, property;
+ -webkit-transform: scale(0.5);
+ transform: scale(0.5);
+ opacity: 1; }
+.zoomOut.ng-leave.ng-leave-active, .zoomOut.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ opacity: 0; }
+
+.spinIn.ng-enter, .spinIn.ng-hide-remove {
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: rotate(-270deg);
+ transform: rotate(-270deg);
+ opacity: 0; }
+.spinIn.ng-enter.ng-enter-active, .spinIn.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1; }
+
+.spinOut.ng-leave, .spinOut.ng-hide-add {
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1; }
+.spinOut.ng-leave.ng-leave-active, .spinOut.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: rotate(270deg);
+ transform: rotate(270deg);
+ opacity: 0; }
+
+.spinInCCW.ng-enter, .spinInCCW.ng-hide-remove {
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: rotate(270deg);
+ transform: rotate(270deg);
+ opacity: 0; }
+.spinInCCW.ng-enter.ng-enter-active, .spinInCCW.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1; }
+
+.spinOutCCW.ng-leave, .spinOutCCW.ng-hide-add {
+ transition-property: -webkit-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ opacity: 1; }
+.spinOutCCW.ng-leave.ng-leave-active, .spinOutCCW.ng-hide-add.ng-hide-add-active {
+ -webkit-transform: rotate(-270deg);
+ transform: rotate(-270deg);
+ opacity: 0; }
+
+/*
+ Transition modifiers
+ */
+.slow {
+ transition-duration: 750ms !important; }
+
+.fast {
+ transition-duration: 250ms !important; }
+
+.linear {
+ transition-timing-function: linear !important; }
+
+.ease {
+ transition-timing-function: ease !important; }
+
+.easeIn {
+ transition-timing-function: ease-in !important; }
+
+.easeOut {
+ transition-timing-function: ease-out !important; }
+
+.easeInOut {
+ transition-timing-function: ease-in-out !important; }
+
+.bounceIn {
+ transition-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; }
+
+.bounceOut {
+ transition-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; }
+
+.bounceInOut {
+ transition-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; }
+
+.delay {
+ transition-delay: 300ms !important; }
+
+.long-delay {
+ transition-delay: 700ms !important; }
+
+/*
+ Animations
+ */
+.shake {
+ -webkit-animation-name: shake;
+ animation-name: shake;
+ -webkit-animation-duration: 500ms;
+ animation-duration: 500ms;
+ -webkit-animation-timing-function: ease;
+ animation-timing-function: ease;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ -webkit-animation-delay: 0;
+ animation-delay: 0; }
+
+.spin-cw {
+ -webkit-animation-name: spin-cw;
+ animation-name: spin-cw;
+ -webkit-animation-duration: 500ms;
+ animation-duration: 500ms;
+ -webkit-animation-timing-function: ease;
+ animation-timing-function: ease;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ -webkit-animation-delay: 0;
+ animation-delay: 0; }
+
+.spin-ccw {
+ -webkit-animation-name: spin-ccw;
+ animation-name: spin-ccw;
+ -webkit-animation-duration: 500ms;
+ animation-duration: 500ms;
+ -webkit-animation-timing-function: ease;
+ animation-timing-function: ease;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ -webkit-animation-delay: 0;
+ animation-delay: 0; }
+
+.wiggle {
+ -webkit-animation-name: wiggle;
+ animation-name: wiggle;
+ -webkit-animation-duration: 500ms;
+ animation-duration: 500ms;
+ -webkit-animation-timing-function: ease;
+ animation-timing-function: ease;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ -webkit-animation-delay: 0;
+ animation-delay: 0; }
+
+/*
+ Animation modifiers
+ */
+.shake.infinite, .spin-cw.infinite, .spin-ccw.infinite, .wiggle.infinite {
+ -webkit-animation-iteration-count: infinite;
+ animation-iteration-count: infinite; }
+.shake.linear, .spin-cw.linear, .spin-ccw.linear, .wiggle.linear {
+ -webkit-animation-timing-function: linear !important;
+ animation-timing-function: linear !important; }
+.shake.ease, .spin-cw.ease, .spin-ccw.ease, .wiggle.ease {
+ -webkit-animation-timing-function: ease !important;
+ animation-timing-function: ease !important; }
+.shake.easeIn, .spin-cw.easeIn, .spin-ccw.easeIn, .wiggle.easeIn {
+ -webkit-animation-timing-function: ease-in !important;
+ animation-timing-function: ease-in !important; }
+.shake.easeOut, .spin-cw.easeOut, .spin-ccw.easeOut, .wiggle.easeOut {
+ -webkit-animation-timing-function: ease-out !important;
+ animation-timing-function: ease-out !important; }
+.shake.easeInOut, .spin-cw.easeInOut, .spin-ccw.easeInOut, .wiggle.easeInOut {
+ -webkit-animation-timing-function: ease-in-out !important;
+ animation-timing-function: ease-in-out !important; }
+.shake.bounceIn, .spin-cw.bounceIn, .spin-ccw.bounceIn, .wiggle.bounceIn {
+ -webkit-animation-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important;
+ animation-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important; }
+.shake.bounceOut, .spin-cw.bounceOut, .spin-ccw.bounceOut, .wiggle.bounceOut {
+ -webkit-animation-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important;
+ animation-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important; }
+.shake.bounceInOut, .spin-cw.bounceInOut, .spin-ccw.bounceInOut, .wiggle.bounceInOut {
+ -webkit-animation-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important;
+ animation-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important; }
+.shake.slow, .spin-cw.slow, .spin-ccw.slow, .wiggle.slow {
+ -webkit-animation-duration: 750ms !important;
+ animation-duration: 750ms !important; }
+.shake.fast, .spin-cw.fast, .spin-ccw.fast, .wiggle.fast {
+ -webkit-animation-duration: 250ms !important;
+ animation-duration: 250ms !important; }
+.shake.delay, .spin-cw.delay, .spin-ccw.delay, .wiggle.delay {
+ -webkit-animation-delay: 300ms !important;
+ animation-delay: 300ms !important; }
+.shake.long-delay, .spin-cw.long-delay, .spin-ccw.long-delay, .wiggle.long-delay {
+ -webkit-animation-delay: 700ms !important;
+ animation-delay: 700ms !important; }
+
+.stagger {
+ transition-delay: 150ms;
+ transition-duration: 0; }
+
+.stort-stagger {
+ transition-delay: 150ms;
+ transition-duration: 0; }
+
+.long-stagger {
+ transition-delay: 150ms;
+ transition-duration: 0; }
+
+.position-absolute {
+ overflow: hidden;
+ position: relative; }
+
+.ui-animation.ng-enter-active, .ui-animation.ng-leave-active {
+ position: absolute !important;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform-style: preserve-3d;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0; }
+
+/*
+ NOTIFICATION
+ ------------
+
+ An alert that pins to the corner of the screen when triggered by JavaScript. It can be set to disappear after a certain period of time, or to stay put until the user clicks on it. A custom action can be asigned to a notification as well.
+
+ Optionally, the notifications directive can also tap into the browser's native notification support, if it exists.
+*/
+.notification, .static-notification {
+ z-index: 1000;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ position: relative;
+ margin-top: .5rem;
+ margin-bottom: .5rem;
+ display: none; }
+ .notification h1, .static-notification h1 {
+ font-size: 1.25em;
+ margin: 0; }
+ .notification p, .static-notification p {
+ margin: 0; }
+ .is-active.notification, .is-active.static-notification {
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex; }
+ .notification .close-button, .static-notification .close-button {
+ color: white; }
+
+.notification-container {
+ z-index: 3000;
+ position: fixed;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column; }
+
+/*
+ CSS Output
+*/
+.notification {
+ background: #00558b;
+ padding: 1rem;
+ border-radius: 4px; }
+ .notification, .notification h1, .notification h2, .notification h3, .notification h4, .notification h5, .notification h6 {
+ color: white; }
+ .notification.success {
+ background: #43AC6A;
+ padding: 1rem;
+ border-radius: 4px; }
+ .notification.success, .notification.success h1, .notification.success h2, .notification.success h3, .notification.success h4, .notification.success h5, .notification.success h6 {
+ color: white; }
+ .notification.warning {
+ background: #F08A24;
+ padding: 1rem;
+ border-radius: 4px; }
+ .notification.warning, .notification.warning h1, .notification.warning h2, .notification.warning h3, .notification.warning h4, .notification.warning h5, .notification.warning h6 {
+ color: white; }
+ .notification.alert {
+ background: #F04124;
+ padding: 1rem;
+ border-radius: 4px; }
+ .notification.alert, .notification.alert h1, .notification.alert h2, .notification.alert h3, .notification.alert h4, .notification.alert h5, .notification.alert h6 {
+ color: white; }
+ .notification.dark {
+ background: #232323;
+ padding: 1rem;
+ border-radius: 4px; }
+ .notification.dark, .notification.dark h1, .notification.dark h2, .notification.dark h3, .notification.dark h4, .notification.dark h5, .notification.dark h6 {
+ color: #fff; }
+
+.static-notification {
+ background: #00558b;
+ padding: 1rem;
+ border-radius: 4px;
+ position: fixed !important; }
+ .static-notification, .static-notification h1, .static-notification h2, .static-notification h3, .static-notification h4, .static-notification h5, .static-notification h6 {
+ color: white; }
+ .static-notification.top-right {
+ width: 25rem;
+ right: 1rem;
+ top: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .static-notification.top-right {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .static-notification.top-left {
+ width: 25rem;
+ left: 1rem;
+ top: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .static-notification.top-left {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .static-notification.top-middle {
+ width: 25rem;
+ left: 50%;
+ margin-left: -12.5rem;
+ top: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .static-notification.top-middle {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .static-notification.bottom-right {
+ width: 25rem;
+ right: 1rem;
+ top: auto;
+ bottom: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .static-notification.bottom-right {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .static-notification.bottom-left {
+ width: 25rem;
+ left: 1rem;
+ top: auto;
+ bottom: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .static-notification.bottom-left {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .static-notification.bottom-middle {
+ width: 25rem;
+ left: 50%;
+ margin-left: -12.5rem;
+ top: auto;
+ bottom: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .static-notification.bottom-middle {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .static-notification.success {
+ background: #43AC6A;
+ padding: 1rem;
+ border-radius: 4px; }
+ .static-notification.success, .static-notification.success h1, .static-notification.success h2, .static-notification.success h3, .static-notification.success h4, .static-notification.success h5, .static-notification.success h6 {
+ color: white; }
+ .static-notification.warning {
+ background: #F08A24;
+ padding: 1rem;
+ border-radius: 4px; }
+ .static-notification.warning, .static-notification.warning h1, .static-notification.warning h2, .static-notification.warning h3, .static-notification.warning h4, .static-notification.warning h5, .static-notification.warning h6 {
+ color: white; }
+ .static-notification.alert {
+ background: #F04124;
+ padding: 1rem;
+ border-radius: 4px; }
+ .static-notification.alert, .static-notification.alert h1, .static-notification.alert h2, .static-notification.alert h3, .static-notification.alert h4, .static-notification.alert h5, .static-notification.alert h6 {
+ color: white; }
+ .static-notification.dark {
+ background: #232323;
+ padding: 1rem;
+ border-radius: 4px; }
+ .static-notification.dark, .static-notification.dark h1, .static-notification.dark h2, .static-notification.dark h3, .static-notification.dark h4, .static-notification.dark h5, .static-notification.dark h6 {
+ color: #fff; }
+
+.notification-container {
+ width: 25rem;
+ right: 1rem;
+ top: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .notification-container {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .notification-container.top-right {
+ width: 25rem;
+ right: 1rem;
+ top: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .notification-container.top-right {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .notification-container.top-left {
+ width: 25rem;
+ left: 1rem;
+ top: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .notification-container.top-left {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .notification-container.top-middle {
+ width: 25rem;
+ left: 50%;
+ margin-left: -12.5rem;
+ top: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .notification-container.top-middle {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .notification-container.bottom-right {
+ width: 25rem;
+ right: 1rem;
+ top: auto;
+ bottom: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .notification-container.bottom-right {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .notification-container.bottom-left {
+ width: 25rem;
+ left: 1rem;
+ top: auto;
+ bottom: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .notification-container.bottom-left {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+ .notification-container.bottom-middle {
+ width: 25rem;
+ left: 50%;
+ margin-left: -12.5rem;
+ top: auto;
+ bottom: 1rem; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .notification-container.bottom-middle {
+ width: auto;
+ left: 1rem;
+ right: 1rem;
+ margin-left: 0; } }
+
+.notification-icon {
+ -webkit-flex: 0 0 60px;
+ -ms-flex: 0 0 60px;
+ flex: 0 0 60px;
+ margin-right: 1rem;
+ -webkit-align-self: flex-start;
+ -ms-flex-item-align: start;
+ align-self: flex-start; }
+ .notification-icon img {
+ width: 100%;
+ height: auto; }
+
+.notification-content {
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1; }
+
+/*
+ Off-canvas menu
+ ---------------
+
+ A generic container that stays fixed to the left, top, right, or bottom of the screen, and is summoned when needed. When an off-canvas panel is open, the app frame shifts over to reveal the menu.
+*/
+.off-canvas {
+ position: fixed;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ transition: -webkit-transform 0.25s ease-out;
+ transition: transform 0.25s ease-out;
+ z-index: 2; }
+ .is-active.off-canvas {
+ -webkit-transform: translate(0, 0) !important;
+ transform: translate(0, 0) !important; }
+ .off-canvas ~ .grid-frame {
+ -webkit-transform: translate(0, 0, 0);
+ transform: translate(0, 0, 0);
+ transition: -webkit-transform 0.25s ease-out;
+ transition: transform 0.25s ease-out;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ background: white; }
+
+.off-canvas {
+ /*
+ Get shadow values for later use
+ */
+ /*
+ Sizing
+ */
+ width: 250px;
+ height: 100%;
+ /*
+ Positioning
+ */
+ top: 0;
+ left: 0;
+ box-shadow: inset -3px 0 10px rgba(0, 0, 0, 0.25);
+ -webkit-transform: translateX(-100%);
+ transform: translateX(-100%);
+ background: #fff;
+ color: #000; }
+ .off-canvas.is-active ~ .grid-frame {
+ -webkit-transform: translateX(250px) !important;
+ transform: translateX(250px) !important; }
+ .off-canvas.top {
+ /*
+ Get shadow values for later use
+ */
+ /*
+ Sizing
+ */
+ height: 250px;
+ width: 100%;
+ /*
+ Positioning
+ */
+ top: 0;
+ left: 0;
+ -webkit-transform: translateY(-100%);
+ transform: translateY(-100%);
+ box-shadow: inset 0 -3px 10px rgba(0, 0, 0, 0.25); }
+ .off-canvas.top.is-active ~ .grid-frame {
+ -webkit-transform: translateY(250px) !important;
+ transform: translateY(250px) !important; }
+ .off-canvas.right {
+ /*
+ Get shadow values for later use
+ */
+ /*
+ Sizing
+ */
+ width: 250px;
+ height: 100%;
+ /*
+ Positioning
+ */
+ left: auto;
+ top: 0;
+ right: 0;
+ box-shadow: inset 3px 0 10px rgba(0, 0, 0, 0.25);
+ -webkit-transform: translateX(100%);
+ transform: translateX(100%); }
+ .off-canvas.right.is-active ~ .grid-frame {
+ -webkit-transform: translateX(-250px) !important;
+ transform: translateX(-250px) !important; }
+ .off-canvas.bottom {
+ /*
+ Get shadow values for later use
+ */
+ /*
+ Sizing
+ */
+ height: 250px;
+ width: 100%;
+ /*
+ Positioning
+ */
+ top: auto;
+ bottom: 0;
+ left: 0;
+ -webkit-transform: translateY(100%);
+ transform: translateY(100%);
+ box-shadow: inset 0 3px 10px rgba(0, 0, 0, 0.25); }
+ .off-canvas.bottom.is-active ~ .grid-frame {
+ -webkit-transform: translateY(-250px) !important;
+ transform: translateY(-250px) !important; }
+ .off-canvas.left {
+ /*
+ Get shadow values for later use
+ */
+ /*
+ Sizing
+ */
+ width: 250px;
+ height: 100%;
+ /*
+ Positioning
+ */
+ top: 0;
+ left: 0;
+ box-shadow: inset -3px 0 10px rgba(0, 0, 0, 0.25);
+ -webkit-transform: translateX(-100%);
+ transform: translateX(-100%); }
+ .off-canvas.left.is-active ~ .grid-frame {
+ -webkit-transform: translateX(250px) !important;
+ transform: translateX(250px) !important; }
+ .off-canvas.detached {
+ z-index: 0;
+ box-shadow: none; }
+ .off-canvas.detached, .off-canvas.detached.is-active {
+ -webkit-transform: none;
+ transform: none; }
+ .off-canvas.detached ~ .grid-frame {
+ z-index: 1;
+ box-shadow: 0 0 15px rgba(0, 0, 0, 0.5); }
+ .off-canvas.primary {
+ background: #00558b;
+ color: #fff; }
+ .off-canvas.dark {
+ background: #232323;
+ color: #fff; }
+
+/*
+ POPUP
+ -----
+
+ A floating container that can anchor to any other on-screen element, and contain any content, including grid blocks or panels.
+*/
+.popup {
+ position: absolute;
+ z-index: 1000;
+ opacity: 0;
+ overflow: hidden;
+ transition: opacity 0.25s ease-out;
+ pointer-events: none; }
+ .tether-enabled.popup {
+ opacity: 1;
+ pointer-events: auto; }
+
+.popup {
+ width: 18.75rem;
+ background: #fff;
+ border-radius: 0;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.25);
+ border: 0; }
+ .popup.dark {
+ background: #232323;
+ border-radius: 0;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.25);
+ border: 0; }
+ .popup.primary {
+ background: #00558b;
+ border-radius: 0;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.25);
+ border: 0; }
+
+/*
+ SWITCH
+ ------
+*/
+.switch {
+ position: relative;
+ overflow: hidden;
+ display: inline-block; }
+ .switch > input {
+ position: absolute;
+ left: -9999px;
+ outline: none; }
+ .switch > label {
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+ display: block;
+ width: 100%;
+ height: 100%;
+ cursor: pointer;
+ margin: 0; }
+ .switch > label::after {
+ content: '';
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0; }
+
+/*
+ Defines the dimmensions of the switch.
+
+ $width - width of the switch.
+ $height - height of the switch.
+*/
+.switch {
+ width: 3.125rem;
+ height: 2rem;
+ border-radius: 9999px; }
+ .switch > label::after {
+ width: 2rem;
+ height: 2rem; }
+ .switch input:checked + label::after {
+ left: 1.125rem; }
+ .switch > label {
+ background: #ccc; }
+ .switch > label::after {
+ background: white;
+ border-radius: 9999px;
+ transition: left 0.15s ease-out;
+ border: 4px solid #ccc; }
+ .switch input:checked + label {
+ background: #00558b;
+ margin: 0; }
+ .switch input:checked + label::after {
+ border-color: #00558b; }
+ .switch.small {
+ width: 2.5rem;
+ height: 1.625rem; }
+ .switch.small > label::after {
+ width: 1.625rem;
+ height: 1.625rem; }
+ .switch.small input:checked + label::after {
+ left: 0.875rem; }
+ .switch.large {
+ width: 3.75rem;
+ height: 2.375rem; }
+ .switch.large > label::after {
+ width: 2.375rem;
+ height: 2.375rem; }
+ .switch.large input:checked + label::after {
+ left: 1.375rem; }
+
+/*
+ TABS
+ ----
+*/
+.tabs {
+ /*
+ Container styles
+ */
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ background: transparent;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap; }
+ .tabs.vertical {
+ /*
+ Container styles
+ */
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ background: transparent;
+ -webkit-flex-flow: column nowrap;
+ -ms-flex-flow: column nowrap;
+ flex-flow: column nowrap; }
+ .tabs .tab-item {
+ background: #f3f3f3;
+ padding: 1rem;
+ line-height: 1;
+ margin: 0;
+ -webkit-flex: 0 1 auto;
+ -ms-flex: 0 1 auto;
+ flex: 0 1 auto;
+ cursor: pointer;
+ color: #000; }
+ .tabs .tab-item.is-active {
+ background: #ececec;
+ color: #000; }
+ .tabs .tab-item.is-active:hover {
+ background: #e7e7e7; }
+ .tabs .tab-item:hover {
+ background: #e7e7e7; }
+
+.tab-contents {
+ padding: 1rem; }
+ .tab-contents .tab-content {
+ display: none; }
+ .tab-contents .tab-content.is-active {
+ display: block; }
+
+/*
+ ACCORDION
+ ---------
+
+ The trusy accordion allows you to create a series of vertical tabs.
+*/
+.accordion {
+ border: 1px solid #cbcbcb; }
+
+.accordion-title {
+ padding: 1rem;
+ background: #f3f3f3;
+ color: #000;
+ line-height: 1;
+ cursor: pointer; }
+ .accordion-title:hover {
+ background: #e7e7e7; }
+ .is-active > .accordion-title {
+ background: #ececec;
+ color: #000; }
+
+.accordion-content {
+ padding: 1rem;
+ display: none; }
+ .is-active > .accordion-content {
+ display: block; }
+
+/*
+ TYPOGRAPHY
+ ----------
+
+ Includes typographic resets for many common elements, and a few helper classes.
+ - Headers
+ - Subheaders
+ - Lead paragraphs
+ - Ordered/unordered lists
+ - Code samples
+ - Anchors
+ - Dividers
+ - Blockquotes
+ - Acronyms
+*/
+/* Typography resets */
+div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, p, blockquote, th, td {
+ margin: 0;
+ padding: 0; }
+
+/* Default Link Styles */
+a {
+ color: #00558b;
+ text-decoration: none;
+ line-height: inherit; }
+ a[ui-sref] {
+ cursor: pointer; }
+ a:hover, a:focus {
+ color: #004978; }
+ a img {
+ border: none; }
+
+/* Default paragraph styles */
+p {
+ font-family: inherit;
+ font-weight: normal;
+ font-size: 1rem;
+ line-height: 1.6;
+ margin-bottom: 1.25rem;
+ text-rendering: optimizeLegibility; }
+ p.lead {
+ font-size: 1.21875rem;
+ line-height: 1.6; }
+ p aside {
+ font-size: 0.875rem;
+ line-height: 1.35;
+ font-style: italic; }
+
+/* Default header styles */
+h1, h2, h3, h4, h5, h6 {
+ font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
+ font-weight: normal;
+ font-style: normal;
+ color: #222;
+ text-rendering: optimizeLegibility;
+ margin-top: 0.2rem;
+ margin-bottom: 0.5rem;
+ line-height: 1.4; }
+ h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {
+ font-size: 60%;
+ color: #6f6f6f;
+ line-height: 0; }
+
+h1 {
+ font-size: 2.125rem; }
+
+h2 {
+ font-size: 1.6875rem; }
+
+h3 {
+ font-size: 1.375rem; }
+
+h4 {
+ font-size: 1.125rem; }
+
+h5 {
+ font-size: 1.125rem; }
+
+h6 {
+ font-size: 1rem; }
+
+.subheader {
+ line-height: 1.4;
+ color: #6f6f6f;
+ font-weight: normal;
+ margin-top: 0.2rem;
+ margin-bottom: 0.5rem; }
+
+hr {
+ border: solid #ddd;
+ border-width: 1px 0 0;
+ clear: both;
+ margin: 1.25rem 0 1.1875rem;
+ height: 0; }
+
+/* Helpful Typography Defaults */
+em, i {
+ font-style: italic;
+ line-height: inherit; }
+
+strong, b {
+ font-weight: bold;
+ line-height: inherit; }
+
+small {
+ font-size: 60%;
+ color: #6f6f6f;
+ line-height: inherit; }
+
+code {
+ font-family: Consolas, 'Liberation Mono', Courier, monospace;
+ font-weight: normal;
+ color: #464646;
+ background-color: #fbfbfb;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #e2e2e2;
+ padding: 0.125rem 0.3125rem 0.0625rem; }
+
+/* Lists */
+ul, ol, dl {
+ font-size: 1rem;
+ line-height: 1.6;
+ margin-bottom: 1.25rem;
+ list-style-position: outside;
+ font-family: inherit; }
+
+/* Lists */
+ul, ol {
+ margin-left: 1.1rem; }
+ ul li ul, ul li ol, ol li ul, ol li ol {
+ margin-left: 1.25rem;
+ margin-bottom: 0; }
+
+/* Lists without bullets */
+ul.no-bullet {
+ margin-left: 0; }
+ ul.no-bullet, ul.no-bullet li ul, ul.no-bullet li ol {
+ list-style-type: none; }
+
+/* Definition Lists */
+dl dt {
+ margin-bottom: 0.3rem;
+ font-weight: bold; }
+dl dd {
+ margin-bottom: 0.75rem; }
+
+/* Abbreviations */
+abbr, acronym {
+ text-transform: uppercase;
+ font-size: 90%;
+ color: #222;
+ border-bottom: 1px dotted #ddd;
+ cursor: help; }
+
+abbr {
+ text-transform: none; }
+
+/* Blockquotes */
+blockquote {
+ margin: 0 0 1.25rem;
+ padding: 0.5625rem 1.25rem 0 1.1875rem;
+ border-left: 1px solid #ddd; }
+ blockquote cite {
+ display: block;
+ font-size: 0.8125rem;
+ color: #555555; }
+ blockquote cite:before {
+ content: "\2014 \0020"; }
+ blockquote cite a, blockquote cite a:visited {
+ color: #555555; }
+
+blockquote, blockquote p {
+ line-height: 1.6;
+ color: #6f6f6f; }
+
+@media only screen and (min-width: 40em) {
+ h1, h2, h3, h4, h5, h6 {
+ line-height: 1.4; }
+ h1 {
+ font-size: 2.75rem; }
+ h2 {
+ font-size: 2.3125rem; }
+ h3 {
+ font-size: 1.6875rem; }
+ h4 {
+ font-size: 1.4375rem; }
+ h5 {
+ font-size: 1.125rem; }
+ h6 {
+ font-size: 1rem; } }
+
+/*
+ UTILITIES
+ ---------
+
+ Responsive helper classes to assist you in quickly doing basic formatting and layout.
+
+ Features:
+ - Vertical alignment
+ - Visibility
+ - Text alignment
+ - Floating
+*/
+.v-align {
+ 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; }
+ .v-align .align-top {
+ -webkit-align-self: flex-start;
+ -ms-flex-item-align: start;
+ align-self: flex-start; }
+ .v-align .align-center {
+ -webkit-align-self: center;
+ -ms-flex-item-align: center;
+ align-self: center; }
+ .v-align .align-bottom {
+ -webkit-align-self: flex-end;
+ -ms-flex-item-align: end;
+ align-self: flex-end; }
+ .v-align .small-align-top {
+ -webkit-align-self: flex-start;
+ -ms-flex-item-align: start;
+ align-self: flex-start; }
+ .v-align .small-align-center {
+ -webkit-align-self: center;
+ -ms-flex-item-align: center;
+ align-self: center; }
+ .v-align .small-align-bottom {
+ -webkit-align-self: flex-end;
+ -ms-flex-item-align: end;
+ align-self: flex-end; }
+ @media only screen and (min-width: 40em) {
+ .v-align .medium-align-top {
+ -webkit-align-self: flex-start;
+ -ms-flex-item-align: start;
+ align-self: flex-start; } }
+ @media only screen and (min-width: 40em) {
+ .v-align .medium-align-center {
+ -webkit-align-self: center;
+ -ms-flex-item-align: center;
+ align-self: center; } }
+ @media only screen and (min-width: 40em) {
+ .v-align .medium-align-bottom {
+ -webkit-align-self: flex-end;
+ -ms-flex-item-align: end;
+ align-self: flex-end; } }
+ @media only screen and (min-width: 75em) {
+ .v-align .large-align-top {
+ -webkit-align-self: flex-start;
+ -ms-flex-item-align: start;
+ align-self: flex-start; } }
+ @media only screen and (min-width: 75em) {
+ .v-align .large-align-center {
+ -webkit-align-self: center;
+ -ms-flex-item-align: center;
+ align-self: center; } }
+ @media only screen and (min-width: 75em) {
+ .v-align .large-align-bottom {
+ -webkit-align-self: flex-end;
+ -ms-flex-item-align: end;
+ align-self: flex-end; } }
+
+.hide {
+ display: none !important; }
+
+.invisible {
+ visibility: hidden; }
+
+.hide-for-small:not(.ng-hide) {
+ display: block !important;
+ display: none !important; }
+.hide-for-small[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important;
+ display: none !important; }
+
+.show-for-small:not(.ng-hide) {
+ display: none !important;
+ display: block !important; }
+.show-for-small[class*="grid-block"]:not(.ng-hide) {
+ display: none !important;
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+
+.hide-for-small-only:not(.ng-hide) {
+ display: block !important; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .hide-for-small-only:not(.ng-hide) {
+ display: none !important; } }
+.hide-for-small-only[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .hide-for-small-only[class*="grid-block"]:not(.ng-hide) {
+ display: none !important; } }
+
+.show-for-small-only:not(.ng-hide) {
+ display: none !important; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .show-for-small-only:not(.ng-hide) {
+ display: block !important; } }
+.show-for-small-only[class*="grid-block"]:not(.ng-hide) {
+ display: none !important; }
+ @media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .show-for-small-only[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; } }
+
+.hide-for-medium:not(.ng-hide) {
+ display: block !important; }
+ @media only screen and (min-width: 40em) {
+ .hide-for-medium:not(.ng-hide) {
+ display: none !important; } }
+.hide-for-medium[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+ @media only screen and (min-width: 40em) {
+ .hide-for-medium[class*="grid-block"]:not(.ng-hide) {
+ display: none !important; } }
+
+.show-for-medium:not(.ng-hide) {
+ display: none !important; }
+ @media only screen and (min-width: 40em) {
+ .show-for-medium:not(.ng-hide) {
+ display: block !important; } }
+.show-for-medium[class*="grid-block"]:not(.ng-hide) {
+ display: none !important; }
+ @media only screen and (min-width: 40em) {
+ .show-for-medium[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; } }
+
+.hide-for-medium-only:not(.ng-hide) {
+ display: block !important; }
+ @media only screen and (min-width: 40em) and (max-width: 74.9375rem) {
+ .hide-for-medium-only:not(.ng-hide) {
+ display: none !important; } }
+.hide-for-medium-only[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+ @media only screen and (min-width: 40em) and (max-width: 74.9375rem) {
+ .hide-for-medium-only[class*="grid-block"]:not(.ng-hide) {
+ display: none !important; } }
+
+.show-for-medium-only:not(.ng-hide) {
+ display: none !important; }
+ @media only screen and (min-width: 40em) and (max-width: 74.9375rem) {
+ .show-for-medium-only:not(.ng-hide) {
+ display: block !important; } }
+.show-for-medium-only[class*="grid-block"]:not(.ng-hide) {
+ display: none !important; }
+ @media only screen and (min-width: 40em) and (max-width: 74.9375rem) {
+ .show-for-medium-only[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; } }
+
+.hide-for-large:not(.ng-hide) {
+ display: block !important; }
+ @media only screen and (min-width: 75em) {
+ .hide-for-large:not(.ng-hide) {
+ display: none !important; } }
+.hide-for-large[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+ @media only screen and (min-width: 75em) {
+ .hide-for-large[class*="grid-block"]:not(.ng-hide) {
+ display: none !important; } }
+
+.show-for-large:not(.ng-hide) {
+ display: none !important; }
+ @media only screen and (min-width: 75em) {
+ .show-for-large:not(.ng-hide) {
+ display: block !important; } }
+.show-for-large[class*="grid-block"]:not(.ng-hide) {
+ display: none !important; }
+ @media only screen and (min-width: 75em) {
+ .show-for-large[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; } }
+
+.hide-for-large-only:not(.ng-hide) {
+ display: block !important; }
+ @media only screen and (min-width: 75em) and (max-width: 89.9375rem) {
+ .hide-for-large-only:not(.ng-hide) {
+ display: none !important; } }
+.hide-for-large-only[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; }
+ @media only screen and (min-width: 75em) and (max-width: 89.9375rem) {
+ .hide-for-large-only[class*="grid-block"]:not(.ng-hide) {
+ display: none !important; } }
+
+.show-for-large-only:not(.ng-hide) {
+ display: none !important; }
+ @media only screen and (min-width: 75em) and (max-width: 89.9375rem) {
+ .show-for-large-only:not(.ng-hide) {
+ display: block !important; } }
+.show-for-large-only[class*="grid-block"]:not(.ng-hide) {
+ display: none !important; }
+ @media only screen and (min-width: 75em) and (max-width: 89.9375rem) {
+ .show-for-large-only[class*="grid-block"]:not(.ng-hide) {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; } }
+
+@media only screen and (orientation: portrait) {
+ .hide-for-portrait {
+ display: none !important; }
+ .hide-for-portrait[class*="grid-block"] {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; } }
+
+.show-for-portrait {
+ display: none !important; }
+ @media only screen and (orientation: portrait) {
+ .show-for-portrait {
+ display: block !important; }
+ .show-for-portrait[class*="grid-block"] {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; } }
+
+@media only screen and (orientation: landscape) {
+ .hide-for-landscape {
+ display: none !important; }
+ .hide-for-landscape[class*="grid-block"] {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; } }
+
+.show-for-landscape {
+ display: none !important; }
+ @media only screen and (orientation: landscape) {
+ .show-for-landscape {
+ display: block !important; }
+ .show-for-landscape[class*="grid-block"] {
+ display: -webkit-flex !important;
+ display: -ms-flexbox !important;
+ display: flex !important; } }
+
+/*
+ Text alignment
+ */
+.text-left {
+ text-align: left; }
+
+.small-text-left {
+ text-align: left; }
+
+@media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .small-only-text-left {
+ text-align: left; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-text-left {
+ text-align: left; } }
+
+@media only screen and (min-width: 40em) and (max-width: 74.9375rem) {
+ .medium-only-text-left {
+ text-align: left; } }
+
+@media only screen and (min-width: 75em) {
+ .large-text-left {
+ text-align: left; } }
+
+@media only screen and (min-width: 75em) and (max-width: 89.9375rem) {
+ .large-only-text-left {
+ text-align: left; } }
+
+.text-right {
+ text-align: right; }
+
+.small-text-right {
+ text-align: right; }
+
+@media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .small-only-text-right {
+ text-align: right; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-text-right {
+ text-align: right; } }
+
+@media only screen and (min-width: 40em) and (max-width: 74.9375rem) {
+ .medium-only-text-right {
+ text-align: right; } }
+
+@media only screen and (min-width: 75em) {
+ .large-text-right {
+ text-align: right; } }
+
+@media only screen and (min-width: 75em) and (max-width: 89.9375rem) {
+ .large-only-text-right {
+ text-align: right; } }
+
+.text-center {
+ text-align: center; }
+
+.small-text-center {
+ text-align: center; }
+
+@media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .small-only-text-center {
+ text-align: center; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-text-center {
+ text-align: center; } }
+
+@media only screen and (min-width: 40em) and (max-width: 74.9375rem) {
+ .medium-only-text-center {
+ text-align: center; } }
+
+@media only screen and (min-width: 75em) {
+ .large-text-center {
+ text-align: center; } }
+
+@media only screen and (min-width: 75em) and (max-width: 89.9375rem) {
+ .large-only-text-center {
+ text-align: center; } }
+
+.text-justify {
+ text-align: justify; }
+
+.small-text-justify {
+ text-align: justify; }
+
+@media only screen and (min-width: 0em) and (max-width: 39.9375rem) {
+ .small-only-text-justify {
+ text-align: justify; } }
+
+@media only screen and (min-width: 40em) {
+ .medium-text-justify {
+ text-align: justify; } }
+
+@media only screen and (min-width: 40em) and (max-width: 74.9375rem) {
+ .medium-only-text-justify {
+ text-align: justify; } }
+
+@media only screen and (min-width: 75em) {
+ .large-text-justify {
+ text-align: justify; } }
+
+@media only screen and (min-width: 75em) and (max-width: 89.9375rem) {
+ .large-only-text-justify {
+ text-align: justify; } }
+
+/*
+ Floating
+ */
+.clearfix:before, .clearfix:after {
+ content: " ";
+ display: table; }
+.clearfix:after {
+ clear: both; }
+
+.float-left {
+ float: left; }
+
+.float-right {
+ float: right; }
+
+.float-none {
+ float: none; }
diff --git a/afb-client/bower_components/foundation-apps/dist/css/foundation-apps.min.css b/afb-client/bower_components/foundation-apps/dist/css/foundation-apps.min.css
new file mode 100755
index 0000000..2f93f18
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/dist/css/foundation-apps.min.css
@@ -0,0 +1 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box}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-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}meta.foundation-version{font-family:"1.1.0"}meta.foundation-mq{font-family:"small=0&medium=40rem&large=75rem&xlarge=90rem&xxlarge=120rem"}body,html{height:100%;font-size:100%}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}body{background:#fff;color:#222;padding:0;margin:0;font-family:"Helvetica Neue",Helvetica,Helvetica,Arial,sans-serif;font-weight:400;font-style:normal;line-height:1;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{max-width:100%;height:auto;-ms-interpolation-mode:bicubic;display:inline-block;vertical-align:middle}[ui-sref],[zf-close],[zf-open],[zf-toggle],a{cursor:pointer}#map_canvas embed,#map_canvas img,#map_canvas object,.map_canvas embed,.map_canvas img,.map_canvas object{max-width:none!important}.padding{padding:1rem}.iconic{width:1rem;height:1rem;vertical-align:middle}a>.iconic{margin-top:-2px;margin-right:.25rem}.iconic *,.iconic .iconic-property-accent,.iconic-color-primary *,.iconic-color-primary .iconic-property-accent,a>.iconic *,a>.iconic .iconic-property-accent{fill:#00558b;stroke:#00558b}.iconic-color-success *,.iconic-color-success .iconic-property-accent{fill:#43AC6A;stroke:#43AC6A}.iconic-color-warning *,.iconic-color-warning .iconic-property-accent{fill:#F08A24;stroke:#F08A24}.iconic-color-alert *,.iconic-color-alert .iconic-property-accent{fill:#F04124;stroke:#F04124}.iconic-color-dark *,.iconic-color-dark .iconic-property-accent{fill:#232323;stroke:#232323}.iconic-color-secondary *,.iconic-color-secondary .iconic-property-accent{fill:#f1f1f1;stroke:#f1f1f1}.action-sheet-container{position:relative;display:inline-block}.action-sheet-container .button{margin-left:0;margin-right:0}.action-sheet{position:fixed;left:0;z-index:1000;width:100%;padding:1rem;background:#fff;text-align:center;transition-property:-webkit-transform opacity;transition-property:transform opacity;transition-duration:.25s;transition-timing-function:ease-out;box-shadow:0 -3px 10px rgba(0,0,0,.25);bottom:0;-webkit-transform:translateY(100%);transform:translateY(100%)}.action-sheet.is-active{-webkit-transform:translateY(0);transform:translateY(0)}.action-sheet ul{margin:0 -1rem -1rem;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.action-sheet ul:first-child{margin-top:-1rem}.action-sheet ul:first-child li:first-child{border-top:0}.action-sheet ul a{display:block;padding:.8rem;line-height:1;color:#000;border-top:1px solid #ccc}.action-sheet ul a:hover{color:#000;background:#f2f2f2}.action-sheet ul .alert>a{color:#F04124}.action-sheet ul .disabled>a{pointer-events:none;color:#999}@media only screen and (min-width:40em){.action-sheet{position:absolute;left:50%;width:300px;border-radius:4px;opacity:0;pointer-events:none;box-shadow:0 0 10px rgba(0,0,0,.25);top:auto;bottom:0;-webkit-transform:translateX(-50%) translateY(110%);transform:translateX(-50%) translateY(110%)}.action-sheet.is-active{opacity:1;pointer-events:auto}.action-sheet::after,.action-sheet::before{content:'';position:absolute;left:50%;display:block;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;margin-left:-10px}.action-sheet.is-active{-webkit-transform:translateX(-50%) translateY(100%);transform:translateX(-50%) translateY(100%)}.action-sheet::after,.action-sheet::before{top:-10px;bottom:auto;border-top:0;border-bottom:10px solid #fff}.action-sheet::before{top:-12px;border-bottom-color:rgba(0,0,0,.15)}.action-sheet.top{position:absolute;left:50%;width:300px;border-radius:4px;opacity:0;pointer-events:none;box-shadow:0 0 10px rgba(0,0,0,.25);top:0;bottom:auto;-webkit-transform:translateX(-50%) translateY(-120%);transform:translateX(-50%) translateY(-120%)}.action-sheet.top.is-active{opacity:1;pointer-events:auto}.action-sheet.top::after,.action-sheet.top::before{content:'';position:absolute;left:50%;display:block;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;margin-left:-10px}.action-sheet.top.is-active{-webkit-transform:translateX(-50%) translateY(-110%);transform:translateX(-50%) translateY(-110%)}.action-sheet.top::after,.action-sheet.top::before{top:auto;bottom:-10px;border-top:10px solid #fff;border-bottom:0}.action-sheet.top::before{bottom:-12px;border-top-color:rgba(0,0,0,.15)}}.action-sheet.primary{background:#00558b;color:#fff;border:0}.action-sheet.primary::before{display:none}.action-sheet.primary::after,.action-sheet.primary::before{border-top-color:#00558b}.action-sheet.primary.top::after,.action-sheet.primary.top::before{border-bottom-color:#00558b}.action-sheet.primary ul{margin:0 -1rem -1rem;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.action-sheet.primary ul:first-child{margin-top:-1rem}.action-sheet.primary ul:first-child li:first-child{border-top:0}.action-sheet.primary ul a{display:block;padding:.8rem;line-height:1;color:#fff;border-top:1px solid #006cb0}.action-sheet.primary ul a:hover{color:#fff;background:#00609e}.action-sheet.primary ul .alert>a{color:#F04124}.action-sheet.primary ul .disabled>a{pointer-events:none;color:#999}.action-sheet.dark{background:#232323;color:#fff;border:0}.action-sheet.dark::before{display:none}.action-sheet.dark::after,.action-sheet.dark::before{border-top-color:#232323}.action-sheet.dark.top::after,.action-sheet.dark.top::before{border-bottom-color:#232323}.action-sheet.dark ul{margin:0 -1rem -1rem;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.action-sheet.dark ul:first-child{margin-top:-1rem}.action-sheet.dark ul:first-child li:first-child{border-top:0}.action-sheet.dark ul a{display:block;padding:.8rem;line-height:1;color:#fff;border-top:1px solid #393939}.action-sheet.dark ul a:hover{color:#fff;background:#2e2e2e}.action-sheet.dark ul .alert>a{color:#F04124}.action-sheet.dark ul .disabled>a{pointer-events:none;color:#999}.block-list{margin-bottom:1rem;line-height:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.block-list,.block-list ul{list-style-type:none}.block-list ul{margin-left:0}.block-list{font-size:1rem;margin-left:-1rem;margin-right:-1rem}.block-list input[type=text],.block-list input[type=password],.block-list input[type=date],.block-list input[type=datetime],.block-list input[type=datetime-local],.block-list input[type=month],.block-list input[type=week],.block-list input[type=email],.block-list input[type=tel],.block-list input[type=time],.block-list input[type=url],.block-list input[type=color],.block-list input[type=number],.block-list input[type=search],.block-list textarea{margin:0;border:0;line-height:1;height:auto;padding:.8rem 1rem;color:inherit}.block-list input[type=text]:focus,.block-list input[type=text]:hover,.block-list input[type=password]:focus,.block-list input[type=password]:hover,.block-list input[type=date]:focus,.block-list input[type=date]:hover,.block-list input[type=datetime]:focus,.block-list input[type=datetime]:hover,.block-list input[type=datetime-local]:focus,.block-list input[type=datetime-local]:hover,.block-list input[type=month]:focus,.block-list input[type=month]:hover,.block-list input[type=week]:focus,.block-list input[type=week]:hover,.block-list input[type=email]:focus,.block-list input[type=email]:hover,.block-list input[type=tel]:focus,.block-list input[type=tel]:hover,.block-list input[type=time]:focus,.block-list input[type=time]:hover,.block-list input[type=url]:focus,.block-list input[type=url]:hover,.block-list input[type=color]:focus,.block-list input[type=color]:hover,.block-list input[type=number]:focus,.block-list input[type=number]:hover,.block-list input[type=search]:focus,.block-list input[type=search]:hover,.block-list textarea:focus,.block-list textarea:hover{border:0}.block-list li>input[type=checkbox],.block-list li>input[type=radio]{position:absolute;left:-9999px}.block-list li>input[type=checkbox]+label,.block-list li>input[type=radio]+label{display:block;font-size:1rem;margin:0}.block-list li>input[type=checkbox]:checked+label::before,.block-list li>input[type=radio]:checked+label::before{background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="32" height="32" viewBox="0 0 32 32"><path fill="black" d="M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zm6.906 8.875l2.219 2.031-12.063 13.281-6.188-6.188 2.125-2.125 3.938 3.938 9.969-10.938z"/></svg>');content:'';background-size:100% 100%;width:1.5em;height:1.5em;color:#00558b;float:right;pointer-events:none;margin-top:-.25em}@media screen and (min-width:0\0){.block-list li>input[type=checkbox]:checked+label::before,.block-list li>input[type=radio]:checked+label::before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdlJREFUeNrMl0FugzAQRY3TRZeoFyhVL0BOkGTXJezaHZwguUnECaCrdFd6gqQnCN11Uyk5QekNOlONJWMVGMCgfGlkEIY3HnsG2xFM3d96PjQB2AJsWdPtAPYOln+dTwXnuw4DHEGzBvNFN6EDCTiS9XIAwB40acNoucKoxODIie0AwAOCu8KOSnIiNx/MakK+A7sW9oTferxx3fP3T1nURoBG/irGVahHwjHm/Ggx7E3TMVdrQmoP0gngghhpZQ3QvG/EdPLUelARWI8Aycjq9Md0qMIdbcNhjmOKLoY7quk3l1Rebeqg4AwFkmq7LWGOh1pmNY0etZAWSq0OX8HoS4JvWuCopbSY26EGR/CW86K0BF+pwkLwlPuyHJhOCl5oe4ZtF++vOqST+GdOYwO+71pN2VNAjmQGPCe42weuHDg0PI8olUwnYrXTGQJH9gxq8l1LKvrQx4O6/YY32Kp/ugb3ey7gZ4xAzuhYiYTxB/UHZFAuaREVXZ2g6yFlvEC2yoKEmbsRZYNgVLk2JeaOaG+xLHN+WCszDWMqLGOrJFa1DlApjSdwoHJGqGzLIb0+cas0wh5Bh780ngswx8GJD7h8sHg2wLA/mfDLPZpdxOF0quP5rwADAAFIzSRvu1m5AAAAAElFTkSuQmCC)}}.block-list .with-dropdown{color:inherit}.block-list .with-dropdown select{-webkit-appearance:none;-moz-appearance:none;outline:0;background:0;border:0;height:auto;padding:.8rem 1rem;margin:0;font-size:1em;line-height:1;color:inherit}.block-list .switch{position:absolute;top:50%;right:1rem;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.block-list.with-icons li>a,.block-list.with-icons li>label,.block-list.with-icons li>span{padding-left:2.8rem}.block-list.with-icons li .iconic,.block-list.with-icons li img{position:absolute;top:.26rem;left:.26rem;width:2.08rem;height:2.08rem;border-radius:8px;pointer-events:none}.block-list header{margin-top:1em;color:#666;font-weight:700;margin-bottom:.5em;margin-left:1rem;font-size:.8em;cursor:default;text-transform:uppercase}.block-list li{position:relative;border-bottom:1px solid #d0d0d0}.block-list li:first-child{border-top:1px solid #d0d0d0}.block-list li>a,.block-list li>label,.block-list li>span{display:block;padding:.8rem 1rem;color:#000;line-height:1}.block-list li>span{cursor:default}.block-list li>a,.block-list li>label{cursor:pointer}.block-list li>a:hover,.block-list li>label:hover{color:#000}.block-list li select:hover,.block-list li>a:hover,.block-list li>label:hover{background:#f4f4f4}.block-list li.caution>a,.block-list li.caution>a:hover{color:#F04124}.block-list li.disabled>a{cursor:default}.block-list li.disabled>a,.block-list li.disabled>a:hover{color:#999}.block-list li.disabled>a:hover{background:0 0}.block-list li.with-chevron::after{content:'\203A';display:block;position:absolute;right:1rem;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-weight:700;color:#666;font-size:2em}.block-list li.with-chevron .block-list-label{padding-right:1.5rem}.block-list li .block-list-label{display:inline-block;float:right;padding:0;color:#999;pointer-events:none}.block-list li .block-list-label.left{margin-left:.8rem;float:none}.button,.button-group>li>a,.button-group>li>button,.button-group>li>label{display:inline-block;border:0;text-align:center;line-height:1;cursor:pointer;-webkit-appearance:none;-webkit-font-smoothing:antialiased;transition:background .25s ease-out;vertical-align:middle;padding:.85em 1em;margin:0 1rem 1rem 0;font-size:.9rem;border-radius:0}.button{font-size:.9rem;display:inline-block;width:auto;margin:0 1rem 1rem 0;background:#00558b;color:#fff}.button .iconic{width:1em;height:1em;vertical-align:middle;margin-right:.25em;margin-top:-2px}.button:focus,.button:hover{background:#004876;color:#fff}.button .iconic *,.button .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button.tiny{font-size:.63rem}.button.tiny .iconic{width:1em;height:1em;vertical-align:middle;margin-right:.25em;margin-top:-2px}.button.small{font-size:.72rem}.button.small .iconic{width:1em;height:1em;vertical-align:middle;margin-right:.25em;margin-top:-2px}.button.large{font-size:1.17rem}.button.large .iconic{width:1em;height:1em;vertical-align:middle;margin-right:.25em;margin-top:-2px}.button.expand{display:block;width:100%;margin-left:0;margin-right:0}.button.secondary{background:#f1f1f1;color:#000}.button.secondary:focus,.button.secondary:hover{background:#cdcdcd;color:#000}.button.secondary .iconic *,.button.secondary .iconic .iconic-property-accent{fill:#000;stroke:#000}.button.success{background:#43AC6A;color:#fff}.button.success:focus,.button.success:hover{background:#39925a;color:#fff}.button.success .iconic *,.button.success .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button.warning{background:#F08A24;color:#fff}.button.warning:focus,.button.warning:hover{background:#dc750f;color:#fff}.button.warning .iconic *,.button.warning .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button.alert{background:#F04124;color:#fff}.button.alert:focus,.button.alert:hover{background:#dc2c0f;color:#fff}.button.alert .iconic *,.button.alert .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button.info{background:#A0D3E8;color:#000}.button.info:focus,.button.info:hover{background:#71bddd;color:#000}.button.info .iconic *,.button.info .iconic .iconic-property-accent{fill:#000;stroke:#000}.button.dark{background:#232323;color:#fff}.button.dark:focus,.button.dark:hover{background:#1e1e1e;color:#fff}.button.dark .iconic *,.button.dark .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button.hollow{border:1px solid #00558b;background:0 0;color:#00558b}.button.hollow:focus,.button.hollow:hover{border-color:#008ee8;background:0 0;color:#008ee8}.button.hollow .iconic *,.button.hollow .iconic .iconic-property-accent{fill:#00558b;stroke:#00558b}.button.hollow:hover .iconic *,.button.hollow:hover .iconic .iconic-property-accent{fill:#008ee8;stroke:#008ee8}.button.hollow.secondary{border:1px solid #f1f1f1;background:0 0;color:#f1f1f1}.button.hollow.secondary:focus,.button.hollow.secondary:hover{border-color:#f4f4f4;background:0 0;color:#f4f4f4}.button.hollow.secondary .iconic *,.button.hollow.secondary .iconic .iconic-property-accent{fill:#f1f1f1;stroke:#f1f1f1}.button.hollow.secondary:hover .iconic *,.button.hollow.secondary:hover .iconic .iconic-property-accent{fill:#f4f4f4;stroke:#f4f4f4}.button.hollow.success{border:1px solid #43AC6A;background:0 0;color:#43AC6A}.button.hollow.success:focus,.button.hollow.success:hover{border-color:#6dc68e;background:0 0;color:#6dc68e}.button.hollow.success .iconic *,.button.hollow.success .iconic .iconic-property-accent{fill:#43AC6A;stroke:#43AC6A}.button.hollow.success:hover .iconic *,.button.hollow.success:hover .iconic .iconic-property-accent{fill:#6dc68e;stroke:#6dc68e}.button.hollow.warning{border:1px solid #F08A24;background:0 0;color:#F08A24}.button.hollow.warning:focus,.button.hollow.warning:hover{border-color:#f4a75b;background:0 0;color:#f4a75b}.button.hollow.warning .iconic *,.button.hollow.warning .iconic .iconic-property-accent{fill:#F08A24;stroke:#F08A24}.button.hollow.warning:hover .iconic *,.button.hollow.warning:hover .iconic .iconic-property-accent{fill:#f4a75b;stroke:#f4a75b}.button.hollow.alert{border:1px solid #F04124;background:0 0;color:#F04124}.button.hollow.alert:focus,.button.hollow.alert:hover{border-color:#f4715b;background:0 0;color:#f4715b}.button.hollow.alert .iconic *,.button.hollow.alert .iconic .iconic-property-accent{fill:#F04124;stroke:#F04124}.button.hollow.alert:hover .iconic *,.button.hollow.alert:hover .iconic .iconic-property-accent{fill:#f4715b;stroke:#f4715b}.button.hollow.info{border:1px solid #A0D3E8;background:0 0;color:#A0D3E8}.button.hollow.info:focus,.button.hollow.info:hover{border-color:#b8deee;background:0 0;color:#b8deee}.button.hollow.info .iconic *,.button.hollow.info .iconic .iconic-property-accent{fill:#A0D3E8;stroke:#A0D3E8}.button.hollow.info:hover .iconic *,.button.hollow.info:hover .iconic .iconic-property-accent{fill:#b8deee;stroke:#b8deee}.button.hollow.dark{border:1px solid #232323;background:0 0;color:#232323}.button.hollow.dark:focus,.button.hollow.dark:hover{border-color:#5a5a5a;background:0 0;color:#5a5a5a}.button.hollow.dark .iconic *,.button.hollow.dark .iconic .iconic-property-accent{fill:#232323;stroke:#232323}.button.hollow.dark:hover .iconic *,.button.hollow.dark:hover .iconic .iconic-property-accent{fill:#5a5a5a;stroke:#5a5a5a}.button.disabled{opacity:.5;cursor:default;pointer-events:none}.button-group{margin:0 0 1rem;list-style-type:none;overflow:hidden;font-size:.9rem}.button-group>li>a,.button-group>li>button,.button-group>li>label{border-radius:0;font-size:inherit;display:block;margin:0}.button-group>li>input+label{margin-left:0}.button-group>li:not(:last-child)>a,.button-group>li:not(:last-child)>button,.button-group>li:not(:last-child)>label{border-right:1px solid #004068}.button-group .iconic{width:1em;height:1em;vertical-align:middle;margin-right:.25em;margin-top:-2px}.button-group.segmented,.button-group.segmented.alert,.button-group.segmented.secondary,.button-group.segmented.success,.button-group.segmented.warning{border:1px solid #00558b;transition-property:background color}.button-group.segmented>li>input[type=radio]{position:absolute;left:-9999px}.button-group.segmented.alert>li>a,.button-group.segmented.alert>li>button,.button-group.segmented.alert>li>label,.button-group.segmented.secondary>li>a,.button-group.segmented.secondary>li>button,.button-group.segmented.secondary>li>label,.button-group.segmented.success>li>a,.button-group.segmented.success>li>button,.button-group.segmented.success>li>label,.button-group.segmented.warning>li>a,.button-group.segmented.warning>li>button,.button-group.segmented.warning>li>label,.button-group.segmented>li>a,.button-group.segmented>li>button,.button-group.segmented>li>label{margin-right:0;background:0 0}.button-group{display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;border-radius:0}.button-group>li{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.button-group>li>a,.button-group>li>button,.button-group>li>label{background:#00558b;color:#fff;border-color:#004876}.button-group>li>a:focus,.button-group>li>a:hover,.button-group>li>button:focus,.button-group>li>button:hover,.button-group>li>label:focus,.button-group>li>label:hover{background:#004876;color:#fff}.button-group>li>a .iconic *,.button-group>li>a .iconic .iconic-property-accent,.button-group>li>button .iconic *,.button-group>li>button .iconic .iconic-property-accent,.button-group>li>label .iconic *,.button-group>li>label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group>li.is-active>a,.button-group>li.is-active>button,.button-group>li.is-active>label{background:#004876}.button-group.secondary>li>a,.button-group.secondary>li>button,.button-group.secondary>li>label{background:#f1f1f1;color:#000;border-color:#cdcdcd}.button-group.secondary>li>a:focus,.button-group.secondary>li>a:hover,.button-group.secondary>li>button:focus,.button-group.secondary>li>button:hover,.button-group.secondary>li>label:focus,.button-group.secondary>li>label:hover{background:#cdcdcd;color:#000}.button-group.secondary>li>a .iconic *,.button-group.secondary>li>a .iconic .iconic-property-accent,.button-group.secondary>li>button .iconic *,.button-group.secondary>li>button .iconic .iconic-property-accent,.button-group.secondary>li>label .iconic *,.button-group.secondary>li>label .iconic .iconic-property-accent{fill:#000;stroke:#000}.button-group.secondary>li.is-active>a,.button-group.secondary>li.is-active>button,.button-group.secondary>li.is-active>label{background:#cdcdcd}.button-group.success>li>a,.button-group.success>li>button,.button-group.success>li>label{background:#43AC6A;color:#fff;border-color:#39925a}.button-group.success>li>a:focus,.button-group.success>li>a:hover,.button-group.success>li>button:focus,.button-group.success>li>button:hover,.button-group.success>li>label:focus,.button-group.success>li>label:hover{background:#39925a;color:#fff}.button-group.success>li>a .iconic *,.button-group.success>li>a .iconic .iconic-property-accent,.button-group.success>li>button .iconic *,.button-group.success>li>button .iconic .iconic-property-accent,.button-group.success>li>label .iconic *,.button-group.success>li>label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group.success>li.is-active>a,.button-group.success>li.is-active>button,.button-group.success>li.is-active>label{background:#39925a}.button-group.warning>li>a,.button-group.warning>li>button,.button-group.warning>li>label{background:#F08A24;color:#fff;border-color:#dc750f}.button-group.warning>li>a:focus,.button-group.warning>li>a:hover,.button-group.warning>li>button:focus,.button-group.warning>li>button:hover,.button-group.warning>li>label:focus,.button-group.warning>li>label:hover{background:#dc750f;color:#fff}.button-group.warning>li>a .iconic *,.button-group.warning>li>a .iconic .iconic-property-accent,.button-group.warning>li>button .iconic *,.button-group.warning>li>button .iconic .iconic-property-accent,.button-group.warning>li>label .iconic *,.button-group.warning>li>label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group.warning>li.is-active>a,.button-group.warning>li.is-active>button,.button-group.warning>li.is-active>label{background:#dc750f}.button-group.alert>li>a,.button-group.alert>li>button,.button-group.alert>li>label{background:#F04124;color:#fff;border-color:#dc2c0f}.button-group.alert>li>a:focus,.button-group.alert>li>a:hover,.button-group.alert>li>button:focus,.button-group.alert>li>button:hover,.button-group.alert>li>label:focus,.button-group.alert>li>label:hover{background:#dc2c0f;color:#fff}.button-group.alert>li>a .iconic *,.button-group.alert>li>a .iconic .iconic-property-accent,.button-group.alert>li>button .iconic *,.button-group.alert>li>button .iconic .iconic-property-accent,.button-group.alert>li>label .iconic *,.button-group.alert>li>label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group.alert>li.is-active>a,.button-group.alert>li.is-active>button,.button-group.alert>li.is-active>label{background:#dc2c0f}.button-group>li.secondary>a,.button-group>li.secondary>button,.button-group>li.secondary>label{background:#f1f1f1;color:#000;border-color:#f1f1f1}.button-group>li.secondary>a:focus,.button-group>li.secondary>a:hover,.button-group>li.secondary>button:focus,.button-group>li.secondary>button:hover,.button-group>li.secondary>label:focus,.button-group>li.secondary>label:hover{background:#cdcdcd;color:#000;border-color:#b5b5b5}.button-group>li.secondary>a .iconic *,.button-group>li.secondary>a .iconic .iconic-property-accent,.button-group>li.secondary>button .iconic *,.button-group>li.secondary>button .iconic .iconic-property-accent,.button-group>li.secondary>label .iconic *,.button-group>li.secondary>label .iconic .iconic-property-accent{fill:#000;stroke:#000}.button-group>li.success>a,.button-group>li.success>button,.button-group>li.success>label{background:#43AC6A;color:#fff;border-color:#43AC6A}.button-group>li.success>a:focus,.button-group>li.success>a:hover,.button-group>li.success>button:focus,.button-group>li.success>button:hover,.button-group>li.success>label:focus,.button-group>li.success>label:hover{background:#39925a;color:#fff;border-color:#32814f}.button-group>li.success>a .iconic *,.button-group>li.success>a .iconic .iconic-property-accent,.button-group>li.success>button .iconic *,.button-group>li.success>button .iconic .iconic-property-accent,.button-group>li.success>label .iconic *,.button-group>li.success>label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group>li.warning>a,.button-group>li.warning>button,.button-group>li.warning>label{background:#F08A24;color:#fff;border-color:#F08A24}.button-group>li.warning>a:focus,.button-group>li.warning>a:hover,.button-group>li.warning>button:focus,.button-group>li.warning>button:hover,.button-group>li.warning>label:focus,.button-group>li.warning>label:hover{background:#dc750f;color:#fff;border-color:#c2670d}.button-group>li.warning>a .iconic *,.button-group>li.warning>a .iconic .iconic-property-accent,.button-group>li.warning>button .iconic *,.button-group>li.warning>button .iconic .iconic-property-accent,.button-group>li.warning>label .iconic *,.button-group>li.warning>label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group>li.alert>a,.button-group>li.alert>button,.button-group>li.alert>label{background:#F04124;color:#fff;border-color:#F04124}.button-group>li.alert>a:focus,.button-group>li.alert>a:hover,.button-group>li.alert>button:focus,.button-group>li.alert>button:hover,.button-group>li.alert>label:focus,.button-group>li.alert>label:hover{background:#dc2c0f;color:#fff;border-color:#c2270d}.button-group>li.alert>a .iconic *,.button-group>li.alert>a .iconic .iconic-property-accent,.button-group>li.alert>button .iconic *,.button-group>li.alert>button .iconic .iconic-property-accent,.button-group>li.alert>label .iconic *,.button-group>li.alert>label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group.segmented{border-color:#00558b}.button-group.segmented>li>a,.button-group.segmented>li>button,.button-group.segmented>li>label{border-color:#00558b;color:#00558b}.button-group.segmented>li>a:hover,.button-group.segmented>li>button:hover,.button-group.segmented>li>label:hover{background:rgba(0,85,139,.25);color:#00558b}.button-group.segmented>li>a .iconic *,.button-group.segmented>li>a .iconic .iconic-property-accent,.button-group.segmented>li>button .iconic *,.button-group.segmented>li>button .iconic .iconic-property-accent,.button-group.segmented>li>label .iconic *,.button-group.segmented>li>label .iconic .iconic-property-accent{fill:#00558b;stroke:#00558b}.button-group.segmented>li.is-active>a,.button-group.segmented>li.is-active>a:hover,.button-group.segmented>li>input:checked+label,.button-group.segmented>li>input:checked+label:hover{background:#00558b;color:#fff}.button-group.segmented>li.is-active>a .iconic *,.button-group.segmented>li.is-active>a .iconic .iconic-property-accent,.button-group.segmented>li>input:checked+label .iconic *,.button-group.segmented>li>input:checked+label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group.segmented.secondary{border-color:#f1f1f1}.button-group.segmented.secondary>li>a,.button-group.segmented.secondary>li>button,.button-group.segmented.secondary>li>label{border-color:#f1f1f1;color:#f1f1f1}.button-group.segmented.secondary>li>a:hover,.button-group.segmented.secondary>li>button:hover,.button-group.segmented.secondary>li>label:hover{background:rgba(241,241,241,.25);color:#f1f1f1}.button-group.segmented.secondary>li>a .iconic *,.button-group.segmented.secondary>li>a .iconic .iconic-property-accent,.button-group.segmented.secondary>li>button .iconic *,.button-group.segmented.secondary>li>button .iconic .iconic-property-accent,.button-group.segmented.secondary>li>label .iconic *,.button-group.segmented.secondary>li>label .iconic .iconic-property-accent{fill:#f1f1f1;stroke:#f1f1f1}.button-group.segmented.secondary>li.is-active>a,.button-group.segmented.secondary>li.is-active>a:hover,.button-group.segmented.secondary>li>input:checked+label,.button-group.segmented.secondary>li>input:checked+label:hover{background:#f1f1f1;color:#000}.button-group.segmented.secondary>li.is-active>a .iconic *,.button-group.segmented.secondary>li.is-active>a .iconic .iconic-property-accent,.button-group.segmented.secondary>li>input:checked+label .iconic *,.button-group.segmented.secondary>li>input:checked+label .iconic .iconic-property-accent{fill:#000;stroke:#000}.button-group.segmented.success{border-color:#43AC6A}.button-group.segmented.success>li>a,.button-group.segmented.success>li>button,.button-group.segmented.success>li>label{border-color:#43AC6A;color:#43AC6A}.button-group.segmented.success>li>a:hover,.button-group.segmented.success>li>button:hover,.button-group.segmented.success>li>label:hover{background:rgba(67,172,106,.25);color:#43AC6A}.button-group.segmented.success>li>a .iconic *,.button-group.segmented.success>li>a .iconic .iconic-property-accent,.button-group.segmented.success>li>button .iconic *,.button-group.segmented.success>li>button .iconic .iconic-property-accent,.button-group.segmented.success>li>label .iconic *,.button-group.segmented.success>li>label .iconic .iconic-property-accent{fill:#43AC6A;stroke:#43AC6A}.button-group.segmented.success>li.is-active>a,.button-group.segmented.success>li.is-active>a:hover,.button-group.segmented.success>li>input:checked+label,.button-group.segmented.success>li>input:checked+label:hover{background:#43AC6A;color:#fff}.button-group.segmented.success>li.is-active>a .iconic *,.button-group.segmented.success>li.is-active>a .iconic .iconic-property-accent,.button-group.segmented.success>li>input:checked+label .iconic *,.button-group.segmented.success>li>input:checked+label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group.segmented.warning{border-color:#F08A24}.button-group.segmented.warning>li>a,.button-group.segmented.warning>li>button,.button-group.segmented.warning>li>label{border-color:#F08A24;color:#F08A24}.button-group.segmented.warning>li>a:hover,.button-group.segmented.warning>li>button:hover,.button-group.segmented.warning>li>label:hover{background:rgba(240,138,36,.25);color:#F08A24}.button-group.segmented.warning>li>a .iconic *,.button-group.segmented.warning>li>a .iconic .iconic-property-accent,.button-group.segmented.warning>li>button .iconic *,.button-group.segmented.warning>li>button .iconic .iconic-property-accent,.button-group.segmented.warning>li>label .iconic *,.button-group.segmented.warning>li>label .iconic .iconic-property-accent{fill:#F08A24;stroke:#F08A24}.button-group.segmented.warning>li.is-active>a,.button-group.segmented.warning>li.is-active>a:hover,.button-group.segmented.warning>li>input:checked+label,.button-group.segmented.warning>li>input:checked+label:hover{background:#F08A24;color:#fff}.button-group.segmented.warning>li.is-active>a .iconic *,.button-group.segmented.warning>li.is-active>a .iconic .iconic-property-accent,.button-group.segmented.warning>li>input:checked+label .iconic *,.button-group.segmented.warning>li>input:checked+label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group.segmented.alert{border-color:#F04124}.button-group.segmented.alert>li>a,.button-group.segmented.alert>li>button,.button-group.segmented.alert>li>label{border-color:#F04124;color:#F04124}.button-group.segmented.alert>li>a:hover,.button-group.segmented.alert>li>button:hover,.button-group.segmented.alert>li>label:hover{background:rgba(240,65,36,.25);color:#F04124}.button-group.segmented.alert>li>a .iconic *,.button-group.segmented.alert>li>a .iconic .iconic-property-accent,.button-group.segmented.alert>li>button .iconic *,.button-group.segmented.alert>li>button .iconic .iconic-property-accent,.button-group.segmented.alert>li>label .iconic *,.button-group.segmented.alert>li>label .iconic .iconic-property-accent{fill:#F04124;stroke:#F04124}.button-group.segmented.alert>li.is-active>a,.button-group.segmented.alert>li.is-active>a:hover,.button-group.segmented.alert>li>input:checked+label,.button-group.segmented.alert>li>input:checked+label:hover{background:#F04124;color:#fff}.button-group.segmented.alert>li.is-active>a .iconic *,.button-group.segmented.alert>li.is-active>a .iconic .iconic-property-accent,.button-group.segmented.alert>li>input:checked+label .iconic *,.button-group.segmented.alert>li>input:checked+label .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.button-group.tiny{font-size:.63rem}.button-group.small{font-size:.72rem}.button-group.large{font-size:1.17rem}.button-group.expand{display:-webkit-flex;display:-ms-flexbox;display:flex}.button-group.expand>li{-webkit-flex:1;-ms-flex:1;flex:1}.button-group.expand>li>a,.button-group.expand>li>button,.button-group.expand>li>label{display:block;width:100%;margin-left:0;margin-right:0}.button-group li.disabled>a,.button-group li.disabled>button,.button-group li.disabled>label{opacity:.5;cursor:default;pointer-events:none}.card{border:1px solid #ededed;margin-bottom:.5rem;background:#fff;color:#000;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);overflow:hidden}.card h1,.card h2,.card h3,.card h4,.card h5,.card h6{color:inherit}.card ul{margin-bottom:0}.card img{width:100%}.card.primary{border:0;margin-bottom:.5rem;background:#00558b;color:#fff;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);overflow:hidden}.card.primary h1,.card.primary h2,.card.primary h3,.card.primary h4,.card.primary h5,.card.primary h6{color:inherit}.card.primary ul{margin-bottom:0}.card.primary img{width:100%}.card.primary .card-divider{background:#0065a5;padding:1rem}.card.success{border:0;margin-bottom:.5rem;background:#43AC6A;color:#fff;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);overflow:hidden}.card.success h1,.card.success h2,.card.success h3,.card.success h4,.card.success h5,.card.success h6{color:inherit}.card.success ul{margin-bottom:0}.card.success img{width:100%}.card.success .card-divider{background:#4ab873;padding:1rem}.card.warning{border:0;margin-bottom:.5rem;background:#F08A24;color:#fff;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);overflow:hidden}.card.warning h1,.card.warning h2,.card.warning h3,.card.warning h4,.card.warning h5,.card.warning h6{color:inherit}.card.warning ul{margin-bottom:0}.card.warning img{width:100%}.card.warning .card-divider{background:#f19233;padding:1rem}.card.alert{border:0;margin-bottom:.5rem;background:#F04124;color:#fff;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);overflow:hidden}.card.alert h1,.card.alert h2,.card.alert h3,.card.alert h4,.card.alert h5,.card.alert h6{color:inherit}.card.alert ul{margin-bottom:0}.card.alert img{width:100%}.card.alert .card-divider{background:#f14e33;padding:1rem}.card.dark{border:0;margin-bottom:.5rem;background:#232323;color:#fff;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);overflow:hidden}.card.dark h1,.card.dark h2,.card.dark h3,.card.dark h4,.card.dark h5,.card.dark h6{color:inherit}.card.dark ul{margin-bottom:0}.card.dark img{width:100%}.card.dark .card-divider{background:#323232;padding:1rem}.card-divider{background:#ededed;padding:1rem}.card-section{padding:1rem}.close-button{position:absolute;color:#999;top:1rem;right:1rem;font-size:2em;line-height:.5;cursor:pointer}.close-button:hover{color:#333}.thumbnail,ul.thumbnails>li img{padding:.5rem;box-shadow:0 3px 15px rgba(0,0,0,.25)}ul.thumbnails>li{margin-bottom:1rem}ul.thumbnails>li a{display:block}input[type=text],input[type=password],input[type=date],input[type=datetime],input[type=datetime-local],input[type=month],input[type=week],input[type=email],input[type=tel],input[type=time],input[type=url],input[type=color],input[type=number],input[type=search],textarea{-webkit-appearance:none;-moz-appearance:none;display:block;width:100%;height:2.4rem;padding:.5rem;margin:0 0 1rem;border:1px solid #ccc;border-radius:0;background:#fff;color:#000;font-size:1rem;-webkit-font-smoothing:antialiased;vertical-align:middle}input[type=text]:hover,input[type=password]:hover,input[type=date]:hover,input[type=datetime]:hover,input[type=datetime-local]:hover,input[type=month]:hover,input[type=week]:hover,input[type=email]:hover,input[type=tel]:hover,input[type=time]:hover,input[type=url]:hover,input[type=color]:hover,input[type=number]:hover,input[type=search]:hover,textarea:hover{border:1px solid #bbb;background:#fff;color:#000}input[type=text]:focus,input[type=password]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=month]:focus,input[type=week]:focus,input[type=email]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=color]:focus,input[type=number]:focus,input[type=search]:focus,textarea:focus{outline:0;border:1px solid #999;background:#fff;color:#000}label>input[type=text],label>input[type=password],label>input[type=date],label>input[type=datetime],label>input[type=datetime-local],label>input[type=month],label>input[type=week],label>input[type=email],label>input[type=tel],label>input[type=time],label>input[type=url],label>input[type=color],label>input[type=number],label>input[type=search],label>textarea{margin-top:.5rem}input[type=search]{box-sizing:border-box}fieldset[disabled] input,input.disabled,input[disabled],input[readonly]{cursor:false}fieldset[disabled] input,fieldset[disabled] input:hover,input.disabled,input.disabled:hover,input[disabled],input[disabled]:hover,input[readonly],input[readonly]:hover{background-color:#f2f2f2}label{display:block;font-size:.9rem;margin-bottom:.5rem;color:#333}label>input,label>textarea{margin-top:.5rem}input[type=checkbox],input[type=radio]{width:1rem;height:1rem}label>input[type=checkbox],label>input[type=radio]{margin-right:.25rem}input[type=checkbox]+label,input[type=radio]+label{display:inline-block;margin-left:.5rem;margin-right:1rem;margin-bottom:0;vertical-align:baseline}.inline-label{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;margin-bottom:1rem}label>.inline-label{margin-top:.5rem}.inline-label>input,.inline-label>select{-webkit-flex:1;-ms-flex:1;flex:1;margin:0}.inline-label>.form-label{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;background:#eee;color:#333;border:1px solid #ccc;padding:0 .5rem;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.inline-label>.form-label:first-child{border-right:0}.inline-label>.form-label:last-child{border-left:0}.inline-label>a,.inline-label>button,.inline-label>input[type=button],.inline-label>input[type=submit]{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding-top:0;padding-bottom:0;margin:0;border-radius:0}textarea{height:auto;width:100%;min-height:50px}select{-webkit-appearance:none;-moz-appearance:none;display:block;width:100%;height:2.4rem;padding:.5rem 1.625rem .5rem .5rem;margin:0 0 1rem;font-size:1rem;color:#000;border-radius:0;border:1px solid #ccc;background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="32" height="24" viewBox="0 0 32 24"><polygon points="0,0 32,0 16,24" style="fill: black"></polygon></svg>') right 10px center no-repeat #fafafa;background-size:8px 8px}select:hover{background-color:#f0f0f0}select:focus{outline:0}select::-ms-expand{display:none}input[type=range]{-webkit-appearance:none;-moz-appearance:none;display:block;width:100%;height:auto;cursor:pointer;margin-top:.25rem;margin-bottom:.25rem;border:0;line-height:1}input[type=range]:focus{outline:0}input[type=range]::-webkit-slider-runnable-track{height:1rem;background:#ddd}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:#00558b;width:1.5rem;height:1.5rem;margin-top:-.25rem}input[type=range]::-moz-range-track{-moz-appearance:none;height:1rem;background:#ccc}input[type=range]::-moz-range-thumb{-moz-appearance:none;background:#00558b;width:1.5rem;height:1.5rem;margin-top:-.25rem}input[type=range]::-ms-track{height:1rem;background:#ddd;color:transparent;border:0;overflow:visible;border-top:.25rem solid #fff;border-bottom:.25rem solid #fff}input[type=range]::-ms-thumb{background:#00558b;width:1.5rem;height:1.5rem;border:0}input[type=range]::-ms-fill-lower,input[type=range]::-ms-fill-upper{background:#ddd}output{line-height:1.5rem;vertical-align:middle;margin-left:.5em}input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;background:#00558b}meter,progress{-webkit-appearance:none;-moz-appearance:none;display:block;width:100%;height:1.5rem;margin-bottom:1rem;background:#ccc;border:0}progress::-webkit-progress-bar{background:#ccc}progress::-webkit-progress-value{background:#00558b}progress::-moz-progress-bar{background:#00558b}progress.high::-webkit-progress-value{background:#43AC6A}progress.high::-moz-progress-bar{background:#43AC6A}progress.medium::-webkit-progress-value{background:#e7cf00}progress.medium::-moz-progress-bar{background:#e7cf00}progress.low::-webkit-progress-value{background:#F04124}progress.low::-moz-progress-bar{background:#F04124}meter{background:#ccc}meter::-webkit-meter-bar{background:#ccc}meter::-webkit-meter-optimum-value{background:#43AC6A}meter::-webkit-meter-suboptimum-value{background:#e7cf00}meter::-webkit-meter-even-less-good-value{background:#F04124}meter::-moz-meter-bar{background:#00558b}meter:-moz-meter-optimum::-moz-meter-bar{background:#43AC6A}meter:-moz-meter-sub-optimum::-moz-meter-bar{background:#e7cf00}meter:-moz-meter-sub-sub-optimum::-moz-meter-bar{background:#F04124}.panel{position:absolute;z-index:100;overflow-y:auto;display:none}.is-active.panel{display:block}.panel{padding:0;background:#fff}.panel-top{top:0;left:0;width:100%;height:300px}.panel-top.is-active{box-shadow:0 3px 10px rgba(0,0,0,.25)}.panel-right{top:0;right:0;height:100%;width:100%}@media only screen and (min-width:18.75em){.panel-right{width:300px}}.panel-right.is-active{box-shadow:-3px 0 10px rgba(0,0,0,.25)}.panel-bottom{bottom:0;left:0;width:100%;height:300px}.panel-bottom.is-active{box-shadow:2px -3px 10px rgba(0,0,0,.25)}.panel-left{top:0;left:0;height:100%;width:100%}@media only screen and (min-width:18.75em){.panel-left{width:300px}}.panel-left.is-active{box-shadow:3px 0 10px rgba(0,0,0,.25)}.panel-fixed{position:fixed}.small-vertical.grid-block,.small-vertical.grid-frame,.small-vertical.large-grid-block,.small-vertical.medium-grid-block,.small-vertical.small-grid-block,.vertical.grid-block,.vertical.grid-frame,.vertical.large-grid-block,.vertical.medium-grid-block,.vertical.small-grid-block{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.small-horizontal.grid-block,.small-horizontal.grid-frame,.small-horizontal.large-grid-block,.small-horizontal.medium-grid-block,.small-horizontal.small-grid-block{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}@media only screen and (min-width:40em){.medium-vertical.grid-block,.medium-vertical.grid-frame,.medium-vertical.large-grid-block,.medium-vertical.medium-grid-block,.medium-vertical.small-grid-block{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.medium-horizontal.grid-block,.medium-horizontal.grid-frame,.medium-horizontal.large-grid-block,.medium-horizontal.medium-grid-block,.medium-horizontal.small-grid-block{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}}@media only screen and (min-width:75em){.large-vertical.grid-block,.large-vertical.grid-frame,.large-vertical.large-grid-block,.large-vertical.medium-grid-block,.large-vertical.small-grid-block{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.large-horizontal.grid-block,.large-horizontal.grid-frame,.large-horizontal.large-grid-block,.large-horizontal.medium-grid-block,.large-horizontal.small-grid-block{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}}.align-right.grid-block,.align-right.grid-frame,.align-right.large-grid-block,.align-right.medium-grid-block,.align-right.small-grid-block{-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center.grid-block,.align-center.grid-frame,.align-center.large-grid-block,.align-center.medium-grid-block,.align-center.small-grid-block{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-justify.grid-block,.align-justify.grid-frame,.align-justify.large-grid-block,.align-justify.medium-grid-block,.align-justify.small-grid-block{-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.align-spaced.grid-block,.align-spaced.grid-frame,.align-spaced.large-grid-block,.align-spaced.medium-grid-block,.align-spaced.small-grid-block{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.wrap.grid-block,.wrap.grid-frame,.wrap.large-grid-block,.wrap.medium-grid-block,.wrap.small-grid-block{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.shrink.grid-block,.shrink.grid-content,.shrink.large-grid-block,.shrink.large-grid-content,.shrink.medium-grid-block,.shrink.medium-grid-content,.shrink.small-grid-block,.shrink.small-grid-content{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.noscroll.grid-block,.noscroll.grid-content,.noscroll.large-grid-block,.noscroll.large-grid-content,.noscroll.medium-grid-block,.noscroll.medium-grid-content,.noscroll.small-grid-block,.noscroll.small-grid-content{overflow:hidden}.grid-frame{display:-webkit-flex;display:-ms-flexbox;display:flex;height:100vh;position:relative;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-order:0;-ms-flex-order:0;order:0}.grid-block{display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-order:0;-ms-flex-order:0;order:0;height:auto;overflow-y:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.grid-content{display:block;padding:0 1rem;overflow-y:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.grid-content.collapse{padding:0}.grid-content .grid-block{margin-left:-1rem;margin-right:-1rem;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;overflow:visible}.grid-content .grid-block.nowrap{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.grid-content .grid-block .grid-content{overflow:visible}.grid-container{max-width:56.25rem;margin:0 auto}.grid-container.contain-left{max-width:56.25rem;margin:0 auto 0 0}.grid-container.contain-right{max-width:56.25rem;margin:0 0 0 auto}.small-grid-block{display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-order:0;-ms-flex-order:0;order:0;height:auto;overflow-y:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.small-grid-block.panel{-webkit-transform:none;transform:none;position:relative;width:auto;height:auto;z-index:auto;box-shadow:none;background:0 0;top:auto;right:auto;bottom:auto;left:auto}.small-grid-content{display:block;padding:0 1rem;overflow-y:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.small-grid-content.panel{-webkit-transform:none;transform:none;position:relative;width:auto;height:auto;z-index:auto;box-shadow:none;background:0 0;top:auto;right:auto;bottom:auto;left:auto}@media only screen and (min-width:40em){.medium-grid-block{display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-order:0;-ms-flex-order:0;order:0;height:auto;overflow-y:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.medium-grid-block.panel{-webkit-transform:none;transform:none;position:relative;width:auto;height:auto;z-index:auto;box-shadow:none;background:0 0;top:auto;right:auto;bottom:auto;left:auto}}@media only screen and (min-width:40em){.medium-grid-content{display:block;padding:0 1rem;overflow-y:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.medium-grid-content.panel{-webkit-transform:none;transform:none;position:relative;width:auto;height:auto;z-index:auto;box-shadow:none;background:0 0;top:auto;right:auto;bottom:auto;left:auto}}@media only screen and (min-width:75em){.large-grid-block{display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-order:0;-ms-flex-order:0;order:0;height:auto;overflow-y:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.large-grid-block.panel{-webkit-transform:none;transform:none;position:relative;width:auto;height:auto;z-index:auto;box-shadow:none;background:0 0;top:auto;right:auto;bottom:auto;left:auto}}@media only screen and (min-width:75em){.large-grid-content{display:block;padding:0 1rem;overflow-y:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.large-grid-content.panel{-webkit-transform:none;transform:none;position:relative;width:auto;height:auto;z-index:auto;box-shadow:none;background:0 0;top:auto;right:auto;bottom:auto;left:auto}}.order-1{-webkit-order:1;-ms-flex-order:1;order:1}.order-2{-webkit-order:2;-ms-flex-order:2;order:2}.order-3{-webkit-order:3;-ms-flex-order:3;order:3}.order-4{-webkit-order:4;-ms-flex-order:4;order:4}.order-5{-webkit-order:5;-ms-flex-order:5;order:5}.order-6{-webkit-order:6;-ms-flex-order:6;order:6}.order-7{-webkit-order:7;-ms-flex-order:7;order:7}.order-8{-webkit-order:8;-ms-flex-order:8;order:8}.order-9{-webkit-order:9;-ms-flex-order:9;order:9}.order-10{-webkit-order:10;-ms-flex-order:10;order:10}.order-11{-webkit-order:11;-ms-flex-order:11;order:11}.order-12{-webkit-order:12;-ms-flex-order:12;order:12}.small-1{-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.small-order-1{-webkit-order:1;-ms-flex-order:1;order:1}.small-offset-1{margin-left:8.33333%}.small-up-1{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-1>div,.small-up-1>li,.small-up-1>section{padding:0 1rem 1rem;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%}.small-2{-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.small-order-2{-webkit-order:2;-ms-flex-order:2;order:2}.small-offset-2{margin-left:16.66667%}.small-up-2{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-2>div,.small-up-2>li,.small-up-2>section{padding:0 1rem 1rem;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%}.small-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.small-order-3{-webkit-order:3;-ms-flex-order:3;order:3}.small-offset-3{margin-left:25%}.small-up-3{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-3>div,.small-up-3>li,.small-up-3>section{padding:0 1rem 1rem;-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%}.small-4{-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.small-order-4{-webkit-order:4;-ms-flex-order:4;order:4}.small-offset-4{margin-left:33.33333%}.small-up-4{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-4>div,.small-up-4>li,.small-up-4>section{padding:0 1rem 1rem;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%}.small-5{-webkit-flex:0 0 41.66667%;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.small-order-5{-webkit-order:5;-ms-flex-order:5;order:5}.small-offset-5{margin-left:41.66667%}.small-up-5{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-5>div,.small-up-5>li,.small-up-5>section{padding:0 1rem 1rem;-webkit-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%}.small-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.small-order-6{-webkit-order:6;-ms-flex-order:6;order:6}.small-offset-6{margin-left:50%}.small-up-6{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-6>div,.small-up-6>li,.small-up-6>section{padding:0 1rem 1rem;-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%}.small-7{-webkit-flex:0 0 58.33333%;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.small-order-7{-webkit-order:7;-ms-flex-order:7;order:7}.small-offset-7{margin-left:58.33333%}.small-up-7{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-7>div,.small-up-7>li,.small-up-7>section{padding:0 1rem 1rem;-webkit-flex:0 0 14.28571%;-ms-flex:0 0 14.28571%;flex:0 0 14.28571%}.small-8{-webkit-flex:0 0 66.66667%;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.small-order-8{-webkit-order:8;-ms-flex-order:8;order:8}.small-offset-8{margin-left:66.66667%}.small-up-8{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-8>div,.small-up-8>li,.small-up-8>section{padding:0 1rem 1rem;-webkit-flex:0 0 12.5%;-ms-flex:0 0 12.5%;flex:0 0 12.5%}.small-9{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.small-order-9{-webkit-order:9;-ms-flex-order:9;order:9}.small-offset-9{margin-left:75%}.small-up-9{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-9>div,.small-up-9>li,.small-up-9>section{padding:0 1rem 1rem;-webkit-flex:0 0 11.11111%;-ms-flex:0 0 11.11111%;flex:0 0 11.11111%}.small-10{-webkit-flex:0 0 83.33333%;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.small-order-10{-webkit-order:10;-ms-flex-order:10;order:10}.small-offset-10{margin-left:83.33333%}.small-up-10{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-10>div,.small-up-10>li,.small-up-10>section{padding:0 1rem 1rem;-webkit-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%}.small-11{-webkit-flex:0 0 91.66667%;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.small-order-11{-webkit-order:11;-ms-flex-order:11;order:11}.small-offset-11{margin-left:91.66667%}.small-up-11{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-11>div,.small-up-11>li,.small-up-11>section{padding:0 1rem 1rem;-webkit-flex:0 0 9.09091%;-ms-flex:0 0 9.09091%;flex:0 0 9.09091%}.small-12{-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.small-order-12{-webkit-order:12;-ms-flex-order:12;order:12}.small-offset-12{margin-left:100%}.small-up-12{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.small-up-12>div,.small-up-12>li,.small-up-12>section{padding:0 1rem 1rem;-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}@media only screen and (min-width:40em){.medium-1{-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.medium-order-1{-webkit-order:1;-ms-flex-order:1;order:1}.medium-offset-1{margin-left:8.33333%}.medium-up-1{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-1>div,.medium-up-1>li,.medium-up-1>section{padding:0 1rem 1rem;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%}}@media only screen and (min-width:40em){.medium-2{-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.medium-order-2{-webkit-order:2;-ms-flex-order:2;order:2}.medium-offset-2{margin-left:16.66667%}.medium-up-2{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-2>div,.medium-up-2>li,.medium-up-2>section{padding:0 1rem 1rem;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%}}@media only screen and (min-width:40em){.medium-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.medium-order-3{-webkit-order:3;-ms-flex-order:3;order:3}.medium-offset-3{margin-left:25%}.medium-up-3{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-3>div,.medium-up-3>li,.medium-up-3>section{padding:0 1rem 1rem;-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%}}@media only screen and (min-width:40em){.medium-4{-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.medium-order-4{-webkit-order:4;-ms-flex-order:4;order:4}.medium-offset-4{margin-left:33.33333%}.medium-up-4{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-4>div,.medium-up-4>li,.medium-up-4>section{padding:0 1rem 1rem;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%}}@media only screen and (min-width:40em){.medium-5{-webkit-flex:0 0 41.66667%;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.medium-order-5{-webkit-order:5;-ms-flex-order:5;order:5}.medium-offset-5{margin-left:41.66667%}.medium-up-5{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-5>div,.medium-up-5>li,.medium-up-5>section{padding:0 1rem 1rem;-webkit-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%}}@media only screen and (min-width:40em){.medium-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.medium-order-6{-webkit-order:6;-ms-flex-order:6;order:6}.medium-offset-6{margin-left:50%}.medium-up-6{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-6>div,.medium-up-6>li,.medium-up-6>section{padding:0 1rem 1rem;-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%}}@media only screen and (min-width:40em){.medium-7{-webkit-flex:0 0 58.33333%;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.medium-order-7{-webkit-order:7;-ms-flex-order:7;order:7}.medium-offset-7{margin-left:58.33333%}.medium-up-7{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-7>div,.medium-up-7>li,.medium-up-7>section{padding:0 1rem 1rem;-webkit-flex:0 0 14.28571%;-ms-flex:0 0 14.28571%;flex:0 0 14.28571%}}@media only screen and (min-width:40em){.medium-8{-webkit-flex:0 0 66.66667%;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.medium-order-8{-webkit-order:8;-ms-flex-order:8;order:8}.medium-offset-8{margin-left:66.66667%}.medium-up-8{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-8>div,.medium-up-8>li,.medium-up-8>section{padding:0 1rem 1rem;-webkit-flex:0 0 12.5%;-ms-flex:0 0 12.5%;flex:0 0 12.5%}}@media only screen and (min-width:40em){.medium-9{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.medium-order-9{-webkit-order:9;-ms-flex-order:9;order:9}.medium-offset-9{margin-left:75%}.medium-up-9{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-9>div,.medium-up-9>li,.medium-up-9>section{padding:0 1rem 1rem;-webkit-flex:0 0 11.11111%;-ms-flex:0 0 11.11111%;flex:0 0 11.11111%}}@media only screen and (min-width:40em){.medium-10{-webkit-flex:0 0 83.33333%;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.medium-order-10{-webkit-order:10;-ms-flex-order:10;order:10}.medium-offset-10{margin-left:83.33333%}.medium-up-10{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-10>div,.medium-up-10>li,.medium-up-10>section{padding:0 1rem 1rem;-webkit-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%}}@media only screen and (min-width:40em){.medium-11{-webkit-flex:0 0 91.66667%;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.medium-order-11{-webkit-order:11;-ms-flex-order:11;order:11}.medium-offset-11{margin-left:91.66667%}.medium-up-11{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-11>div,.medium-up-11>li,.medium-up-11>section{padding:0 1rem 1rem;-webkit-flex:0 0 9.09091%;-ms-flex:0 0 9.09091%;flex:0 0 9.09091%}}@media only screen and (min-width:40em){.medium-12{-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.medium-order-12{-webkit-order:12;-ms-flex-order:12;order:12}.medium-offset-12{margin-left:100%}.medium-up-12{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.medium-up-12>div,.medium-up-12>li,.medium-up-12>section{padding:0 1rem 1rem;-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}}@media only screen and (min-width:75em){.large-1{-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;max-width:8.33333%}.large-order-1{-webkit-order:1;-ms-flex-order:1;order:1}.large-offset-1{margin-left:8.33333%}.large-up-1{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-1>div,.large-up-1>li,.large-up-1>section{padding:0 1rem 1rem;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%}}@media only screen and (min-width:75em){.large-2{-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;max-width:16.66667%}.large-order-2{-webkit-order:2;-ms-flex-order:2;order:2}.large-offset-2{margin-left:16.66667%}.large-up-2{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-2>div,.large-up-2>li,.large-up-2>section{padding:0 1rem 1rem;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%}}@media only screen and (min-width:75em){.large-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.large-order-3{-webkit-order:3;-ms-flex-order:3;order:3}.large-offset-3{margin-left:25%}.large-up-3{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-3>div,.large-up-3>li,.large-up-3>section{padding:0 1rem 1rem;-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%}}@media only screen and (min-width:75em){.large-4{-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;max-width:33.33333%}.large-order-4{-webkit-order:4;-ms-flex-order:4;order:4}.large-offset-4{margin-left:33.33333%}.large-up-4{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-4>div,.large-up-4>li,.large-up-4>section{padding:0 1rem 1rem;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%}}@media only screen and (min-width:75em){.large-5{-webkit-flex:0 0 41.66667%;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;max-width:41.66667%}.large-order-5{-webkit-order:5;-ms-flex-order:5;order:5}.large-offset-5{margin-left:41.66667%}.large-up-5{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-5>div,.large-up-5>li,.large-up-5>section{padding:0 1rem 1rem;-webkit-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%}}@media only screen and (min-width:75em){.large-6{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.large-order-6{-webkit-order:6;-ms-flex-order:6;order:6}.large-offset-6{margin-left:50%}.large-up-6{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-6>div,.large-up-6>li,.large-up-6>section{padding:0 1rem 1rem;-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%}}@media only screen and (min-width:75em){.large-7{-webkit-flex:0 0 58.33333%;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;max-width:58.33333%}.large-order-7{-webkit-order:7;-ms-flex-order:7;order:7}.large-offset-7{margin-left:58.33333%}.large-up-7{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-7>div,.large-up-7>li,.large-up-7>section{padding:0 1rem 1rem;-webkit-flex:0 0 14.28571%;-ms-flex:0 0 14.28571%;flex:0 0 14.28571%}}@media only screen and (min-width:75em){.large-8{-webkit-flex:0 0 66.66667%;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;max-width:66.66667%}.large-order-8{-webkit-order:8;-ms-flex-order:8;order:8}.large-offset-8{margin-left:66.66667%}.large-up-8{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-8>div,.large-up-8>li,.large-up-8>section{padding:0 1rem 1rem;-webkit-flex:0 0 12.5%;-ms-flex:0 0 12.5%;flex:0 0 12.5%}}@media only screen and (min-width:75em){.large-9{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.large-order-9{-webkit-order:9;-ms-flex-order:9;order:9}.large-offset-9{margin-left:75%}.large-up-9{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-9>div,.large-up-9>li,.large-up-9>section{padding:0 1rem 1rem;-webkit-flex:0 0 11.11111%;-ms-flex:0 0 11.11111%;flex:0 0 11.11111%}}@media only screen and (min-width:75em){.large-10{-webkit-flex:0 0 83.33333%;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;max-width:83.33333%}.large-order-10{-webkit-order:10;-ms-flex-order:10;order:10}.large-offset-10{margin-left:83.33333%}.large-up-10{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-10>div,.large-up-10>li,.large-up-10>section{padding:0 1rem 1rem;-webkit-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%}}@media only screen and (min-width:75em){.large-11{-webkit-flex:0 0 91.66667%;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;max-width:91.66667%}.large-order-11{-webkit-order:11;-ms-flex-order:11;order:11}.large-offset-11{margin-left:91.66667%}.large-up-11{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-11>div,.large-up-11>li,.large-up-11>section{padding:0 1rem 1rem;-webkit-flex:0 0 9.09091%;-ms-flex:0 0 9.09091%;flex:0 0 9.09091%}}@media only screen and (min-width:75em){.large-12{-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.large-order-12{-webkit-order:12;-ms-flex-order:12;order:12}.large-offset-12{margin-left:100%}.large-up-12{-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;overflow:visible;list-style-type:none}.large-up-12>div,.large-up-12>li,.large-up-12>section{padding:0 1rem 1rem;-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}}.grid-content .modal .grid-block{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.title-bar{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;overflow:visible}.title-bar .title{font-weight:700}.title-bar .center,.title-bar .left,.title-bar .right{display:block;white-space:nowrap;overflow:visible}.title-bar .center:first-child:last-child,.title-bar .left:first-child:last-child,.title-bar .right:first-child:last-child{-webkit-flex:1;-ms-flex:1;flex:1;margin:0}.title-bar .left{-webkit-order:1;-ms-flex-order:1;order:1;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%}.title-bar .center{-webkit-order:2;-ms-flex-order:2;order:2;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;text-align:center}.title-bar .right{-webkit-order:3;-ms-flex-order:3;order:3;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;text-align:right}.title-bar .left:first-child,.title-bar .left:first-child+.right:last-child{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.title-bar .center:first-child:not(:last-child){margin-left:25%}.title-bar .center+.left{margin-right:-25%}.title-bar{background:#eee;color:#000;padding:1rem;border-bottom:1px solid #ccc}.title-bar.primary{background:#00558b;color:#fff;padding:1rem;border-bottom:1px solid #ccc}.title-bar.primary a,.title-bar.primary a:hover{color:#fff}.title-bar.primary .iconic *,.title-bar.primary .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.title-bar.dark{background:#232323;color:#fff;padding:1rem;border-bottom:1px solid #ccc}.title-bar.dark a,.title-bar.dark a:hover{color:#fff}.title-bar.dark .iconic *,.title-bar.dark .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.title-bar-bottom{border-bottom:0;border-top:1px solid #ccc}.label{line-height:1;white-space:nowrap;display:inline-block;cursor:default;font-size:.8rem;padding:.33333rem .5rem;background:#00558b;border-radius:0;color:#fff}.label.primary{background:#00558b;border-radius:0;color:#fff}.label.success{background:#43AC6A;border-radius:0;color:#fff}.label.warning{background:#F08A24;border-radius:0;color:#fff}.label.alert{background:#F04124;border-radius:0;color:#fff}.label.dark{background:#232323;border-radius:0;color:#fff}.badge{-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;border-radius:1000px;font-size:.8em;width:1.5rem;height:1.5rem;background:#00558b;color:#fff}.badge.secondary{background:#f1f1f1;color:#000}.badge.primary{background:#00558b;color:#fff}.badge.success{background:#43AC6A;color:#fff}.badge.warning{background:#F08A24;color:#fff}.badge.alert{background:#F04124;color:#fff}.badge.dark{background:#232323;color:#fff}.inline-list{list-style-type:none;text-align:left}.inline-list dd,.inline-list dt,.inline-list li{display:inline-block;margin-left:-2px;margin-right:-2px}.inline-list li{margin-right:1rem;margin-left:0}.menu-bar{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;margin:0;list-style-type:none}.menu-bar>li{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.menu-bar>li>a{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:1rem;font-size:1rem;line-height:1}.menu-bar{background:#fff}.menu-bar>li>a{color:#000}.menu-bar .is-active>a,.menu-bar>li>a:hover{background:#ededed;color:#000}.menu-bar .iconic *,.menu-bar .iconic .iconic-property-accent{fill:#000;stroke:#000}.menu-bar,.menu-bar.horizontal{overflow-x:hidden;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu-bar.horizontal>li>a,.menu-bar.vertical,.menu-bar>li>a{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu-bar.vertical>li>a{-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu-bar.condense>li{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.menu-bar.align-right{-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.menu-bar.align-center{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-bar.align-justify{-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.menu-bar.align-spaced{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.menu-bar.small-condense li{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.menu-bar.small-expand li{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.menu-bar.small-align-left{-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu-bar.small-align-right{-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.menu-bar.small-align-center{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-bar.small-align-justify{-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.menu-bar.small-align-spaced{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}@media only screen and (min-width:40em){.menu-bar.medium-condense li{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.menu-bar.medium-expand li{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.menu-bar.medium-align-left{-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu-bar.medium-align-right{-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.menu-bar.medium-align-center{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-bar.medium-align-justify{-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.menu-bar.medium-align-spaced{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}}@media only screen and (min-width:75em){.menu-bar.large-condense li{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.menu-bar.large-expand li{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.menu-bar.large-align-left{-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu-bar.large-align-right{-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.menu-bar.large-align-center{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-bar.large-align-justify{-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.menu-bar.large-align-spaced{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}}.menu-bar.small-horizontal{overflow-x:hidden;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu-bar.small-horizontal>li>a,.menu-bar.small-vertical{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu-bar.small-vertical>li>a{-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}@media only screen and (min-width:40em){.menu-bar.medium-horizontal{overflow-x:hidden;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu-bar.medium-horizontal>li>a,.menu-bar.medium-vertical{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu-bar.medium-vertical>li>a{-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}}@media only screen and (min-width:75em){.menu-bar.large-horizontal{overflow-x:hidden;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu-bar.large-horizontal>li>a,.menu-bar.large-vertical{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu-bar.large-vertical>li>a{-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}}.menu-bar.icon-top>li>.iconic,.menu-bar.icon-top>li>img,.menu-bar>li>.iconic,.menu-bar>li>img{margin:0;width:25px;height:25px}.menu-bar.icon-top>li>a,.menu-bar>li>a{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu-bar.icon-top>li>a>.iconic,.menu-bar.icon-top>li>a>img,.menu-bar>li>a>.iconic,.menu-bar>li>a>img{margin:0 0 1rem}.menu-bar.icon-right>li>.iconic,.menu-bar.icon-right>li>img{margin:0;width:25px;height:25px}.menu-bar.icon-right>li>a{-webkit-flex-flow:row-reverse nowrap;-ms-flex-flow:row-reverse nowrap;flex-flow:row-reverse nowrap}.menu-bar.icon-right>li>a>.iconic,.menu-bar.icon-right>li>a>img{margin:0 0 0 1rem}.menu-bar.icon-bottom>li>.iconic,.menu-bar.icon-bottom>li>img{margin:0;width:25px;height:25px}.menu-bar.icon-bottom>li>a{-webkit-flex-flow:column-reverse nowrap;-ms-flex-flow:column-reverse nowrap;flex-flow:column-reverse nowrap}.menu-bar.icon-bottom>li>a>.iconic,.menu-bar.icon-bottom>li>a>img{margin:1rem 0 0}.menu-bar.icon-left>li>.iconic,.menu-bar.icon-left>li>img{margin:0;width:25px;height:25px}.menu-bar.icon-left>li>a{-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.menu-bar.icon-left>li>a>.iconic,.menu-bar.icon-left>li>a>img{margin:0 1rem 0 0}.menu-bar.small-icon-top>li>.iconic,.menu-bar.small-icon-top>li>img{margin:0;width:25px;height:25px}.menu-bar.small-icon-top>li>a{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu-bar.small-icon-top>li>a>.iconic,.menu-bar.small-icon-top>li>a>img{margin:0 0 1rem}.menu-bar.small-icon-right>li>.iconic,.menu-bar.small-icon-right>li>img{margin:0;width:25px;height:25px}.menu-bar.small-icon-right>li>a{-webkit-flex-flow:row-reverse nowrap;-ms-flex-flow:row-reverse nowrap;flex-flow:row-reverse nowrap}.menu-bar.small-icon-right>li>a>.iconic,.menu-bar.small-icon-right>li>a>img{margin:0 0 0 1rem}.menu-bar.small-icon-bottom>li>.iconic,.menu-bar.small-icon-bottom>li>img{margin:0;width:25px;height:25px}.menu-bar.small-icon-bottom>li>a{-webkit-flex-flow:column-reverse nowrap;-ms-flex-flow:column-reverse nowrap;flex-flow:column-reverse nowrap}.menu-bar.small-icon-bottom>li>a>.iconic,.menu-bar.small-icon-bottom>li>a>img{margin:1rem 0 0}.menu-bar.small-icon-left>li>.iconic,.menu-bar.small-icon-left>li>img{margin:0;width:25px;height:25px}.menu-bar.small-icon-left>li>a{-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.menu-bar.small-icon-left>li>a>.iconic,.menu-bar.small-icon-left>li>a>img{margin:0 1rem 0 0}@media only screen and (min-width:40em){.menu-bar.medium-icon-top>li>.iconic,.menu-bar.medium-icon-top>li>img{margin:0;width:25px;height:25px}.menu-bar.medium-icon-top>li>a{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu-bar.medium-icon-top>li>a>.iconic,.menu-bar.medium-icon-top>li>a>img{margin:0 0 1rem}}@media only screen and (min-width:40em){.menu-bar.medium-icon-right>li>.iconic,.menu-bar.medium-icon-right>li>img{margin:0;width:25px;height:25px}.menu-bar.medium-icon-right>li>a{-webkit-flex-flow:row-reverse nowrap;-ms-flex-flow:row-reverse nowrap;flex-flow:row-reverse nowrap}.menu-bar.medium-icon-right>li>a>.iconic,.menu-bar.medium-icon-right>li>a>img{margin:0 0 0 1rem}}@media only screen and (min-width:40em){.menu-bar.medium-icon-bottom>li>.iconic,.menu-bar.medium-icon-bottom>li>img{margin:0;width:25px;height:25px}.menu-bar.medium-icon-bottom>li>a{-webkit-flex-flow:column-reverse nowrap;-ms-flex-flow:column-reverse nowrap;flex-flow:column-reverse nowrap}.menu-bar.medium-icon-bottom>li>a>.iconic,.menu-bar.medium-icon-bottom>li>a>img{margin:1rem 0 0}}@media only screen and (min-width:40em){.menu-bar.medium-icon-left>li>.iconic,.menu-bar.medium-icon-left>li>img{margin:0;width:25px;height:25px}.menu-bar.medium-icon-left>li>a{-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.menu-bar.medium-icon-left>li>a>.iconic,.menu-bar.medium-icon-left>li>a>img{margin:0 1rem 0 0}}@media only screen and (min-width:75em){.menu-bar.large-icon-top>li>.iconic,.menu-bar.large-icon-top>li>img{margin:0;width:25px;height:25px}.menu-bar.large-icon-top>li>a{-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu-bar.large-icon-top>li>a>.iconic,.menu-bar.large-icon-top>li>a>img{margin:0 0 1rem}}@media only screen and (min-width:75em){.menu-bar.large-icon-right>li>.iconic,.menu-bar.large-icon-right>li>img{margin:0;width:25px;height:25px}.menu-bar.large-icon-right>li>a{-webkit-flex-flow:row-reverse nowrap;-ms-flex-flow:row-reverse nowrap;flex-flow:row-reverse nowrap}.menu-bar.large-icon-right>li>a>.iconic,.menu-bar.large-icon-right>li>a>img{margin:0 0 0 1rem}}@media only screen and (min-width:75em){.menu-bar.large-icon-bottom>li>.iconic,.menu-bar.large-icon-bottom>li>img{margin:0;width:25px;height:25px}.menu-bar.large-icon-bottom>li>a{-webkit-flex-flow:column-reverse nowrap;-ms-flex-flow:column-reverse nowrap;flex-flow:column-reverse nowrap}.menu-bar.large-icon-bottom>li>a>.iconic,.menu-bar.large-icon-bottom>li>a>img{margin:1rem 0 0}}@media only screen and (min-width:75em){.menu-bar.large-icon-left>li>.iconic,.menu-bar.large-icon-left>li>img{margin:0;width:25px;height:25px}.menu-bar.large-icon-left>li>a{-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.menu-bar.large-icon-left>li>a>.iconic,.menu-bar.large-icon-left>li>a>img{margin:0 1rem 0 0}}.menu-bar.label-side>li{position:relative}.menu-bar.label-side>li>a{padding-right:3.2rem}.menu-bar.label-side .menu-bar-label{display:block;font-size:.9rem;width:1.2rem;height:1.2rem;line-height:1.2rem;text-align:center;border-radius:1000px;background:red;color:#fff;position:absolute;pointer-events:none;right:1rem;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.menu-bar.label-corner>li{position:relative}.menu-bar.label-corner>li>a{padding-right:3.2rem}.menu-bar.label-corner .menu-bar-label{display:block;font-size:.9rem;width:1.2rem;height:1.2rem;line-height:1.2rem;text-align:center;border-radius:1000px;background:red;color:#fff;position:absolute;pointer-events:none;right:1rem;top:1rem}.menu-bar.primary{background:#00558b}.menu-bar.primary>li>a{color:#fff}.menu-bar.primary .is-active>a,.menu-bar.primary>li>a:hover{background:#0065a5;color:#fff}.menu-bar.primary .iconic *,.menu-bar.primary .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.menu-bar.dark{background:#232323}.menu-bar.dark>li>a{color:#fff}.menu-bar.dark .is-active>a,.menu-bar.dark>li>a:hover{background:#323232;color:#fff}.menu-bar.dark .iconic *,.menu-bar.dark .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.menu-bar>li.title{padding:1rem;cursor:default;font-weight:700}.menu-group{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;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}@media only screen and (min-width:40em){.menu-group{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}}.menu-group>.menu-group-left,.menu-group>.menu-group-right{-webkit-flex:1 1 100%;-ms-flex:1 1 100%;flex:1 1 100%}@media only screen and (min-width:40em){.menu-group>.menu-group-left,.menu-group>.menu-group-right{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}}.menu-group .menu-bar{margin:0}.menu-group .menu-bar>li{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.menu-group.primary{background-color:#00558b}.menu-group.primary .menu-bar{background:#00558b}.menu-group.primary .menu-bar>li>a{color:#fff}.menu-group.primary .menu-bar .is-active>a,.menu-group.primary .menu-bar>li>a:hover{background:#0065a5;color:#fff}.menu-group.primary .menu-bar .iconic *,.menu-group.primary .menu-bar .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.menu-group.dark{background-color:#232323}.menu-group.dark .menu-bar{background:#232323}.menu-group.dark .menu-bar>li>a{color:#fff}.menu-group.dark .menu-bar .is-active>a,.menu-group.dark .menu-bar>li>a:hover{background:#323232;color:#fff}.menu-group.dark .menu-bar .iconic *,.menu-group.dark .menu-bar .iconic .iconic-property-accent{fill:#fff;stroke:#fff}.modal{position:relative;z-index:1001;background:#fff;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:100%;height:100vh;max-height:100%;overflow:hidden;padding:1rem}@media only screen and (min-width:40em){.modal{height:auto;max-width:600px}}.modal .grid-block,.modal .grid-content{margin:0}.modal .close-button,.modal [fa-close]{z-index:1001}.modal{max-width:600px;border-radius:0}.tiny>.modal{max-width:300px}.small>.modal{max-width:500px}.large>.modal{max-width:800px}.dialog>.modal{height:auto}.collapse>.modal{padding:0}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:none;background-color:rgba(51,51,51,.7);-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.modal-overlay.is-active{display:-webkit-flex;display:-ms-flexbox;display:flex}@-webkit-keyframes shake{0%,10%,20%,30%,40%,50%,60%,70%,80%,90%{-webkit-transform:translateX(7%);transform:translateX(7%)}15%,25%,35%,45%,5%,55%,65%,75%,85%,95%{-webkit-transform:translateX(-7%);transform:translateX(-7%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes shake{0%,10%,20%,30%,40%,50%,60%,70%,80%,90%{-webkit-transform:translateX(7%);transform:translateX(7%)}15%,25%,35%,45%,5%,55%,65%,75%,85%,95%{-webkit-transform:translateX(-7%);transform:translateX(-7%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes spin-cw{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin-cw{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spin-ccw{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes spin-ccw{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes wiggle{40%,50%,60%{-webkit-transform:rotate(7deg);transform:rotate(7deg)}35%,45%,55%,65%{-webkit-transform:rotate(-7deg);transform:rotate(-7deg)}0%,100%,30%,70%{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes wiggle{40%,50%,60%{-webkit-transform:rotate(7deg);transform:rotate(7deg)}35%,45%,55%,65%{-webkit-transform:rotate(-7deg);transform:rotate(-7deg)}0%,100%,30%,70%{-webkit-transform:rotate(0);transform:rotate(0)}}.slideInDown.ng-enter,.slideInDown.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.slideInDown.ng-enter.ng-enter-active,.slideInDown.ng-hide-remove.ng-hide-remove-active{-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.slideInLeft.ng-enter,.slideInLeft.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(100%);transform:translateX(100%)}.slideInLeft.ng-enter.ng-enter-active,.slideInLeft.ng-hide-remove.ng-hide-remove-active{-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.slideInUp.ng-enter,.slideInUp.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%)}.slideInUp.ng-enter.ng-enter-active,.slideInUp.ng-hide-remove.ng-hide-remove-active{-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.slideInRight.ng-enter,.slideInRight.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.slideInRight.ng-enter.ng-enter-active,.slideInRight.ng-hide-remove.ng-hide-remove-active{-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.slideOutBottom.ng-hide-add,.slideOutBottom.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.slideOutBottom.ng-hide-add.ng-hide-add-active,.slideOutBottom.ng-leave.ng-leave-active{-webkit-transform:translateY(100%);transform:translateY(100%)}.slideOutRight.ng-hide-add,.slideOutRight.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.slideOutRight.ng-hide-add.ng-hide-add-active,.slideOutRight.ng-leave.ng-leave-active{-webkit-transform:translateX(100%);transform:translateX(100%)}.slideOutUp.ng-hide-add,.slideOutUp.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.slideOutUp.ng-hide-add.ng-hide-add-active,.slideOutUp.ng-leave.ng-leave-active{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.slideOutLeft.ng-hide-add,.slideOutLeft.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.slideOutLeft.ng-hide-add.ng-hide-add-active,.slideOutLeft.ng-leave.ng-leave-active{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.fadeIn.ng-enter,.fadeIn.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:opacity;opacity:0}.fadeIn.ng-enter.ng-enter-active,.fadeIn.ng-hide-remove.ng-hide-remove-active{opacity:1}.fadeOut.ng-hide-add,.fadeOut.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:opacity;opacity:1}.fadeOut.ng-hide-add.ng-hide-add-active,.fadeOut.ng-leave.ng-leave-active{opacity:0}.hingeInFromTop.ng-enter,.hingeInFromTop.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:perspective(2000px) rotateX(-90deg);transform:perspective(2000px) rotateX(-90deg);-webkit-transform-origin:top;transform-origin:top;opacity:0}.hingeInFromTop.ng-enter.ng-enter-active,.hingeInFromTop.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}.hingeInFromRight.ng-enter,.hingeInFromRight.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:perspective(2000px) rotateY(-90deg);transform:perspective(2000px) rotateY(-90deg);-webkit-transform-origin:right;transform-origin:right;opacity:0}.hingeInFromRight.ng-enter.ng-enter-active,.hingeInFromRight.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}.hingeInFromBottom.ng-enter,.hingeInFromBottom.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:perspective(2000px) rotateX(90deg);transform:perspective(2000px) rotateX(90deg);-webkit-transform-origin:bottom;transform-origin:bottom;opacity:0}.hingeInFromBottom.ng-enter.ng-enter-active,.hingeInFromBottom.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}.hingeInFromLeft.ng-enter,.hingeInFromLeft.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:perspective(2000px) rotateY(90deg);transform:perspective(2000px) rotateY(90deg);-webkit-transform-origin:left;transform-origin:left;opacity:0}.hingeInFromLeft.ng-enter.ng-enter-active,.hingeInFromLeft.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}.hingeInFromMiddleX.ng-enter,.hingeInFromMiddleX.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:perspective(2000px) rotateX(-90deg);transform:perspective(2000px) rotateX(-90deg);-webkit-transform-origin:center;transform-origin:center;opacity:0}.hingeInFromMiddleX.ng-enter.ng-enter-active,.hingeInFromMiddleX.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}.hingeInFromMiddleY.ng-enter,.hingeInFromMiddleY.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:perspective(2000px) rotateY(-90deg);transform:perspective(2000px) rotateY(-90deg);-webkit-transform-origin:center;transform-origin:center;opacity:0}.hingeInFromMiddleY.ng-enter.ng-enter-active,.hingeInFromMiddleY.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}.hingeOutFromTop.ng-hide-add,.hingeOutFromTop.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transform-origin:top;transform-origin:top;opacity:1}.hingeOutFromTop.ng-hide-add.ng-hide-add-active,.hingeOutFromTop.ng-leave.ng-leave-active{-webkit-transform:perspective(2000px) rotateX(-90deg);transform:perspective(2000px) rotateX(-90deg);opacity:0}.hingeOutFromRight.ng-hide-add,.hingeOutFromRight.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transform-origin:right;transform-origin:right;opacity:1}.hingeOutFromRight.ng-hide-add.ng-hide-add-active,.hingeOutFromRight.ng-leave.ng-leave-active{-webkit-transform:perspective(2000px) rotateY(-90deg);transform:perspective(2000px) rotateY(-90deg);opacity:0}.hingeOutFromBottom.ng-hide-add,.hingeOutFromBottom.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transform-origin:bottom;transform-origin:bottom;opacity:1}.hingeOutFromBottom.ng-hide-add.ng-hide-add-active,.hingeOutFromBottom.ng-leave.ng-leave-active{-webkit-transform:perspective(2000px) rotateX(90deg);transform:perspective(2000px) rotateX(90deg);opacity:0}.hingeOutFromLeft.ng-hide-add,.hingeOutFromLeft.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transform-origin:left;transform-origin:left;opacity:1}.hingeOutFromLeft.ng-hide-add.ng-hide-add-active,.hingeOutFromLeft.ng-leave.ng-leave-active{-webkit-transform:perspective(2000px) rotateY(90deg);transform:perspective(2000px) rotateY(90deg);opacity:0}.hingeOutFromMiddleX.ng-hide-add,.hingeOutFromMiddleX.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transform-origin:center;transform-origin:center;opacity:1}.hingeOutFromMiddleX.ng-hide-add.ng-hide-add-active,.hingeOutFromMiddleX.ng-leave.ng-leave-active{-webkit-transform:perspective(2000px) rotateX(-90deg);transform:perspective(2000px) rotateX(-90deg);opacity:0}.hingeOutFromMiddleY.ng-hide-add,.hingeOutFromMiddleY.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transform-origin:center;transform-origin:center;opacity:1}.hingeOutFromMiddleY.ng-hide-add.ng-hide-add-active,.hingeOutFromMiddleY.ng-leave.ng-leave-active{-webkit-transform:perspective(2000px) rotateY(-90deg);transform:perspective(2000px) rotateY(-90deg);opacity:0}.zoomIn.ng-enter,.zoomIn.ng-hide-remove{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,property;transition-property:transform,property;-webkit-transform:scale(1.5);transform:scale(1.5);opacity:0}.zoomIn.ng-enter.ng-enter-active,.zoomIn.ng-hide-remove.ng-hide-remove-active{-webkit-transform:scale(1);transform:scale(1);opacity:1}.zoomOut.ng-hide-add,.zoomOut.ng-leave{transition-duration:500ms;transition-timing-function:ease;transition-delay:0;transition-property:-webkit-transform,property;transition-property:transform,property;-webkit-transform:scale(.5);transform:scale(.5);opacity:1}.zoomOut.ng-hide-add.ng-hide-add-active,.zoomOut.ng-leave.ng-leave-active{-webkit-transform:scale(1);transform:scale(1);opacity:0}.spinIn.ng-enter,.spinIn.ng-hide-remove{transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:rotate(-270deg);transform:rotate(-270deg);opacity:0}.spinIn.ng-enter.ng-enter-active,.spinIn.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotate(0);transform:rotate(0);opacity:1}.spinOut.ng-hide-add,.spinOut.ng-leave{transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}.spinOut.ng-hide-add.ng-hide-add-active,.spinOut.ng-leave.ng-leave-active{-webkit-transform:rotate(270deg);transform:rotate(270deg);opacity:0}.spinInCCW.ng-enter,.spinInCCW.ng-hide-remove{transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:rotate(270deg);transform:rotate(270deg);opacity:0}.spinInCCW.ng-enter.ng-enter-active,.spinInCCW.ng-hide-remove.ng-hide-remove-active{-webkit-transform:rotate(0);transform:rotate(0);opacity:1}.spinOutCCW.ng-hide-add,.spinOutCCW.ng-leave{transition-property:-webkit-transform,opacity;transition-property:transform,opacity;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}.spinOutCCW.ng-hide-add.ng-hide-add-active,.spinOutCCW.ng-leave.ng-leave-active{-webkit-transform:rotate(-270deg);transform:rotate(-270deg);opacity:0}.slow{transition-duration:750ms!important}.fast{transition-duration:250ms!important}.linear{transition-timing-function:linear!important}.ease{transition-timing-function:ease!important}.easeIn{transition-timing-function:ease-in!important}.easeOut{transition-timing-function:ease-out!important}.easeInOut{transition-timing-function:ease-in-out!important}.bounceIn{transition-timing-function:cubic-bezier(.485,.155,.24,1.245)!important}.bounceOut{transition-timing-function:cubic-bezier(.485,.155,.515,.845)!important}.bounceInOut{transition-timing-function:cubic-bezier(.76,-.245,.24,1.245)!important}.delay{transition-delay:300ms!important}.long-delay{transition-delay:700ms!important}.shake{-webkit-animation-name:shake;animation-name:shake;-webkit-animation-duration:500ms;animation-duration:500ms;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-animation-delay:0;animation-delay:0}.spin-cw{-webkit-animation-name:spin-cw;animation-name:spin-cw;-webkit-animation-duration:500ms;animation-duration:500ms;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-animation-delay:0;animation-delay:0}.spin-ccw{-webkit-animation-name:spin-ccw;animation-name:spin-ccw;-webkit-animation-duration:500ms;animation-duration:500ms;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-animation-delay:0;animation-delay:0}.wiggle{-webkit-animation-name:wiggle;animation-name:wiggle;-webkit-animation-duration:500ms;animation-duration:500ms;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-animation-delay:0;animation-delay:0}.shake.infinite,.spin-ccw.infinite,.spin-cw.infinite,.wiggle.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.shake.linear,.spin-ccw.linear,.spin-cw.linear,.wiggle.linear{-webkit-animation-timing-function:linear!important;animation-timing-function:linear!important}.shake.ease,.spin-ccw.ease,.spin-cw.ease,.wiggle.ease{-webkit-animation-timing-function:ease!important;animation-timing-function:ease!important}.shake.easeIn,.spin-ccw.easeIn,.spin-cw.easeIn,.wiggle.easeIn{-webkit-animation-timing-function:ease-in!important;animation-timing-function:ease-in!important}.shake.easeOut,.spin-ccw.easeOut,.spin-cw.easeOut,.wiggle.easeOut{-webkit-animation-timing-function:ease-out!important;animation-timing-function:ease-out!important}.shake.easeInOut,.spin-ccw.easeInOut,.spin-cw.easeInOut,.wiggle.easeInOut{-webkit-animation-timing-function:ease-in-out!important;animation-timing-function:ease-in-out!important}.shake.bounceIn,.spin-ccw.bounceIn,.spin-cw.bounceIn,.wiggle.bounceIn{-webkit-animation-timing-function:cubic-bezier(.485,.155,.24,1.245)!important;animation-timing-function:cubic-bezier(.485,.155,.24,1.245)!important}.shake.bounceOut,.spin-ccw.bounceOut,.spin-cw.bounceOut,.wiggle.bounceOut{-webkit-animation-timing-function:cubic-bezier(.485,.155,.515,.845)!important;animation-timing-function:cubic-bezier(.485,.155,.515,.845)!important}.shake.bounceInOut,.spin-ccw.bounceInOut,.spin-cw.bounceInOut,.wiggle.bounceInOut{-webkit-animation-timing-function:cubic-bezier(.76,-.245,.24,1.245)!important;animation-timing-function:cubic-bezier(.76,-.245,.24,1.245)!important}.shake.slow,.spin-ccw.slow,.spin-cw.slow,.wiggle.slow{-webkit-animation-duration:750ms!important;animation-duration:750ms!important}.shake.fast,.spin-ccw.fast,.spin-cw.fast,.wiggle.fast{-webkit-animation-duration:250ms!important;animation-duration:250ms!important}.shake.delay,.spin-ccw.delay,.spin-cw.delay,.wiggle.delay{-webkit-animation-delay:300ms!important;animation-delay:300ms!important}.shake.long-delay,.spin-ccw.long-delay,.spin-cw.long-delay,.wiggle.long-delay{-webkit-animation-delay:700ms!important;animation-delay:700ms!important}.long-stagger,.stagger,.stort-stagger{transition-delay:150ms;transition-duration:0}.position-absolute{overflow:hidden;position:relative}.ui-animation.ng-enter-active,.ui-animation.ng-leave-active{position:absolute!important;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;top:0;right:0;bottom:0;left:0}.notification,.static-notification{z-index:1000;position:relative;margin-top:.5rem;margin-bottom:.5rem;display:none}.notification h1,.static-notification h1{font-size:1.25em;margin:0}.notification p,.static-notification p{margin:0}.is-active.notification,.is-active.static-notification{display:-webkit-flex;display:-ms-flexbox;display:flex}.notification .close-button,.static-notification .close-button{color:#fff}.notification-container{z-index:3000;position:fixed;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.notification{background:#00558b;padding:1rem;border-radius:4px}.notification,.notification h1,.notification h2,.notification h3,.notification h4,.notification h5,.notification h6{color:#fff}.notification.success{background:#43AC6A;padding:1rem;border-radius:4px}.notification.success,.notification.success h1,.notification.success h2,.notification.success h3,.notification.success h4,.notification.success h5,.notification.success h6{color:#fff}.notification.warning{background:#F08A24;padding:1rem;border-radius:4px}.notification.warning,.notification.warning h1,.notification.warning h2,.notification.warning h3,.notification.warning h4,.notification.warning h5,.notification.warning h6{color:#fff}.notification.alert{background:#F04124;padding:1rem;border-radius:4px}.notification.alert,.notification.alert h1,.notification.alert h2,.notification.alert h3,.notification.alert h4,.notification.alert h5,.notification.alert h6{color:#fff}.notification.dark{background:#232323;padding:1rem;border-radius:4px}.notification.dark,.notification.dark h1,.notification.dark h2,.notification.dark h3,.notification.dark h4,.notification.dark h5,.notification.dark h6{color:#fff}.static-notification{background:#00558b;padding:1rem;border-radius:4px;position:fixed!important}.static-notification,.static-notification h1,.static-notification h2,.static-notification h3,.static-notification h4,.static-notification h5,.static-notification h6{color:#fff}.static-notification.top-right{width:25rem;right:1rem;top:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.static-notification.top-right{width:auto;left:1rem;right:1rem;margin-left:0}}.static-notification.top-left{width:25rem;left:1rem;top:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.static-notification.top-left{width:auto;left:1rem;right:1rem;margin-left:0}}.static-notification.top-middle{width:25rem;left:50%;margin-left:-12.5rem;top:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.static-notification.top-middle{width:auto;left:1rem;right:1rem;margin-left:0}}.static-notification.bottom-right{width:25rem;right:1rem;top:auto;bottom:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.static-notification.bottom-right{width:auto;left:1rem;right:1rem;margin-left:0}}.static-notification.bottom-left{width:25rem;left:1rem;top:auto;bottom:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.static-notification.bottom-left{width:auto;left:1rem;right:1rem;margin-left:0}}.static-notification.bottom-middle{width:25rem;left:50%;margin-left:-12.5rem;top:auto;bottom:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.static-notification.bottom-middle{width:auto;left:1rem;right:1rem;margin-left:0}}.static-notification.success{background:#43AC6A;padding:1rem;border-radius:4px}.static-notification.success,.static-notification.success h1,.static-notification.success h2,.static-notification.success h3,.static-notification.success h4,.static-notification.success h5,.static-notification.success h6{color:#fff}.static-notification.warning{background:#F08A24;padding:1rem;border-radius:4px}.static-notification.warning,.static-notification.warning h1,.static-notification.warning h2,.static-notification.warning h3,.static-notification.warning h4,.static-notification.warning h5,.static-notification.warning h6{color:#fff}.static-notification.alert{background:#F04124;padding:1rem;border-radius:4px}.static-notification.alert,.static-notification.alert h1,.static-notification.alert h2,.static-notification.alert h3,.static-notification.alert h4,.static-notification.alert h5,.static-notification.alert h6{color:#fff}.static-notification.dark{background:#232323;padding:1rem;border-radius:4px}.static-notification.dark,.static-notification.dark h1,.static-notification.dark h2,.static-notification.dark h3,.static-notification.dark h4,.static-notification.dark h5,.static-notification.dark h6{color:#fff}.notification-container,.notification-container.top-right{width:25rem;right:1rem;top:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.notification-container{width:auto;left:1rem;right:1rem;margin-left:0}}@media only screen and (min-width:0em) and (max-width:39.9375rem){.notification-container.top-right{width:auto;left:1rem;right:1rem;margin-left:0}}.notification-container.top-left{width:25rem;left:1rem;top:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.notification-container.top-left{width:auto;left:1rem;right:1rem;margin-left:0}}.notification-container.top-middle{width:25rem;left:50%;margin-left:-12.5rem;top:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.notification-container.top-middle{width:auto;left:1rem;right:1rem;margin-left:0}}.notification-container.bottom-right{width:25rem;right:1rem;top:auto;bottom:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.notification-container.bottom-right{width:auto;left:1rem;right:1rem;margin-left:0}}.notification-container.bottom-left{width:25rem;left:1rem;top:auto;bottom:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.notification-container.bottom-left{width:auto;left:1rem;right:1rem;margin-left:0}}.notification-container.bottom-middle{width:25rem;left:50%;margin-left:-12.5rem;top:auto;bottom:1rem}@media only screen and (min-width:0em) and (max-width:39.9375rem){.notification-container.bottom-middle{width:auto;left:1rem;right:1rem;margin-left:0}}.notification-icon{-webkit-flex:0 0 60px;-ms-flex:0 0 60px;flex:0 0 60px;margin-right:1rem;-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.notification-icon img{width:100%;height:auto}.notification-content{-webkit-flex:1;-ms-flex:1;flex:1}.off-canvas{position:fixed;overflow:auto;-webkit-overflow-scrolling:touch;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;z-index:2}.is-active.off-canvas{-webkit-transform:translate(0,0)!important;transform:translate(0,0)!important}.off-canvas~.grid-frame{-webkit-transform:translate(0,0,0);transform:translate(0,0,0);transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#fff}.off-canvas{width:250px;height:100%;top:0;left:0;box-shadow:inset -3px 0 10px rgba(0,0,0,.25);-webkit-transform:translateX(-100%);transform:translateX(-100%);background:#fff;color:#000}.off-canvas.is-active~.grid-frame{-webkit-transform:translateX(250px)!important;transform:translateX(250px)!important}.off-canvas.top{height:250px;width:100%;top:0;left:0;-webkit-transform:translateY(-100%);transform:translateY(-100%);box-shadow:inset 0 -3px 10px rgba(0,0,0,.25)}.off-canvas.top.is-active~.grid-frame{-webkit-transform:translateY(250px)!important;transform:translateY(250px)!important}.off-canvas.right{width:250px;height:100%;left:auto;top:0;right:0;box-shadow:inset 3px 0 10px rgba(0,0,0,.25);-webkit-transform:translateX(100%);transform:translateX(100%)}.off-canvas.right.is-active~.grid-frame{-webkit-transform:translateX(-250px)!important;transform:translateX(-250px)!important}.off-canvas.bottom{height:250px;width:100%;top:auto;bottom:0;left:0;-webkit-transform:translateY(100%);transform:translateY(100%);box-shadow:inset 0 3px 10px rgba(0,0,0,.25)}.off-canvas.bottom.is-active~.grid-frame{-webkit-transform:translateY(-250px)!important;transform:translateY(-250px)!important}.off-canvas.left{width:250px;height:100%;top:0;left:0;box-shadow:inset -3px 0 10px rgba(0,0,0,.25);-webkit-transform:translateX(-100%);transform:translateX(-100%)}.off-canvas.left.is-active~.grid-frame{-webkit-transform:translateX(250px)!important;transform:translateX(250px)!important}.off-canvas.detached{z-index:0;box-shadow:none}.off-canvas.detached,.off-canvas.detached.is-active{-webkit-transform:none;transform:none}.off-canvas.detached~.grid-frame{z-index:1;box-shadow:0 0 15px rgba(0,0,0,.5)}.off-canvas.primary{background:#00558b;color:#fff}.off-canvas.dark{background:#232323;color:#fff}.popup{position:absolute;z-index:1000;opacity:0;overflow:hidden;transition:opacity .25s ease-out;pointer-events:none}.tether-enabled.popup{opacity:1;pointer-events:auto}.popup{width:18.75rem;background:#fff;border-radius:0;box-shadow:0 0 10px rgba(0,0,0,.25);border:0}.popup.dark{background:#232323;border-radius:0;box-shadow:0 0 10px rgba(0,0,0,.25);border:0}.popup.primary{background:#00558b;border-radius:0;box-shadow:0 0 10px rgba(0,0,0,.25);border:0}.switch{position:relative;overflow:hidden;display:inline-block}.switch>input{position:absolute;left:-9999px;outline:0}.switch>label{-ms-touch-action:manipulation;touch-action:manipulation;display:block;width:100%;height:100%;cursor:pointer;margin:0}.switch>label::after{content:'';display:block;position:absolute;top:0;left:0}.switch{width:3.125rem;height:2rem;border-radius:9999px}.switch>label::after{width:2rem;height:2rem}.switch input:checked+label::after{left:1.125rem}.switch>label{background:#ccc}.switch>label::after{background:#fff;border-radius:9999px;transition:left .15s ease-out;border:4px solid #ccc}.switch input:checked+label{background:#00558b;margin:0}.switch input:checked+label::after{border-color:#00558b}.switch.small{width:2.5rem;height:1.625rem}.switch.small>label::after{width:1.625rem;height:1.625rem}.switch.small input:checked+label::after{left:.875rem}.switch.large{width:3.75rem;height:2.375rem}.switch.large>label::after{width:2.375rem;height:2.375rem}.switch.large input:checked+label::after{left:1.375rem}.tabs{display:-webkit-flex;display:-ms-flexbox;display:flex;background:0 0;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.tabs.vertical{display:-webkit-flex;display:-ms-flexbox;display:flex;background:0 0;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.tabs .tab-item{background:#f3f3f3;padding:1rem;line-height:1;margin:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;cursor:pointer;color:#000}.tabs .tab-item.is-active{background:#ececec;color:#000}.tabs .tab-item.is-active:hover,.tabs .tab-item:hover{background:#e7e7e7}.tab-contents{padding:1rem}.tab-contents .tab-content{display:none}.tab-contents .tab-content.is-active{display:block}.accordion{border:1px solid #cbcbcb}.accordion-title{padding:1rem;background:#f3f3f3;color:#000;line-height:1;cursor:pointer}.accordion-title:hover{background:#e7e7e7}.is-active>.accordion-title{background:#ececec;color:#000}.accordion-content{padding:1rem;display:none}.is-active>.accordion-content{display:block}blockquote,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,li,ol,p,pre,td,th,ul{margin:0;padding:0}a{color:#00558b;text-decoration:none;line-height:inherit}a[ui-sref]{cursor:pointer}a:focus,a:hover{color:#004978}a img{border:none}p{font-family:inherit;font-weight:400;font-size:1rem;line-height:1.6;margin-bottom:1.25rem;text-rendering:optimizeLegibility}p.lead{font-size:1.21875rem;line-height:1.6}p aside{font-size:.875rem;line-height:1.35;font-style:italic}h1,h2,h3,h4,h5,h6{font-family:"Helvetica Neue",Helvetica,Helvetica,Arial,sans-serif;font-weight:400;font-style:normal;color:#222;text-rendering:optimizeLegibility;margin-top:.2rem;margin-bottom:.5rem;line-height:1.4}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-size:60%;color:#6f6f6f;line-height:0}h1{font-size:2.125rem}h2{font-size:1.6875rem}h3{font-size:1.375rem}h4,h5{font-size:1.125rem}h6{font-size:1rem}.subheader{line-height:1.4;color:#6f6f6f;font-weight:400;margin-top:.2rem;margin-bottom:.5rem}hr{border:solid #ddd;border-width:1px 0 0;clear:both;margin:1.25rem 0 1.1875rem;height:0}em,i{font-style:italic;line-height:inherit}b,strong{font-weight:700;line-height:inherit}small{font-size:60%;color:#6f6f6f;line-height:inherit}code{font-family:Consolas,'Liberation Mono',Courier,monospace;font-weight:400;color:#464646;background-color:#fbfbfb;border-width:1px;border-style:solid;border-color:#e2e2e2;padding:.125rem .3125rem .0625rem}dl,ol,ul{font-size:1rem;line-height:1.6;margin-bottom:1.25rem;list-style-position:outside;font-family:inherit}ol,ul{margin-left:1.1rem}ol li ol,ol li ul,ul li ol,ul li ul{margin-left:1.25rem;margin-bottom:0}ul.no-bullet{margin-left:0}ul.no-bullet,ul.no-bullet li ol,ul.no-bullet li ul{list-style-type:none}dl dt{margin-bottom:.3rem;font-weight:700}dl dd{margin-bottom:.75rem}abbr,acronym{text-transform:uppercase;font-size:90%;color:#222;border-bottom:1px dotted #ddd;cursor:help}abbr{text-transform:none}blockquote{margin:0 0 1.25rem;padding:.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #ddd}blockquote cite{display:block;font-size:.8125rem;color:#555}blockquote cite:before{content:"\2014 \0020"}blockquote cite a,blockquote cite a:visited{color:#555}blockquote,blockquote p{line-height:1.6;color:#6f6f6f}@media only screen and (min-width:40em){h1,h2,h3,h4,h5,h6{line-height:1.4}h1{font-size:2.75rem}h2{font-size:2.3125rem}h3{font-size:1.6875rem}h4{font-size:1.4375rem}h5{font-size:1.125rem}h6{font-size:1rem}}.v-align{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}.v-align .align-top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.v-align .align-center{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.v-align .align-bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.v-align .small-align-top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.v-align .small-align-center{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.v-align .small-align-bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}@media only screen and (min-width:40em){.v-align .medium-align-top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}}@media only screen and (min-width:40em){.v-align .medium-align-center{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}}@media only screen and (min-width:40em){.v-align .medium-align-bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}}@media only screen and (min-width:75em){.v-align .large-align-top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}}@media only screen and (min-width:75em){.v-align .large-align-center{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}}@media only screen and (min-width:75em){.v-align .large-align-bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}}.hide{display:none!important}.invisible{visibility:hidden}.hide-for-small:not(.ng-hide){display:block!important;display:none!important}.hide-for-small[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;display:none!important}.show-for-small:not(.ng-hide){display:none!important;display:block!important}.show-for-small[class*=grid-block]:not(.ng-hide){display:none!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.hide-for-small-only:not(.ng-hide){display:block!important}@media only screen and (min-width:0em) and (max-width:39.9375rem){.hide-for-small-only:not(.ng-hide){display:none!important}}.hide-for-small-only[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}@media only screen and (min-width:0em) and (max-width:39.9375rem){.hide-for-small-only[class*=grid-block]:not(.ng-hide){display:none!important}}.show-for-small-only:not(.ng-hide),.show-for-small-only[class*=grid-block]:not(.ng-hide){display:none!important}@media only screen and (min-width:0em) and (max-width:39.9375rem){.show-for-small-only:not(.ng-hide){display:block!important}}@media only screen and (min-width:0em) and (max-width:39.9375rem){.show-for-small-only[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}}.hide-for-medium:not(.ng-hide){display:block!important}@media only screen and (min-width:40em){.hide-for-medium:not(.ng-hide){display:none!important}}.hide-for-medium[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}@media only screen and (min-width:40em){.hide-for-medium[class*=grid-block]:not(.ng-hide){display:none!important}}.show-for-medium:not(.ng-hide),.show-for-medium[class*=grid-block]:not(.ng-hide){display:none!important}@media only screen and (min-width:40em){.show-for-medium:not(.ng-hide){display:block!important}}@media only screen and (min-width:40em){.show-for-medium[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}}.hide-for-medium-only:not(.ng-hide){display:block!important}@media only screen and (min-width:40em) and (max-width:74.9375rem){.hide-for-medium-only:not(.ng-hide){display:none!important}}.hide-for-medium-only[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}@media only screen and (min-width:40em) and (max-width:74.9375rem){.hide-for-medium-only[class*=grid-block]:not(.ng-hide){display:none!important}}.show-for-medium-only:not(.ng-hide),.show-for-medium-only[class*=grid-block]:not(.ng-hide){display:none!important}@media only screen and (min-width:40em) and (max-width:74.9375rem){.show-for-medium-only:not(.ng-hide){display:block!important}}@media only screen and (min-width:40em) and (max-width:74.9375rem){.show-for-medium-only[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}}.hide-for-large:not(.ng-hide){display:block!important}@media only screen and (min-width:75em){.hide-for-large:not(.ng-hide){display:none!important}}.hide-for-large[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}@media only screen and (min-width:75em){.hide-for-large[class*=grid-block]:not(.ng-hide){display:none!important}}.show-for-large:not(.ng-hide),.show-for-large[class*=grid-block]:not(.ng-hide){display:none!important}@media only screen and (min-width:75em){.show-for-large:not(.ng-hide){display:block!important}}@media only screen and (min-width:75em){.show-for-large[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}}.hide-for-large-only:not(.ng-hide){display:block!important}@media only screen and (min-width:75em) and (max-width:89.9375rem){.hide-for-large-only:not(.ng-hide){display:none!important}}.hide-for-large-only[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}@media only screen and (min-width:75em) and (max-width:89.9375rem){.hide-for-large-only[class*=grid-block]:not(.ng-hide){display:none!important}}.show-for-landscape,.show-for-large-only:not(.ng-hide),.show-for-large-only[class*=grid-block]:not(.ng-hide),.show-for-portrait{display:none!important}@media only screen and (min-width:75em) and (max-width:89.9375rem){.show-for-large-only:not(.ng-hide){display:block!important}}@media only screen and (min-width:75em) and (max-width:89.9375rem){.show-for-large-only[class*=grid-block]:not(.ng-hide){display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}}@media only screen and (orientation:portrait){.hide-for-portrait{display:none!important}.hide-for-portrait[class*=grid-block]{display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}}@media only screen and (orientation:portrait){.show-for-portrait{display:block!important}.show-for-portrait[class*=grid-block]{display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}}@media only screen and (orientation:landscape){.hide-for-landscape{display:none!important}.hide-for-landscape[class*=grid-block]{display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}}@media only screen and (orientation:landscape){.show-for-landscape{display:block!important}.show-for-landscape[class*=grid-block]{display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}}.small-text-left,.text-left{text-align:left}@media only screen and (min-width:0em) and (max-width:39.9375rem){.small-only-text-left{text-align:left}}@media only screen and (min-width:40em){.medium-text-left{text-align:left}}@media only screen and (min-width:40em) and (max-width:74.9375rem){.medium-only-text-left{text-align:left}}@media only screen and (min-width:75em){.large-text-left{text-align:left}}@media only screen and (min-width:75em) and (max-width:89.9375rem){.large-only-text-left{text-align:left}}.small-text-right,.text-right{text-align:right}@media only screen and (min-width:0em) and (max-width:39.9375rem){.small-only-text-right{text-align:right}}@media only screen and (min-width:40em){.medium-text-right{text-align:right}}@media only screen and (min-width:40em) and (max-width:74.9375rem){.medium-only-text-right{text-align:right}}@media only screen and (min-width:75em){.large-text-right{text-align:right}}@media only screen and (min-width:75em) and (max-width:89.9375rem){.large-only-text-right{text-align:right}}.small-text-center,.text-center{text-align:center}@media only screen and (min-width:0em) and (max-width:39.9375rem){.small-only-text-center{text-align:center}}@media only screen and (min-width:40em){.medium-text-center{text-align:center}}@media only screen and (min-width:40em) and (max-width:74.9375rem){.medium-only-text-center{text-align:center}}@media only screen and (min-width:75em){.large-text-center{text-align:center}}@media only screen and (min-width:75em) and (max-width:89.9375rem){.large-only-text-center{text-align:center}}.small-text-justify,.text-justify{text-align:justify}@media only screen and (min-width:0em) and (max-width:39.9375rem){.small-only-text-justify{text-align:justify}}@media only screen and (min-width:40em){.medium-text-justify{text-align:justify}}@media only screen and (min-width:40em) and (max-width:74.9375rem){.medium-only-text-justify{text-align:justify}}@media only screen and (min-width:75em){.large-text-justify{text-align:justify}}@media only screen and (min-width:75em) and (max-width:89.9375rem){.large-only-text-justify{text-align:justify}}.clearfix:after,.clearfix:before{content:" ";display:table}.clearfix:after{clear:both}.float-left{float:left}.float-right{float:right}.float-none{float:none} \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/dist/js/foundation-apps-templates.js b/afb-client/bower_components/foundation-apps/dist/js/foundation-apps-templates.js
new file mode 100644
index 0000000..0225773
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/dist/js/foundation-apps-templates.js
@@ -0,0 +1,170 @@
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/accordion/accordion-item.html',
+ '<div class="accordion-item" ng-class="{\'is-active\': active}">\n' +
+ ' <div class="accordion-title" ng-click="activate()">{{ title }}</div>\n' +
+ ' <div class="accordion-content" ng-transclude></div>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/accordion/accordion.html',
+ '<div class="accordion" ng-transclude>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/actionsheet/actionsheet-button.html',
+ '<div>\n' +
+ ' <a href="#"\n' +
+ ' class="button"\n' +
+ ' ng-if="title.length > 0">{{ title }}</a>\n' +
+ ' <div ng-transclude></div>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/actionsheet/actionsheet-content.html',
+ '<div\n' +
+ ' class="action-sheet {{ position }}"\n' +
+ ' ng-class="{\'is-active\': active}"\n' +
+ ' >\n' +
+ ' <div\n' +
+ ' ng-transclude>\n' +
+ ' </div>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/actionsheet/actionsheet.html',
+ '<div class="action-sheet-container"\n' +
+ ' ng-transclude>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/modal/modal.html',
+ '<div\n' +
+ ' class="modal-overlay"\n' +
+ ' ng-click="hideOverlay()">\n' +
+ ' <aside\n' +
+ ' class="modal"\n' +
+ ' ng-click="$event.stopPropagation();"\n' +
+ ' ng-transclude>\n' +
+ ' </aside>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/notification/notification-set.html',
+ '<div class="notification-container {{position}}">\n' +
+ ' <zf-notification ng-repeat="notification in notifications"\n' +
+ ' title="notification.title"\n' +
+ ' image="notification.image"\n' +
+ ' notif-id = "notification.id"\n' +
+ ' color="notification.color"\n' +
+ ' autoclose="notification.autoclose"\n' +
+ ' >{{ notification.content }}</zf-notification>\n' +
+ '</div>');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/notification/notification-static.html',
+ '<div zf-swipe-close="swipe" class="static-notification {{ color }} {{ position }}">\n' +
+ ' <a href="#"\n' +
+ ' class="close-button"\n' +
+ ' ng-click="hide(); $event.preventDefault(); $event.stopPropagation()">&times;</a>\n' +
+ ' <div class="notification-icon" ng-if="image">\n' +
+ ' <img ng-src="{{ image }}"/>\n' +
+ ' </div>\n' +
+ ' <div class="notification-content">\n' +
+ ' <h1>{{ title }}</h1>\n' +
+ ' <p ng-transclude></p>\n' +
+ ' </div>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/notification/notification.html',
+ '<div zf-swipe-close="swipe" class="notification {{ color }}">\n' +
+ ' <a href="#"\n' +
+ ' class="close-button"\n' +
+ ' ng-click="hide(); $event.preventDefault(); $event.stopPropagation()">&times;</a>\n' +
+ ' <div class="notification-icon" ng-if="image">\n' +
+ ' <img ng-src="{{ image }}"/>\n' +
+ ' </div>\n' +
+ ' <div class="notification-content">\n' +
+ ' <h1>{{ title }}</h1>\n' +
+ ' <p ng-transclude></p>\n' +
+ ' </div>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/offcanvas/offcanvas.html',
+ '<div\n' +
+ ' class="off-canvas {{ position }}"\n' +
+ ' ng-class="{\'is-active\': active}"\n' +
+ ' ng-transclude>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/panel/panel.html',
+ '<div\n' +
+ ' class="panel"\n' +
+ ' ng-class="positionClass"\n' +
+ ' ng-transclude\n' +
+ ' >\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/popup/popup.html',
+ '<div class="popup" ng-class="{\'is-active\': active }" ng-transclude>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/tabs/tab-content.html',
+ '<div class="tab-contents">\n' +
+ ' <div zf-tab-individual\n' +
+ ' class="tab-content"\n' +
+ ' ng-class="{\'is-active\': tab.active}"\n' +
+ ' ng-repeat="tab in tabs"\n' +
+ ' tab="tab">\n' +
+ ' </div>\n' +
+ '</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/tabs/tab.html',
+ '<div class="tab-item"\n' +
+ ' ng-class="{\'is-active\': active}"\n' +
+ ' ng-click="makeActive()">{{ title }}</div>\n' +
+ '');
+}]);
+
+angular.module('foundation').run(['$templateCache', function($templateCache) {
+ $templateCache.put('components/tabs/tabs.html',
+ '<div>\n' +
+ ' <div class="tabs" ng-transclude>\n' +
+ ' </div>\n' +
+ ' <div zf-tab-content\n' +
+ ' target="{{ id }}"\n' +
+ ' ng-if="showTabContent">\n' +
+ ' </div>\n' +
+ '</div>\n' +
+ '');
+}]);
diff --git a/afb-client/bower_components/foundation-apps/dist/js/foundation-apps-templates.min.js b/afb-client/bower_components/foundation-apps/dist/js/foundation-apps-templates.min.js
new file mode 100644
index 0000000..7ab7adb
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/dist/js/foundation-apps-templates.min.js
@@ -0,0 +1 @@
+angular.module("foundation").run(["$templateCache",function(n){n.put("components/accordion/accordion-item.html",'<div class="accordion-item" ng-class="{\'is-active\': active}">\n <div class="accordion-title" ng-click="activate()">{{ title }}</div>\n <div class="accordion-content" ng-transclude></div>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/accordion/accordion.html",'<div class="accordion" ng-transclude>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/actionsheet/actionsheet-button.html",'<div>\n <a href="#"\n class="button"\n ng-if="title.length > 0">{{ title }}</a>\n <div ng-transclude></div>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/actionsheet/actionsheet-content.html",'<div\n class="action-sheet {{ position }}"\n ng-class="{\'is-active\': active}"\n >\n <div\n ng-transclude>\n </div>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/actionsheet/actionsheet.html",'<div class="action-sheet-container"\n ng-transclude>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/modal/modal.html",'<div\n class="modal-overlay"\n ng-click="hideOverlay()">\n <aside\n class="modal"\n ng-click="$event.stopPropagation();"\n ng-transclude>\n </aside>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/notification/notification-set.html",'<div class="notification-container {{position}}">\n <zf-notification ng-repeat="notification in notifications"\n title="notification.title"\n image="notification.image"\n notif-id = "notification.id"\n color="notification.color"\n autoclose="notification.autoclose"\n >{{ notification.content }}</zf-notification>\n</div>')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/notification/notification-static.html",'<div zf-swipe-close="swipe" class="static-notification {{ color }} {{ position }}">\n <a href="#"\n class="close-button"\n ng-click="hide(); $event.preventDefault(); $event.stopPropagation()">&times;</a>\n <div class="notification-icon" ng-if="image">\n <img ng-src="{{ image }}"/>\n </div>\n <div class="notification-content">\n <h1>{{ title }}</h1>\n <p ng-transclude></p>\n </div>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/notification/notification.html",'<div zf-swipe-close="swipe" class="notification {{ color }}">\n <a href="#"\n class="close-button"\n ng-click="hide(); $event.preventDefault(); $event.stopPropagation()">&times;</a>\n <div class="notification-icon" ng-if="image">\n <img ng-src="{{ image }}"/>\n </div>\n <div class="notification-content">\n <h1>{{ title }}</h1>\n <p ng-transclude></p>\n </div>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/offcanvas/offcanvas.html",'<div\n class="off-canvas {{ position }}"\n ng-class="{\'is-active\': active}"\n ng-transclude>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/panel/panel.html",'<div\n class="panel"\n ng-class="positionClass"\n ng-transclude\n >\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/popup/popup.html",'<div class="popup" ng-class="{\'is-active\': active }" ng-transclude>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/tabs/tab-content.html",'<div class="tab-contents">\n <div zf-tab-individual\n class="tab-content"\n ng-class="{\'is-active\': tab.active}"\n ng-repeat="tab in tabs"\n tab="tab">\n </div>\n</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/tabs/tab.html",'<div class="tab-item"\n ng-class="{\'is-active\': active}"\n ng-click="makeActive()">{{ title }}</div>\n')}]),angular.module("foundation").run(["$templateCache",function(n){n.put("components/tabs/tabs.html",'<div>\n <div class="tabs" ng-transclude>\n </div>\n <div zf-tab-content\n target="{{ id }}"\n ng-if="showTabContent">\n </div>\n</div>\n')}]); \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/dist/js/foundation-apps.js b/afb-client/bower_components/foundation-apps/dist/js/foundation-apps.js
new file mode 100755
index 0000000..1ad0c21
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/dist/js/foundation-apps.js
@@ -0,0 +1,3136 @@
+/*!
+ * iconic.js v0.4.0 - The Iconic JavaScript library
+ * Copyright (c) 2014 Waybury - http://useiconic.com
+ */
+
+!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.IconicJS=a():"undefined"!=typeof global?global.IconicJS=a():"undefined"!=typeof self&&(self.IconicJS=a())}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b){var c=(a("./modules/polyfills"),a("./modules/svg-injector")),d=a("./modules/extend"),e=a("./modules/responsive"),f=a("./modules/position"),g=a("./modules/container"),h=a("./modules/log"),i={},j=window.iconicSmartIconApis={},k=("file:"===window.location.protocol,0),l=function(a,b,e){b=d({},i,b||{});var f={evalScripts:b.evalScripts,pngFallback:b.pngFallback};f.each=function(a){if(a)if("string"==typeof a)h.debug(a);else if(a instanceof SVGSVGElement){var c=a.getAttribute("data-icon");if(c&&j[c]){var d=j[c](a);for(var e in d)a[e]=d[e]}/iconic-bg-/.test(a.getAttribute("class"))&&g.addBackground(a),m(a),k++,b&&b.each&&"function"==typeof b.each&&b.each(a)}},"string"==typeof a&&(a=document.querySelectorAll(a)),c(a,f,e)},m=function(a){var b=[];a?"string"==typeof a?b=document.querySelectorAll(a):void 0!==a.length?b=a:"object"==typeof a&&b.push(a):b=document.querySelectorAll("svg.iconic"),Array.prototype.forEach.call(b,function(a){a instanceof SVGSVGElement&&(a.update&&a.update(),e.refresh(a),f.refresh(a))})},n=function(){i.debug&&console.time&&console.time("autoInjectSelector - "+i.autoInjectSelector);var a=k;l(i.autoInjectSelector,{},function(){if(i.debug&&console.timeEnd&&console.timeEnd("autoInjectSelector - "+i.autoInjectSelector),h.debug("AutoInjected: "+(k-a)),e.refreshAll(),i.autoInjectDone&&"function"==typeof i.autoInjectDone){var b=k-a;i.autoInjectDone(b)}})},o=function(a){a&&""!==a&&"complete"!==document.readyState?document.addEventListener("DOMContentLoaded",n):document.removeEventListener("DOMContentLoaded",n)},p=function(a){return a=a||{},d(i,a),o(i.autoInjectSelector),h.enableDebug(i.debug),window._Iconic?window._Iconic:{inject:l,update:m,smartIconApis:j,svgInjectedCount:k}};b.exports=p,window._Iconic=new p({autoInjectSelector:"img.iconic",evalScripts:"once",pngFallback:!1,each:null,autoInjectDone:null,debug:!1})},{"./modules/container":2,"./modules/extend":3,"./modules/log":4,"./modules/polyfills":5,"./modules/position":6,"./modules/responsive":7,"./modules/svg-injector":8}],2:[function(a,b){var c=function(a){var b=a.getAttribute("class").split(" "),c=-1!==b.indexOf("iconic-fluid"),d=[],e=["iconic-bg"];Array.prototype.forEach.call(b,function(a){switch(a){case"iconic-sm":case"iconic-md":case"iconic-lg":d.push(a),c||e.push(a.replace(/-/,"-bg-"));break;case"iconic-fluid":d.push(a),e.push(a.replace(/-/,"-bg-"));break;case"iconic-bg-circle":case"iconic-bg-rounded-rect":case"iconic-bg-badge":e.push(a);break;default:d.push(a)}}),a.setAttribute("class",d.join(" "));var f=a.parentNode,g=Array.prototype.indexOf.call(f.childNodes,a),h=document.createElement("span");h.setAttribute("class",e.join(" ")),h.appendChild(a),f.insertBefore(h,f.childNodes[g])};b.exports={addBackground:c}},{}],3:[function(a,b){b.exports=function(a){return Array.prototype.forEach.call(Array.prototype.slice.call(arguments,1),function(b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])}),a}},{}],4:[function(a,b){var c=!1,d=function(a){console&&console.log&&console.log(a)},e=function(a){d("Iconic INFO: "+a)},f=function(a){d("Iconic WARNING: "+a)},g=function(a){c&&d("Iconic DEBUG: "+a)},h=function(a){c=a};b.exports={info:e,warn:f,debug:g,enableDebug:h}},{}],5:[function(){Array.prototype.forEach||(Array.prototype.forEach=function(a,b){"use strict";if(void 0===this||null===this||"function"!=typeof a)throw new TypeError;var c,d=this.length>>>0;for(c=0;d>c;++c)c in this&&a.call(b,this[c],c,this)}),function(){if(Event.prototype.preventDefault||(Event.prototype.preventDefault=function(){this.returnValue=!1}),Event.prototype.stopPropagation||(Event.prototype.stopPropagation=function(){this.cancelBubble=!0}),!Element.prototype.addEventListener){var a=[],b=function(b,c){var d=this,e=function(a){a.target=a.srcElement,a.currentTarget=d,c.handleEvent?c.handleEvent(a):c.call(d,a)};if("DOMContentLoaded"==b){var f=function(a){"complete"==document.readyState&&e(a)};if(document.attachEvent("onreadystatechange",f),a.push({object:this,type:b,listener:c,wrapper:f}),"complete"==document.readyState){var g=new Event;g.srcElement=window,f(g)}}else this.attachEvent("on"+b,e),a.push({object:this,type:b,listener:c,wrapper:e})},c=function(b,c){for(var d=0;d<a.length;){var e=a[d];if(e.object==this&&e.type==b&&e.listener==c){"DOMContentLoaded"==b?this.detachEvent("onreadystatechange",e.wrapper):this.detachEvent("on"+b,e.wrapper);break}++d}};Element.prototype.addEventListener=b,Element.prototype.removeEventListener=c,HTMLDocument&&(HTMLDocument.prototype.addEventListener=b,HTMLDocument.prototype.removeEventListener=c),Window&&(Window.prototype.addEventListener=b,Window.prototype.removeEventListener=c)}}()},{}],6:[function(a,b){var c=function(a){var b=a.getAttribute("data-position");if(b&&""!==b){var c,d,e,f,g,h,i,j=a.getAttribute("width"),k=a.getAttribute("height"),l=b.split("-"),m=a.querySelectorAll("g.iconic-container");Array.prototype.forEach.call(m,function(a){if(c=a.getAttribute("data-width"),d=a.getAttribute("data-height"),c!==j||d!==k){if(e=a.getAttribute("transform"),f=1,e){var b=e.match(/scale\((\d)/);f=b&&b[1]?b[1]:1}g=Math.floor((j/f-c)/2),h=Math.floor((k/f-d)/2),Array.prototype.forEach.call(l,function(a){switch(a){case"top":h=0;break;case"bottom":h=k/f-d;break;case"left":g=0;break;case"right":g=j/f-c;break;case"center":break;default:console&&console.log&&console.log("Unknown position: "+a)}}),i=0===h?g:g+" "+h,i="translate("+i+")",e?/translate/.test(e)?e=e.replace(/translate\(.*?\)/,i):e+=" "+i:e=i,a.setAttribute("transform",e)}})}};b.exports={refresh:c}},{}],7:[function(a,b){var c=/(iconic-sm\b|iconic-md\b|iconic-lg\b)/,d=function(a,b){var c="undefined"!=typeof window.getComputedStyle&&window.getComputedStyle(a,null).getPropertyValue(b);return!c&&a.currentStyle&&(c=a.currentStyle[b.replace(/([a-z])\-([a-z])/,function(a,b,c){return b+c.toUpperCase()})]||a.currentStyle[b]),c},e=function(a){var b=a.style.display;a.style.display="block";var c=parseFloat(d(a,"width").slice(0,-2)),e=parseFloat(d(a,"height").slice(0,-2));return a.style.display=b,{width:c,height:e}},f=function(){var a="/* Iconic Responsive Support Styles */\n.iconic-property-fill, .iconic-property-text {stroke: none !important;}\n.iconic-property-stroke {fill: none !important;}\nsvg.iconic.iconic-fluid {height:100% !important;width:100% !important;}\nsvg.iconic.iconic-sm:not(.iconic-size-md):not(.iconic-size-lg), svg.iconic.iconic-size-sm{width:16px;height:16px;}\nsvg.iconic.iconic-md:not(.iconic-size-sm):not(.iconic-size-lg), svg.iconic.iconic-size-md{width:32px;height:32px;}\nsvg.iconic.iconic-lg:not(.iconic-size-sm):not(.iconic-size-md), svg.iconic.iconic-size-lg{width:128px;height:128px;}\nsvg.iconic-sm > g.iconic-md, svg.iconic-sm > g.iconic-lg, svg.iconic-md > g.iconic-sm, svg.iconic-md > g.iconic-lg, svg.iconic-lg > g.iconic-sm, svg.iconic-lg > g.iconic-md {display: none;}\nsvg.iconic.iconic-icon-sm > g.iconic-lg, svg.iconic.iconic-icon-md > g.iconic-lg {display:none;}\nsvg.iconic-sm:not(.iconic-icon-md):not(.iconic-icon-lg) > g.iconic-sm, svg.iconic-md.iconic-icon-sm > g.iconic-sm, svg.iconic-lg.iconic-icon-sm > g.iconic-sm {display:inline;}\nsvg.iconic-md:not(.iconic-icon-sm):not(.iconic-icon-lg) > g.iconic-md, svg.iconic-sm.iconic-icon-md > g.iconic-md, svg.iconic-lg.iconic-icon-md > g.iconic-md {display:inline;}\nsvg.iconic-lg:not(.iconic-icon-sm):not(.iconic-icon-md) > g.iconic-lg, svg.iconic-sm.iconic-icon-lg > g.iconic-lg, svg.iconic-md.iconic-icon-lg > g.iconic-lg {display:inline;}";navigator&&navigator.userAgent&&/MSIE 10\.0/.test(navigator.userAgent)&&(a+="svg.iconic{zoom:1.0001;}");var b=document.createElement("style");b.id="iconic-responsive-css",b.type="text/css",b.styleSheet?b.styleSheet.cssText=a:b.appendChild(document.createTextNode(a)),(document.head||document.getElementsByTagName("head")[0]).appendChild(b)},g=function(a){if(/iconic-fluid/.test(a.getAttribute("class"))){var b,d=e(a),f=a.viewBox.baseVal.width/a.viewBox.baseVal.height;b=1===f?Math.min(d.width,d.height):1>f?d.width:d.height;var g;g=32>b?"iconic-sm":b>=32&&128>b?"iconic-md":"iconic-lg";var h=a.getAttribute("class"),i=c.test(h)?h.replace(c,g):h+" "+g;a.setAttribute("class",i)}},h=function(){var a=document.querySelectorAll(".injected-svg.iconic-fluid");Array.prototype.forEach.call(a,function(a){g(a)})};document.addEventListener("DOMContentLoaded",function(){f()}),window.addEventListener("resize",function(){h()}),b.exports={refresh:g,refreshAll:h}},{}],8:[function(b,c,d){!function(b,e){"use strict";function f(a){a=a.split(" ");for(var b={},c=a.length,d=[];c--;)b.hasOwnProperty(a[c])||(b[a[c]]=1,d.unshift(a[c]));return d.join(" ")}var g="file:"===b.location.protocol,h=e.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"),i=Array.prototype.forEach||function(a,b){if(void 0===this||null===this||"function"!=typeof a)throw new TypeError;var c,d=this.length>>>0;for(c=0;d>c;++c)c in this&&a.call(b,this[c],c,this)},j={},k=0,l=[],m=[],n={},o=function(a){return a.cloneNode(!0)},p=function(a,b){m[a]=m[a]||[],m[a].push(b)},q=function(a){for(var b=0,c=m[a].length;c>b;b++)!function(b){setTimeout(function(){m[a][b](o(j[a]))},0)}(b)},r=function(a,c){if(void 0!==j[a])j[a]instanceof SVGSVGElement?c(o(j[a])):p(a,c);else{if(!b.XMLHttpRequest)return c("Browser does not support XMLHttpRequest"),!1;j[a]={},p(a,c);var d=new XMLHttpRequest;d.onreadystatechange=function(){if(4===d.readyState){if(404===d.status||null===d.responseXML)return c("Unable to load SVG file: "+a),g&&c("Note: SVG injection ajax calls do not work locally without adjusting security setting in your browser. Or consider using a local webserver."),c(),!1;if(!(200===d.status||g&&0===d.status))return c("There was a problem injecting the SVG: "+d.status+" "+d.statusText),!1;if(d.responseXML instanceof Document)j[a]=d.responseXML.documentElement;else if(DOMParser&&DOMParser instanceof Function){var b;try{var e=new DOMParser;b=e.parseFromString(d.responseText,"text/xml")}catch(f){b=void 0}if(!b||b.getElementsByTagName("parsererror").length)return c("Unable to parse SVG file: "+a),!1;j[a]=b.documentElement}q(a)}},d.open("GET",a),d.overrideMimeType&&d.overrideMimeType("text/xml"),d.send()}},s=function(a,c,d,e){var g=a.getAttribute("data-src")||a.getAttribute("src");if(!/svg$/i.test(g))return e("Attempted to inject a file with a non-svg extension: "+g),void 0;if(!h){var j=a.getAttribute("data-fallback")||a.getAttribute("data-png");return j?(a.setAttribute("src",j),e(null)):d?(a.setAttribute("src",d+"/"+g.split("/").pop().replace(".svg",".png")),e(null)):e("This browser does not support SVG and no PNG fallback was defined."),void 0}-1===l.indexOf(a)&&(l.push(a),a.setAttribute("src",""),r(g,function(d){if("undefined"==typeof d||"string"==typeof d)return e(d),!1;var h=a.getAttribute("id");h&&d.setAttribute("id",h);var j=a.getAttribute("title");j&&d.setAttribute("title",j);var m=[].concat(d.getAttribute("class")||[],"injected-svg",a.getAttribute("class")||[]).join(" ");d.setAttribute("class",f(m));var o=a.getAttribute("style");o&&d.setAttribute("style",o);var p=[].filter.call(a.attributes,function(a){return/^data-\w[\w\-]*$/.test(a.name)});i.call(p,function(a){a.name&&a.value&&d.setAttribute(a.name,a.value)});for(var q,r=d.querySelectorAll("defs clipPath[id]"),s=0,t=r.length;t>s;s++){q=r[s].id+"-"+k;for(var u=d.querySelectorAll('[clip-path*="'+r[s].id+'"]'),v=0,w=u.length;w>v;v++)u[v].setAttribute("clip-path","url(#"+q+")");r[s].id=q}d.removeAttribute("xmlns:a");for(var x,y,z=d.querySelectorAll("script"),A=[],B=0,C=z.length;C>B;B++)y=z[B].getAttribute("type"),y&&"application/ecmascript"!==y&&"application/javascript"!==y||(x=z[B].innerText||z[B].textContent,A.push(x),d.removeChild(z[B]));if(A.length>0&&("always"===c||"once"===c&&!n[g])){for(var D=0,E=A.length;E>D;D++)new Function(A[D])(b);n[g]=!0}a.parentNode.replaceChild(d,a),delete l[l.indexOf(a)],a=null,k++,e(d)}))},t=function(a,b,c){b=b||{};var d=b.evalScripts||"always",e=b.pngFallback||!1,f=b.each;if(void 0!==a.length){var g=0;i.call(a,function(b){s(b,d,e,function(b){f&&"function"==typeof f&&f(b),c&&a.length===++g&&c(g)})})}else a?s(a,d,e,function(b){f&&"function"==typeof f&&f(b),c&&c(1),a=null}):c&&c(0)};"object"==typeof c&&"object"==typeof c.exports?c.exports=d=t:"function"==typeof a&&a.amd?a(function(){return t}):"object"==typeof b&&(b.SVGInjector=t)}(window,document)},{}]},{},[1])(1)});
+(function() {
+ 'use strict';
+
+ angular.module('foundation.core.animation', [])
+ .service('FoundationAnimation', FoundationAnimation)
+ ;
+
+ function FoundationAnimation() {
+ var animations = [];
+ var service = {};
+
+ var initClasses = ['ng-enter', 'ng-leave'];
+ var activeClasses = ['ng-enter-active', 'ng-leave-active'];
+ var activeGenericClass = 'is-active';
+ var events = [
+ 'webkitAnimationEnd', 'mozAnimationEnd',
+ 'MSAnimationEnd', 'oanimationend',
+ 'animationend', 'webkitTransitionEnd',
+ 'otransitionend', 'transitionend'
+ ];
+
+ service.animate = animate;
+ service.toggleAnimation = toggleAnimation;
+
+ return service;
+
+ function toggleAnimation(element, futureState) {
+ if(futureState) {
+ element.addClass(activeGenericClass);
+ } else {
+ element.removeClass(activeGenericClass);
+ }
+ }
+
+ function animate(element, futureState, animationIn, animationOut) {
+ var timedOut = true;
+ var self = this;
+ self.cancelAnimation = cancelAnimation;
+
+ var animationClass = futureState ? animationIn: animationOut;
+ var activation = futureState;
+ var initClass = activation ? initClasses[0] : initClasses[1];
+ var activeClass = activation ? activeClasses[0] : activeClasses[1];
+ //stop animation
+ registerElement(element);
+ reset();
+ element.addClass(animationClass);
+ element.addClass(initClass);
+
+ element.addClass(activeGenericClass);
+
+ //force a "tick"
+ reflow();
+
+ //activate
+ element[0].style.transitionDuration = '';
+ element.addClass(activeClass);
+
+ element.one(events.join(' '), function() {
+ finishAnimation();
+ });
+
+ setTimeout(function() {
+ if(timedOut) {
+ finishAnimation();
+ }
+ }, 3000);
+
+ function finishAnimation() {
+ deregisterElement(element);
+ reset(); //reset all classes
+ element[0].style.transitionDuration = '';
+ element.removeClass(!activation ? activeGenericClass : ''); //if not active, remove active class
+ reflow();
+ timedOut = false;
+ }
+
+
+ function cancelAnimation(element) {
+ deregisterElement(element);
+ angular.element(element).off(events.join(' ')); //kill all animation event handlers
+ timedOut = false;
+ }
+
+ function registerElement(el) {
+ var elObj = {
+ el: el,
+ animation: self
+ };
+
+ //kill in progress animations
+ var inProgress = animations.filter(function(obj) {
+ return obj.el === el;
+ });
+ if(inProgress.length > 0) {
+ var target = inProgress[0].el[0];
+
+ inProgress[0].animation.cancelAnimation(target);
+ }
+
+ animations.push(elObj);
+ }
+
+ function deregisterElement(el) {
+ var index;
+ var currentAnimation = animations.filter(function(obj, ind) {
+ if(obj.el === el) {
+ index = ind;
+ }
+ });
+
+ if(index >= 0) {
+ animations.splice(index, 1);
+ }
+
+ }
+
+ function reflow() {
+ return element[0].offsetWidth;
+ }
+
+ function reset() {
+ element[0].style.transitionDuration = 0;
+ element.removeClass(initClasses.join(' ') + ' ' + activeClasses.join(' ') + ' ' + animationIn + ' ' + animationOut);
+ }
+ }
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.core', [
+ 'foundation.core.animation'
+ ])
+ .service('FoundationApi', FoundationApi)
+ .service('FoundationAdapter', FoundationAdapter)
+ .factory('Utils', Utils)
+ ;
+
+ FoundationApi.$inject = ['FoundationAnimation'];
+
+ function FoundationApi(FoundationAnimation) {
+ var listeners = {};
+ var settings = {};
+ var uniqueIds = [];
+ var service = {};
+
+ service.subscribe = subscribe;
+ service.unsubscribe = unsubscribe;
+ service.publish = publish;
+ service.getSettings = getSettings;
+ service.modifySettings = modifySettings;
+ service.generateUuid = generateUuid;
+ service.toggleAnimate = toggleAnimate;
+ service.closeActiveElements = closeActiveElements;
+ service.animate = animate;
+
+ return service;
+
+ function subscribe(name, callback) {
+ if (!listeners[name]) {
+ listeners[name] = [];
+ }
+
+ listeners[name].push(callback);
+ return true;
+ }
+
+ function unsubscribe(name, callback) {
+ if (listeners[name] !== undefined) {
+ delete listeners[name];
+ }
+ if (typeof callback == 'function') {
+ callback.call(this);
+ }
+ }
+
+ function publish(name, msg) {
+ if (!listeners[name]) {
+ listeners[name] = [];
+ }
+
+ listeners[name].forEach(function(cb) {
+ cb(msg);
+ });
+
+ return;
+ }
+
+ function getSettings() {
+ return settings;
+ }
+
+ function modifySettings(tree) {
+ settings = angular.extend(settings, tree);
+ return settings;
+ }
+
+ function generateUuid() {
+ var uuid = '';
+
+ //little trick to produce semi-random IDs
+ do {
+ uuid += 'zf-uuid-';
+ for (var i=0; i<15; i++) {
+ uuid += Math.floor(Math.random()*16).toString(16);
+ }
+ } while(!uniqueIds.indexOf(uuid));
+
+ uniqueIds.push(uuid);
+ return uuid;
+ }
+
+ function toggleAnimate(element, futureState) {
+ FoundationAnimation.toggleAnimate(element, futureState);
+ }
+
+ function closeActiveElements(options) {
+ var self = this;
+ options = options || {};
+ var activeElements = document.querySelectorAll('.is-active[zf-closable]');
+ // action sheets are nested zf-closable elements, so we have to target the parent
+ var nestedActiveElements = document.querySelectorAll('[zf-closable] > .is-active')
+
+ if (activeElements.length) {
+ angular.forEach(activeElements, function(el) {
+ if (options.exclude !== el.id) {
+ self.publish(el.id, 'close');
+ }
+ });
+ }
+ if (nestedActiveElements.length) {
+ angular.forEach(nestedActiveElements, function(el) {
+ var parentId = el.parentNode.id;
+ if (options.exclude !== parentId) {
+ self.publish(parentId, 'close');
+ }
+ })
+ }
+ }
+
+ function animate(element, futureState, animationIn, animationOut) {
+ FoundationAnimation.animate(element, futureState, animationIn, animationOut);
+ }
+ }
+
+ FoundationAdapter.$inject = ['FoundationApi'];
+
+ function FoundationAdapter(foundationApi) {
+
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+ }
+
+
+ function Utils() {
+ var utils = {};
+
+ utils.throttle = throttleUtil;
+
+ return utils;
+
+ function throttleUtil(func, delay) {
+ var timer = null;
+
+ return function () {
+ var context = this, args = arguments;
+
+ if (timer === null) {
+ timer = setTimeout(function () {
+ func.apply(context, args);
+ timer = null;
+ }, delay);
+ }
+ };
+ }
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.dynamicRouting.animations', ['foundation.dynamicRouting'])
+ .directive('uiView', uiView)
+ ;
+
+ uiView.$inject = ['$rootScope', '$state'];
+
+ function uiView($rootScope, $state) {
+ var directive = {
+ restrict : 'ECA',
+ priority : -400,
+ link : link
+ };
+
+ return directive;
+
+ function link(scope, element) {
+ var animation = {};
+ var animationEnded = false;
+ var presetHeight;
+
+ var cleanup = [
+ $rootScope.$on('$stateChangeStart', onStateChangeStart),
+ $rootScope.$on('$stateChangeError', onStateChangeError),
+ scope.$on('$stateChangeSuccess', onStateChangeSuccess),
+ scope.$on('$viewContentAnimationEnded', onViewContentAnimationEnded)
+ ];
+
+ var destroyed = scope.$on('$destroy', function onDestroy() {
+ angular.forEach(cleanup, function (cb) {
+ if (angular.isFunction(cb)) {
+ cb();
+ }
+ });
+
+ destroyed();
+ });
+
+ function onStateChangeStart(event, toState, toParams, fromState, fromParams) {
+
+ if (fromState.animation) {
+ if (!fromState.animation.leave && !toState.animation.leave) {
+ return;
+ }
+ else {
+ animationRouter(event, toState, fromState);
+ }
+ }
+ }
+
+ function animationRouter(event, toState, fromState) {
+ if (!animationEnded) {
+ resetParent();
+ prepareParent();
+
+ element.removeClass(fromState.animation.leave);
+ }
+ else {
+ prepareParent();
+
+ element.addClass(fromState.animation.leave);
+ }
+
+ }
+
+ function onStateChangeError() {
+ if(animation.leave) {
+ element.removeClass(animation.leave);
+ }
+
+ resetParent(); //reset parent if state change fails
+ }
+
+ function onStateChangeSuccess() {
+ resetParent();
+ if ($state.includes(getState()) && animation.enter) {
+ element.addClass(animation.enter);
+ }
+ }
+
+ function onViewContentAnimationEnded(event) {
+ if (event.targetScope === scope && animation.enter) {
+ element.removeClass(animation.enter);
+ }
+
+ animationEnded = true;
+
+ }
+
+ function getState() {
+ var view = element.data('$uiView');
+ var state = view && view.state && view.state.self;
+
+ if (state) {
+ angular.extend(animation, state.animation);
+ }
+
+ return state;
+ }
+
+ function resetParent() {
+ element.parent().removeClass('position-absolute');
+ if(presetHeight !== true) {
+ element.parent()[0].style.height = null;
+ }
+ }
+
+ function prepareParent() {
+ var parentHeight = parseInt(element.parent()[0].style.height);
+ var elHeight = parseInt(window.getComputedStyle(element[0], null).getPropertyValue('height'));
+ var tempHeight = parentHeight > 0 ? parentHeight : elHeight > 0 ? elHeight : '';
+
+ if(parentHeight > 0) {
+ presetHeight = true;
+ }
+
+ element.parent()[0].style.height = tempHeight + 'px';
+ element.parent().addClass('position-absolute');
+ }
+ }
+ }
+
+})();
+(function() {
+ 'use strict';
+
+ angular.module('foundation.dynamicRouting', ['ui.router'])
+ .provider('$FoundationState', FoundationState)
+ .controller('DefaultController', DefaultController)
+ .config(DynamicRoutingConfig)
+ .run(DynamicRoutingRun)
+ ;
+
+ FoundationState.$inject = ['$stateProvider'];
+
+ function FoundationState($stateProvider) {
+ var complexViews = {};
+
+ this.registerDynamicRoutes = function(routes) {
+ var dynamicRoutes = routes || foundationRoutes;
+
+ angular.forEach(dynamicRoutes, function(page) {
+ if (page.hasComposed) {
+ if (!angular.isDefined(complexViews[page.parent])) {
+ complexViews[page.parent] = { children: {} };
+ }
+
+ if (page.controller) {
+ page.controller = getController(page);
+ }
+
+ complexViews[page.parent].children[page.name] = page;
+
+ } else if (page.composed) {
+ if(!angular.isDefined(complexViews[page.name])) {
+ complexViews[page.name] = { children: {} };
+ }
+
+ if (page.controller) {
+ page.controller = getController(page);
+ }
+
+ angular.extend(complexViews[page.name], page);
+ } else {
+ var state = {
+ url: page.url,
+ templateUrl: page.path,
+ abstract: page.abstract || false,
+ parent: page.parent || '',
+ controller: getController(page),
+ data: getData(page),
+ animation: buildAnimations(page),
+ };
+
+ $stateProvider.state(page.name, state);
+ }
+ });
+
+ angular.forEach(complexViews, function(page) {
+ var state = {
+ url: page.url,
+ parent: page.parent || '',
+ abstract: page.abstract || false,
+ data: getData(page),
+ animation: buildAnimations(page),
+ views: {
+ '': buildState(page.path, page)
+ }
+ };
+
+ angular.forEach(page.children, function(sub) {
+ state.views[sub.name + '@' + page.name] = buildState(sub.path, page);
+ });
+
+ $stateProvider.state(page.name, state);
+ });
+ };
+
+ this.$get = angular.noop;
+
+ function getData(page) {
+ var data = { vars: {} };
+ if (page.data) {
+ if (typeof page.data.vars === "object") {
+ data.vars = page.data.vars;
+ }
+ delete page.data.vars;
+ angular.extend(data, page.data);
+ }
+ delete page.data;
+ angular.extend(data.vars, page);
+ return data;
+ }
+
+ function buildState(path, state) {
+ return {
+ templateUrl: path,
+ controller: getController(state),
+ };
+ }
+
+ function getController(state) {
+ var ctrl = state.controller || 'DefaultController';
+
+ if (!/\w\s+as\s+\w/.test(ctrl)) {
+ ctrl += ' as PageCtrl';
+ }
+
+ return ctrl;
+ }
+
+ function buildAnimations(state) {
+ var animations = {};
+
+ if (state.animationIn) {
+ animations.enter = state.animationIn;
+ }
+
+ if (state.animationOut) {
+ animations.leave = state.animationOut;
+ }
+
+ return animations;
+ }
+ }
+
+ DefaultController.$inject = ['$scope', '$stateParams', '$state'];
+
+ function DefaultController($scope, $stateParams, $state) {
+ var params = {};
+ angular.forEach($stateParams, function(value, key) {
+ params[key] = value;
+ });
+
+ $scope.params = params;
+ $scope.current = $state.current.name;
+
+ if($state.current.views) {
+ $scope.vars = $state.current.data.vars;
+ $scope.composed = $state.current.data.vars.children;
+ } else {
+ $scope.vars = $state.current.data.vars;
+ }
+ }
+
+ DynamicRoutingConfig.$inject = ['$FoundationStateProvider'];
+
+ function DynamicRoutingConfig(FoundationStateProvider) {
+ FoundationStateProvider.registerDynamicRoutes(foundationRoutes);
+ }
+
+ DynamicRoutingRun.$inject = ['$rootScope', '$state', '$stateParams'];
+
+ function DynamicRoutingRun($rootScope, $state, $stateParams) {
+ $rootScope.$state = $state;
+ $rootScope.$stateParams = $stateParams;
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.mediaquery', ['foundation.core'])
+ .run(mqInitRun)
+ .factory('FoundationMQInit', FoundationMQInit)
+ .factory('mqHelpers', mqHelpers)
+ .service('FoundationMQ', FoundationMQ)
+ ;
+
+ mqInitRun.$inject = ['FoundationMQInit'];
+
+ function mqInitRun(mqInit) {
+ mqInit.init();
+ }
+
+ FoundationMQInit.$inject = ['mqHelpers', 'FoundationApi', 'Utils'];
+
+ function FoundationMQInit(helpers, foundationApi, u){
+ var factory = {};
+ var namedQueries = {
+ 'default' : 'only screen',
+ landscape : 'only screen and (orientation: landscape)',
+ portrait : 'only screen and (orientation: portrait)',
+ retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +
+ 'only screen and (min--moz-device-pixel-ratio: 2),' +
+ 'only screen and (-o-min-device-pixel-ratio: 2/1),' +
+ 'only screen and (min-device-pixel-ratio: 2),' +
+ 'only screen and (min-resolution: 192dpi),' +
+ 'only screen and (min-resolution: 2dppx)'
+ };
+
+ factory.init = init;
+
+ return factory;
+
+ function init() {
+ var mediaQueries;
+ var extractedMedia;
+ var mediaObject;
+
+ helpers.headerHelper(['foundation-mq']);
+ extractedMedia = helpers.getStyle('.foundation-mq', 'font-family');
+
+ mediaQueries = helpers.parseStyleToObject((extractedMedia));
+
+ for(var key in mediaQueries) {
+ mediaQueries[key] = 'only screen and (min-width: ' + mediaQueries[key].replace('rem', 'em') + ')';
+ }
+
+
+ foundationApi.modifySettings({
+ mediaQueries: angular.extend(mediaQueries, namedQueries)
+ });
+
+ window.addEventListener('resize', u.throttle(function() {
+ foundationApi.publish('resize', 'window resized');
+ }, 50));
+
+ }
+ }
+
+
+ function mqHelpers() {
+ var factory = {};
+
+ factory.headerHelper = headerHelper;
+ factory.getStyle = getStyle;
+ factory.parseStyleToObject = parseStyleToObject;
+
+ return factory;
+
+ function headerHelper(classArray) {
+ var i = classArray.length;
+ var head = angular.element(document.querySelectorAll('head'));
+
+ while(i--) {
+ head.append('<meta class="' + classArray[i] + '" />');
+ }
+
+ return;
+ }
+
+ function getStyle(selector, styleName) {
+ var elem = document.querySelectorAll(selector)[0];
+ var style = window.getComputedStyle(elem, null);
+
+ return style.getPropertyValue('font-family');
+ }
+
+ // https://github.com/sindresorhus/query-string
+ function parseStyleToObject(str) {
+ var styleObject = {};
+
+ if (typeof str !== 'string') {
+ return styleObject;
+ }
+
+ str = str.trim().slice(1, -1); // browsers re-quote string style values
+
+ if (!str) {
+ return styleObject;
+ }
+
+ styleObject = str.split('&').reduce(function(ret, param) {
+ var parts = param.replace(/\+/g, ' ').split('=');
+ var key = parts[0];
+ var val = parts[1];
+ key = decodeURIComponent(key);
+
+ // missing `=` should be `null`:
+ // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
+ val = val === undefined ? null : decodeURIComponent(val);
+
+ if (!ret.hasOwnProperty(key)) {
+ ret[key] = val;
+ } else if (Array.isArray(ret[key])) {
+ ret[key].push(val);
+ } else {
+ ret[key] = [ret[key], val];
+ }
+ return ret;
+ }, {});
+
+ return styleObject;
+ }
+ }
+
+ FoundationMQ.$inject = ['FoundationApi'];
+
+ function FoundationMQ(foundationApi) {
+ var service = [];
+
+ service.getMediaQueries = getMediaQueries;
+ service.match = match;
+ service.collectScenariosFromElement = collectScenariosFromElement;
+
+ return service;
+
+ function getMediaQueries() {
+ return foundationApi.getSettings().mediaQueries;
+ }
+
+ function match(scenarios) {
+ var count = scenarios.length;
+ var queries = service.getMediaQueries();
+ var matches = [];
+
+ if (count > 0) {
+ while (count--) {
+ var mq;
+ var rule = scenarios[count].media;
+
+ if (queries[rule]) {
+ mq = matchMedia(queries[rule]);
+ } else {
+ mq = matchMedia(rule);
+ }
+
+ if (mq.matches) {
+ matches.push({ ind: count});
+ }
+ }
+ }
+
+ return matches;
+ }
+
+ // Collects a scenario object and templates from element
+ function collectScenariosFromElement(parentElement) {
+ var scenarios = [];
+ var templates = [];
+
+ var elements = parentElement.children();
+ var i = 0;
+
+ angular.forEach(elements, function(el) {
+ var elem = angular.element(el);
+
+
+ //if no source or no html, capture element itself
+ if (!elem.attr('src') || !elem.attr('src').match(/.html$/)) {
+ templates[i] = elem;
+ scenarios[i] = { media: elem.attr('media'), templ: i };
+ } else {
+ scenarios[i] = { media: elem.attr('media'), src: elem.attr('src') };
+ }
+
+ i++;
+ });
+
+ return {
+ scenarios: scenarios,
+ templates: templates
+ };
+ }
+ }
+})();
+
+angular.module('markdown', [])
+ .directive('markdown', function() {
+ return {
+ restrict: 'A',
+ link: function(scope, element, attrs, controller) {
+ element.html(marked(element.html()));
+ }
+ };
+
+});
+
+'use strict';
+
+(function(){
+ var svgDirectives = {};
+
+ angular.forEach([
+ 'clipPath',
+ 'colorProfile',
+ 'src',
+ 'cursor',
+ 'fill',
+ 'filter',
+ 'marker',
+ 'markerStart',
+ 'markerMid',
+ 'markerEnd',
+ 'mask',
+ 'stroke'
+ ],
+ function(attr) {
+ svgDirectives[attr] = [
+ '$rootScope',
+ '$location',
+ '$interpolate',
+ '$sniffer',
+ 'urlResolve',
+ 'computeSVGAttrValue',
+ 'svgAttrExpressions',
+ function(
+ $rootScope,
+ $location,
+ $interpolate,
+ $sniffer,
+ urlResolve,
+ computeSVGAttrValue,
+ svgAttrExpressions) {
+ return {
+ restrict: 'A',
+ link: function(scope, element, attrs) {
+ var initialUrl;
+
+ //Only apply to svg elements to avoid unnecessary observing
+ //Check that is in html5Mode and that history is supported
+ if ((!svgAttrExpressions.SVG_ELEMENT.test(element[0] &&
+ element[0].toString())) ||
+ !$location.$$html5 ||
+ !$sniffer.history) return;
+
+ //Assumes no expressions, since svg is unforgiving of xml violations
+ initialUrl = attrs[attr];
+ attrs.$observe(attr, updateValue);
+ $rootScope.$on('$locationChangeSuccess', updateValue);
+
+ function updateValue () {
+ var newVal = computeSVGAttrValue(initialUrl);
+ //Prevent recursive updating
+ if (newVal && attrs[attr] !== newVal) attrs.$set(attr, newVal);
+ }
+ }
+ };
+ }];
+ });
+
+ angular.module('ngSVGAttributes', []).
+ factory('urlResolve', [function() {
+ //Duplicate of urlResolve & urlParsingNode in angular core
+ var urlParsingNode = document.createElement('a');
+ return function urlResolve(url) {
+ urlParsingNode.setAttribute('href', url);
+ return urlParsingNode;
+ };
+ }]).
+ value('svgAttrExpressions', {
+ FUNC_URI: /^url\((.*)\)$/,
+ SVG_ELEMENT: /SVG[a-zA-Z]*Element/,
+ HASH_PART: /#.*/
+ }).
+ factory('computeSVGAttrValue', [
+ '$location', '$sniffer', 'svgAttrExpressions', 'urlResolve',
+ function($location, $sniffer, svgAttrExpressions, urlResolve) {
+ return function computeSVGAttrValue(url) {
+ var match, fullUrl;
+ if (match = svgAttrExpressions.FUNC_URI.exec(url)) {
+ //hash in html5Mode, forces to be relative to current url instead of base
+ if (match[1].indexOf('#') === 0) {
+ fullUrl = $location.absUrl().
+ replace(svgAttrExpressions.HASH_PART, '') +
+ match[1];
+ }
+ //Presumably links to external SVG document
+ else {
+ fullUrl = urlResolve(match[1]);
+ }
+ }
+ return fullUrl ? 'url(' + fullUrl + ')' : null;
+ };
+ }
+ ]
+ ).
+ directive(svgDirectives);
+}());
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.accordion', [])
+ .controller('ZfAccordionController', zfAccordionController)
+ .directive('zfAccordion', zfAccordion)
+ .directive('zfAccordionItem', zfAccordionItem)
+ ;
+
+ zfAccordionController.$inject = ['$scope'];
+
+ function zfAccordionController($scope) {
+ var controller = this;
+ var sections = controller.sections = $scope.sections = [];
+ var multiOpen = controller.multiOpen = $scope.multiOpen = $scope.multiOpen || false;
+ var collapsible = controller.collapsible = $scope.collapsible = $scope.multiOpen || $scope.collapsible || true; //multi open infers a collapsible true
+ var autoOpen = controller.autoOpen = $scope.autoOpen = $scope.autoOpen || true; //auto open opens first tab on render
+
+ controller.select = function(selectSection) {
+ sections.forEach(function(section) {
+ //if multi open is allowed, toggle a tab
+ if(controller.multiOpen) {
+ if(section.scope === selectSection) {
+ section.scope.active = !section.scope.active;
+ }
+ } else {
+ //non multi open will close all tabs and open one
+ if(section.scope === selectSection) {
+ //if collapsible is allowed, a tab will toggle
+ section.scope.active = collapsible ? !section.scope.active : true;
+ } else {
+ section.scope.active = false;
+ }
+ }
+
+ });
+ };
+
+ controller.addSection = function addsection(sectionScope) {
+ sections.push({ scope: sectionScope });
+
+ if(sections.length === 1 && autoOpen === true) {
+ sections[0].active = true;
+ sections[0].scope.active = true;
+ }
+ };
+
+ controller.closeAll = function() {
+ sections.forEach(function(section) {
+ section.scope.active = false;
+ });
+ };
+ }
+
+ function zfAccordion() {
+ var directive = {
+ restrict: 'EA',
+ transclude: 'true',
+ replace: true,
+ templateUrl: 'components/accordion/accordion.html',
+ controller: 'ZfAccordionController',
+ scope: {
+ multiOpen: '@?',
+ collapsible: '@?',
+ autoOpen: '@?'
+ },
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+ scope.multiOpen = controller.multiOpen = scope.multiOpen === "true" ? true : false;
+ scope.collapsible = controller.collapsible = scope.collapsible === "true" ? true : false;
+ scope.autoOpen = controller.autoOpen = scope.autoOpen === "true" ? true : false;
+ }
+ }
+
+ //accordion item
+ function zfAccordionItem() {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/accordion/accordion-item.html',
+ transclude: true,
+ scope: {
+ title: '@'
+ },
+ require: '^zfAccordion',
+ replace: true,
+ controller: function() {},
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller, transclude) {
+ scope.active = false;
+ controller.addSection(scope);
+
+ scope.activate = function() {
+ controller.select(scope);
+ };
+
+ }
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.actionsheet', ['foundation.core'])
+ .controller('ZfActionSheetController', zfActionSheetController)
+ .directive('zfActionSheet', zfActionSheet)
+ .directive('zfAsContent', zfAsContent)
+ .directive('zfAsButton', zfAsButton)
+ .service('FoundationActionSheet', FoundationActionSheet)
+ ;
+
+ FoundationActionSheet.$inject = ['FoundationApi'];
+
+ function FoundationActionSheet(foundationApi) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+ }
+
+ zfActionSheetController.$inject = ['$scope', 'FoundationApi'];
+
+ function zfActionSheetController($scope, foundationApi) {
+ var controller = this;
+ var content = controller.content = $scope.content;
+ var container = controller.container = $scope.container;
+ var body = angular.element(document.body);
+
+ controller.registerContent = function(scope) {
+ content = scope;
+ content.active = false;
+ };
+
+ controller.registerContainer = function(scope) {
+ container = scope;
+ container.active = false;
+ };
+
+ controller.toggle = toggle;
+ controller.hide = hide;
+
+ controller.registerListener = function() {
+ document.body.addEventListener('click', listenerLogic);
+ };
+
+ controller.deregisterListener = function() {
+ document.body.removeEventListener('click', listenerLogic);
+ }
+
+ function listenerLogic(e) {
+ var el = e.target;
+ var insideActionSheet = false;
+
+ do {
+ if(el.classList && el.classList.contains('action-sheet-container')) {
+ insideActionSheet = true;
+ break;
+ }
+
+ } while ((el = el.parentNode));
+
+ if(!insideActionSheet) {
+ // if the element has a toggle attribute, do nothing
+ if (e.target.attributes['zf-toggle'] || e.target.attributes['zf-hard-toggle']) {
+ return;
+ };
+ // if the element is outside the action sheet and is NOT a toggle element, hide
+ hide();
+ }
+ }
+
+ function hide() {
+ content.hide();
+ container.hide();
+
+ content.$apply();
+ container.$apply();
+ }
+
+ function toggle() {
+ content.toggle();
+ container.toggle();
+
+ content.$apply();
+ container.$apply();
+ }
+ }
+
+ zfActionSheet.$inject = ['FoundationApi'];
+
+ function zfActionSheet(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ templateUrl: 'components/actionsheet/actionsheet.html',
+ controller: 'ZfActionSheetController',
+ compile: compile
+ };
+
+ return directive;
+
+ function compile() {
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs) {
+ iAttrs.$set('zf-closable', 'actionsheet');
+ }
+
+ function postLink(scope, element, attrs, controller) {
+ var id = attrs.id || foundationApi.generateUuid();
+ attrs.$set('id', id);
+
+ scope.active = false;
+
+ foundationApi.subscribe(id, function(msg) {
+ if (msg === 'toggle') {
+ controller.toggle();
+ }
+
+ if (msg === 'hide' || msg === 'close') {
+ controller.hide();
+ }
+
+ });
+
+ controller.registerContainer(scope);
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ return;
+ };
+
+ scope.hide = function() {
+ scope.active = false;
+ return;
+ };
+ }
+ }
+ }
+
+ zfAsContent.$inject = ['FoundationApi'];
+
+ function zfAsContent(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ templateUrl: 'components/actionsheet/actionsheet-content.html',
+ require: '^zfActionSheet',
+ scope: {
+ position: '@?'
+ },
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+ scope.active = false;
+ scope.position = scope.position || 'bottom';
+ controller.registerContent(scope);
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ if(scope.active) {
+ controller.registerListener();
+ } else {
+ controller.deregisterListener();
+ }
+
+ return;
+ };
+
+ scope.hide = function() {
+ scope.active = false;
+ controller.deregisterListener();
+ return;
+ };
+ }
+ }
+
+ zfAsButton.$inject = ['FoundationApi'];
+
+ function zfAsButton(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ templateUrl: 'components/actionsheet/actionsheet-button.html',
+ require: '^zfActionSheet',
+ scope: {
+ title: '@?'
+ },
+ link: link
+ }
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+
+ element.on('click', function(e) {
+ controller.toggle();
+ e.preventDefault();
+ });
+
+ }
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.common', ['foundation.core'])
+ .directive('zfClose', zfClose)
+ .directive('zfOpen', zfOpen)
+ .directive('zfToggle', zfToggle)
+ .directive('zfEscClose', zfEscClose)
+ .directive('zfSwipeClose', zfSwipeClose)
+ .directive('zfHardToggle', zfHardToggle)
+ ;
+
+ zfClose.$inject = ['FoundationApi'];
+
+ function zfClose(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ var targetId = '';
+ if (attrs.zfClose) {
+ targetId = attrs.zfClose;
+ } else {
+ var parentElement= false;
+ var tempElement = element.parent();
+ //find parent modal
+ while(parentElement === false) {
+ if(tempElement[0].nodeName == 'BODY') {
+ parentElement = '';
+ }
+
+ if(typeof tempElement.attr('zf-closable') !== 'undefined' && tempElement.attr('zf-closable') !== false) {
+ parentElement = tempElement;
+ }
+
+ tempElement = tempElement.parent();
+ }
+ targetId = parentElement.attr('id');
+ }
+
+ element.on('click', function(e) {
+ foundationApi.publish(targetId, 'close');
+ e.preventDefault();
+ });
+ }
+ }
+
+ zfOpen.$inject = ['FoundationApi'];
+
+ function zfOpen(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ element.on('click', function(e) {
+ foundationApi.publish(attrs.zfOpen, 'open');
+ e.preventDefault();
+ });
+ }
+ }
+
+ zfToggle.$inject = ['FoundationApi'];
+
+ function zfToggle(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ }
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ element.on('click', function(e) {
+ foundationApi.publish(attrs.zfToggle, 'toggle');
+ e.preventDefault();
+ });
+ }
+ }
+
+ zfEscClose.$inject = ['FoundationApi'];
+
+ function zfEscClose(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ element.on('keyup', function(e) {
+ if (e.keyCode === 27) {
+ foundationApi.closeActiveElements();
+ }
+ e.preventDefault();
+ });
+ }
+ }
+
+ zfSwipeClose.$inject = ['FoundationApi'];
+
+ function zfSwipeClose(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+ return directive;
+
+ function link($scope, element, attrs) {
+ var swipeDirection;
+ var hammerElem;
+ if (Hammer) {
+ hammerElem = new Hammer(element[0]);
+ // set the options for swipe (to make them a bit more forgiving in detection)
+ hammerElem.get('swipe').set({
+ direction: Hammer.DIRECTION_ALL,
+ threshold: 5, // this is how far the swipe has to travel
+ velocity: 0.5 // and this is how fast the swipe must travel
+ });
+ }
+ // detect what direction the directive is pointing
+ switch (attrs.zfSwipeClose) {
+ case 'right':
+ swipeDirection = 'swiperight';
+ break;
+ case 'left':
+ swipeDirection = 'swipeleft';
+ break;
+ case 'up':
+ swipeDirection = 'swipeup';
+ break;
+ case 'down':
+ swipeDirection = 'swipedown';
+ break;
+ default:
+ swipeDirection = 'swipe';
+ }
+ hammerElem.on(swipeDirection, function() {
+ foundationApi.publish(attrs.id, 'close');
+ });
+ }
+ }
+
+ zfHardToggle.$inject = ['FoundationApi'];
+
+ function zfHardToggle(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ element.on('click', function(e) {
+ foundationApi.closeActiveElements({exclude: attrs.zfHardToggle});
+ foundationApi.publish(attrs.zfHardToggle, 'toggle');
+ e.preventDefault();
+ });
+ }
+ }
+
+})();
+
+(function () {
+ 'use strict';
+
+ angular.module('foundation.iconic', [])
+ .provider('Iconic', Iconic)
+ .directive('zfIconic', zfIconic)
+ ;
+
+ // iconic wrapper
+ function Iconic() {
+ // default path
+ var assetPath = 'assets/img/iconic/';
+
+ /**
+ * Sets the path used to locate the iconic SVG files
+ * @param {string} path - the base path used to locate the iconic SVG files
+ */
+ this.setAssetPath = function (path) {
+ assetPath = angular.isString(path) ? path : assetPath;
+ };
+
+ /**
+ * Service implementation
+ * @returns {{}}
+ */
+ this.$get = function () {
+ var iconicObject = new IconicJS();
+
+ var service = {
+ getAccess: getAccess,
+ getAssetPath: getAssetPath
+ };
+
+ return service;
+
+ /**
+ *
+ * @returns {Window.IconicJS}
+ */
+ function getAccess() {
+ return iconicObject;
+ }
+
+ /**
+ *
+ * @returns {string}
+ */
+ function getAssetPath() {
+ return assetPath;
+ }
+ };
+ }
+
+ zfIconic.$inject = ['Iconic', 'FoundationApi', '$compile'];
+
+ function zfIconic(iconic, foundationApi, $compile) {
+ var directive = {
+ restrict: 'A',
+ template: '<img ng-transclude>',
+ transclude: true,
+ replace: true,
+ scope: {
+ dynSrc: '=?',
+ dynIcon: '=?',
+ size: '@?',
+ icon: '@',
+ iconDir: '@?'
+ },
+ compile: compile
+ };
+
+ return directive;
+
+ function compile() {
+ var contents, assetPath;
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, element, attrs) {
+
+ if (scope.iconDir) {
+ // path set via attribute
+ assetPath = scope.iconDir;
+ } else {
+ // default path
+ assetPath = iconic.getAssetPath();
+ }
+ // make sure ends with /
+ if (assetPath.charAt(assetPath.length - 1) !== '/') {
+ assetPath += '/';
+ }
+
+ if (scope.dynSrc) {
+ attrs.$set('data-src', scope.dynSrc);
+ } else if (scope.dynIcon) {
+ attrs.$set('data-src', assetPath + scope.dynIcon + '.svg');
+ } else {
+ if (scope.icon) {
+ attrs.$set('data-src', assetPath + scope.icon + '.svg');
+ } else {
+ // To support expressions on data-src
+ attrs.$set('data-src', attrs.src);
+ }
+ }
+
+ // check if size already added as class
+ if (!element.hasClass('iconic-sm') && !element.hasClass('iconic-md') && !element.hasClass('iconic-lg')) {
+ var iconicClass;
+ switch (scope.size) {
+ case 'small':
+ iconicClass = 'iconic-sm';
+ break;
+ case 'medium':
+ iconicClass = 'iconic-md';
+ break;
+ case 'large':
+ iconicClass = 'iconic-lg';
+ break;
+ default:
+ iconicClass = 'iconic-fluid';
+ }
+ element.addClass(iconicClass);
+ }
+
+ // save contents of un-inject html, to use for dynamic re-injection
+ contents = element[0].outerHTML;
+ }
+
+ function postLink(scope, element, attrs) {
+ var svgElement, ico = iconic.getAccess();
+
+ injectSvg(element[0]);
+
+ foundationApi.subscribe('resize', function () {
+ // only run update on current element
+ ico.update(element[0]);
+ });
+
+ // handle dynamic updating of src
+ if (scope.dynSrc) {
+ scope.$watch('dynSrc', function (newVal, oldVal) {
+ if (newVal && newVal !== oldVal) {
+ reinjectSvg(scope.dynSrc);
+ }
+ });
+ }
+ // handle dynamic updating of icon
+ if (scope.dynIcon) {
+ scope.$watch('dynIcon', function (newVal, oldVal) {
+ if (newVal && newVal !== oldVal) {
+ reinjectSvg(assetPath + scope.dynIcon + '.svg');
+ }
+ });
+ }
+
+ function reinjectSvg(newSrc) {
+ if (svgElement) {
+ // set html
+ svgElement.empty();
+ svgElement.append(angular.element(contents));
+
+ // set new source
+ svgElement.attr('data-src', newSrc);
+
+ // reinject
+ injectSvg(svgElement[0]);
+ }
+ }
+
+ function injectSvg(element) {
+ ico.inject(element, {
+ each: function (injectedElem) {
+ // compile injected svg
+ var angElem = angular.element(injectedElem);
+ svgElement = $compile(angElem)(angElem.scope());
+ }
+ });
+ }
+ }
+ }
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.interchange', ['foundation.core', 'foundation.mediaquery'])
+ .directive('zfInterchange', zfInterchange)
+ ;
+
+ zfInterchange.$inject = [ '$compile', '$http', '$templateCache', 'FoundationApi', 'FoundationMQ'];
+
+ function zfInterchange($compile, $http, $templateCache, foundationApi, foundationMQ) {
+
+ var directive = {
+ restrict: 'EA',
+ transclude: 'element',
+ scope: {
+ position: '@'
+ },
+ replace: true,
+ template: '<div></div>',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, ctrl, transclude) {
+ var childScope, current, scenarios, innerTemplates;
+
+ var globalQueries = foundationMQ.getMediaQueries();
+
+ //setup
+ foundationApi.subscribe('resize', function(msg) {
+ transclude(function(clone, newScope) {
+ if(!scenarios || !innerTemplates) {
+ collectInformation(clone);
+ }
+
+ var ruleMatches = foundationMQ.match(scenarios);
+ var scenario = ruleMatches.length === 0 ? null : scenarios[ruleMatches[0].ind];
+
+ //this could use some love
+ if(scenario && checkScenario(scenario)) {
+ var compiled;
+
+ if(childScope) {
+ childScope.$destroy();
+ childScope = null;
+ }
+
+ if(typeof scenario.templ !== 'undefined') {
+ childScope = newScope;
+
+ //temp container
+ var tmp = document.createElement('div');
+ tmp.appendChild(innerTemplates[scenario.templ][0]);
+
+ element.html(tmp.innerHTML);
+ $compile(element.contents())(childScope);
+ current = scenario;
+ } else {
+ var loader = templateLoader(scenario.src);
+ loader.success(function(html) {
+ childScope = newScope;
+ element.html(html);
+ }).then(function(){
+ $compile(element.contents())(childScope);
+ current = scenario;
+ });
+ }
+ }
+ });
+
+ });
+
+ //init
+ foundationApi.publish('resize', 'initial resize');
+
+ function templateLoader(templateUrl) {
+ return $http.get(templateUrl, {cache: $templateCache});
+ }
+
+ function collectInformation(el) {
+ var data = foundationMQ.collectScenariosFromElement(el);
+
+ scenarios = data.scenarios;
+ innerTemplates = data.templates;
+ }
+
+ function checkScenario(scenario) {
+ return !current || current !== scenario;
+ }
+ }
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.modal', ['foundation.core'])
+ .directive('zfModal', modalDirective)
+ .factory('ModalFactory', ModalFactory)
+ ;
+
+ FoundationModal.$inject = ['FoundationApi', 'ModalFactory'];
+
+ function FoundationModal(foundationApi, ModalFactory) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+ service.newModal = newModal;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+
+ //new modal has to be controlled via the new instance
+ function newModal(config) {
+ return new ModalFactory(config);
+ }
+ }
+
+ modalDirective.$inject = ['FoundationApi'];
+
+ function modalDirective(foundationApi) {
+
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/modal/modal.html',
+ transclude: true,
+ scope: true,
+ replace: true,
+ compile: compile
+ };
+
+ return directive;
+
+ function compile(tElement, tAttrs, transclude) {
+ var type = 'modal';
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs, controller) {
+ iAttrs.$set('zf-closable', type);
+ }
+
+ function postLink(scope, element, attrs) {
+ var dialog = angular.element(element.children()[0]);
+
+ scope.active = scope.active || false;
+ scope.overlay = attrs.overlay === 'false' ? false : true;
+ scope.overlayClose = attrs.overlayClose === 'false' ? false : true;
+
+ var animationIn = attrs.animationIn || 'fadeIn';
+ var animationOut = attrs.animationOut || 'fadeOut';
+
+ var overlayIn = 'fadeIn';
+ var overlayOut = 'fadeOut';
+
+ scope.hideOverlay = function() {
+ if(scope.overlayClose) {
+ scope.hide();
+ }
+ };
+
+ scope.hide = function() {
+ scope.active = false;
+ animate();
+ return;
+ };
+
+ scope.show = function() {
+ scope.active = true;
+ animate();
+ dialog.tabIndex = -1;
+ dialog[0].focus();
+ return;
+ };
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ animate();
+ return;
+ };
+
+ init();
+
+ //setup
+ foundationApi.subscribe(attrs.id, function(msg) {
+ if(msg === 'show' || msg === 'open') {
+ scope.show();
+ } else if (msg === 'close' || msg === 'hide') {
+ scope.hide();
+ } else if (msg === 'toggle') {
+ scope.toggle();
+ }
+
+ if (scope.$root && !scope.$root.$$phase) {
+ scope.$apply();
+ }
+
+ return;
+ });
+
+ function animate() {
+ //animate both overlay and dialog
+ if(!scope.overlay) {
+ element.css('background', 'transparent');
+ }
+
+ foundationApi.animate(element, scope.active, overlayIn, overlayOut);
+ foundationApi.animate(dialog, scope.active, animationIn, animationOut);
+ }
+
+ function init() {
+ if(scope.active) {
+ scope.show();
+ }
+ }
+ }
+ }
+ }
+
+ ModalFactory.$inject = ['$http', '$templateCache', '$rootScope', '$compile', '$timeout', '$q', 'FoundationApi'];
+
+ function ModalFactory($http, $templateCache, $rootScope, $compile, $timeout, $q, foundationApi) {
+ return modalFactory;
+
+ function modalFactory(config) {
+ var self = this, //for prototype functions
+ container = angular.element(config.container || document.body),
+ id = config.id || foundationApi.generateUuid(),
+ attached = false,
+ destroyed = false,
+ html,
+ element,
+ fetched,
+ scope,
+ contentScope
+ ;
+
+ var props = [
+ 'animationIn',
+ 'animationOut',
+ 'overlay',
+ 'overlayClose'
+ ];
+
+ if(config.templateUrl) {
+ //get template
+ fetched = $http.get(config.templateUrl, {
+ cache: $templateCache
+ }).then(function (response) {
+ html = response.data;
+ assembleDirective();
+ });
+
+ } else if(config.template) {
+ //use provided template
+ fetched = true;
+ html = config.template;
+ assembleDirective();
+ }
+
+ self.activate = activate;
+ self.deactivate = deactivate;
+ self.toggle = toggle;
+ self.destroy = destroy;
+
+
+ return {
+ activate: activate,
+ deactivate: deactivate,
+ toggle: toggle,
+ destroy: destroy
+ };
+
+ function checkStatus() {
+ if(destroyed) {
+ throw "Error: Modal was destroyed. Delete the object and create a new ModalFactory instance."
+ }
+ }
+
+ function activate() {
+ checkStatus();
+ $timeout(function() {
+ init(true);
+ foundationApi.publish(id, 'show');
+ }, 0, false);
+ }
+
+ function deactivate() {
+ checkStatus();
+ $timeout(function() {
+ init(false);
+ foundationApi.publish(id, 'hide');
+ }, 0, false);
+ }
+
+ function toggle() {
+ checkStatus();
+ $timeout(function() {
+ init(true);
+ foundationApi.publish(id, 'toggle');
+ }, 0, false);
+ }
+
+ function init(state) {
+ $q.when(fetched).then(function() {
+ if(!attached && html.length > 0) {
+ var modalEl = container.append(element);
+
+ scope.active = state;
+ $compile(element)(scope);
+
+ attached = true;
+ }
+ });
+ }
+
+ function assembleDirective() {
+ // check for duplicate elements to prevent factory from cloning modals
+ if (document.getElementById(id)) {
+ return;
+ }
+
+ html = '<zf-modal id="' + id + '">' + html + '</zf-modal>';
+
+ element = angular.element(html);
+
+ scope = $rootScope.$new();
+
+ // account for directive attributes
+ for(var i = 0; i < props.length; i++) {
+ var prop = props[i];
+
+ if(config[prop]) {
+ switch (prop) {
+ case 'animationIn':
+ element.attr('animation-in', config[prop]);
+ break;
+ case 'animationOut':
+ element.attr('animation-out', config[prop]);
+ break;
+ default:
+ element.attr(prop, config[prop]);
+ }
+ }
+ }
+ // access view scope variables
+ if (config.contentScope) {
+ contentScope = config.contentScope;
+ for (var prop in config.contentScope) {
+ if (config.contentScope.hasOwnProperty(prop)) {
+ scope[prop] = config.contentScope[prop];
+ }
+ }
+ }
+ }
+
+ function destroy() {
+ self.deactivate();
+ setTimeout(function() {
+ scope.$destroy();
+ element.remove();
+ destroyed = true;
+ }, 3000);
+ foundationApi.unsubscribe(id);
+ }
+
+ }
+
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.notification', ['foundation.core'])
+ .controller('ZfNotificationController', ZfNotificationController)
+ .directive('zfNotificationSet', zfNotificationSet)
+ .directive('zfNotification', zfNotification)
+ .directive('zfNotificationStatic', zfNotificationStatic)
+ .directive('zfNotify', zfNotify)
+ .factory('NotificationFactory', NotificationFactory)
+ .service('FoundationNotification', FoundationNotification)
+ ;
+
+ FoundationNotification.$inject = ['FoundationApi', 'NotificationFactory'];
+
+ function FoundationNotification(foundationApi, NotificationFactory) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+
+ function toggle(target) {
+ foundationApi.publish(target, 'toggle');
+ }
+
+ function createNotificationSet(config) {
+ return new NotificationFactory(config);
+ }
+ }
+
+
+ ZfNotificationController.$inject = ['$scope', 'FoundationApi'];
+
+ function ZfNotificationController($scope, foundationApi) {
+ var controller = this;
+ controller.notifications = $scope.notifications = $scope.notifications || [];
+
+ controller.addNotification = function(info) {
+ var id = foundationApi.generateUuid();
+ info.id = id;
+ $scope.notifications.push(info);
+ };
+
+ controller.removeNotification = function(id) {
+ $scope.notifications.forEach(function(notification) {
+ if(notification.id === id) {
+ var ind = $scope.notifications.indexOf(notification);
+ $scope.notifications.splice(ind, 1);
+ }
+ });
+ };
+
+ controller.clearAll = function() {
+ while($scope.notifications.length > 0) {
+ $scope.notifications.pop();
+ }
+ };
+ }
+
+ zfNotificationSet.$inject = ['FoundationApi'];
+
+ function zfNotificationSet(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/notification/notification-set.html',
+ controller: 'ZfNotificationController',
+ replace: true,
+ scope: {
+ position: '@'
+ },
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+ scope.position = scope.position ? scope.position.split(' ').join('-') : 'top-right';
+
+ foundationApi.subscribe(attrs.id, function(msg) {
+ if(msg === 'clearall') {
+ controller.clearAll();
+ }
+ else {
+ controller.addNotification(msg);
+ if (!scope.$root.$$phase) {
+ scope.$apply();
+ }
+ }
+ });
+ }
+ }
+
+ zfNotification.$inject = ['FoundationApi'];
+
+ function zfNotification(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/notification/notification.html',
+ replace: true,
+ transclude: true,
+ require: '^zfNotificationSet',
+ controller: function() { },
+ scope: {
+ title: '=?',
+ content: '=?',
+ image: '=?',
+ notifId: '=',
+ color: '=?',
+ autoclose: '=?'
+ },
+ compile: compile
+ };
+
+ return directive;
+
+ function compile() {
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs) {
+ iAttrs.$set('zf-closable', 'notification');
+ }
+
+ function postLink(scope, element, attrs, controller) {
+ scope.active = false;
+ var animationIn = attrs.animationIn || 'fadeIn';
+ var animationOut = attrs.animationOut || 'fadeOut';
+ var hammerElem;
+
+ //due to dynamic insertion of DOM, we need to wait for it to show up and get working!
+ setTimeout(function() {
+ scope.active = true;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ }, 50);
+
+ scope.hide = function() {
+ scope.active = false;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ setTimeout(function() {
+ controller.removeNotification(scope.notifId);
+ }, 50);
+ };
+
+ // close if autoclose
+ if (scope.autoclose) {
+ setTimeout(function() {
+ if (scope.active) {
+ scope.hide();
+ }
+ }, parseInt(scope.autoclose));
+ };
+
+ // close on swipe
+ if (Hammer) {
+ hammerElem = new Hammer(element[0]);
+ // set the options for swipe (to make them a bit more forgiving in detection)
+ hammerElem.get('swipe').set({
+ direction: Hammer.DIRECTION_ALL,
+ threshold: 5, // this is how far the swipe has to travel
+ velocity: 0.5 // and this is how fast the swipe must travel
+ });
+ }
+
+ hammerElem.on('swipe', function() {
+ if (scope.active) {
+ scope.hide();
+ }
+ });
+ }
+ }
+ }
+
+ zfNotificationStatic.$inject = ['FoundationApi'];
+
+ function zfNotificationStatic(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/notification/notification-static.html',
+ replace: true,
+ transclude: true,
+ scope: {
+ title: '@?',
+ content: '@?',
+ image: '@?',
+ color: '@?',
+ autoclose: '@?'
+ },
+ compile: compile
+ };
+
+ return directive;
+
+ function compile() {
+ var type = 'notification';
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs, controller) {
+ iAttrs.$set('zf-closable', type);
+ }
+
+ function postLink(scope, element, attrs, controller) {
+ scope.position = attrs.position ? attrs.position.split(' ').join('-') : 'top-right';
+
+ var animationIn = attrs.animationIn || 'fadeIn';
+ var animationOut = attrs.animationOut || 'fadeOut';
+
+ //setup
+ foundationApi.subscribe(attrs.id, function(msg) {
+ if(msg == 'show' || msg == 'open') {
+ scope.show();
+ // close if autoclose
+ if (scope.autoclose) {
+ setTimeout(function() {
+ if (scope.active) {
+ scope.hide();
+ }
+ }, parseInt(scope.autoclose));
+ };
+ } else if (msg == 'close' || msg == 'hide') {
+ scope.hide();
+ } else if (msg == 'toggle') {
+ scope.toggle();
+ // close if autoclose
+ if (scope.autoclose) {
+ setTimeout(function() {
+ if (scope.active) {
+ scope.toggle();
+ }
+ }, parseInt(scope.autoclose));
+ };
+ }
+
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ scope.$apply();
+
+ return;
+ });
+
+ scope.hide = function() {
+ scope.active = false;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ return;
+ };
+
+ scope.show = function() {
+ scope.active = true;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ return;
+ };
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ return;
+ };
+
+ }
+ }
+ }
+
+ zfNotify.$inject = ['FoundationApi'];
+
+ function zfNotify(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ scope: {
+ title: '@?',
+ content: '@?',
+ color: '@?',
+ image: '@?',
+ autoclose: '@?'
+ },
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+ element.on('click', function(e) {
+ foundationApi.publish(attrs.zfNotify, {
+ title: scope.title,
+ content: scope.content,
+ color: scope.color,
+ image: scope.image,
+ autoclose: scope.autoclose
+ });
+ e.preventDefault();
+ });
+ }
+ }
+
+ NotificationFactory.$inject = ['$http', '$templateCache', '$rootScope', '$compile', '$timeout', 'FoundationApi'];
+
+ function NotificationFactory($http, $templateCache, $rootScope, $compile, $timeout, foundationApi) {
+ return notificationFactory;
+
+ function notificationFactory(config) {
+ var self = this, //for prototype functions
+ container = angular.element(config.container || document.body),
+ id = config.id || foundationApi.generateUuid(),
+ attached = false,
+ destroyed = false,
+ html,
+ element,
+ scope,
+ contentScope
+ ;
+
+ var props = [
+ 'position'
+ ];
+
+ assembleDirective();
+
+ self.addNotification = addNotification;
+ self.clearAll = clearAll;
+ self.destroy = destroy;
+
+ return {
+ addNotification: addNotification,
+ clearAll: clearAll,
+ destroy: destroy
+ };
+
+ function checkStatus() {
+ if(destroyed) {
+ throw "Error: Notification Set was destroyed. Delete the object and create a new NotificationFactory instance."
+ }
+ }
+
+ function addNotification(notification) {
+ checkStatus();
+ $timeout(function() {
+ foundationApi.publish(id, notification);
+ }, 0, false);
+ }
+
+ function clearAll() {
+ checkStatus();
+ $timeout(function() {
+ foundationApi.publish(id, 'clearall');
+ }, 0, false);
+ }
+
+ function init(state) {
+ if(!attached && html.length > 0) {
+ var modalEl = container.append(element);
+
+ scope.active = state;
+ $compile(element)(scope);
+
+ attached = true;
+ }
+ }
+
+ function assembleDirective() {
+ // check for duplicate element to prevent factory from cloning notification sets
+ if (document.getElementById(id)) {
+ return;
+ }
+ html = '<zf-notification-set id="' + id + '"></zf-notification-set>';
+
+ element = angular.element(html);
+
+ scope = $rootScope.$new();
+
+ for(var i = 0; i < props.length; i++) {
+ if(config[props[i]]) {
+ element.attr(props[i], config[props[i]]);
+ }
+ }
+
+ // access view scope variables
+ if (config.contentScope) {
+ contentScope = config.contentScope;
+ for (var prop in contentScope) {
+ if (contentScope.hasOwnProperty(prop)) {
+ scope[prop] = contentScope[prop];
+ }
+ }
+ }
+ init(true);
+ }
+
+ function destroy() {
+ self.clearAll();
+ setTimeout(function() {
+ scope.$destroy();
+ element.remove();
+ destroyed = true;
+ }, 3000);
+ foundationApi.unsubscribe(id);
+ }
+
+ }
+
+ }
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.offcanvas', ['foundation.core'])
+ .directive('zfOffcanvas', zfOffcanvas)
+ .service('FoundationOffcanvas', FoundationOffcanvas)
+ ;
+
+ FoundationOffcanvas.$inject = ['FoundationApi'];
+
+ function FoundationOffcanvas(foundationApi) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+
+ function toggle(target) {
+ foundationApi.publish(target, 'toggle');
+ }
+ }
+
+ zfOffcanvas.$inject = ['FoundationApi'];
+
+ function zfOffcanvas(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/offcanvas/offcanvas.html',
+ transclude: true,
+ scope: {
+ position: '@'
+ },
+ replace: true,
+ compile: compile
+ };
+
+ return directive;
+
+ function compile(tElement, tAttrs, transclude) {
+ var type = 'offcanvas';
+
+ return {
+ pre: preLink,
+ post: postLink
+ }
+
+ function preLink(scope, iElement, iAttrs, controller) {
+ iAttrs.$set('zf-closable', type);
+ document.body.classList.add('has-off-canvas');
+ }
+
+ function postLink(scope, element, attrs) {
+ scope.position = scope.position || 'left';
+
+ scope.active = false;
+ //setup
+ foundationApi.subscribe(attrs.id, function(msg) {
+ if(msg === 'show' || msg === 'open') {
+ scope.show();
+ } else if (msg === 'close' || msg === 'hide') {
+ scope.hide();
+ } else if (msg === 'toggle') {
+ scope.toggle();
+ }
+
+ if (!scope.$root.$$phase) {
+ scope.$apply();
+ }
+
+ return;
+ });
+
+ scope.hide = function() {
+ scope.active = false;
+ return;
+ };
+
+ scope.show = function() {
+ scope.active = true;
+ return;
+ };
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ return;
+ };
+ }
+ }
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.panel', ['foundation.core'])
+ .directive('zfPanel', zfPanel)
+ .service('FoundationPanel', FoundationPanel)
+ ;
+
+ FoundationPanel.$inject = ['FoundationApi'];
+
+ function FoundationPanel(foundationApi) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+ }
+
+ zfPanel.$inject = ['FoundationApi', '$window'];
+
+ function zfPanel(foundationApi, $window) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/panel/panel.html',
+ transclude: true,
+ scope: {
+ position: '@?'
+ },
+ replace: true,
+ compile: compile
+ };
+
+ return directive;
+
+ function compile(tElement, tAttrs, transclude) {
+ var type = 'panel';
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs, controller) {
+ iAttrs.$set('zf-closable', type);
+ scope.position = scope.position || 'left';
+ scope.positionClass = 'panel-' + scope.position;
+ }
+
+ function postLink(scope, element, attrs) {
+ scope.active = false;
+ var animationIn, animationOut;
+ var globalQueries = foundationApi.getSettings().mediaQueries;
+
+ //urgh, there must be a better way
+ if(scope.position === 'left') {
+ animationIn = attrs.animationIn || 'slideInRight';
+ animationOut = attrs.animationOut || 'slideOutLeft';
+ } else if (scope.position === 'right') {
+ animationIn = attrs.animationIn || 'slideInLeft';
+ animationOut = attrs.animationOut || 'slideOutRight';
+ } else if (scope.position === 'top') {
+ animationIn = attrs.animationIn || 'slideInDown';
+ animationOut = attrs.animationOut || 'slideOutUp';
+ } else if (scope.position === 'bottom') {
+ animationIn = attrs.animationIn || 'slideInUp';
+ animationOut = attrs.animationOut || 'slideOutBottom';
+ }
+
+
+ //setup
+ foundationApi.subscribe(attrs.id, function(msg) {
+ var panelPosition = $window.getComputedStyle(element[0]).getPropertyValue("position");
+
+ // patch to prevent panel animation on larger screen devices
+ if (panelPosition !== 'absolute') {
+ return;
+ }
+
+ if(msg == 'show' || msg == 'open') {
+ scope.show();
+ } else if (msg == 'close' || msg == 'hide') {
+ scope.hide();
+ } else if (msg == 'toggle') {
+ scope.toggle();
+ }
+
+ if (!scope.$root.$$phase) {
+ scope.$apply();
+ }
+
+ return;
+ });
+
+ scope.hide = function() {
+ if(scope.active){
+ scope.active = false;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ }
+
+ return;
+ };
+
+ scope.show = function() {
+ if(!scope.active){
+ scope.active = true;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ }
+
+ return;
+ };
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+
+ return;
+ };
+
+ element.on('click', function(e) {
+ //check sizing
+ var srcEl = e.srcElement;
+
+ if(!matchMedia(globalQueries.medium).matches && srcEl.href && srcEl.href.length > 0) {
+ //hide element if it can't match at least medium
+ scope.hide();
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ }
+ });
+ }
+ }
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.popup', ['foundation.core'])
+ .directive('zfPopup', zfPopup)
+ .directive('zfPopupToggle', zfPopupToggle)
+ .service('FoundationPopup', FoundationPopup)
+ ;
+
+ FoundationPopup.$inject = ['FoundationApi'];
+
+ function FoundationPopup(foundationApi) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+
+ function toggle(target, popupTarget) {
+ foundationApi.publish(target, ['toggle', popupTarget]);
+ }
+ }
+
+ zfPopup.$inject = ['FoundationApi'];
+
+ function zfPopup(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ templateUrl: 'components/popup/popup.html',
+ scope: {
+ pinTo: '@?',
+ pinAt: '@?',
+ target: '@?'
+ },
+ compile: compile
+ };
+
+ return directive;
+
+ function compile() {
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs) {
+ iAttrs.$set('zf-closable', 'popup');
+ }
+
+ function postLink(scope, element, attrs) {
+ scope.active = false;
+ scope.target = scope.target || false;
+
+ var attachment = scope.pinTo || 'top center';
+ var targetAttachment = scope.pinAt || 'bottom center';
+ var tetherInit = false;
+ var tether = {};
+
+ //setup
+ foundationApi.subscribe(attrs.id, function(msg) {
+ if(msg[0] === 'show' || msg[0] === 'open') {
+ scope.show(msg[1]);
+ } else if (msg[0] === 'close' || msg[0] === 'hide') {
+ scope.hide();
+ } else if (msg[0] === 'toggle') {
+ scope.toggle(msg[1]);
+ }
+
+ scope.$apply();
+
+ return;
+ });
+
+
+ scope.hide = function() {
+ scope.active = false;
+ tetherElement();
+ tether.disable();
+ return;
+ };
+
+ scope.show = function(newTarget) {
+ scope.active = true;
+ tetherElement(newTarget);
+ tether.enable();
+
+ return;
+ };
+
+ scope.toggle = function(newTarget) {
+ scope.active = !scope.active;
+ tetherElement(newTarget);
+
+ if(scope.active) {
+ tether.enable();
+ } else {
+ tether.disable();
+ }
+
+ return;
+ };
+
+ function tetherElement(target) {
+ if(tetherInit) {
+ return;
+ }
+
+ scope.target = scope.target ? document.getElementById(scope.target) : document.getElementById(target);
+
+ tether = new Tether({
+ element: element[0],
+ target: scope.target,
+ attachment: attachment,
+ targetAttachment: targetAttachment,
+ enable: false
+ });
+
+ tetherInit = true;
+ }
+
+ }
+ }
+ }
+
+ zfPopupToggle.$inject = ['FoundationApi'];
+
+ function zfPopupToggle(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ var target = attrs.zfPopupToggle;
+ var id = attrs.id || foundationApi.generateUuid();
+ attrs.$set('id', id);
+
+ element.on('click', function(e) {
+ foundationApi.publish(target, ['toggle', id]);
+ e.preventDefault();
+ });
+ }
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ angular.module('foundation.tabs', ['foundation.core'])
+ .controller('ZfTabsController', ZfTabsController)
+ .directive('zfTabs', zfTabs)
+ .directive('zfTabContent', zfTabContent)
+ .directive('zfTab', zfTab)
+ .directive('zfTabIndividual', zfTabIndividual)
+ .directive('zfTabHref', zfTabHref)
+ .directive('zfTabCustom', zfTabCustom)
+ .directive('zfTabContentCustom', zfTabContentCustom)
+ .service('FoundationTabs', FoundationTabs)
+ ;
+
+ FoundationTabs.$inject = ['FoundationApi'];
+
+ function FoundationTabs(foundationApi) {
+ var service = {};
+
+ service.activate = activate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ }
+
+ ZfTabsController.$inject = ['$scope', 'FoundationApi'];
+
+ function ZfTabsController($scope, foundationApi) {
+ var controller = this;
+ var tabs = controller.tabs = $scope.tabs = [];
+ var id = '';
+
+ controller.select = function(selectTab) {
+ tabs.forEach(function(tab) {
+ tab.active = false;
+ tab.scope.active = false;
+
+ if(tab.scope === selectTab) {
+ foundationApi.publish(id, ['activate', tab]);
+
+ tab.active = true;
+ tab.scope.active = true;
+ }
+ });
+
+ };
+
+ controller.addTab = function addTab(tabScope) {
+ tabs.push({ scope: tabScope, active: false, parentContent: controller.id });
+
+ if(tabs.length === 1) {
+ tabs[0].active = true;
+ tabScope.active = true;
+ }
+ };
+
+ controller.getId = function() {
+ return id;
+ };
+
+ controller.setId = function(newId) {
+ id = newId;
+ };
+ }
+
+ zfTabs.$inject = ['FoundationApi'];
+
+ function zfTabs(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: 'true',
+ replace: true,
+ templateUrl: 'components/tabs/tabs.html',
+ controller: 'ZfTabsController',
+ scope: {
+ displaced: '@?'
+ },
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+ scope.id = attrs.id || foundationApi.generateUuid();
+ scope.showTabContent = scope.displaced !== 'true';
+ attrs.$set('id', scope.id);
+ controller.setId(scope.id);
+
+ //update tabs in case tab-content doesn't have them
+ var updateTabs = function() {
+ foundationApi.publish(scope.id + '-tabs', scope.tabs);
+ };
+
+ foundationApi.subscribe(scope.id + '-get-tabs', function() {
+ updateTabs();
+ });
+ }
+ }
+
+ zfTabContent.$inject = ['FoundationApi'];
+
+ function zfTabContent(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ transclude: 'true',
+ replace: true,
+ scope: {
+ tabs: '=?',
+ target: '@'
+ },
+ templateUrl: 'components/tabs/tab-content.html',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, ctrl) {
+ scope.tabs = scope.tabs || [];
+ var id = scope.target;
+
+ foundationApi.subscribe(id, function(msg) {
+ if(msg[0] === 'activate') {
+ var tabId = msg[1];
+ scope.tabs.forEach(function (tab) {
+ tab.scope.active = false;
+ tab.active = false;
+
+ if(tab.scope.id === id) {
+ tab.scope.active = true;
+ tab.active = true;
+ }
+ });
+ }
+ });
+
+ //if tabs empty, request tabs
+ if(scope.tabs.length === 0) {
+ foundationApi.subscribe(id + '-tabs', function(tabs) {
+ scope.tabs = tabs;
+ });
+
+ foundationApi.publish(id + '-get-tabs', '');
+ }
+ }
+ }
+
+ zfTab.$inject = ['FoundationApi'];
+
+ function zfTab(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/tabs/tab.html',
+ transclude: true,
+ scope: {
+ title: '@'
+ },
+ require: '^zfTabs',
+ replace: true,
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller, transclude) {
+ scope.id = attrs.id || foundationApi.generateUuid();
+ scope.active = false;
+ scope.transcludeFn = transclude;
+ controller.addTab(scope);
+
+ foundationApi.subscribe(scope.id, function(msg) {
+ if(msg === 'show' || msg === 'open' || msg === 'activate') {
+ scope.makeActive();
+ }
+ });
+
+ scope.makeActive = function() {
+ controller.select(scope);
+ };
+ }
+ }
+
+ zfTabIndividual.$inject = ['FoundationApi'];
+
+ function zfTabIndividual(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: 'true',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, ctrl, transclude) {
+ var tab = scope.$eval(attrs.tab);
+ var id = tab.scope.id;
+
+ tab.scope.transcludeFn(tab.scope, function(tabContent) {
+ element.append(tabContent);
+ });
+
+ foundationApi.subscribe(tab.scope.id, function(msg) {
+ foundationApi.publish(tab.parentContent, ['activate', tab.scope.id]);
+ scope.$apply();
+ });
+
+ }
+ }
+
+ //custom tabs
+
+ zfTabHref.$inject = ['FoundationApi'];
+
+ function zfTabHref(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ replace: false,
+ link: link
+ }
+
+ return directive;
+
+ function link(scope, element, attrs, ctrl) {
+ var target = attrs.zfTabHref;
+
+ foundationApi.subscribe(target, function(msg) {
+ if(msg === 'activate' || msg === 'show' || msg === 'open') {
+ makeActive();
+ }
+ });
+
+
+ element.on('click', function(e) {
+ foundationApi.publish(target, 'activate');
+ makeActive();
+ e.preventDefault();
+ });
+
+ function makeActive() {
+ element.parent().children().removeClass('is-active');
+ element.addClass('is-active');
+ }
+ }
+ }
+
+ zfTabCustom.$inject = ['FoundationApi'];
+
+ function zfTabCustom(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ replace: false,
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, ctrl, transclude) {
+ var children = element.children();
+ angular.element(children[0]).addClass('is-active');
+ }
+ }
+
+ zfTabContentCustom.$inject = ['FoundationApi'];
+
+ function zfTabContentCustom(foundationApi) {
+ return {
+ restrict: 'A',
+ link: link
+ };
+
+ function link(scope, element, attrs) {
+ var tabs = [];
+ var children = element.children();
+
+ angular.forEach(children, function(node) {
+ if(node.id) {
+ var tabId = node.id;
+ tabs.push(tabId);
+ foundationApi.subscribe(tabId, function(msg) {
+ if(msg === 'activate' || msg === 'show' || msg === 'open') {
+ activateTabs(tabId);
+ }
+ });
+
+ if(tabs.length === 1) {
+ var el = angular.element(node);
+ el.addClass('is-active');
+ }
+ }
+ });
+
+ function activateTabs(tabId) {
+ var tabNodes = element.children();
+ angular.forEach(tabNodes, function(node) {
+ var el = angular.element(node);
+ el.removeClass('is-active');
+ if(el.attr('id') === tabId) {
+ el.addClass('is-active');
+ }
+
+ });
+ }
+ }
+ }
+
+})();
+
+(function() {
+ 'use strict';
+
+ // imports all components and dependencies under a single namespace
+
+ angular.module('foundation', [
+ 'foundation.core',
+ 'foundation.mediaquery',
+ 'foundation.accordion',
+ 'foundation.actionsheet',
+ 'foundation.common',
+ 'foundation.iconic',
+ 'foundation.interchange',
+ 'foundation.modal',
+ 'foundation.notification',
+ 'foundation.offcanvas',
+ 'foundation.panel',
+ 'foundation.popup',
+ 'foundation.tabs'
+ ]);
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/dist/js/foundation-apps.min.js b/afb-client/bower_components/foundation-apps/dist/js/foundation-apps.min.js
new file mode 100755
index 0000000..81c53e5
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/dist/js/foundation-apps.min.js
@@ -0,0 +1,2 @@
+!function(t){"object"==typeof exports?module.exports=t():"function"==typeof define&&define.amd?define(t):"undefined"!=typeof window?window.IconicJS=t():"undefined"!=typeof global?global.IconicJS=t():"undefined"!=typeof self&&(self.IconicJS=t())}(function(){var t;return function e(t,n,i){function o(a,r){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!r&&u)return u(a,!0);if(c)return c(a,!0);throw new Error("Cannot find module '"+a+"'")}var s=n[a]={exports:{}};t[a][0].call(s.exports,function(e){var n=t[a][1][e];return o(n?n:e)},s,s.exports,e,t,n,i)}return n[a].exports}for(var c="function"==typeof require&&require,a=0;a<i.length;a++)o(i[a]);return o}({1:[function(t,e){var n=(t("./modules/polyfills"),t("./modules/svg-injector")),i=t("./modules/extend"),o=t("./modules/responsive"),c=t("./modules/position"),a=t("./modules/container"),r=t("./modules/log"),u={},s=window.iconicSmartIconApis={},l=("file:"===window.location.protocol,0),f=function(t,e,o){e=i({},u,e||{});var c={evalScripts:e.evalScripts,pngFallback:e.pngFallback};c.each=function(t){if(t)if("string"==typeof t)r.debug(t);else if(t instanceof SVGSVGElement){var n=t.getAttribute("data-icon");if(n&&s[n]){var i=s[n](t);for(var o in i)t[o]=i[o]}/iconic-bg-/.test(t.getAttribute("class"))&&a.addBackground(t),d(t),l++,e&&e.each&&"function"==typeof e.each&&e.each(t)}},"string"==typeof t&&(t=document.querySelectorAll(t)),n(t,c,o)},d=function(t){var e=[];t?"string"==typeof t?e=document.querySelectorAll(t):void 0!==t.length?e=t:"object"==typeof t&&e.push(t):e=document.querySelectorAll("svg.iconic"),Array.prototype.forEach.call(e,function(t){t instanceof SVGSVGElement&&(t.update&&t.update(),o.refresh(t),c.refresh(t))})},p=function(){u.debug&&console.time&&console.time("autoInjectSelector - "+u.autoInjectSelector);var t=l;f(u.autoInjectSelector,{},function(){if(u.debug&&console.timeEnd&&console.timeEnd("autoInjectSelector - "+u.autoInjectSelector),r.debug("AutoInjected: "+(l-t)),o.refreshAll(),u.autoInjectDone&&"function"==typeof u.autoInjectDone){var e=l-t;u.autoInjectDone(e)}})},v=function(t){t&&""!==t&&"complete"!==document.readyState?document.addEventListener("DOMContentLoaded",p):document.removeEventListener("DOMContentLoaded",p)},m=function(t){return t=t||{},i(u,t),v(u.autoInjectSelector),r.enableDebug(u.debug),window._Iconic?window._Iconic:{inject:f,update:d,smartIconApis:s,svgInjectedCount:l}};e.exports=m,window._Iconic=new m({autoInjectSelector:"img.iconic",evalScripts:"once",pngFallback:!1,each:null,autoInjectDone:null,debug:!1})},{"./modules/container":2,"./modules/extend":3,"./modules/log":4,"./modules/polyfills":5,"./modules/position":6,"./modules/responsive":7,"./modules/svg-injector":8}],2:[function(t,e){var n=function(t){var e=t.getAttribute("class").split(" "),n=-1!==e.indexOf("iconic-fluid"),i=[],o=["iconic-bg"];Array.prototype.forEach.call(e,function(t){switch(t){case"iconic-sm":case"iconic-md":case"iconic-lg":i.push(t),n||o.push(t.replace(/-/,"-bg-"));break;case"iconic-fluid":i.push(t),o.push(t.replace(/-/,"-bg-"));break;case"iconic-bg-circle":case"iconic-bg-rounded-rect":case"iconic-bg-badge":o.push(t);break;default:i.push(t)}}),t.setAttribute("class",i.join(" "));var c=t.parentNode,a=Array.prototype.indexOf.call(c.childNodes,t),r=document.createElement("span");r.setAttribute("class",o.join(" ")),r.appendChild(t),c.insertBefore(r,c.childNodes[a])};e.exports={addBackground:n}},{}],3:[function(t,e){e.exports=function(t){return Array.prototype.forEach.call(Array.prototype.slice.call(arguments,1),function(e){if(e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])}),t}},{}],4:[function(t,e){var n=!1,i=function(t){console&&console.log&&console.log(t)},o=function(t){i("Iconic INFO: "+t)},c=function(t){i("Iconic WARNING: "+t)},a=function(t){n&&i("Iconic DEBUG: "+t)},r=function(t){n=t};e.exports={info:o,warn:c,debug:a,enableDebug:r}},{}],5:[function(){Array.prototype.forEach||(Array.prototype.forEach=function(t,e){"use strict";if(void 0===this||null===this||"function"!=typeof t)throw new TypeError;var n,i=this.length>>>0;for(n=0;i>n;++n)n in this&&t.call(e,this[n],n,this)}),function(){if(Event.prototype.preventDefault||(Event.prototype.preventDefault=function(){this.returnValue=!1}),Event.prototype.stopPropagation||(Event.prototype.stopPropagation=function(){this.cancelBubble=!0}),!Element.prototype.addEventListener){var t=[],e=function(e,n){var i=this,o=function(t){t.target=t.srcElement,t.currentTarget=i,n.handleEvent?n.handleEvent(t):n.call(i,t)};if("DOMContentLoaded"==e){var c=function(t){"complete"==document.readyState&&o(t)};if(document.attachEvent("onreadystatechange",c),t.push({object:this,type:e,listener:n,wrapper:c}),"complete"==document.readyState){var a=new Event;a.srcElement=window,c(a)}}else this.attachEvent("on"+e,o),t.push({object:this,type:e,listener:n,wrapper:o})},n=function(e,n){for(var i=0;i<t.length;){var o=t[i];if(o.object==this&&o.type==e&&o.listener==n){"DOMContentLoaded"==e?this.detachEvent("onreadystatechange",o.wrapper):this.detachEvent("on"+e,o.wrapper);break}++i}};Element.prototype.addEventListener=e,Element.prototype.removeEventListener=n,HTMLDocument&&(HTMLDocument.prototype.addEventListener=e,HTMLDocument.prototype.removeEventListener=n),Window&&(Window.prototype.addEventListener=e,Window.prototype.removeEventListener=n)}}()},{}],6:[function(t,e){var n=function(t){var e=t.getAttribute("data-position");if(e&&""!==e){var n,i,o,c,a,r,u,s=t.getAttribute("width"),l=t.getAttribute("height"),f=e.split("-"),d=t.querySelectorAll("g.iconic-container");Array.prototype.forEach.call(d,function(t){if(n=t.getAttribute("data-width"),i=t.getAttribute("data-height"),n!==s||i!==l){if(o=t.getAttribute("transform"),c=1,o){var e=o.match(/scale\((\d)/);c=e&&e[1]?e[1]:1}a=Math.floor((s/c-n)/2),r=Math.floor((l/c-i)/2),Array.prototype.forEach.call(f,function(t){switch(t){case"top":r=0;break;case"bottom":r=l/c-i;break;case"left":a=0;break;case"right":a=s/c-n;break;case"center":break;default:console&&console.log&&console.log("Unknown position: "+t)}}),u=0===r?a:a+" "+r,u="translate("+u+")",o?/translate/.test(o)?o=o.replace(/translate\(.*?\)/,u):o+=" "+u:o=u,t.setAttribute("transform",o)}})}};e.exports={refresh:n}},{}],7:[function(t,e){var n=/(iconic-sm\b|iconic-md\b|iconic-lg\b)/,i=function(t,e){var n="undefined"!=typeof window.getComputedStyle&&window.getComputedStyle(t,null).getPropertyValue(e);return!n&&t.currentStyle&&(n=t.currentStyle[e.replace(/([a-z])\-([a-z])/,function(t,e,n){return e+n.toUpperCase()})]||t.currentStyle[e]),n},o=function(t){var e=t.style.display;t.style.display="block";var n=parseFloat(i(t,"width").slice(0,-2)),o=parseFloat(i(t,"height").slice(0,-2));return t.style.display=e,{width:n,height:o}},c=function(){var t="/* Iconic Responsive Support Styles */\n.iconic-property-fill, .iconic-property-text {stroke: none !important;}\n.iconic-property-stroke {fill: none !important;}\nsvg.iconic.iconic-fluid {height:100% !important;width:100% !important;}\nsvg.iconic.iconic-sm:not(.iconic-size-md):not(.iconic-size-lg), svg.iconic.iconic-size-sm{width:16px;height:16px;}\nsvg.iconic.iconic-md:not(.iconic-size-sm):not(.iconic-size-lg), svg.iconic.iconic-size-md{width:32px;height:32px;}\nsvg.iconic.iconic-lg:not(.iconic-size-sm):not(.iconic-size-md), svg.iconic.iconic-size-lg{width:128px;height:128px;}\nsvg.iconic-sm > g.iconic-md, svg.iconic-sm > g.iconic-lg, svg.iconic-md > g.iconic-sm, svg.iconic-md > g.iconic-lg, svg.iconic-lg > g.iconic-sm, svg.iconic-lg > g.iconic-md {display: none;}\nsvg.iconic.iconic-icon-sm > g.iconic-lg, svg.iconic.iconic-icon-md > g.iconic-lg {display:none;}\nsvg.iconic-sm:not(.iconic-icon-md):not(.iconic-icon-lg) > g.iconic-sm, svg.iconic-md.iconic-icon-sm > g.iconic-sm, svg.iconic-lg.iconic-icon-sm > g.iconic-sm {display:inline;}\nsvg.iconic-md:not(.iconic-icon-sm):not(.iconic-icon-lg) > g.iconic-md, svg.iconic-sm.iconic-icon-md > g.iconic-md, svg.iconic-lg.iconic-icon-md > g.iconic-md {display:inline;}\nsvg.iconic-lg:not(.iconic-icon-sm):not(.iconic-icon-md) > g.iconic-lg, svg.iconic-sm.iconic-icon-lg > g.iconic-lg, svg.iconic-md.iconic-icon-lg > g.iconic-lg {display:inline;}";navigator&&navigator.userAgent&&/MSIE 10\.0/.test(navigator.userAgent)&&(t+="svg.iconic{zoom:1.0001;}");var e=document.createElement("style");e.id="iconic-responsive-css",e.type="text/css",e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t)),(document.head||document.getElementsByTagName("head")[0]).appendChild(e)},a=function(t){if(/iconic-fluid/.test(t.getAttribute("class"))){var e,i=o(t),c=t.viewBox.baseVal.width/t.viewBox.baseVal.height;e=1===c?Math.min(i.width,i.height):1>c?i.width:i.height;var a;a=32>e?"iconic-sm":e>=32&&128>e?"iconic-md":"iconic-lg";var r=t.getAttribute("class"),u=n.test(r)?r.replace(n,a):r+" "+a;t.setAttribute("class",u)}},r=function(){var t=document.querySelectorAll(".injected-svg.iconic-fluid");Array.prototype.forEach.call(t,function(t){a(t)})};document.addEventListener("DOMContentLoaded",function(){c()}),window.addEventListener("resize",function(){r()}),e.exports={refresh:a,refreshAll:r}},{}],8:[function(e,n,i){!function(e,o){"use strict";function c(t){t=t.split(" ");for(var e={},n=t.length,i=[];n--;)e.hasOwnProperty(t[n])||(e[t[n]]=1,i.unshift(t[n]));return i.join(" ")}var a="file:"===e.location.protocol,r=o.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"),u=Array.prototype.forEach||function(t,e){if(void 0===this||null===this||"function"!=typeof t)throw new TypeError;var n,i=this.length>>>0;for(n=0;i>n;++n)n in this&&t.call(e,this[n],n,this)},s={},l=0,f=[],d=[],p={},v=function(t){return t.cloneNode(!0)},m=function(t,e){d[t]=d[t]||[],d[t].push(e)},g=function(t){for(var e=0,n=d[t].length;n>e;e++)!function(e){setTimeout(function(){d[t][e](v(s[t]))},0)}(e)},h=function(t,n){if(void 0!==s[t])s[t]instanceof SVGSVGElement?n(v(s[t])):m(t,n);else{if(!e.XMLHttpRequest)return n("Browser does not support XMLHttpRequest"),!1;s[t]={},m(t,n);var i=new XMLHttpRequest;i.onreadystatechange=function(){if(4===i.readyState){if(404===i.status||null===i.responseXML)return n("Unable to load SVG file: "+t),a&&n("Note: SVG injection ajax calls do not work locally without adjusting security setting in your browser. Or consider using a local webserver."),n(),!1;if(!(200===i.status||a&&0===i.status))return n("There was a problem injecting the SVG: "+i.status+" "+i.statusText),!1;if(i.responseXML instanceof Document)s[t]=i.responseXML.documentElement;else if(DOMParser&&DOMParser instanceof Function){var e;try{var o=new DOMParser;e=o.parseFromString(i.responseText,"text/xml")}catch(c){e=void 0}if(!e||e.getElementsByTagName("parsererror").length)return n("Unable to parse SVG file: "+t),!1;s[t]=e.documentElement}g(t)}},i.open("GET",t),i.overrideMimeType&&i.overrideMimeType("text/xml"),i.send()}},b=function(t,n,i,o){var a=t.getAttribute("data-src")||t.getAttribute("src");if(!/svg$/i.test(a))return void o("Attempted to inject a file with a non-svg extension: "+a);if(!r){var s=t.getAttribute("data-fallback")||t.getAttribute("data-png");return void(s?(t.setAttribute("src",s),o(null)):i?(t.setAttribute("src",i+"/"+a.split("/").pop().replace(".svg",".png")),o(null)):o("This browser does not support SVG and no PNG fallback was defined."))}-1===f.indexOf(t)&&(f.push(t),t.setAttribute("src",""),h(a,function(i){if("undefined"==typeof i||"string"==typeof i)return o(i),!1;var r=t.getAttribute("id");r&&i.setAttribute("id",r);var s=t.getAttribute("title");s&&i.setAttribute("title",s);var d=[].concat(i.getAttribute("class")||[],"injected-svg",t.getAttribute("class")||[]).join(" ");i.setAttribute("class",c(d));var v=t.getAttribute("style");v&&i.setAttribute("style",v);var m=[].filter.call(t.attributes,function(t){return/^data-\w[\w\-]*$/.test(t.name)});u.call(m,function(t){t.name&&t.value&&i.setAttribute(t.name,t.value)});for(var g,h=i.querySelectorAll("defs clipPath[id]"),b=0,y=h.length;y>b;b++){g=h[b].id+"-"+l;for(var A=i.querySelectorAll('[clip-path*="'+h[b].id+'"]'),w=0,$=A.length;$>w;w++)A[w].setAttribute("clip-path","url(#"+g+")");h[b].id=g}i.removeAttribute("xmlns:a");for(var E,S,j=i.querySelectorAll("script"),C=[],z=0,I=j.length;I>z;z++)S=j[z].getAttribute("type"),S&&"application/ecmascript"!==S&&"application/javascript"!==S||(E=j[z].innerText||j[z].textContent,C.push(E),i.removeChild(j[z]));if(C.length>0&&("always"===n||"once"===n&&!p[a])){for(var k=0,F=C.length;F>k;k++)new Function(C[k])(e);p[a]=!0}t.parentNode.replaceChild(i,t),delete f[f.indexOf(t)],t=null,l++,o(i)}))},y=function(t,e,n){e=e||{};var i=e.evalScripts||"always",o=e.pngFallback||!1,c=e.each;if(void 0!==t.length){var a=0;u.call(t,function(e){b(e,i,o,function(e){c&&"function"==typeof c&&c(e),n&&t.length===++a&&n(a)})})}else t?b(t,i,o,function(e){c&&"function"==typeof c&&c(e),n&&n(1),t=null}):n&&n(0)};"object"==typeof n&&"object"==typeof n.exports?n.exports=i=y:"function"==typeof t&&t.amd?t(function(){return y}):"object"==typeof e&&(e.SVGInjector=y)}(window,document)},{}]},{},[1])(1)}),function(){"use strict";function t(){function t(t,e){e?t.addClass(a):t.removeClass(a)}function e(t,e,i,u){function s(){d(t),v(),t[0].style.transitionDuration="",t.removeClass(b?"":a),p(),m=!1}function l(t){d(t),angular.element(t).off(r.join(" ")),m=!1}function f(t){var e={el:t,animation:g},i=n.filter(function(e){return e.el===t});if(i.length>0){var o=i[0].el[0];i[0].animation.cancelAnimation(o)}n.push(e)}function d(t){{var e;n.filter(function(n,i){n.el===t&&(e=i)})}e>=0&&n.splice(e,1)}function p(){return t[0].offsetWidth}function v(){t[0].style.transitionDuration=0,t.removeClass(o.join(" ")+" "+c.join(" ")+" "+i+" "+u)}var m=!0,g=this;g.cancelAnimation=l;var h=e?i:u,b=e,y=b?o[0]:o[1],A=b?c[0]:c[1];f(t),v(),t.addClass(h),t.addClass(y),t.addClass(a),p(),t[0].style.transitionDuration="",t.addClass(A),t.one(r.join(" "),function(){s()}),setTimeout(function(){m&&s()},3e3)}var n=[],i={},o=["ng-enter","ng-leave"],c=["ng-enter-active","ng-leave-active"],a="is-active",r=["webkitAnimationEnd","mozAnimationEnd","MSAnimationEnd","oanimationend","animationend","webkitTransitionEnd","otransitionend","transitionend"];return i.animate=e,i.toggleAnimation=t,i}angular.module("foundation.core.animation",[]).service("FoundationAnimation",t)}(),function(){"use strict";function t(t){function e(t,e){return l[t]||(l[t]=[]),l[t].push(e),!0}function n(t,e){void 0!==l[t]&&delete l[t],"function"==typeof e&&e.call(this)}function i(t,e){l[t]||(l[t]=[]),l[t].forEach(function(t){t(e)})}function o(){return f}function c(t){return f=angular.extend(f,t)}function a(){var t="";do{t+="zf-uuid-";for(var e=0;15>e;e++)t+=Math.floor(16*Math.random()).toString(16)}while(!d.indexOf(t));return d.push(t),t}function r(e,n){t.toggleAnimate(e,n)}function u(t){var e=this;t=t||{};var n=document.querySelectorAll(".is-active[zf-closable]"),i=document.querySelectorAll("[zf-closable] > .is-active");n.length&&angular.forEach(n,function(n){t.exclude!==n.id&&e.publish(n.id,"close")}),i.length&&angular.forEach(i,function(n){var i=n.parentNode.id;t.exclude!==i&&e.publish(i,"close")})}function s(e,n,i,o){t.animate(e,n,i,o)}var l={},f={},d=[],p={};return p.subscribe=e,p.unsubscribe=n,p.publish=i,p.getSettings=o,p.modifySettings=c,p.generateUuid=a,p.toggleAnimate=r,p.closeActiveElements=u,p.animate=s,p}function e(t){function e(e){t.publish(e,"show")}function n(e){t.publish(e,"hide")}var i={};return i.activate=e,i.deactivate=n,i}function n(){function t(t,e){var n=null;return function(){var i=this,o=arguments;null===n&&(n=setTimeout(function(){t.apply(i,o),n=null},e))}}var e={};return e.throttle=t,e}angular.module("foundation.core",["foundation.core.animation"]).service("FoundationApi",t).service("FoundationAdapter",e).factory("Utils",n),t.$inject=["FoundationAnimation"],e.$inject=["FoundationApi"]}(),function(){"use strict";function t(t,e){function n(n,i){function o(t,e,n,i){if(i.animation){if(!i.animation.leave&&!e.animation.leave)return;c(t,e,i)}}function c(t,e,n){v?(f(),i.addClass(n.animation.leave)):(l(),f(),i.removeClass(n.animation.leave))}function a(){p.leave&&i.removeClass(p.leave),l()}function r(){l(),e.includes(s())&&p.enter&&i.addClass(p.enter)}function u(t){t.targetScope===n&&p.enter&&i.removeClass(p.enter),v=!0}function s(){var t=i.data("$uiView"),e=t&&t.state&&t.state.self;return e&&angular.extend(p,e.animation),e}function l(){i.parent().removeClass("position-absolute"),d!==!0&&(i.parent()[0].style.height=null)}function f(){var t=parseInt(i.parent()[0].style.height),e=parseInt(window.getComputedStyle(i[0],null).getPropertyValue("height")),n=t>0?t:e>0?e:"";t>0&&(d=!0),i.parent()[0].style.height=n+"px",i.parent().addClass("position-absolute")}var d,p={},v=!1,m=[t.$on("$stateChangeStart",o),t.$on("$stateChangeError",a),n.$on("$stateChangeSuccess",r),n.$on("$viewContentAnimationEnded",u)],g=n.$on("$destroy",function(){angular.forEach(m,function(t){angular.isFunction(t)&&t()}),g()})}var i={restrict:"ECA",priority:-400,link:n};return i}angular.module("foundation.dynamicRouting.animations",["foundation.dynamicRouting"]).directive("uiView",t),t.$inject=["$rootScope","$state"]}(),function(){"use strict";function t(t){function e(t){var e={vars:{}};return t.data&&("object"==typeof t.data.vars&&(e.vars=t.data.vars),delete t.data.vars,angular.extend(e,t.data)),delete t.data,angular.extend(e.vars,t),e}function n(t,e){return{templateUrl:t,controller:i(e)}}function i(t){var e=t.controller||"DefaultController";return/\w\s+as\s+\w/.test(e)||(e+=" as PageCtrl"),e}function o(t){var e={};return t.animationIn&&(e.enter=t.animationIn),t.animationOut&&(e.leave=t.animationOut),e}var c={};this.registerDynamicRoutes=function(a){var r=a||foundationRoutes;angular.forEach(r,function(n){if(n.hasComposed)angular.isDefined(c[n.parent])||(c[n.parent]={children:{}}),n.controller&&(n.controller=i(n)),c[n.parent].children[n.name]=n;else if(n.composed)angular.isDefined(c[n.name])||(c[n.name]={children:{}}),n.controller&&(n.controller=i(n)),angular.extend(c[n.name],n);else{var a={url:n.url,templateUrl:n.path,"abstract":n["abstract"]||!1,parent:n.parent||"",controller:i(n),data:e(n),animation:o(n)};t.state(n.name,a)}}),angular.forEach(c,function(i){var c={url:i.url,parent:i.parent||"","abstract":i["abstract"]||!1,data:e(i),animation:o(i),views:{"":n(i.path,i)}};angular.forEach(i.children,function(t){c.views[t.name+"@"+i.name]=n(t.path,i)}),t.state(i.name,c)})},this.$get=angular.noop}function e(t,e,n){var i={};angular.forEach(e,function(t,e){i[e]=t}),t.params=i,t.current=n.current.name,n.current.views?(t.vars=n.current.data.vars,t.composed=n.current.data.vars.children):t.vars=n.current.data.vars}function n(t){t.registerDynamicRoutes(foundationRoutes)}function i(t,e,n){t.$state=e,t.$stateParams=n}angular.module("foundation.dynamicRouting",["ui.router"]).provider("$FoundationState",t).controller("DefaultController",e).config(n).run(i),t.$inject=["$stateProvider"],e.$inject=["$scope","$stateParams","$state"],n.$inject=["$FoundationStateProvider"],i.$inject=["$rootScope","$state","$stateParams"]}(),function(){"use strict";function t(t){t.init()}function e(t,e,n){function i(){var i,o;t.headerHelper(["foundation-mq"]),o=t.getStyle(".foundation-mq","font-family"),i=t.parseStyleToObject(o);for(var a in i)i[a]="only screen and (min-width: "+i[a].replace("rem","em")+")";e.modifySettings({mediaQueries:angular.extend(i,c)}),window.addEventListener("resize",n.throttle(function(){e.publish("resize","window resized")},50))}var o={},c={"default":"only screen",landscape:"only screen and (orientation: landscape)",portrait:"only screen and (orientation: portrait)",retina:"only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx)"};return o.init=i,o}function n(){function t(t){for(var e=t.length,n=angular.element(document.querySelectorAll("head"));e--;)n.append('<meta class="'+t[e]+'" />')}function e(t){var e=document.querySelectorAll(t)[0],n=window.getComputedStyle(e,null);return n.getPropertyValue("font-family")}function n(t){var e={};return"string"!=typeof t?e:(t=t.trim().slice(1,-1))?e=t.split("&").reduce(function(t,e){var n=e.replace(/\+/g," ").split("="),i=n[0],o=n[1];return i=decodeURIComponent(i),o=void 0===o?null:decodeURIComponent(o),t.hasOwnProperty(i)?Array.isArray(t[i])?t[i].push(o):t[i]=[t[i],o]:t[i]=o,t},{}):e}var i={};return i.headerHelper=t,i.getStyle=e,i.parseStyleToObject=n,i}function i(t){function e(){return t.getSettings().mediaQueries}function n(t){var e=t.length,n=o.getMediaQueries(),i=[];if(e>0)for(;e--;){var c,a=t[e].media;c=matchMedia(n[a]?n[a]:a),c.matches&&i.push({ind:e})}return i}function i(t){var e=[],n=[],i=t.children(),o=0;return angular.forEach(i,function(t){var i=angular.element(t);i.attr("src")&&i.attr("src").match(/.html$/)?e[o]={media:i.attr("media"),src:i.attr("src")}:(n[o]=i,e[o]={media:i.attr("media"),templ:o}),o++}),{scenarios:e,templates:n}}var o=[];return o.getMediaQueries=e,o.match=n,o.collectScenariosFromElement=i,o}angular.module("foundation.mediaquery",["foundation.core"]).run(t).factory("FoundationMQInit",e).factory("mqHelpers",n).service("FoundationMQ",i),t.$inject=["FoundationMQInit"],e.$inject=["mqHelpers","FoundationApi","Utils"],i.$inject=["FoundationApi"]}(),angular.module("markdown",[]).directive("markdown",function(){return{restrict:"A",link:function(t,e){e.html(marked(e.html()))}}}),function(){var t={};angular.forEach(["clipPath","colorProfile","src","cursor","fill","filter","marker","markerStart","markerMid","markerEnd","mask","stroke"],function(e){t[e]=["$rootScope","$location","$interpolate","$sniffer","urlResolve","computeSVGAttrValue","svgAttrExpressions",function(t,n,i,o,c,a,r){return{restrict:"A",link:function(i,c,u){function s(){var t=a(l);t&&u[e]!==t&&u.$set(e,t)}var l;r.SVG_ELEMENT.test(c[0]&&c[0].toString())&&n.$$html5&&o.history&&(l=u[e],u.$observe(e,s),t.$on("$locationChangeSuccess",s))}}}]}),angular.module("ngSVGAttributes",[]).factory("urlResolve",[function(){var t=document.createElement("a");return function(e){return t.setAttribute("href",e),t}}]).value("svgAttrExpressions",{FUNC_URI:/^url\((.*)\)$/,SVG_ELEMENT:/SVG[a-zA-Z]*Element/,HASH_PART:/#.*/}).factory("computeSVGAttrValue",["$location","$sniffer","svgAttrExpressions","urlResolve",function(t,e,n,i){return function(e){var o,c;return(o=n.FUNC_URI.exec(e))&&(c=0===o[1].indexOf("#")?t.absUrl().replace(n.HASH_PART,"")+o[1]:i(o[1])),c?"url("+c+")":null}}]).directive(t)}(),function(){"use strict";function t(t){var e=this,n=e.sections=t.sections=[],i=(e.multiOpen=t.multiOpen=t.multiOpen||!1,e.collapsible=t.collapsible=t.multiOpen||t.collapsible||!0),o=e.autoOpen=t.autoOpen=t.autoOpen||!0;e.select=function(t){n.forEach(function(n){e.multiOpen?n.scope===t&&(n.scope.active=!n.scope.active):n.scope.active=n.scope===t?i?!n.scope.active:!0:!1})},e.addSection=function(t){n.push({scope:t}),1===n.length&&o===!0&&(n[0].active=!0,n[0].scope.active=!0)},e.closeAll=function(){n.forEach(function(t){t.scope.active=!1})}}function e(){function t(t,e,n,i){t.multiOpen=i.multiOpen="true"===t.multiOpen?!0:!1,t.collapsible=i.collapsible="true"===t.collapsible?!0:!1,t.autoOpen=i.autoOpen="true"===t.autoOpen?!0:!1}var e={restrict:"EA",transclude:"true",replace:!0,templateUrl:"components/accordion/accordion.html",controller:"ZfAccordionController",scope:{multiOpen:"@?",collapsible:"@?",autoOpen:"@?"},link:t};return e}function n(){function t(t,e,n,i){t.active=!1,i.addSection(t),t.activate=function(){i.select(t)}}var e={restrict:"EA",templateUrl:"components/accordion/accordion-item.html",transclude:!0,scope:{title:"@"},require:"^zfAccordion",replace:!0,controller:function(){},link:t};return e}angular.module("foundation.accordion",[]).controller("ZfAccordionController",t).directive("zfAccordion",e).directive("zfAccordionItem",n),t.$inject=["$scope"]}(),function(){"use strict";function t(t){function e(e){t.publish(e,"show")}function n(e){t.publish(e,"hide")}var i={};return i.activate=e,i.deactivate=n,i}function e(t){function e(t){var e=t.target,i=!1;do if(e.classList&&e.classList.contains("action-sheet-container")){i=!0;break}while(e=e.parentNode);if(!i){if(t.target.attributes["zf-toggle"]||t.target.attributes["zf-hard-toggle"])return;n()}}function n(){c.hide(),a.hide(),c.$apply(),a.$apply()}function i(){c.toggle(),a.toggle(),c.$apply(),a.$apply()}{var o=this,c=o.content=t.content,a=o.container=t.container;angular.element(document.body)}o.registerContent=function(t){c=t,c.active=!1},o.registerContainer=function(t){a=t,a.active=!1},o.toggle=i,o.hide=n,o.registerListener=function(){document.body.addEventListener("click",e)},o.deregisterListener=function(){document.body.removeEventListener("click",e)}}function n(t){function e(){function e(t,e,n){n.$set("zf-closable","actionsheet")}function n(e,n,i,o){var c=i.id||t.generateUuid();i.$set("id",c),e.active=!1,t.subscribe(c,function(t){"toggle"===t&&o.toggle(),("hide"===t||"close"===t)&&o.hide()}),o.registerContainer(e),e.toggle=function(){e.active=!e.active},e.hide=function(){e.active=!1}}return{pre:e,post:n}}var n={restrict:"EA",transclude:!0,replace:!0,templateUrl:"components/actionsheet/actionsheet.html",controller:"ZfActionSheetController",compile:e};return n}function i(){function t(t,e,n,i){t.active=!1,t.position=t.position||"bottom",i.registerContent(t),t.toggle=function(){t.active=!t.active,t.active?i.registerListener():i.deregisterListener()},t.hide=function(){t.active=!1,i.deregisterListener()}}var e={restrict:"EA",transclude:!0,replace:!0,templateUrl:"components/actionsheet/actionsheet-content.html",require:"^zfActionSheet",scope:{position:"@?"},link:t};return e}function o(){function t(t,e,n,i){e.on("click",function(t){i.toggle(),t.preventDefault()})}var e={restrict:"EA",transclude:!0,replace:!0,templateUrl:"components/actionsheet/actionsheet-button.html",require:"^zfActionSheet",scope:{title:"@?"},link:t};return e}angular.module("foundation.actionsheet",["foundation.core"]).controller("ZfActionSheetController",e).directive("zfActionSheet",n).directive("zfAsContent",i).directive("zfAsButton",o).service("FoundationActionSheet",t),t.$inject=["FoundationApi"],e.$inject=["$scope","FoundationApi"],n.$inject=["FoundationApi"],i.$inject=["FoundationApi"],o.$inject=["FoundationApi"]}(),function(){"use strict";function t(t){function e(e,n,i){var o="";if(i.zfClose)o=i.zfClose;else{for(var c=!1,a=n.parent();c===!1;)"BODY"==a[0].nodeName&&(c=""),"undefined"!=typeof a.attr("zf-closable")&&a.attr("zf-closable")!==!1&&(c=a),a=a.parent();o=c.attr("id")}n.on("click",function(e){t.publish(o,"close"),e.preventDefault()})}var n={restrict:"A",link:e};return n}function e(t){function e(e,n,i){n.on("click",function(e){t.publish(i.zfOpen,"open"),e.preventDefault()})}var n={restrict:"A",link:e};return n}function n(t){function e(e,n,i){n.on("click",function(e){t.publish(i.zfToggle,"toggle"),e.preventDefault()})}var n={restrict:"A",link:e};return n}function i(t){function e(e,n){n.on("keyup",function(e){27===e.keyCode&&t.closeActiveElements(),e.preventDefault()})}var n={restrict:"A",link:e};return n}function o(t){function e(e,n,i){var o,c;switch(Hammer&&(c=new Hammer(n[0]),c.get("swipe").set({direction:Hammer.DIRECTION_ALL,threshold:5,velocity:.5})),i.zfSwipeClose){case"right":o="swiperight";break;case"left":o="swipeleft";break;case"up":o="swipeup";break;case"down":o="swipedown";break;default:o="swipe"}c.on(o,function(){t.publish(i.id,"close")})}var n={restrict:"A",link:e};return n}function c(t){function e(e,n,i){n.on("click",function(e){t.closeActiveElements({exclude:i.zfHardToggle}),t.publish(i.zfHardToggle,"toggle"),e.preventDefault()})}var n={restrict:"A",link:e};return n}angular.module("foundation.common",["foundation.core"]).directive("zfClose",t).directive("zfOpen",e).directive("zfToggle",n).directive("zfEscClose",i).directive("zfSwipeClose",o).directive("zfHardToggle",c),t.$inject=["FoundationApi"],e.$inject=["FoundationApi"],n.$inject=["FoundationApi"],i.$inject=["FoundationApi"],o.$inject=["FoundationApi"],c.$inject=["FoundationApi"]}(),function(){"use strict";function t(){var t="assets/img/iconic/";this.setAssetPath=function(e){t=angular.isString(e)?e:t},this.$get=function(){function e(){return i}function n(){return t}var i=new IconicJS,o={getAccess:e,getAssetPath:n};return o}}function e(t,e,n){function i(){function i(e,n,i){if(a=e.iconDir?e.iconDir:t.getAssetPath(),"/"!==a.charAt(a.length-1)&&(a+="/"),e.dynSrc?i.$set("data-src",e.dynSrc):e.dynIcon?i.$set("data-src",a+e.dynIcon+".svg"):e.icon?i.$set("data-src",a+e.icon+".svg"):i.$set("data-src",i.src),!n.hasClass("iconic-sm")&&!n.hasClass("iconic-md")&&!n.hasClass("iconic-lg")){var o;switch(e.size){case"small":o="iconic-sm";break;case"medium":o="iconic-md";break;case"large":o="iconic-lg";break;default:o="iconic-fluid"}n.addClass(o)}c=n[0].outerHTML}function o(i,o){function r(t){s&&(s.empty(),s.append(angular.element(c)),s.attr("data-src",t),u(s[0]))}function u(t){l.inject(t,{each:function(t){var e=angular.element(t);s=n(e)(e.scope())}})}var s,l=t.getAccess();u(o[0]),e.subscribe("resize",function(){l.update(o[0])}),i.dynSrc&&i.$watch("dynSrc",function(t,e){t&&t!==e&&r(i.dynSrc)}),i.dynIcon&&i.$watch("dynIcon",function(t,e){t&&t!==e&&r(a+i.dynIcon+".svg")})}var c,a;return{pre:i,post:o}}var o={restrict:"A",template:"<img ng-transclude>",transclude:!0,replace:!0,scope:{dynSrc:"=?",dynIcon:"=?",size:"@?",icon:"@",iconDir:"@?"},compile:i};return o}angular.module("foundation.iconic",[]).provider("Iconic",t).directive("zfIconic",e),e.$inject=["Iconic","FoundationApi","$compile"]}(),function(){"use strict";function t(t,e,n,i,o){function c(c,a,r,u,s){function l(t){return e.get(t,{cache:n})}function f(t){var e=o.collectScenariosFromElement(t);m=e.scenarios,g=e.templates}function d(t){return!v||v!==t}{var p,v,m,g;o.getMediaQueries()}i.subscribe("resize",function(){s(function(e,n){m&&g||f(e);var i=o.match(m),c=0===i.length?null:m[i[0].ind];if(c&&d(c)){if(p&&(p.$destroy(),p=null),"undefined"!=typeof c.templ){p=n;var r=document.createElement("div");r.appendChild(g[c.templ][0]),a.html(r.innerHTML),t(a.contents())(p),v=c}else{var u=l(c.src);u.success(function(t){p=n,a.html(t)}).then(function(){t(a.contents())(p),v=c})}}})}),i.publish("resize","initial resize")}var a={restrict:"EA",transclude:"element",scope:{position:"@"},replace:!0,template:"<div></div>",link:c};return a}angular.module("foundation.interchange",["foundation.core","foundation.mediaquery"]).directive("zfInterchange",t),t.$inject=["$compile","$http","$templateCache","FoundationApi","FoundationMQ"]}(),function(){"use strict";function t(t,e){function n(e){t.publish(e,"show")}function i(e){t.publish(e,"hide")}function o(t){return new e(t)}var c={};return c.activate=n,c.deactivate=i,c.newModal=o,c}function e(t){function e(){function e(t,e,n){n.$set("zf-closable",i)}function n(e,n,i){function o(){e.overlay||n.css("background","transparent"),t.animate(n,e.active,s,l),t.animate(a,e.active,r,u)}function c(){e.active&&e.show()}var a=angular.element(n.children()[0]);e.active=e.active||!1,e.overlay="false"===i.overlay?!1:!0,e.overlayClose="false"===i.overlayClose?!1:!0;var r=i.animationIn||"fadeIn",u=i.animationOut||"fadeOut",s="fadeIn",l="fadeOut";e.hideOverlay=function(){e.overlayClose&&e.hide()},e.hide=function(){e.active=!1,o()},e.show=function(){e.active=!0,o(),a.tabIndex=-1,a[0].focus()},e.toggle=function(){e.active=!e.active,o()},c(),t.subscribe(i.id,function(t){"show"===t||"open"===t?e.show():"close"===t||"hide"===t?e.hide():"toggle"===t&&e.toggle(),e.$root&&!e.$root.$$phase&&e.$apply()})}var i="modal";return{pre:e,post:n}}var n={restrict:"EA",templateUrl:"components/modal/modal.html",transclude:!0,scope:!0,replace:!0,compile:e};return n}function n(t,e,n,i,o,c,a){function r(r){function u(){if(S)throw"Error: Modal was destroyed. Delete the object and create a new ModalFactory instance."}function s(){u(),o(function(){d(!0),a.publish($,"show")
+},0,!1)}function l(){u(),o(function(){d(!1),a.publish($,"hide")},0,!1)}function f(){u(),o(function(){d(!0),a.publish($,"toggle")},0,!1)}function d(t){c.when(h).then(function(){if(!E&&m.length>0){{w.append(g)}b.active=t,i(g)(b),E=!0}})}function p(){if(!document.getElementById($)){m='<zf-modal id="'+$+'">'+m+"</zf-modal>",g=angular.element(m),b=n.$new();for(var t=0;t<j.length;t++){var e=j[t];if(r[e])switch(e){case"animationIn":g.attr("animation-in",r[e]);break;case"animationOut":g.attr("animation-out",r[e]);break;default:g.attr(e,r[e])}}if(r.contentScope){y=r.contentScope;for(var e in r.contentScope)r.contentScope.hasOwnProperty(e)&&(b[e]=r.contentScope[e])}}}function v(){A.deactivate(),setTimeout(function(){b.$destroy(),g.remove(),S=!0},3e3),a.unsubscribe($)}var m,g,h,b,y,A=this,w=angular.element(r.container||document.body),$=r.id||a.generateUuid(),E=!1,S=!1,j=["animationIn","animationOut","overlay","overlayClose"];return r.templateUrl?h=t.get(r.templateUrl,{cache:e}).then(function(t){m=t.data,p()}):r.template&&(h=!0,m=r.template,p()),A.activate=s,A.deactivate=l,A.toggle=f,A.destroy=v,{activate:s,deactivate:l,toggle:f,destroy:v}}return r}angular.module("foundation.modal",["foundation.core"]).directive("zfModal",e).factory("ModalFactory",n),t.$inject=["FoundationApi","ModalFactory"],e.$inject=["FoundationApi"],n.$inject=["$http","$templateCache","$rootScope","$compile","$timeout","$q","FoundationApi"]}(),function(){"use strict";function t(t,e){function n(e){t.publish(e,"show")}function i(e){t.publish(e,"hide")}var o={};return o.activate=n,o.deactivate=i,o}function e(t,e){var n=this;n.notifications=t.notifications=t.notifications||[],n.addNotification=function(n){var i=e.generateUuid();n.id=i,t.notifications.push(n)},n.removeNotification=function(e){t.notifications.forEach(function(n){if(n.id===e){var i=t.notifications.indexOf(n);t.notifications.splice(i,1)}})},n.clearAll=function(){for(;t.notifications.length>0;)t.notifications.pop()}}function n(t){function e(e,n,i,o){e.position=e.position?e.position.split(" ").join("-"):"top-right",t.subscribe(i.id,function(t){"clearall"===t?o.clearAll():(o.addNotification(t),e.$root.$$phase||e.$apply())})}var n={restrict:"EA",templateUrl:"components/notification/notification-set.html",controller:"ZfNotificationController",replace:!0,scope:{position:"@"},link:e};return n}function i(t){function e(){function e(t,e,n){n.$set("zf-closable","notification")}function n(e,n,i,o){e.active=!1;var c,a=i.animationIn||"fadeIn",r=i.animationOut||"fadeOut";setTimeout(function(){e.active=!0,t.animate(n,e.active,a,r)},50),e.hide=function(){e.active=!1,t.animate(n,e.active,a,r),setTimeout(function(){o.removeNotification(e.notifId)},50)},e.autoclose&&setTimeout(function(){e.active&&e.hide()},parseInt(e.autoclose)),Hammer&&(c=new Hammer(n[0]),c.get("swipe").set({direction:Hammer.DIRECTION_ALL,threshold:5,velocity:.5})),c.on("swipe",function(){e.active&&e.hide()})}return{pre:e,post:n}}var n={restrict:"EA",templateUrl:"components/notification/notification.html",replace:!0,transclude:!0,require:"^zfNotificationSet",controller:function(){},scope:{title:"=?",content:"=?",image:"=?",notifId:"=",color:"=?",autoclose:"=?"},compile:e};return n}function o(t){function e(){function e(t,e,n){n.$set("zf-closable",i)}function n(e,n,i){e.position=i.position?i.position.split(" ").join("-"):"top-right";var o=i.animationIn||"fadeIn",c=i.animationOut||"fadeOut";t.subscribe(i.id,function(i){"show"==i||"open"==i?(e.show(),e.autoclose&&setTimeout(function(){e.active&&e.hide()},parseInt(e.autoclose))):"close"==i||"hide"==i?e.hide():"toggle"==i&&(e.toggle(),e.autoclose&&setTimeout(function(){e.active&&e.toggle()},parseInt(e.autoclose))),t.animate(n,e.active,o,c),e.$apply()}),e.hide=function(){e.active=!1,t.animate(n,e.active,o,c)},e.show=function(){e.active=!0,t.animate(n,e.active,o,c)},e.toggle=function(){e.active=!e.active,t.animate(n,e.active,o,c)}}var i="notification";return{pre:e,post:n}}var n={restrict:"EA",templateUrl:"components/notification/notification-static.html",replace:!0,transclude:!0,scope:{title:"@?",content:"@?",image:"@?",color:"@?",autoclose:"@?"},compile:e};return n}function c(t){function e(e,n,i){n.on("click",function(n){t.publish(i.zfNotify,{title:e.title,content:e.content,color:e.color,image:e.image,autoclose:e.autoclose}),n.preventDefault()})}var n={restrict:"A",scope:{title:"@?",content:"@?",color:"@?",image:"@?",autoclose:"@?"},link:e};return n}function a(t,e,n,i,o,c){function a(t){function e(){if(y)throw"Error: Notification Set was destroyed. Delete the object and create a new NotificationFactory instance."}function a(t){e(),o(function(){c.publish(h,t)},0,!1)}function r(){e(),o(function(){c.publish(h,"clearall")},0,!1)}function u(t){if(!b&&f.length>0){{g.append(d)}p.active=t,i(d)(p),b=!0}}function s(){if(!document.getElementById(h)){f='<zf-notification-set id="'+h+'"></zf-notification-set>',d=angular.element(f),p=n.$new();for(var e=0;e<A.length;e++)t[A[e]]&&d.attr(A[e],t[A[e]]);if(t.contentScope){v=t.contentScope;for(var i in v)v.hasOwnProperty(i)&&(p[i]=v[i])}u(!0)}}function l(){m.clearAll(),setTimeout(function(){p.$destroy(),d.remove(),y=!0},3e3),c.unsubscribe(h)}var f,d,p,v,m=this,g=angular.element(t.container||document.body),h=t.id||c.generateUuid(),b=!1,y=!1,A=["position"];return s(),m.addNotification=a,m.clearAll=r,m.destroy=l,{addNotification:a,clearAll:r,destroy:l}}return a}angular.module("foundation.notification",["foundation.core"]).controller("ZfNotificationController",e).directive("zfNotificationSet",n).directive("zfNotification",i).directive("zfNotificationStatic",o).directive("zfNotify",c).factory("NotificationFactory",a).service("FoundationNotification",t),t.$inject=["FoundationApi","NotificationFactory"],e.$inject=["$scope","FoundationApi"],n.$inject=["FoundationApi"],i.$inject=["FoundationApi"],o.$inject=["FoundationApi"],c.$inject=["FoundationApi"],a.$inject=["$http","$templateCache","$rootScope","$compile","$timeout","FoundationApi"]}(),function(){"use strict";function t(t){function e(e){t.publish(e,"show")}function n(e){t.publish(e,"hide")}var i={};return i.activate=e,i.deactivate=n,i}function e(t){function e(){function e(t,e,n){n.$set("zf-closable",i),document.body.classList.add("has-off-canvas")}function n(e,n,i){e.position=e.position||"left",e.active=!1,t.subscribe(i.id,function(t){"show"===t||"open"===t?e.show():"close"===t||"hide"===t?e.hide():"toggle"===t&&e.toggle(),e.$root.$$phase||e.$apply()}),e.hide=function(){e.active=!1},e.show=function(){e.active=!0},e.toggle=function(){e.active=!e.active}}var i="offcanvas";return{pre:e,post:n}}var n={restrict:"EA",templateUrl:"components/offcanvas/offcanvas.html",transclude:!0,scope:{position:"@"},replace:!0,compile:e};return n}angular.module("foundation.offcanvas",["foundation.core"]).directive("zfOffcanvas",e).service("FoundationOffcanvas",t),t.$inject=["FoundationApi"],e.$inject=["FoundationApi"]}(),function(){"use strict";function t(t){function e(e){t.publish(e,"show")}function n(e){t.publish(e,"hide")}var i={};return i.activate=e,i.deactivate=n,i}function e(t,e){function n(){function n(t,e,n){n.$set("zf-closable",o),t.position=t.position||"left",t.positionClass="panel-"+t.position}function i(n,i,o){n.active=!1;var c,a,r=t.getSettings().mediaQueries;"left"===n.position?(c=o.animationIn||"slideInRight",a=o.animationOut||"slideOutLeft"):"right"===n.position?(c=o.animationIn||"slideInLeft",a=o.animationOut||"slideOutRight"):"top"===n.position?(c=o.animationIn||"slideInDown",a=o.animationOut||"slideOutUp"):"bottom"===n.position&&(c=o.animationIn||"slideInUp",a=o.animationOut||"slideOutBottom"),t.subscribe(o.id,function(t){var o=e.getComputedStyle(i[0]).getPropertyValue("position");"absolute"===o&&("show"==t||"open"==t?n.show():"close"==t||"hide"==t?n.hide():"toggle"==t&&n.toggle(),n.$root.$$phase||n.$apply())}),n.hide=function(){n.active&&(n.active=!1,t.animate(i,n.active,c,a))},n.show=function(){n.active||(n.active=!0,t.animate(i,n.active,c,a))},n.toggle=function(){n.active=!n.active,t.animate(i,n.active,c,a)},i.on("click",function(e){var o=e.srcElement;!matchMedia(r.medium).matches&&o.href&&o.href.length>0&&(n.hide(),t.animate(i,n.active,c,a))})}var o="panel";return{pre:n,post:i}}var i={restrict:"EA",templateUrl:"components/panel/panel.html",transclude:!0,scope:{position:"@?"},replace:!0,compile:n};return i}angular.module("foundation.panel",["foundation.core"]).directive("zfPanel",e).service("FoundationPanel",t),t.$inject=["FoundationApi"],e.$inject=["FoundationApi","$window"]}(),function(){"use strict";function t(t){function e(e){t.publish(e,"show")}function n(e){t.publish(e,"hide")}var i={};return i.activate=e,i.deactivate=n,i}function e(t){function e(){function e(t,e,n){n.$set("zf-closable","popup")}function n(e,n,i){function o(t){r||(e.target=document.getElementById(e.target?e.target:t),u=new Tether({element:n[0],target:e.target,attachment:c,targetAttachment:a,enable:!1}),r=!0)}e.active=!1,e.target=e.target||!1;var c=e.pinTo||"top center",a=e.pinAt||"bottom center",r=!1,u={};t.subscribe(i.id,function(t){"show"===t[0]||"open"===t[0]?e.show(t[1]):"close"===t[0]||"hide"===t[0]?e.hide():"toggle"===t[0]&&e.toggle(t[1]),e.$apply()}),e.hide=function(){e.active=!1,o(),u.disable()},e.show=function(t){e.active=!0,o(t),u.enable()},e.toggle=function(t){e.active=!e.active,o(t),e.active?u.enable():u.disable()}}return{pre:e,post:n}}var n={restrict:"EA",transclude:!0,replace:!0,templateUrl:"components/popup/popup.html",scope:{pinTo:"@?",pinAt:"@?",target:"@?"},compile:e};return n}function n(t){function e(e,n,i){var o=i.zfPopupToggle,c=i.id||t.generateUuid();i.$set("id",c),n.on("click",function(e){t.publish(o,["toggle",c]),e.preventDefault()})}var n={restrict:"A",link:e};return n}angular.module("foundation.popup",["foundation.core"]).directive("zfPopup",e).directive("zfPopupToggle",n).service("FoundationPopup",t),t.$inject=["FoundationApi"],e.$inject=["FoundationApi"],n.$inject=["FoundationApi"]}(),function(){"use strict";function t(t){function e(e){t.publish(e,"show")}var n={};return n.activate=e,n}function e(t,e){var n=this,i=n.tabs=t.tabs=[],o="";n.select=function(t){i.forEach(function(n){n.active=!1,n.scope.active=!1,n.scope===t&&(e.publish(o,["activate",n]),n.active=!0,n.scope.active=!0)})},n.addTab=function(t){i.push({scope:t,active:!1,parentContent:n.id}),1===i.length&&(i[0].active=!0,t.active=!0)},n.getId=function(){return o},n.setId=function(t){o=t}}function n(t){function e(e,n,i,o){e.id=i.id||t.generateUuid(),e.showTabContent="true"!==e.displaced,i.$set("id",e.id),o.setId(e.id);var c=function(){t.publish(e.id+"-tabs",e.tabs)};t.subscribe(e.id+"-get-tabs",function(){c()})}var n={restrict:"EA",transclude:"true",replace:!0,templateUrl:"components/tabs/tabs.html",controller:"ZfTabsController",scope:{displaced:"@?"},link:e};return n}function i(t){function e(e){e.tabs=e.tabs||[];var n=e.target;t.subscribe(n,function(t){if("activate"===t[0]){{t[1]}e.tabs.forEach(function(t){t.scope.active=!1,t.active=!1,t.scope.id===n&&(t.scope.active=!0,t.active=!0)})}}),0===e.tabs.length&&(t.subscribe(n+"-tabs",function(t){e.tabs=t}),t.publish(n+"-get-tabs",""))}var n={restrict:"A",transclude:"true",replace:!0,scope:{tabs:"=?",target:"@"},templateUrl:"components/tabs/tab-content.html",link:e};return n}function o(t){function e(e,n,i,o,c){e.id=i.id||t.generateUuid(),e.active=!1,e.transcludeFn=c,o.addTab(e),t.subscribe(e.id,function(t){("show"===t||"open"===t||"activate"===t)&&e.makeActive()}),e.makeActive=function(){o.select(e)}}var n={restrict:"EA",templateUrl:"components/tabs/tab.html",transclude:!0,scope:{title:"@"},require:"^zfTabs",replace:!0,link:e};return n}function c(t){function e(e,n,i){{var o=e.$eval(i.tab);o.scope.id}o.scope.transcludeFn(o.scope,function(t){n.append(t)}),t.subscribe(o.scope.id,function(){t.publish(o.parentContent,["activate",o.scope.id]),e.$apply()})}var n={restrict:"EA",transclude:"true",link:e};return n}function a(t){function e(e,n,i){function o(){n.parent().children().removeClass("is-active"),n.addClass("is-active")}var c=i.zfTabHref;t.subscribe(c,function(t){("activate"===t||"show"===t||"open"===t)&&o()}),n.on("click",function(e){t.publish(c,"activate"),o(),e.preventDefault()})}var n={restrict:"A",replace:!1,link:e};return n}function r(){function t(t,e){var n=e.children();angular.element(n[0]).addClass("is-active")}var e={restrict:"A",replace:!1,link:t};return e}function u(t){function e(e,n){function i(t){var e=n.children();angular.forEach(e,function(e){var n=angular.element(e);n.removeClass("is-active"),n.attr("id")===t&&n.addClass("is-active")})}var o=[],c=n.children();angular.forEach(c,function(e){if(e.id){var n=e.id;if(o.push(n),t.subscribe(n,function(t){("activate"===t||"show"===t||"open"===t)&&i(n)}),1===o.length){var c=angular.element(e);c.addClass("is-active")}}})}return{restrict:"A",link:e}}angular.module("foundation.tabs",["foundation.core"]).controller("ZfTabsController",e).directive("zfTabs",n).directive("zfTabContent",i).directive("zfTab",o).directive("zfTabIndividual",c).directive("zfTabHref",a).directive("zfTabCustom",r).directive("zfTabContentCustom",u).service("FoundationTabs",t),t.$inject=["FoundationApi"],e.$inject=["$scope","FoundationApi"],n.$inject=["FoundationApi"],i.$inject=["FoundationApi"],o.$inject=["FoundationApi"],c.$inject=["FoundationApi"],a.$inject=["FoundationApi"],r.$inject=["FoundationApi"],u.$inject=["FoundationApi"]}(),function(){"use strict";angular.module("foundation",["foundation.core","foundation.mediaquery","foundation.accordion","foundation.actionsheet","foundation.common","foundation.iconic","foundation.interchange","foundation.modal","foundation.notification","foundation.offcanvas","foundation.panel","foundation.popup","foundation.tabs"])}(); \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/account.svg b/afb-client/bower_components/foundation-apps/iconic/account.svg
new file mode 100755
index 0000000..500789e
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/account.svg
@@ -0,0 +1,44 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" data-icon="account" width="128" height="128" class="iconic iconic-account" viewBox="0 0 128 128">
+ <g><title>Sign In &amp; Out</title></g>
+ <g data-width="128" data-height="128" class="iconic-lg iconic-container" display="inline">
+ <g class="iconic-account-login">
+ <path stroke="#000" stroke-width="8" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-login-entrance iconic-property-accent iconic-property-stroke" d="M46 4h78v120h-78" fill="none"/>
+ <path stroke="#000" stroke-width="8" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-login-arrow iconic-account-login-arrow-line iconic-property-stroke" d="M4 64h76" fill="none"/>
+ <path d="M90.7 63.2l-21.4-12.4c-.7-.4-1.3-.1-1.3.7v25c0 .8.6 1.2 1.3.7l21.4-12.5c.7-.4.7-1 0-1.5z" class="iconic-account-login-arrow iconic-account-login-arrow-head iconic-property-fill"/>
+ </g>
+ <g class="iconic-account-logout" display="none">
+ <path stroke="#000" stroke-width="8" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-logout-entrance iconic-property-accent iconic-property-stroke" d="M46 4h78v120h-78" fill="none"/>
+ <path stroke="#000" stroke-width="8" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-logout-arrow iconic-account-logout-arrow-line iconic-property-stroke" d="M88 64h-76" fill="none"/>
+ <path d="M1.3 64.8l21.4 12.5c.7.4 1.3.1 1.3-.7v-25c0-.8-.6-1.2-1.3-.7l-21.4 12.3c-.7.5-.7 1.1 0 1.6z" class="iconic-account-logout-arrow iconic-account-logout-arrow-head iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="32" data-height="31" class="iconic-md iconic-container" display="none" transform="scale(4)">
+ <g class="iconic-account-login">
+ <path stroke="#000" stroke-width="3" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-login-entrance iconic-property-accent iconic-property-stroke" d="M12.5 1.5h18v28h-18" fill="none"/>
+ <path stroke="#000" stroke-width="3" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-login-arrow iconic-account-login-arrow-line iconic-property-stroke" d="M1.5 15.5h14.5" fill="none"/>
+ <path d="M20.6 15.8l-5.2 3.9c-.2.2-.4.1-.4-.2v-8c0-.3.2-.4.4-.2l5.2 3.9c.2.2.2.4 0 .6z" class="iconic-account-login-arrow iconic-account-login-arrow-head iconic-property-fill"/>
+ </g>
+ <g class="iconic-account-logout" display="none">
+ <path stroke="#000" stroke-width="3" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-logout-entrance iconic-property-accent iconic-property-stroke" d="M12.5 1.5h18v28h-18" fill="none"/>
+ <path stroke="#000" stroke-width="3" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-logout-arrow iconic-account-logout-arrow-line iconic-property-stroke" d="M19.5 15.5h-14.5" fill="none"/>
+ <path d="M.4 15.2l5.2-3.9c.2-.2.4-.1.4.2v8c0 .3-.2.4-.4.2l-5.2-3.9c-.2-.2-.2-.4 0-.6z" class="iconic-account-logout-arrow iconic-account-logout-arrow-head iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="16" data-height="16" class="iconic-sm iconic-container" display="none" transform="scale(8)">
+ <g class="iconic-account-login">
+ <path stroke="#000" stroke-width="2" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-login-entrance iconic-property-accent iconic-property-stroke" d="M7 1h8v14h-8" fill="none"/>
+ <path stroke="#000" stroke-width="2" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-login-arrow iconic-account-login-arrow-line iconic-property-stroke" d="M1 8h9" fill="none"/>
+ <path class="iconic-account-login-arrow iconic-account-login-arrow-head iconic-property-fill" d="M12 8l-4-4v8z"/>
+ </g>
+ <g class="iconic-account-logout" display="none">
+ <path stroke="#000" stroke-width="2" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-logout-entrance iconic-property-accent iconic-property-stroke" d="M7 1h8v14h-8" fill="none"/>
+ <path stroke="#000" stroke-width="2" stroke-linecap="square" stroke-miterlimit="10" class="iconic-account-logout-arrow iconic-account-logout-arrow-line iconic-property-stroke" d="M11 8h-9" fill="none"/>
+ <path class="iconic-account-logout-arrow iconic-account-logout-arrow-head iconic-property-fill" d="M0 8l4 4v-8z"/>
+ </g>
+ </g>
+<script class="iconic-api" type="application/ecmascript">
+//<![CDATA[
+var iconicApis=window._Iconic?window._Iconic.smartIconApis:{};iconicApis["account"]=iconicApis["account"]||function(t){var i=function(i){t.setAttribute("data-state",i);var e,n=t.querySelectorAll(".iconic-account-login"),o=t.querySelectorAll(".iconic-account-logout");if("logout"===i){for(e=0;e<n.length;e++)n[e].setAttribute("display","none");for(e=0;e<o.length;e++)o[e].setAttribute("display","inline")}else{for(e=0;e<n.length;e++)n[e].setAttribute("display","inline");for(e=0;e<o.length;e++)o[e].setAttribute("display","none")}},e=function(){var e=t.getAttribute("data-state");e&&i(e)};return{update:e,setState:i}};
+//]]>
+</script>
+</svg>
diff --git a/afb-client/bower_components/foundation-apps/iconic/action.svg b/afb-client/bower_components/foundation-apps/iconic/action.svg
new file mode 100755
index 0000000..cb8765e
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/action.svg
@@ -0,0 +1,38 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" data-icon="action" width="128" height="128" class="iconic iconic-action" viewBox="0 0 128 128">
+ <g><title>Action</title></g>
+ <g data-width="128" data-height="96" class="iconic-lg iconic-container" display="inline" transform="translate(0 16)">
+ <g class="iconic-action-undo">
+ <path d="M30 59c0-27.1 21.9-49 49-49s49 21.9 49 49c0-32.6-26.4-59-59-59s-59 26.4-59 59v11h20v-11z" class="iconic-action-undo-stem iconic-property-fill"/>
+ <path d="M19.2 94.7l-18.4-29.4c-.4-.7-.1-1.3.7-1.3h37c.8 0 1.1.6.7 1.3l-18.4 29.4c-.4.7-1.2.7-1.6 0z" class="iconic-action-undo-arrowhead iconic-property-fill"/>
+ </g>
+ <g class="iconic-action-redo" display="none">
+ <path d="M98 59c0-27.1-21.9-49-49-49s-49 21.9-49 49c0-32.6 26.4-59 59-59s59 26.4 59 59v11h-20v-11z" class="iconic-action-redo-stem iconic-property-fill"/>
+ <path d="M108.8 94.7l18.4-29.5c.4-.7.1-1.3-.7-1.3h-37c-.8 0-1.1.6-.7 1.3l18.4 29.5c.4.7 1.2.7 1.6 0z" class="iconic-action-redo-arrowhead iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="32" data-height="24" class="iconic-md iconic-container" display="none" transform="scale(4) translate(0 4)">
+ <g class="iconic-action-undo">
+ <path d="M9 14.5c0-6.4 5.1-11.5 11.5-11.5 6 0 10.9 4.7 11.4 10.5-.6-7.5-6.8-13.5-14.4-13.5-8 0-14.5 6.5-14.5 14.5v2.5h6v-2.5z" class="iconic-action-undo-stem iconic-property-fill"/>
+ <path d="M6.3 23.6l5.4-7.2c.2-.2.1-.4-.2-.4h-11c-.3 0-.4.2-.2.4l5.4 7.2c.2.2.4.2.6 0z" class="iconic-action-undo-arrowhead iconic-property-fill"/>
+ </g>
+ <g class="iconic-action-redo" display="none">
+ <path d="M23 14.5c0-6.4-5.1-11.5-11.5-11.5-6 0-10.9 4.7-11.5 10.5.6-7.5 6.9-13.5 14.5-13.5 8 0 14.5 6.5 14.5 14.5v2.5h-6v-2.5z" class="iconic-action-redo-stem iconic-property-fill"/>
+ <path d="M25.7 23.6l-5.4-7.2c-.2-.2-.1-.4.2-.4h11c.3 0 .4.2.2.4l-5.4 7.2c-.2.2-.4.2-.6 0z" class="iconic-action-redo-arrowhead iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="16" data-height="12" class="iconic-sm iconic-container" display="none" transform="scale(8) translate(0 2)">
+ <g class="iconic-action-undo">
+ <path d="M2 9v-2c0-3.9 3.1-7 7-7s7 3.1 7 7c0-2.8-2.2-5-5-5s-5 2.2-5 5v2h-4z" class="iconic-action-undo-stem iconic-property-fill"/>
+ <path class="iconic-action-undo-arrowhead iconic-property-fill" d="M0 8l4 4 4-4z"/>
+ </g>
+ <g class="iconic-action-redo" display="none">
+ <path d="M10 9v-2c0-2.8-2.2-5-5-5s-5 2.2-5 5c0-3.9 3.1-7 7-7s7 3.1 7 7v2h-4z" class="iconic-action-redo-stem iconic-property-fill"/>
+ <path class="iconic-action-redo-arrowhead iconic-property-fill" d="M8 8l4 4 4-4z"/>
+ </g>
+ </g>
+<script class="iconic-api" type="application/ecmascript">
+//<![CDATA[
+var iconicApis=window._Iconic?window._Iconic.smartIconApis:{};iconicApis["action"]=iconicApis["action"]||function(t){var i=function(i){t.setAttribute("data-state",i);var n,e,o=t.querySelectorAll(".iconic-action-undo"),c=t.querySelectorAll(".iconic-action-redo");n=e="none","redo"===i?e="inline":n="inline";for(var a=0;a<o.length;a++)o[a].setAttribute("display",n),c[a].setAttribute("display",e)},n=function(){var n=t.getAttribute("data-state");n&&i(n)};return{update:n,setState:i}};
+//]]>
+</script>
+</svg>
diff --git a/afb-client/bower_components/foundation-apps/iconic/ban.svg b/afb-client/bower_components/foundation-apps/iconic/ban.svg
new file mode 100755
index 0000000..070d3cf
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/ban.svg
@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-ban" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Ban</title>
+ </g>
+ <g class="iconic-ban-lg iconic-container iconic-lg" data-width="128" data-height="128" display="inline">
+ <path stroke="#000" stroke-width="8" class="iconic-ban-strike iconic-property-accent iconic-property-stroke" d="M107.841 20.159l-87.674 87.674" fill="none" />
+ <circle stroke="#000" stroke-width="8" cx="64" cy="64" r="60" class="iconic-ban-circle iconic-property-stroke" fill="none" />
+ </g>
+ <g class="iconic-ban-md iconic-container iconic-md" data-width="32" data-height="32" display="none" transform="scale(4)">
+ <path stroke="#000" stroke-width="3" class="iconic-ban-strike iconic-property-accent iconic-property-stroke" d="M26.59 5.41l-21.197 21.197" fill="none" />
+ <circle stroke="#000" stroke-width="3" cx="16" cy="16" r="14.5" class="iconic-ban-circle iconic-property-stroke" fill="none" />
+ </g>
+ <g class="iconic-ban-sm iconic-container iconic-sm" data-width="16" data-height="16" display="none" transform="scale(8)">
+ <path stroke="#000" stroke-width="2" stroke-linejoin="round" class="iconic-ban-strike iconic-property-accent iconic-property-stroke" d="M13 3l-10 10" fill="none" />
+ <circle stroke="#000" stroke-width="2" stroke-linejoin="round" cx="8" cy="8" r="7" class="iconic-ban-circle iconic-property-stroke" fill="none" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/bell.svg b/afb-client/bower_components/foundation-apps/iconic/bell.svg
new file mode 100755
index 0000000..10dd239
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/bell.svg
@@ -0,0 +1,22 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-bell" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Bell</title>
+ </g>
+ <g class="iconic-bell-lg iconic-container iconic-lg" data-width="112" data-height="128" display="inline" transform="translate(8)">
+ <circle cx="56" cy="6" r="6" class="iconic-bell-crown iconic-property-fill" />
+ <path d="M100 82.033c-14.828-10.22-16-24.339-16-39.934v-4.098c0-15.464-12.536-28-28-28s-28 12.536-28 28v4.098c0 15.595-1.172 29.714-16 39.934-7.414 5.11-12 12.169-12 19.967v2h112v-2c0-7.798-4.586-14.857-12-19.967z" class="iconic-bell-body iconic-property-fill"
+ />
+ <path d="M41.174 106c-.751 1.854-1.174 3.877-1.174 6 0 8.836 7.163 16 16 16s16-7.163 16-16c0-2.123-.423-4.146-1.174-6h-29.652z" class="iconic-bell-clapper iconic-property-accent iconic-property-fill" />
+ </g>
+ <g class="iconic-bell-md iconic-container iconic-md" data-width="28" data-height="32" display="none" transform="scale(4) translate(2)">
+ <path d="M10 28c0 2.209 1.791 4 4 4s4-1.791 4-4h-8z" class="iconic-bell-clapper iconic-property-force-fill iconic-property-accent iconic-property-fill" />
+ <circle cx="14" cy="2" r="2" class="iconic-bell-crown iconic-property-force-fill iconic-property-fill" />
+ <path d="M27.972 25.622c-.139-1.798-1.24-3.42-2.972-4.614-3.707-2.555-4-6.085-4-9.984v-1.025c0-3.866-3.134-7-7-7s-7 3.134-7 7v1.025c0 3.899-.293 7.429-4 9.984-1.732 1.194-2.834 2.816-2.972 4.614h-.007v.094c-.005.095-.021.188-.021.284h.021v1h27.979v-1.378h-.028z"
+ class="iconic-bell-body iconic-property-fill" />
+ </g>
+ <g class="iconic-bell-sm iconic-container iconic-sm" data-width="14" data-height="16" display="none" transform="scale(8) translate(1)">
+ <path d="M5 14c0 1.105.895 2 2 2s2-.895 2-2h-4z" class="iconic-bell-clapper iconic-property-force-fill iconic-property-accent iconic-property-fill" />
+ <circle cx="7" cy="1" r="1" class="iconic-bell-crown iconic-property-force-fill iconic-property-fill" />
+ <path d="M0 13c0-1.04.509-1.981 1.333-2.662 1.648-1.363 1.667-3.245 1.667-5.325v-.013c0-2.209 1.791-4 4-4s4 1.791 4 4v.013c0 2.079.019 3.962 1.667 5.325.824.681 1.333 1.623 1.333 2.662h-14z" class="iconic-bell-body iconic-property-fill" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/bookmark.svg b/afb-client/bower_components/foundation-apps/iconic/bookmark.svg
new file mode 100755
index 0000000..abe94d8
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/bookmark.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-bookmark" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Bookmark</title>
+ </g>
+ <g class="iconic-bookmark-lg iconic-container iconic-lg" data-width="44" data-height="128" display="inline" transform="translate(42)">
+ <path class="iconic-property-fill" d="M0 0v128l22-14.247 22 14.247v-128z" />
+ </g>
+ <g class="iconic-bookmark-md iconic-container iconic-md" data-width="14" data-height="32" display="none" transform="scale(4) translate(9)">
+ <path d="M0 .5v31c0 .276.182.37.407.209l6.186-4.419c.225-.161.589-.161.814 0l6.186 4.419c.225.161.407.067.407-.209v-31c0-.276-.224-.5-.5-.5h-13c-.276 0-.5.224-.5.5z" class="iconic-property-fill" />
+ </g>
+ <g class="iconic-bookmark-sm iconic-container iconic-sm" data-width="8" data-height="16" display="none" transform="scale(8) translate(4)">
+ <path d="M0 .25v15.5c0 .138.079.171.177.073l3.646-3.646c.098-.098.256-.098.354 0l3.646 3.646c.098.098.177.065.177-.073v-15.5c0-.138-.112-.25-.25-.25h-7.5c-.138 0-.25.112-.25.25z" class="iconic-property-fill" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/cart.svg b/afb-client/bower_components/foundation-apps/iconic/cart.svg
new file mode 100755
index 0000000..06098dc
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/cart.svg
@@ -0,0 +1,35 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-cart" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Cart</title>
+ </g>
+ <defs>
+ <clipPath id="iconic-size-lg-cart-clip-0">
+ <path d="M0 0v106h22.695c-2.835-1.992-4.695-5.28-4.695-9 0-6.065 4.935-11 11-11s11 4.935 11 11c0 3.72-1.861 7.008-4.695 9h61.391c-2.835-1.992-4.695-5.28-4.695-9 0-6.065 4.935-11 11-11s11 4.935 11 11c0 3.72-1.861 7.008-4.695 9h18.695v-106h-128z" />
+ </clipPath>
+ <clipPath id="iconic-size-md-cart-clip-0">
+ <path d="M0 0v28h5.058c-.651-.636-1.058-1.52-1.058-2.5 0-1.93 1.57-3.5 3.5-3.5s3.5 1.57 3.5 3.5c0 .98-.407 1.864-1.058 2.5h14.116c-.651-.636-1.058-1.52-1.058-2.5 0-1.93 1.57-3.5 3.5-3.5s3.5 1.57 3.5 3.5c0 .98-.407 1.864-1.058 2.5h3.058v-28h-32z" />
+ </clipPath>
+ </defs>
+ <g class="iconic-cart-lg iconic-container iconic-lg" data-width="128" data-height="106" display="inline" transform="translate(0 11)">
+ <path d="M31.176 65.115l-14.352-50.231c-.455-1.593.519-2.885 2.176-2.885h106c1.657 0 2.719 1.313 2.371 2.933l-10.743 50.133c-.347 1.62-1.972 2.933-3.629 2.933h-78c-1.657 0-3.369-1.291-3.824-2.885z" class="iconic-cart-basket iconic-property-fill" />
+ <circle cx="29" cy="97" r="9" class="iconic-cart-wheel iconic-cart-wheel-back iconic-property-fill" />
+ <circle cx="103" cy="97" r="9" class="iconic-cart-wheel iconic-cart-wheel-front iconic-property-fill" />
+ <path clip-path="url(#iconic-size-lg-cart-clip-0)" stroke="#000" stroke-width="4" d="M106 92h-81.25c-.414 0-.621-.31-.462-.692l9.423-22.615c.159-.382.196-1.015.081-1.413l-18.585-64.559c-.115-.398-.543-.721-.957-.721h-11.25" class="iconic-cart-body iconic-property-stroke"
+ fill="none" />
+ <circle cx="3" cy="3" r="3" class="iconic-cart-handle iconic-property-fill" />
+ </g>
+ <g class="iconic-cart-md iconic-container iconic-md" data-width="32" data-height="28" display="none" transform="scale(4) translate(0 2)">
+ <path d="M8.742 17.034l-3.485-13.068c-.142-.534.19-.966.742-.966h25c.552 0 .912.439.804.981l-2.608 13.039c-.108.542-.644.981-1.196.981h-18c-.552 0-1.115-.433-1.258-.966z" class="iconic-cart-basket iconic-property-fill" />
+ <circle cx="7.5" cy="25.5" r="2.5" class="iconic-cart-wheel iconic-cart-wheel-back iconic-property-fill" />
+ <circle cx="26.5" cy="25.5" r="2.5" class="iconic-cart-wheel iconic-cart-wheel-front iconic-property-fill" />
+ <path clip-path="url(#iconic-size-md-cart-clip-0)" stroke="#000" d="M27 24.5h-20c-.276 0-.42-.209-.321-.467l2.141-5.567c.099-.258.124-.683.055-.951l-4.251-16.531c-.069-.267-.348-.484-.625-.484h-3" class="iconic-cart-body iconic-property-stroke" fill="none"
+ />
+ <circle cx="1" cy="1" r="1" class="iconic-cart-handle iconic-property-fill" />
+ </g>
+ <g class="iconic-cart-sm iconic-container iconic-sm" data-width="16" data-height="14" display="none" transform="scale(8) translate(0 1)">
+ <circle cx="3.5" cy="12.5" r="1.5" class="iconic-cart-wheel iconic-cart-wheel-back iconic-property-fill" />
+ <circle cx="13.5" cy="12.5" r="1.5" class="iconic-cart-wheel iconic-cart-wheel-front iconic-property-fill" />
+ <path d="M3.929 8.505l-.858-6.005c-.039-.273.153-.495.429-.495l12-.004c.276 0 .468.221.429.495l-.859 6.01c-.039.273-.295.495-.571.495h-10c-.276 0-.532-.222-.571-.495z" class="iconic-cart-basket iconic-property-fill" />
+ <path stroke="#000" stroke-linecap="square" d="M.5.5h2.25c.138 0 .274.109.302.244l1.395 6.511c.029.135.03.354.003.49l-.902 4.51c-.027.135.063.245.201.245h9.75" class="iconic-cart-body iconic-property-stroke" fill="none" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/chevron.svg b/afb-client/bower_components/foundation-apps/iconic/chevron.svg
new file mode 100755
index 0000000..9fa4b9b
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/chevron.svg
@@ -0,0 +1,28 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" data-icon="chevron" width="128" height="128" class="iconic iconic-chevron" viewBox="0 0 128 128">
+ <g><title>Chevron</title></g>
+ <defs>
+ <clipPath id="iconic-size-lg-chevron-clip-0">
+ <path d="M0 0h88v128h-88z"/>
+ </clipPath>
+ <clipPath id="iconic-size-md-chevron-clip-0">
+ <path d="M0 0h26v32h-26z"/>
+ </clipPath>
+ <clipPath id="iconic-size-sm-chevron-clip-0">
+ <path d="M0 0h14v16h-14z"/>
+ </clipPath>
+ </defs>
+ <g data-width="128" data-height="128" class="iconic-lg iconic-container" display="inline" transform="translate(12)">
+ <path clip-path="url(#iconic-size-lg-chevron-clip-0)" stroke="#000" stroke-width="16" stroke-linecap="square" stroke-miterlimit="10" class="iconic-property-stroke" d="M-8-20l84 84-84 84" fill="none"/>
+ </g>
+ <g data-width="32" data-height="32" class="iconic-md iconic-container" display="none" transform="scale(4) translate(1)">
+ <path clip-path="url(#iconic-size-md-chevron-clip-0)" stroke="#000" stroke-width="6" stroke-linecap="square" stroke-miterlimit="10" class="iconic-property-stroke" d="M-1-6l22 22-22 22" fill="none"/>
+ </g>
+ <g data-width="16" data-height="16" class="iconic-sm iconic-container" display="none" transform="scale(8)">
+ <path clip-path="url(#iconic-size-sm-chevron-clip-0)" stroke="#000" stroke-width="4" stroke-linecap="square" stroke-miterlimit="10" class="iconic-property-stroke" d="M1.7-1.3l9.3 9.3-13.1 13.1" fill="none"/>
+ </g>
+<script class="iconic-api" type="application/ecmascript">
+//<![CDATA[
+var iconicApis=window._Iconic?window._Iconic.smartIconApis:{};iconicApis["chevron"]=iconicApis["chevron"]||function(t){function e(e){t.setAttribute("data-direction",e);var n=0;switch(e){case"top":n=270;break;case"left":n=180;break;case"bottom":n=90;break;default:n=0}r.setAttribute("transform","rotate("+n+" 64 64) translate(12) "),a.setAttribute("transform","scale(4) rotate("+n+" 16 16) translate(1)"),i.setAttribute("transform","scale(8) rotate("+n+" 8 8)")}var r=t.querySelector(".iconic-lg"),a=t.querySelector(".iconic-md"),i=t.querySelector(".iconic-sm"),n=function(){var r=t.getAttribute("data-direction")||"";e(r)};return{update:n,setDirection:e}};
+//]]>
+</script>
+</svg>
diff --git a/afb-client/bower_components/foundation-apps/iconic/circle-check.svg b/afb-client/bower_components/foundation-apps/iconic/circle-check.svg
new file mode 100755
index 0000000..46accc2
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/circle-check.svg
@@ -0,0 +1,25 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-circle-check" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Circle Check</title>
+ </g>
+ <defs>
+ <clipPath id="iconic-size-lg-circle-check-clip-0">
+ <path d="M0 0v128h128v-128h-128zm54.196 92.201l-23.853-23.853 5.657-5.657 17.891 17.891 39.813-44.23 5.946 5.352-45.453 50.498z" />
+ </clipPath>
+ <clipPath id="iconic-size-md-circle-check-clip-0">
+ <path d="M0 0v32h32v-32h-32zm13.052 24.173l-6.173-6.173 2.121-2.121 3.948 3.948 9.951-10.946 2.22 2.018-12.067 13.274z" />
+ </clipPath>
+ <clipPath id="iconic-size-sm-circle-check-clip-0">
+ <path d="M0 0v16h16v-16h-16zm7 11.414l-3.414-3.414 1.414-1.414 2 2 4-4 1.414 1.414-5.414 5.414z" />
+ </clipPath>
+ </defs>
+ <g class="iconic-circle-check-lg iconic-container iconic-lg" data-width="128" data-height="128" display="inline">
+ <circle cx="64" cy="64" r="64" clip-path="url(#iconic-size-lg-circle-check-clip-0)" class="iconic-circle-check-body iconic-property-fill" />
+ </g>
+ <g class="iconic-circle-check-md iconic-container iconic-md" data-width="32" data-height="32" display="none" transform="scale(4)">
+ <circle cx="16" cy="16" r="16" clip-path="url(#iconic-size-md-circle-check-clip-0)" class="iconic-circle-check-body iconic-property-fill" />
+ </g>
+ <g class="iconic-circle-check-sm iconic-container iconic-sm" data-width="16" data-height="16" display="none" transform="scale(8)">
+ <circle cx="8" cy="8" r="8" clip-path="url(#iconic-size-sm-circle-check-clip-0)" class="iconic-circle-check-body iconic-property-fill" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/circle-x.svg b/afb-client/bower_components/foundation-apps/iconic/circle-x.svg
new file mode 100755
index 0000000..347b608
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/circle-x.svg
@@ -0,0 +1,25 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-circle-x" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Circle X</title>
+ </g>
+ <defs>
+ <clipPath id="iconic-size-lg-circle-x-clip-0">
+ <path d="M0 0v128h128v-128h-128zm90.657 85l-5.657 5.657-21-21-21 21-5.657-5.657 21-21-21-21 5.657-5.657 21 21 21-21 5.657 5.657-21 21 21 21z" />
+ </clipPath>
+ <clipPath id="iconic-size-md-circle-x-clip-0">
+ <path d="M0 0v32h32v-32h-32zm23.121 21l-2.121 2.121-5-5-5 5-2.121-2.121 5-5-5-5 2.121-2.121 5 5 5-5 2.121 2.121-5 5 5 5z" />
+ </clipPath>
+ <clipPath id="iconic-size-sm-circle-x-clip-0">
+ <path d="M0 0v16h16v-16h-16zm11.414 10l-1.414 1.414-2-2-2 2-1.414-1.414 2-2-2-2 1.414-1.414 2 2 2-2 1.414 1.414-2 2 2 2z" />
+ </clipPath>
+ </defs>
+ <g class="iconic-circle-x-lg iconic-container iconic-lg" data-width="128" data-height="128" display="inline">
+ <circle cx="64" cy="64" r="64" clip-path="url(#iconic-size-lg-circle-x-clip-0)" class="iconic-circle-x-body iconic-property-fill" />
+ </g>
+ <g class="iconic-circle-x-md iconic-container iconic-md" data-width="32" data-height="32" display="none" transform="scale(4)">
+ <circle cx="16" cy="16" r="16" clip-path="url(#iconic-size-md-circle-x-clip-0)" class="iconic-circle-x-body iconic-property-fill" />
+ </g>
+ <g class="iconic-circle-x-sm iconic-container iconic-sm" data-width="16" data-height="16" display="none" transform="scale(8)">
+ <circle cx="8" cy="8" r="8" clip-path="url(#iconic-size-sm-circle-x-clip-0)" class="iconic-circle-x-body iconic-property-fill" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/cog.svg b/afb-client/bower_components/foundation-apps/iconic/cog.svg
new file mode 100755
index 0000000..269f3d9
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/cog.svg
@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-cog" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Cog</title>
+ </g>
+ <g class="iconic-cog-lg iconic-container iconic-lg" data-width="128" data-height="128" display="inline">
+ <path d="M128 73.875v-19.875l-14.323-3.581c-1.156-4.239-2.841-8.257-4.979-11.986l7.539-12.706-14.054-14.054-12.666 7.599c-3.731-2.133-7.751-3.814-11.992-4.966l-3.651-14.308h-19.875l-3.581 14.323c-4.239 1.156-8.257 2.841-11.986 4.978l-12.706-7.539-14.054 14.054 7.599 12.666c-2.133 3.731-3.814 7.751-4.966 11.992l-14.308 3.651v19.875l14.323 3.581c1.156 4.239 2.841 8.257 4.979 11.986l-7.539 12.706 14.054 14.054 12.666-7.599c3.731 2.133 7.751 3.814 11.992 4.966l3.651 14.308h19.875l3.581-14.323c4.239-1.156 8.257-2.841 11.986-4.979l12.705 7.539 14.054-14.054-7.599-12.666c2.133-3.731 3.814-7.751 4.966-11.992l14.308-3.651zm-64 24.125c-18.778 0-34-15.222-34-34s15.222-34 34-34 34 15.222 34 34-15.222 34-34 34z"
+ class="iconic-cog-body iconic-property-fill" />
+ </g>
+ <g class="iconic-cog-md iconic-container iconic-md" data-width="32" data-height="32" display="none" transform="scale(4)">
+ <path d="M32 17.969v-3.969l-3.96-1.32c-.278-1.01-.675-1.969-1.183-2.86l1.849-3.742-2.806-2.807-3.73 1.865c-.891-.507-1.851-.903-2.861-1.18l-1.339-3.957h-3.969l-1.32 3.96c-1.01.278-1.969.675-2.86 1.183l-3.742-1.849-2.806 2.806 1.865 3.73c-.507.891-.903 1.851-1.18 2.861l-3.957 1.339v3.969l3.96 1.32c.278 1.01.675 1.969 1.183 2.86l-1.849 3.742 2.806 2.806 3.73-1.865c.891.507 1.851.903 2.861 1.18l1.34 3.957h3.969l1.32-3.96c1.01-.278 1.969-.675 2.86-1.183l3.742 1.849 2.806-2.806-1.865-3.73c.507-.891.903-1.851 1.18-2.861l3.957-1.34zm-16 5.031c-3.866 0-7-3.134-7-7s3.134-7 7-7 7 3.134 7 7-3.134 7-7 7z"
+ class="iconic-cog-body iconic-property-fill" />
+ </g>
+ <g class="iconic-cog-sm iconic-container iconic-sm" data-width="16" data-height="16" display="none" transform="scale(8)">
+ <path d="M16 8.984v-1.984l-1.971-.986c-.099-.3-.221-.59-.362-.869l.833-2.146-1.5-1.5-2.146.833c-.279-.141-.568-.263-.869-.362l-1.001-1.971h-1.984l-.986 1.971c-.3.099-.59.221-.869.362l-2.146-.833-1.5 1.5.833 2.146c-.141.279-.263.568-.362.869l-1.971 1.001v1.984l1.971.986c.099.3.221.59.362.868l-.833 2.146 1.5 1.5 2.146-.833c.279.141.568.263.869.362l1.001 1.971h1.984l.986-1.971c.3-.099.59-.221.869-.362l2.146.833 1.5-1.5-.833-2.146c.141-.279.263-.568.362-.869l1.971-1.001zm-8 2.016c-1.657 0-3-1.343-3-3s1.343-3 3-3 3 1.343 3 3-1.343 3-3 3z"
+ class="iconic-cog-body iconic-property-fill" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/comment-square.svg b/afb-client/bower_components/foundation-apps/iconic/comment-square.svg
new file mode 100755
index 0000000..07d0c96
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/comment-square.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-comment-square" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Comment Square</title>
+ </g>
+ <g class="iconic-comment-square-lg iconic-container iconic-lg" data-width="128" data-height="110" display="inline" transform="translate(0 9)">
+ <path d="M0 1.5v85c0 .828.672 1.5 1.5 1.5h103c.828 0 1.975.475 2.561 1.061l19.879 19.879c.586.586 1.061.389 1.061-.439v-107c0-.828-.672-1.5-1.5-1.5h-125c-.828 0-1.5.672-1.5 1.5z" class="iconic-property-fill" />
+ </g>
+ <g class="iconic-comment-square-md iconic-container iconic-md" data-width="32" data-height="29" display="none" transform="scale(4) translate(0 1)">
+ <path d="M0 .5v22c0 .276.224.5.5.5h25c.276 0 .658.158.854.354l5.293 5.293c.195.195.354.13.354-.146v-28c0-.276-.224-.5-.5-.5h-31c-.276 0-.5.224-.5.5z" class="iconic-property-fill" />
+ </g>
+ <g class="iconic-comment-square-sm iconic-container iconic-sm" data-width="16" data-height="16" display="none" transform="scale(8)">
+ <path class="iconic-property-fill" d="M16 0h-16v12h12l4 4z" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/dashboard.svg b/afb-client/bower_components/foundation-apps/iconic/dashboard.svg
new file mode 100755
index 0000000..f41ef7d
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/dashboard.svg
@@ -0,0 +1,38 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-dashboard" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Dashboard</title>
+ </g>
+ <defs>
+ <clipPath id="iconic-size-lg-dashboard-clip-0">
+ <path d="M0 0v122h128v-122h-128zm73.9 73.9c-2.644 2.644-6.16 4.1-9.9 4.1s-7.255-1.456-9.899-4.101c-4.01-4.01-25.253-37.144-29.471-43.746-1.011-1.582-.785-3.655.542-4.982.772-.772 1.796-1.172 2.83-1.172.743 0 1.49.206 2.152.629 6.601 4.218 39.736 25.461 43.746 29.471 2.645 2.644 4.101 6.16 4.101 9.9s-1.456 7.255-4.1 9.9z"
+ />
+ </clipPath>
+ <clipPath id="iconic-size-md-dashboard-clip-0">
+ <path d="M0 0v30h32v-30h-32zm19.626 19.626c-.885.885-2.061 1.372-3.313 1.372-1.251 0-2.428-.487-3.313-1.372-1.091-1.091-5.745-8.451-7.696-11.565-.495-.79-.378-1.818.281-2.477.386-.386.898-.585 1.414-.585.366 0 .735.101 1.063.306 3.126 1.963 10.51 6.642 11.563 7.695 1.796 1.796 1.796 4.83 0 6.625z"
+ />
+ </clipPath>
+ <clipPath id="iconic-size-sm-dashboard-clip-0">
+ <path d="M0 0v15h16v-15h-16zm9.313 9.313c-.442.442-1.031.686-1.656.686s-1.657-.999-1.657-.999l-2-1s-1.018-4.396-.706-4.708c.192-.192.448-.292.707-.292.161 0 4 1 4 1l1 2s1.211 2.415.313 3.313z" />
+ </clipPath>
+ </defs>
+ <g class="iconic-dashboard-lg iconic-container iconic-lg" data-width="128" data-height="122" display="inline" transform="translate(0 3)">
+ <path stroke="#000" stroke-width="8" d="M90 118.001c2.562-1.244 5.204-2.666 7.547-4.248 3.192-2.156 6.165-4.612 8.88-7.327 2.715-2.715 5.17-5.688 7.327-8.88 2.156-3.192 4.014-6.603 5.532-10.192s2.697-7.357 3.496-11.263 1.219-7.95 1.219-12.092-.42-8.186-1.219-12.092-1.978-7.673-3.496-11.263c-1.518-3.589-3.376-7-5.532-10.192s-4.612-6.165-7.327-8.88c-2.715-2.715-5.688-5.17-8.88-7.327-3.192-2.156-6.603-4.014-10.192-5.532s-7.357-2.697-11.263-3.496-7.95-1.219-12.092-1.219-8.186.42-12.092 1.219-7.673 1.978-11.263 3.496c-3.589 1.518-7 3.376-10.192 5.532s-6.165 4.612-8.88 7.327-5.17 5.688-7.327 8.88-4.014 6.603-5.532 10.192c-1.518 3.589-2.697 7.357-3.496 11.263s-1.219 7.95-1.219 12.092.42 8.186 1.219 12.092 1.978 7.673 3.496 11.263 3.376 7 5.532 10.192 4.612 6.165 7.327 8.88c2.715 2.715 5.688 5.17 8.88 7.327 2.397 1.619 4.918 2.982 7.544 4.247l52.002.001z"
+ class="iconic-dashboard-body iconic-property-stroke" fill="none" />
+ <path clip-path="url(#iconic-size-lg-dashboard-clip-0)" stroke="#000" stroke-width="4" stroke-linecap="round" d="M32.887 94.779c-3.981-3.981-7.203-8.722-9.43-13.986-2.227-5.264-3.458-11.052-3.458-17.127s1.231-11.863 3.458-17.127 5.448-10.005 9.43-13.986c3.981-3.981 8.722-7.203 13.986-9.43s11.052-3.458 17.127-3.458 11.863 1.231 17.127 3.458c5.264 2.227 10.005 5.448 13.986 9.43 3.981 3.981 7.203 8.722 9.43 13.986 2.226 5.264 3.458 11.052 3.458 17.127s-1.231 11.863-3.458 17.127c-2.227 5.264-5.448 10.005-9.43 13.986"
+ class="iconic-dashboard-values iconic-property-accent iconic-property-stroke" fill="none" />
+ <path d="M71.071 56.929c-3.905-3.905-43.071-28.929-43.071-28.929s25.024 39.166 28.929 43.071c3.905 3.905 10.237 3.905 14.142 0 3.905-3.905 3.905-10.237 0-14.142zm-7.071 9.071c-1.105 0-2-.895-2-2s.895-2 2-2 2 .895 2 2-.895 2-2 2z" class="iconic-dashboard-needle iconic-property-fill"
+ />
+ </g>
+ <g class="iconic-dashboard-md iconic-container iconic-md" data-width="32" data-height="30" display="none" transform="scale(4) translate(0 1)">
+ <path stroke="#000" stroke-width="3" d="M9.001 28.5c-4.472-2.448-7.501-7.03-7.501-12.5 0-8.008 6.492-14.5 14.5-14.5s14.5 6.492 14.5 14.5c0 5.469-3.028 10.052-7.499 12.5h-14z" class="iconic-dashboard-body iconic-property-stroke" fill="none" />
+ <path d="M14.415 18.212c1.048 1.048 2.748 1.048 3.797 0s1.007-2.79 0-3.797c-1.007-1.007-11.212-7.415-11.212-7.415s6.367 10.164 7.415 11.212z" class="iconic-dashboard-needle iconic-property-fill" />
+ <path clip-path="url(#iconic-size-md-dashboard-clip-0)" stroke="#000" stroke-linecap="round" d="M9.283 22.718c-1.719-1.719-2.783-4.094-2.783-6.718s1.063-4.998 2.783-6.718 4.094-2.782 6.717-2.782 4.998 1.063 6.718 2.783 2.782 4.094 2.782 6.717-1.063 4.998-2.783 6.718"
+ class="iconic-dashboard-values iconic-property-accent iconic-property-stroke" fill="none" />
+ </g>
+ <g class="iconic-dashboard-sm iconic-container iconic-sm" data-width="16" data-height="15" display="none" transform="scale(8)">
+ <path stroke="#000" stroke-width="2" d="M4.5 14c-2.081-1.213-3.5-3.418-3.5-6 0-3.866 3.134-7 7-7s7 3.134 7 7c0 2.59-1.407 4.79-3.498 6h-7.002z" class="iconic-dashboard-body iconic-property-stroke" fill="none" />
+ <path d="M6.708 8.606c.524.524 1.374.524 1.899 0s.503-1.395 0-1.899c-.503-.503-4.606-2.708-4.606-2.708s2.183 4.082 2.708 4.606z" class="iconic-dashboard-needle iconic-property-fill" />
+ <path clip-path="url(#iconic-size-sm-dashboard-clip-0)" stroke="#000" stroke-linecap="round" d="M5.525 10.475c-.633-.633-1.025-1.508-1.025-2.475s.392-1.841 1.025-2.475 1.508-1.025 2.475-1.025 1.841.392 2.475 1.025 1.025 1.508 1.025 2.475-.392 1.841-1.025 2.475"
+ class="iconic-dashboard-values iconic-property-accent iconic-property-stroke" fill="none" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/document.svg b/afb-client/bower_components/foundation-apps/iconic/document.svg
new file mode 100755
index 0000000..50b847a
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/document.svg
@@ -0,0 +1,28 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-document" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Document</title>
+ </g>
+ <defs>
+ <clipPath id="iconic-size-lg-document-clip-0">
+ <path d="M70 28v-28h-70v128h98v-100h-28zm-58 30h60v4h-60v-4zm0 36h68v4h-68v-4zm74 22h-74v-4h74v4zm0-36h-74v-4h74v4zm0-36h-74v-4h74v4z" />
+ </clipPath>
+ <clipPath id="iconic-size-md-document-clip-0">
+ <path d="M17 8v-8h-17v32h25v-24h-8zm-14 7h15v1h-15v-1zm0 8h17v1h-17v-1zm19 5h-19v-1h19v1zm0-8h-19v-1h19v1zm0-8h-19v-1h19v1z" />
+ </clipPath>
+ <clipPath id="iconic-size-sm-document-clip-0">
+ <path d="M8 0h-8v16h13v-11h-5v-5zm-6 4h4v1h-4v-1zm0 6h7v1h-7v-1zm9 4h-9v-1h9v1zm0-7v1h-9v-1h9z" />
+ </clipPath>
+ </defs>
+ <g class="iconic-document-lg iconic-container iconic-lg" data-width="98" data-height="128" display="inline" transform="translate(15)">
+ <path clip-path="url(#iconic-size-lg-document-clip-0)" d="M96.5 128h-95c-.828 0-1.5-.672-1.5-1.5v-125c0-.828.672-1.5 1.5-1.5h95c.828 0 1.5.672 1.5 1.5v125c0 .828-.672 1.5-1.5 1.5z" class="iconic-document-page iconic-property-fill" />
+ <path class="iconic-document-flap iconic-property-fill" d="M98 24l-24-24v24z" />
+ </g>
+ <g class="iconic-document-md iconic-container iconic-md" data-width="25" data-height="32" display="none" transform="scale(4) translate(3)">
+ <path clip-path="url(#iconic-size-md-document-clip-0)" d="M24.5 32h-24c-.276 0-.5-.224-.5-.5v-31c0-.276.224-.5.5-.5h24c.276 0 .5.224.5.5v31c0 .276-.224.5-.5.5z" class="iconic-document-page iconic-property-fill" />
+ <path class="iconic-document-flap iconic-property-fill" d="M25 7l-7-7v7z" />
+ </g>
+ <g class="iconic-document-sm iconic-container iconic-sm" data-width="13" data-height="16" display="none" transform="scale(8) translate(1)">
+ <path clip-path="url(#iconic-size-sm-document-clip-0)" class="iconic-document-page iconic-property-fill" d="M0 0h13v16h-13z" />
+ <path class="iconic-document-flap iconic-property-fill" d="M13 4l-4-4v4z" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/envelope.svg b/afb-client/bower_components/foundation-apps/iconic/envelope.svg
new file mode 100755
index 0000000..4086e5a
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/envelope.svg
@@ -0,0 +1,44 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" data-icon="envelope" width="128" height="128" class="iconic iconic-envelope" viewBox="0 0 128 128">
+ <g><title>Envelope</title></g>
+ <g data-width="128" data-height="84" class="iconic-lg iconic-container" display="inline" transform="translate(0 22)">
+ <g class="iconic-envelope-closed">
+ <path d="M65.3 43.3l61.3-30.7c.7-.4 1.3-1.3 1.3-2.2v-9c0-.8-.7-1.5-1.5-1.5h-124.9c-.8.1-1.5.8-1.5 1.6v9c0 .8.6 1.8 1.3 2.2l61.3 30.7c.8.3 2 .3 2.7-.1z" class="iconic-envelope-closed-envelope-flap iconic-property-accent iconic-property-fill"/>
+ <path d="M62.7 51.3l-61.4-30.6c-.7-.4-1.3 0-1.3.8v61c0 .8.7 1.5 1.5 1.5h125c.8 0 1.5-.7 1.5-1.5v-61c0-.8-.6-1.2-1.3-.8l-61.4 30.6c-.7.4-1.9.4-2.6 0z" class="iconic-envelope-closed-envelope-body iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="128" data-height="116" class="iconic-lg iconic-container" display="inline" transform="translate(0 6)">
+ <g class="iconic-envelope-open" display="none">
+ <path d="M64 0l-64 32v84h128v-84l-64-32zm0 84l-56-28v-19.1l56-28 56 28v19.1l-56 28z" class="iconic-envelope-open-envelope iconic-property-fill"/>
+ <path class="iconic-envelope-open-letter iconic-property-accent iconic-property-fill" d="M64 79l52-26v-13h-104v13z"/>
+ </g>
+ </g>
+ <g data-width="32" data-height="22" class="iconic-md iconic-container" display="none" transform="scale(4) translate(0 5)">
+ <g class="iconic-envelope-closed">
+ <path d="M16.4 10.8l15.1-7.6c.3-.1.5-.4.5-.7v-2c0-.3-.2-.5-.5-.5h-31c-.3 0-.5.2-.5.5v2c0 .3.2.6.4.7l15.1 7.6c.3.1.7.1.9 0z" class="iconic-envelope-closed-envelope-flap iconic-property-accent iconic-property-fill"/>
+ <path d="M15.6 13.8l-15.2-7.6c-.2-.1-.4 0-.4.3v15c0 .3.2.5.5.5h31c.3 0 .5-.2.5-.5v-15c0-.3-.2-.4-.4-.3l-15.1 7.6c-.3.1-.7.1-.9 0z" class="iconic-envelope-closed-envelope-body iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="32" data-height="32" class="iconic-md iconic-container" display="none" transform="scale(4)">
+ <g class="iconic-envelope-open" display="none">
+ <path d="M16 0l-16 8v24h32v-24l-16-8zm0 24l-13-6.5v-7.6l13-6.5 13 6.5v7.6l-13 6.5z" class="iconic-envelope-open-envelope iconic-property-fill"/>
+ <path class="iconic-envelope-open-letter iconic-property-accent iconic-property-fill" d="M16 21.5l11-5.5v-4h-22v4z"/>
+ </g>
+ </g>
+ <g data-width="16" data-height="12" class="iconic-sm iconic-container" display="none" transform="scale(8) translate(0 2)">
+ <g class="iconic-envelope-closed">
+ <path class="iconic-envelope-closed-envelope-flap iconic-property-accent iconic-property-fill" d="M8 6l8-4v-2h-16v2z"/>
+ <path class="iconic-envelope-closed-envelope-body iconic-property-fill" d="M8 8l-8-4v8h16v-8z"/>
+ </g>
+ </g>
+ <g data-width="16" data-height="16" class="iconic-sm iconic-container" display="none" transform="scale(8)">
+ <g class="iconic-envelope-open" display="none">
+ <path d="M8 0l-8 4v12h16v-12l-8-4zm0 12l-6-3v-3.8l6-3 6 3v3.8l-6 3z" class="iconic-envelope-open-envelope iconic-property-fill"/>
+ <path class="iconic-envelope-open-letter iconic-property-accent iconic-property-fill" d="M8 10.5l5-2.5v-2h-10v2z"/>
+ </g>
+ </g>
+<script class="iconic-api" type="application/ecmascript">
+//<![CDATA[
+var iconicApis=window._Iconic?window._Iconic.smartIconApis:{};iconicApis["envelope"]=iconicApis["envelope"]||function(t){var e=function(e){t.setAttribute("data-state",e);var i,r,a=t.querySelectorAll(".iconic-envelope-closed"),n=t.querySelectorAll(".iconic-envelope-open");i=r="none","open"===e?i="inline":r="inline";for(var o=0;o<a.length;o++)a[o].setAttribute("display",r),n[o].setAttribute("display",i)},i=function(){var i=t.getAttribute("data-state");i&&e(i)};return{update:i,setState:e}};
+//]]>
+</script>
+</svg>
diff --git a/afb-client/bower_components/foundation-apps/iconic/flag.svg b/afb-client/bower_components/foundation-apps/iconic/flag.svg
new file mode 100755
index 0000000..c1d62e6
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/flag.svg
@@ -0,0 +1,24 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-flag" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Flag</title>
+ </g>
+ <g class="iconic-flag-lg iconic-container iconic-lg" data-width="98" data-height="128" display="inline" transform="translate(15)">
+ <path stroke="#000" stroke-width="8" stroke-linecap="square" class="iconic-flag-mast iconic-property-stroke" d="M4 12v112" fill="none" />
+ <path d="M0 4c0-2.209 1.791-4 4-4s4 1.791 4 4v2h-8v-2z" class="iconic-flag-mast iconic-flag-mast-top iconic-property-fill" />
+ <path d="M42 13c0-.03.015-.056.017-.086-.002-.03-.017-.055-.017-.086 0-.324.175-.616.343-.828l1.314-2c.208-.287.343-.505.343-.828 0-.324-.131-.617-.343-.828-.212-.212-.505-.343-.828-.343h-32.828v52h32v-47z" class="iconic-flag-back iconic-property-accent iconic-property-fill"
+ />
+ <path d="M98 14h-54v51c0 .552.448 1 1 1h53l-14-26.11 14-25.89z" class="iconic-flag-front iconic-property-fill" />
+ </g>
+ <g class="iconic-flag-md iconic-container iconic-md" data-width="27" data-height="32" display="none" transform="scale(4) translate(2)">
+ <path stroke="#000" stroke-width="3" stroke-linecap="square" class="iconic-flag-mast iconic-property-stroke" d="M1.5 3.5v27" fill="none" />
+ <path d="M0 1c0-.552.672-1 1.5-1s1.5.448 1.5 1h-3z" class="iconic-flag-mast iconic-flag-mast-top iconic-property-fill" />
+ <path d="M13 4.5c0-.044.014-.084.025-.125-.007-.042-.025-.081-.025-.125 0-.207.084-.395.22-.53l.561-.439c.136-.136.22-.323.22-.53s-.084-.395-.22-.53-.323-.22-.53-.22h-9.25v14h9v-11.5z" class="iconic-flag-back iconic-property-accent iconic-property-fill"
+ />
+ <path class="iconic-flag-front iconic-property-fill" d="M27 5h-13v14h13l-5-6.877z" />
+ </g>
+ <g class="iconic-flag-sm iconic-container iconic-sm" data-width="16" data-height="16" display="none" transform="scale(8)">
+ <path stroke="#000" stroke-width="2" stroke-linecap="square" class="iconic-flag-mast iconic-property-stroke" d="M1 1v14" fill="none" />
+ <path d="M7 1.75c0-.138.08-.33.177-.427l.646-.646c.097-.097.177-.289.177-.427s-.112-.25-.25-.25h-4.75v8h4v-6.25z" class="iconic-flag-back iconic-property-accent iconic-property-fill" />
+ <path d="M16 2h-7.934c-.038.084-.066.174-.066.25v7.75h8l-4-3.938 4-4.062z" class="iconic-flag-front iconic-property-fill" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/home.svg b/afb-client/bower_components/foundation-apps/iconic/home.svg
new file mode 100755
index 0000000..eaff0e5
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/home.svg
@@ -0,0 +1,28 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-home" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Home</title>
+ </g>
+ <defs>
+ <clipPath id="iconic-size-lg-home-clip-0">
+ <path d="M64 16l-48 40 .25 62h37.75v-24h20v24h38v-62z" />
+ </clipPath>
+ <clipPath id="iconic-size-md-home-clip-0">
+ <path d="M16 5l-11 10v14h9v-6h4v6h9v-14z" />
+ </clipPath>
+ </defs>
+ <g class="iconic-home-lg iconic-container iconic-lg" data-width="128" data-height="122" display="inline" transform="translate(0 3)">
+ <path clip-path="url(#iconic-size-lg-home-clip-0)" d="M16.006 57.5l.239 63c.003.828.677 1.5 1.506 1.5h92.75c.828 0 1.5-.672 1.5-1.5v-63c0-.828-.516-1.93-1.152-2.46l-45.695-38.079c-.636-.53-1.668-.53-2.305 0l-45.695 38.079c-.636.53-1.15 1.632-1.147 2.46z"
+ class="iconic-home-wall iconic-property-fill" />
+ <path d="M10.5 56h-9c-.828 0-.995-.442-.371-.988l61.742-54.024c.624-.545 1.634-.545 2.258 0l61.742 54.025c.624.545.457.988-.371.988h-9c-.828 0-2.013-.434-2.645-.969l-49.71-42.062c-.632-.535-1.658-.535-2.29 0l-49.71 42.062c-.632.535-1.817.969-2.645.969z"
+ class="iconic-home-roof iconic-property-fill" />
+ </g>
+ <g class="iconic-home-md iconic-container iconic-md" data-width="32" data-height="32" display="none" transform="scale(4)">
+ <path clip-path="url(#iconic-size-md-home-clip-0)" d="M5.5 32h21c.276 0 .5-.224.5-.5v-16c0-.276-.166-.651-.37-.836l-10.26-9.327c-.204-.186-.536-.186-.74 0l-10.26 9.327c-.204.186-.37.56-.37.836v16c0 .276.224.5.5.5z" class="iconic-home-wall iconic-property-fill"
+ />
+ <path d="M.365 14.658l15.27-14.316c.202-.189.528-.189.73 0l15.271 14.316c.201.189.141.342-.135.342h-2c-.276 0-.664-.152-.867-.339l-12.265-11.322c-.203-.187-.532-.187-.735 0l-12.265 11.322c-.203.187-.591.339-.867.339h-2c-.276 0-.337-.153-.135-.342z"
+ class="iconic-home-roof iconic-property-fill" />
+ </g>
+ <g class="iconic-home-sm iconic-container iconic-sm" data-width="16" data-height="15" display="none" transform="scale(8)">
+ <path class="iconic-home-wall iconic-property-fill" d="M8 0l-8 7h2v8h5v-3h2v3h5v-8h2z" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/lock.svg b/afb-client/bower_components/foundation-apps/iconic/lock.svg
new file mode 100755
index 0000000..8af2303
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/lock.svg
@@ -0,0 +1,55 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" data-icon="lock" width="128" height="128" class="iconic iconic-lock" viewBox="0 0 128 128">
+ <g><title>Lock</title></g>
+ <defs>
+ <clipPath id="iconic-size-lg-unlock-clip-0">
+ <path d="M18 0v66h58v-66h-58zm10 42c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
+ </clipPath>
+ </defs>
+ <g data-width="94" data-height="114" class="iconic-lg iconic-container" display="inline" transform="translate(17 7)">
+ <g class="iconic-lock-locked">
+ <path stroke="#000" stroke-width="8" stroke-miterlimit="10" d="M72 51v-22c0-13.8-11.2-25-25-25s-25 11.2-25 25v22" class="iconic-lock-locked-loop iconic-property-accent iconic-property-stroke" fill="none"/>
+ <path class="iconic-lock-locked-body iconic-lock-locked-body-main iconic-property-fill" d="M2 56h90v40h-90z"/>
+ <path class="iconic-lock-locked-body iconic-lock-locked-body-bottom iconic-property-fill" d="M0 98v16h94v-16h-56z"/>
+ <path class="iconic-lock-locked-body iconic-lock-locked-body-top iconic-property-fill" d="M0 48h94v6h-94z"/>
+ </g>
+ </g>
+ <g data-width="94" data-height="128" class="iconic-lg iconic-container" display="inline" transform="translate(17)">
+ <g class="iconic-lock-unlocked" display="none">
+ <path clip-path="url(#iconic-size-lg-unlock-clip-0)" stroke="#000" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" d="M72 62.2v-33.2c0-13.8-11.2-25-25-25s-25 11.2-25 25v15" class="iconic-unlocked-loop iconic-property-accent iconic-property-stroke" fill="none"/>
+ <path class="iconic-lock-unlocked-body iconic-lock-unlocked-body-bottom iconic-property-fill" d="M0 112h94v16h-94z"/>
+ <path class="iconic-lock-unlocked-body iconic-lock-unlocked-body-main iconic-property-fill" d="M2 70h90v40h-90z"/>
+ <path class="iconic-lock-unlocked-body iconic-lock-unlocked-body-top iconic-property-fill" d="M0 62h94v6h-94z"/>
+ </g>
+ </g>
+ <g data-width="24" data-height="28" class="iconic-md iconic-container" display="none" transform="scale(4) translate(4 2)">
+ <g class="iconic-lock-locked">
+ <path stroke="#000" stroke-width="3" stroke-miterlimit="10" d="M5.5 14v-6c0-3.6 2.9-6.5 6.5-6.5s6.5 2.9 6.5 6.5v6" class="iconic-lock-locked-loop iconic-property-accent iconic-property-stroke" fill="none"/>
+ <path class="iconic-lock-locked-body iconic-lock-locked-body-main iconic-property-fill" d="M0 12h24v11h-24z"/>
+ <path class="iconic-lock-locked-body iconic-lock-locked-body-top iconic-property-fill" d="M0 24h24v4h-24z"/>
+ </g>
+ </g>
+ <g data-width="24" data-height="32" class="iconic-md iconic-container" display="none" transform="scale(4) translate(4)">
+ <g class="iconic-lock-unlocked" display="none">
+ <path stroke="#000" stroke-width="3" stroke-miterlimit="10" d="M5.5 11v-3c0-3.6 2.9-6.5 6.5-6.5s6.5 2.9 6.5 6.5v11" class="iconic-lock-unlocked-loop iconic-property-accent iconic-property-stroke" fill="none"/>
+ <path class="iconic-lock-unlocked-body iconic-lock-unlocked-body-main iconic-property-fill" d="M0 16h24v11h-24z"/>
+ <path class="iconic-lock-unlocked-body iconic-lock-unlocked-body-top iconic-property-fill" d="M0 28h24v4h-24z"/>
+ </g>
+ </g>
+ <g data-width="12" data-height="14" class="iconic-sm iconic-container" display="none" transform="scale(8) translate(2 1)">
+ <g class="iconic-lock-locked">
+ <path stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M9 8v-4c0-1.7-1.3-3-3-3s-3 1.3-3 3v2" class="iconic-lock-locked-loop iconic-property-accent iconic-property-stroke" fill="none"/>
+ <path class="iconic-lock-locked-body iconic-property-fill" d="M0 6h12v8h-12z"/>
+ </g>
+ </g>
+ <g data-width="12" data-height="16" class="iconic-sm iconic-container" display="none" transform="scale(8) translate(2)">
+ <g class="iconic-lock-unlocked" display="none">
+ <path stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M9 8v-4c0-1.7-1.3-3-3-3s-3 1.3-3 3v1" class="iconic-lock-unlocked-loop iconic-property-accent iconic-property-stroke" fill="none"/>
+ <path class="iconic-lock-unlocked-body iconic-property-fill" d="M0 8h12v8h-12z"/>
+ </g>
+ </g>
+<script class="iconic-api" type="application/ecmascript">
+//<![CDATA[
+var iconicApis=window._Iconic?window._Iconic.smartIconApis:{};iconicApis["lock"]=iconicApis["lock"]||function(t){var e=function(e){t.setAttribute("data-state",e);var i,r,n=t.querySelectorAll(".iconic-lock-locked"),a=t.querySelectorAll(".iconic-lock-unlocked");i=r="none","unlocked"===e?r="inline":i="inline";for(var c=0;c<n.length;c++)n[c].setAttribute("display",i),a[c].setAttribute("display",r)},i=function(){var i=t.getAttribute("data-state");i&&e(i)};return{update:i,setState:e}};
+//]]>
+</script>
+</svg>
diff --git a/afb-client/bower_components/foundation-apps/iconic/magnifying-glass.svg b/afb-client/bower_components/foundation-apps/iconic/magnifying-glass.svg
new file mode 100755
index 0000000..fbc7c8c
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/magnifying-glass.svg
@@ -0,0 +1,26 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-magnifying-glass" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Magnifying Glass</title>
+ </g>
+ <defs>
+ <clipPath id="iconic-size-lg-magnifying-glass-clip-0">
+ <path d="M95.707 83.707l-6.707 6.707-1.414-1.414 6.707-6.707-4.293-4.293-12 12 38 38 12-12z" />
+ </clipPath>
+ </defs>
+ <g class="iconic-magnifying-glass-lg iconic-container iconic-lg" data-width="128" data-height="128" display="inline">
+ <path stroke="#000" stroke-width="8" class="iconic-magnifying-glass-handle iconic-magnifying-glass-handle-connector iconic-property-stroke" d="M85 85l-7.912-7.912" fill="none" />
+ <path d="M126.939 117.061l-9.879 9.879c-.586.586-1.536.586-2.121 0l-35.879-35.879c-.586-.586-.586-1.536 0-2.121l9.879-9.879c.586-.586 1.536-.586 2.121 0l35.879 35.879c.586.586.586 1.535 0 2.121z" clip-path="url(#iconic-size-lg-magnifying-glass-clip-0)"
+ class="iconic-magnifying-glass-handle iconic-property-fill" />
+ <circle stroke="#000" stroke-width="8" cx="46" cy="46" r="42" class="iconic-magnifying-glass-rim iconic-property-stroke" fill="none" />
+ <path fill="#fff" stroke="#000" stroke-width="2" stroke-linecap="round" d="M13 46c0-18.225 14.775-33 33-33" class="iconic-magnifying-glass-reflection iconic-property-accent iconic-property-stroke" />
+ </g>
+ <g class="iconic-magnifying-glass-md iconic-container iconic-md" data-width="32" data-height="32" display="none" transform="scale(4)">
+ <path fill="#fff" stroke="#000" stroke-width="3" class="iconic-magnifying-glass-handle iconic-magnifying-glass-handle-connector iconic-property-stroke" d="M19.5 19.582l9.438 9.438" />
+ <circle stroke="#000" stroke-width="3" cx="12" cy="12" r="10.5" class="iconic-magnifying-glass-rim iconic-property-stroke" fill="none" />
+ <path d="M23.646 20.354l-3.293 3.293c-.195.195-.195.512 0 .707l7.293 7.293c.195.195.512.195.707 0l3.293-3.293c.195-.195.195-.512 0-.707l-7.293-7.293c-.195-.195-.512-.195-.707 0z" class="iconic-magnifying-glass-handle iconic-property-fill" />
+ </g>
+ <g class="iconic-magnifying-glass-sm iconic-container iconic-sm" data-width="16" data-height="16" display="none" transform="scale(8)">
+ <path stroke="#000" stroke-width="3" stroke-linecap="round" class="iconic-magnifying-glass-handle iconic-property-stroke" d="M11 11l3.5 3.5" fill="none" />
+ <circle stroke="#000" stroke-width="2" cx="6.5" cy="6.5" r="5.5" class="iconic-magnifying-glass-rim iconic-property-stroke" fill="none" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/person.svg b/afb-client/bower_components/foundation-apps/iconic/person.svg
new file mode 100755
index 0000000..9657495
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/person.svg
@@ -0,0 +1,62 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" data-icon="person" width="128" height="128" class="iconic iconic-person" viewBox="0 0 128 128">
+ <g><title>Person</title></g>
+ <g data-width="128" data-height="128" class="iconic-lg iconic-container" display="inline">
+ <g class="iconic-person-genderless">
+ <path d="M87.9 80c-.8 0-2 .4-2.7.9-6.1 4.6-13.3 7.1-21.2 7.1-7.5 0-14.5-2.5-20.5-7.1-.7-.5-1.8-.9-2.7-.9h-8.8c-17.7 0-32 14.3-32 32v14.5c0 .8.7 1.5 1.5 1.5h125c.8 0 1.5-.7 1.5-1.5v-14.5c0-17.7-14.3-32-32-32h-8.1z" class="iconic-person-body iconic-property-fill"/>
+ <path d="M96 35c0 22.1-10.1 45-32 45-20.1 0-32-22.9-32-45s14.3-35 32-35 32 12.9 32 35z" class="iconic-person-head iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="112" data-height="128" class="iconic-lg iconic-container" display="inline" transform="translate(8)">
+ <g class="iconic-person-female" display="none">
+ <path d="M78.7 80c-.7 0-1.7.5-2.3 1-6.3 5.8-13.4 9-20.4 9-7.3 0-14.4-3.4-20.5-9-.6-.6-1.6-1-2.3-1h-1.2c-8 0-32 16-32 40v6.5c0 .8.7 1.5 1.5 1.5h109c.8 0 1.5-.7 1.5-1.5v-6.5c0-24-24-40-32-40h-1.3z" class="iconic-person-female-body iconic-property-fill"/>
+ <path d="M104 64c-8 0-18-5.3-18-24 0-22.1-12.3-40-30-40s-30 17.9-30 40c0 18.7-10 24-18 24 0 0 11.5 4.3 24.9 1 5.9 10.1 14.8 17 23.1 17s17.3-7 23.2-17.2c13.2 3.5 24.8-.8 24.8-.8z" class="iconic-person-female-head iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="128" data-height="128" class="iconic-lg iconic-container" display="inline">
+ <g class="iconic-person-male" display="none">
+ <path d="M90.8 80c-.8 0-1.9.5-2.5 1.1-6.6 7.1-14.9 10.9-24.3 10.9s-17.8-3.8-24.3-10.9c-.6-.6-1.7-1.1-2.5-1.1h-5.2c-17.7 0-32 14.3-32 32v14.5c0 .8.7 1.5 1.5 1.5h125c.8 0 1.5-.7 1.5-1.5v-14.5c0-17.7-14.3-32-32-32h-5.2z" class="iconic-person-male-body iconic-property-fill"/>
+ <path d="M80 8c-.5-7.5-9.4-8-16-8-31.8 0-36.3 26-30 40 0 22.1 10 44 30 44 19.8 0 30-21.9 30-44 7.7-23.7-6.2-32-14-32z" class="iconic-person-male-head iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="32" data-height="32" class="iconic-md iconic-container" display="none" transform="scale(4)">
+ <g class="iconic-person-genderless">
+ <path d="M23.6 20c-.2 0-.6.2-.8.3-1.8 1.7-4.2 2.7-6.8 2.7s-5-1-6.8-2.7c-.2-.1-.5-.3-.8-.3h-.4c-4.4 0-8 3.6-8 8v3.5c0 .3.2.5.5.5h31c.3 0 .5-.2.5-.5v-3.5c0-4.4-3.6-8-8-8h-.4z" class="iconic-person-body iconic-property-fill"/>
+ <path d="M24 9c0 5.5-2.6 11-8 11-5.5 0-8-5.5-8-11s3.6-9 8-9 8 3.5 8 9z" class="iconic-person-head iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="28" data-height="32" class="iconic-md iconic-container" display="none" transform="scale(4) translate(2)">
+ <g class="iconic-person-female" display="none">
+ <path d="M20.6 20.5c-2 2.1-4.3 3.5-6.6 3.5s-4.6-1.4-6.6-3.5c-.2-.2-.5-.3-.8-.2-2.5 1.2-6.6 4.7-6.6 9.7v1.5c0 .3.2.5.5.5h27c.3 0 .5-.2.5-.5v-1.5c0-5-4.1-8.5-6.6-9.6-.3-.2-.7-.1-.8.1z" class="iconic-person-female-body iconic-property-fill"/>
+ <path d="M26 17c-2 0-4-2.3-4-7 0-5.5-3.6-10-8-10s-8 4.5-8 10c0 4.7-2 7-4 7 0 0 2.9.7 6.3-.2 1.7 2.5 4 4.2 5.7 4.2 1.7 0 4.1-1.8 5.8-4.3 3.3 1 6.2.3 6.2.3z" class="iconic-person-female-head iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="32" data-height="32" class="iconic-md iconic-container" display="none" transform="scale(4)">
+ <g class="iconic-person-male" display="none">
+ <path d="M23.9 20.4c-1.9 2.3-4.6 3.6-7.9 3.6s-6-1.3-7.9-3.6c-.2-.2-.5-.4-.8-.4-4.1.4-7.3 3.8-7.3 8v3.5c0 .3.2.5.5.5h31c.3 0 .5-.2.5-.5v-3.5c0-4.2-3.2-7.6-7.3-8-.3 0-.6.2-.8.4z" class="iconic-person-male-body iconic-property-fill"/>
+ <path d="M20 2c-.1-1.9-2.3-2-4-2-7.9 0-9.6 6.5-8 10 0 5.5 1.9 11 8 11 5.9 0 8-5.5 8-11 1.9-5.9-2.1-8-4-8z" class="iconic-person-male-head iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="16" data-height="16" class="iconic-sm iconic-container" display="none" transform="scale(8)">
+ <g class="iconic-person-genderless">
+ <path d="M12.2 10c-1.1 1.2-2.6 2-4.2 2s-3.1-.8-4.2-2c-2.1.1-3.8 1.9-3.8 4v2h16v-2c0-2.1-1.7-3.9-3.8-4z" class="iconic-person-body iconic-property-fill"/>
+ <ellipse cx="8" cy="5" rx="4" ry="5" class="iconic-person-head iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="16" data-height="16" class="iconic-sm iconic-container" display="none" transform="scale(8)">
+ <g class="iconic-person-female" display="none">
+ <path d="M11.8 10.2c-1.2 1.1-2.5 1.8-3.8 1.8s-2.6-.7-3.8-1.8c-1.5.5-4.2 2.3-4.2 4.8v1h16v-1c0-2.5-2.7-4.3-4.2-4.8z" class="iconic-person-female-body iconic-property-fill"/>
+ <path d="M14 8c-1 0-2-.7-2-3 0-2.8-1.8-5-4-5s-4 2.2-4 5c0 2.3-1 3-2 3 0 0 1.5.8 3.3.3.8 1 1.9 1.7 2.7 1.7.8 0 1.9-.7 2.8-1.7 1.7.5 3.2-.3 3.2-.3z" class="iconic-person-female-head iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="16" data-height="16" class="iconic-sm iconic-container" display="none" transform="scale(8)">
+ <g class="iconic-person-male" display="none">
+ <path d="M12.5 10c-1 1.3-2.6 2-4.5 2s-3.4-.7-4.5-2c-2 .3-3.5 2-3.5 4v2h16v-2c0-2-1.5-3.7-3.5-4z" class="iconic-person-male-body iconic-property-fill"/>
+ <path d="M10 1c-.1-.9-1.2-1-2-1-4 0-4.8 3.2-4 5 0 2.8 1 5 4 5s4-2.2 4-5c1-3-1-4-2-4z" class="iconic-person-male-head iconic-property-fill"/>
+ </g>
+ </g>
+<script class="iconic-api" type="application/ecmascript">
+//<![CDATA[
+var iconicApis=window._Iconic?window._Iconic.smartIconApis:{};iconicApis["person"]=iconicApis["person"]||function(t){var e=function(e){t.setAttribute("data-gender",e);var i,r,n,a=t.querySelectorAll(".iconic-person-genderless"),c=t.querySelectorAll(".iconic-person-female"),o=t.querySelectorAll(".iconic-person-male");switch(i=r=n="none",e){case"female":i="inline";break;case"male":n="inline";break;default:r="inline"}for(var s=0;s<a.length;s++)a[s].setAttribute("display",r),c[s].setAttribute("display",i),o[s].setAttribute("display",n)},i=function(){var i=t.getAttribute("data-gender");i&&e(i)};return{update:i,setGender:e}};
+//]]>
+</script>
+</svg>
diff --git a/afb-client/bower_components/foundation-apps/iconic/reload.svg b/afb-client/bower_components/foundation-apps/iconic/reload.svg
new file mode 100755
index 0000000..a817913
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/reload.svg
@@ -0,0 +1,19 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-reload" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Reload</title>
+ </g>
+ <g class="iconic-reload-lg iconic-container iconic-lg" data-width="127" data-height="127" display="inline">
+ <path stroke="#000" stroke-width="8" d="M123.956 63.96c0 22.534-13.073 43.601-33.199 53.691-20.763 10.41-46.377 7.568-64.436-6.972-17.721-14.268-25.908-37.951-20.841-60.125 5.023-21.982 22.571-39.743 44.522-44.953 20.127-4.777 41.747 1.298 56.38 15.931"
+ class="iconic-reload-line iconic-property-stroke" fill="none" />
+ <path d="M121.64 36.429l-5.369-24.937c-.174-.81-.791-.992-1.376-.406l-19.879 19.879c-.586.586-.403 1.198.407 1.368l25.064 5.255c.811.17 1.327-.349 1.152-1.159z" class="iconic-reload-arrowhead iconic-property-fill" />
+ </g>
+ <g class="iconic-reload-md iconic-container iconic-md" data-width="31" data-height="31" display="none" transform="scale(4)">
+ <path stroke="#000" stroke-width="3" d="M30.497 15.987c0 5.327-3.018 10.331-7.726 12.824-4.772 2.526-10.729 2.14-15.136-.976-4.384-3.1-6.727-8.494-6.005-13.815.711-5.238 4.356-9.781 9.308-11.625 5.265-1.96 11.343-.63 15.313 3.34" class="iconic-reload-line iconic-property-stroke"
+ fill="none" />
+ <path d="M29.502 9.916l-6.01-.859c-.273-.039-.337-.229-.141-.424l5.293-5.293c.195-.195.385-.132.424.141l.859 6.01c.039.273-.151.463-.424.424z" class="iconic-reload-arrowhead iconic-property-fill" />
+ </g>
+ <g class="iconic-reload-sm iconic-container iconic-sm" data-width="15" data-height="15" display="none" transform="scale(8)">
+ <path stroke="#000" stroke-width="2" d="M14.99 8c0 3.223-2.293 6.108-5.438 6.825-3.272.746-6.705-1.009-8.012-4.1-1.268-2.997-.24-6.568 2.413-8.444 2.748-1.943 6.609-1.609 8.987.77" class="iconic-reload-line iconic-property-stroke" fill="none" />
+ <path class="iconic-reload-arrowhead iconic-property-fill" d="M15.99 0v6h-6z" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/share-boxed.svg b/afb-client/bower_components/foundation-apps/iconic/share-boxed.svg
new file mode 100755
index 0000000..379bafc
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/share-boxed.svg
@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-share-boxed" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Share Boxed</title>
+ </g>
+ <g class="iconic-share-boxed-lg iconic-container iconic-lg" data-width="128" data-height="112" display="inline" transform="translate(0 8)">
+ <path stroke="#000" stroke-width="8" stroke-linecap="square" d="M108 56v49c0 1.657-1.343 3-3 3h-98c-1.657 0-3-1.343-3-3v-98c0-1.657 1.343-3 3-3h37" class="iconic-share-boxed-box iconic-property-accent iconic-property-stroke" fill="none" />
+ <path d="M128 26l-32-20v8h-2c-54 0-78 24.872-78 72 8.25-31.75 26-48 66-48 7.731 0 11.862 0 14 0v8l32-20z" class="iconic-share-boxed-arrow iconic-property-fill" />
+ </g>
+ <g class="iconic-share-boxed-md iconic-container iconic-md" data-width="32" data-height="29" display="none" transform="scale(4) translate(0 1)">
+ <path stroke="#000" stroke-width="3" stroke-linecap="square" d="M27.5 17.5v9c0 .552-.448 1-1 1h-24c-.552 0-1-.448-1-1v-24c0-.552.448-1 1-1h8" class="iconic-share-boxed-box iconic-property-accent iconic-property-stroke" fill="none" />
+ <path d="M32 7.333l-8-6.333v3c-13 0-18 6.218-18 18 2.063-7.938 8-12 16-12 .9 0 1.536 0 2 0v3l8-5.667z" class="iconic-share-boxed-arrow iconic-property-fill" />
+ </g>
+ <g class="iconic-share-boxed-sm iconic-container iconic-sm" data-width="16" data-height="14" display="none" transform="scale(8) translate(0 1)">
+ <path stroke="#000" stroke-width="2" stroke-linecap="square" d="M13 11v1.5c0 .276-.224.5-.5.5h-11c-.276 0-.5-.224-.5-.5v-11c0-.276.224-.5.5-.5h3.5" class="iconic-share-boxed-box iconic-property-accent iconic-property-stroke" fill="none" />
+ <path d="M16 4l-4-4v2c-4.418 0-8 3.582-8 8 0-2.209 3-4 5-4 1.201 0 2.304 0 3 0v2l4-4z" class="iconic-share-boxed-arrow iconic-property-fill" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/star.svg b/afb-client/bower_components/foundation-apps/iconic/star.svg
new file mode 100755
index 0000000..df95657
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/star.svg
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" class="iconic iconic-star" width="128" height="128" viewBox="0 0 128 128">
+ <g class="iconic-metadata">
+ <title>Star</title>
+ </g>
+ <g class="iconic-star-lg iconic-container iconic-lg" data-width="128" data-height="122" display="inline" transform="translate(0 3)">
+ <path class="iconic-property-fill" d="M88.537 74.838l39.463-28.838h-48.918l-15.082-46-15.082 46h-48.918l39.463 28.838-15.463 47.162 40-29.231 40 29.231z" />
+ </g>
+ <g class="iconic-star-md iconic-container iconic-md" data-width="32" data-height="31" display="none" transform="scale(4)">
+ <path class="iconic-property-fill" d="M22.185 19.173l9.815-7.173h-12.129l-3.871-12-3.871 12h-12.129l9.815 7.173-3.815 11.827 10-7.308 10 7.308z" />
+ </g>
+ <g class="iconic-star-sm iconic-container iconic-sm" data-width="16" data-height="16" display="none" transform="scale(8)">
+ <path class="iconic-property-fill" d="M11 10l5-4h-6l-2-6-2 6h-6l5 4-2 6 5-4 5.004 4z" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/iconic/thumb.svg b/afb-client/bower_components/foundation-apps/iconic/thumb.svg
new file mode 100755
index 0000000..8e1a677
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/thumb.svg
@@ -0,0 +1,38 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" data-icon="thumb" width="128" height="128" class="iconic iconic-thumb" viewBox="0 0 128 128">
+ <g><title>Thumb</title></g>
+ <g data-width="126" data-height="128" class="iconic-lg iconic-container" display="inline" transform="translate(1)">
+ <g class="iconic-thumbs-up">
+ <path d="M0 52l10 76h22v-76h-32zm26 72c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z" class="iconic-thumbs-up-cuff iconic-property-accent iconic-property-fill"/>
+ <path d="M117 54h-27c-5 0-9-4.5-9-9s5-15 5-31v-5c0-5-4-9-9-9h-6c-1.7 0-3 1.3-3 3v11c0 12.1-11.6 27.2-19.3 34.7-3.3 3.4-7.7 5.3-12.7 5.3v68s8 4 20 4h43c3.7 0 6.9-2.3 8.3-5.5 0 0 15-42.1 18.1-54.5.4-1.4.6-2.5.6-3 0-5.1-4-9-9-9z" class="iconic-thumbs-up-hand iconic-property-fill"/>
+ </g>
+ <g class="iconic-thumbs-down" display="none">
+ <path d="M10 0l-10 76h32v-76h-22zm16 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z" class="iconic-thumbs-down-cuff iconic-property-accent iconic-property-fill"/>
+ <path d="M125.4 62c-3.1-12.4-18.1-54.5-18.1-54.5-1.4-3.2-4.6-5.5-8.3-5.5h-43l-20 4v68c5 0 9.4 1.9 12.7 5.3 7.7 7.5 19.3 22.6 19.3 34.7v11c0 1.7 1.3 3 3 3h6c5 0 9-4 9-9v-5c0-16-5-26.5-5-31s4-9 9-9h27c5 0 9-3.9 9-9 0-.5-.2-1.6-.6-3z" class="iconic-thumbs-down-hand iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="32" data-height="32" class="iconic-md iconic-container" display="none" transform="scale(4)">
+ <g class="iconic-thumbs-up">
+ <path d="M0 13l2 19h5v-19h-7zm5 18c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z" class="iconic-thumbs-up-cuff iconic-property-accent iconic-property-fill"/>
+ <path d="M29.7 13h-7.2c-1.2 0-2.2-1.1-2.2-2.3s1.7-3.7 1.7-6.7v-1.5c0-1.4-1.1-2.5-2.5-2.5h-1.8c-.4 0-.7.3-.7.8v2.8c0 3-2.9 6.3-4.8 8.2-.9.7-2 1.2-3.2 1.2v17s2 1 5 1h11.2c.9 0 1.7-.6 2.1-1.4 0 0 3.8-10.5 4.5-13.6.1-.4.1-.6.1-.8.1-1.2-.9-2.2-2.2-2.2z" class="iconic-thumbs-up-hand iconic-property-fill"/>
+ </g>
+ <g class="iconic-thumbs-down" display="none">
+ <path d="M2 0l-2 19h7v-19h-5zm3 3c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z" class="iconic-thumbs-down-cuff iconic-property-accent iconic-property-fill"/>
+ <path d="M31.9 16c-.8-3.1-4.5-13.6-4.5-13.6-.4-.8-1.2-1.4-2.1-1.4h-11.3l-5 1v17c1.2 0 2.3.5 3.2 1.3 1.9 1.9 4.8 5.1 4.8 8.2v2.8c0 .4.3.8.8.8h1.8c1.4 0 2.5-1.1 2.5-2.5v-1.5c0-3-1.7-5.6-1.7-6.7s1.4-2.4 2.6-2.4h6.8c1.2 0 2.2-1 2.2-2.2 0-.2 0-.4-.1-.8z" class="iconic-thumbs-down-hand iconic-property-fill"/>
+ </g>
+ </g>
+ <g data-width="14" data-height="14" class="iconic-sm iconic-container" display="none" transform="scale(8) translate(1 1)">
+ <g class="iconic-thumbs-up">
+ <path class="iconic-thumbs-up-cuff iconic-property-accent iconic-property-fill" d="M0 6h3v8h-3z"/>
+ <path d="M13 6h-3c-.6 0-1-.5-1-1s.8-3.2 1-3.7c.1-.5-.2-1.1-.7-1.3-.5-.1-1 .2-1.3.7-.3.5-2.2 4.3-2.6 4.7s-.8.6-1.4.6v8h7c.4 0 .8-.3.9-.6 0 0 2.1-5.8 2.1-6.4s-.4-1-1-1z" class="iconic-thumbs-up-hand iconic-property-fill"/>
+ </g>
+ <g class="iconic-thumbs-down" display="none">
+ <path class="iconic-thumbs-down-cuff iconic-property-accent iconic-property-fill" d="M0 0h3v8h-3z"/>
+ <path d="M11.9.6c-.1-.3-.5-.6-.9-.6h-7v8c.6 0 1 .2 1.4.6.4.4 2.3 4.2 2.6 4.7.3.5.8.8 1.3.7.5-.2.8-.7.7-1.3-.2-.5-1-3.2-1-3.7s.4-1 1-1h3c.6 0 1-.4 1-1l-2.1-6.4z" class="iconic-thumbs-down-hand iconic-property-fill"/>
+ </g>
+ </g>
+<script class="iconic-api" type="application/ecmascript">
+//<![CDATA[
+var iconicApis=window._Iconic?window._Iconic.smartIconApis:{};iconicApis["thumb"]=iconicApis["thumb"]||function(t){var e=function(e){t.setAttribute("data-state",e);var i,r,n=t.querySelectorAll(".iconic-thumbs-up"),a=t.querySelectorAll(".iconic-thumbs-down");i=r="none","down"===e?r="inline":i="inline";for(var c=0;c<n.length;c++)n[c].setAttribute("display",i),a[c].setAttribute("display",r)},i=function(){var i=t.getAttribute("data-state");i&&e(i)};return{update:i,setState:e}};
+//]]>
+</script>
+</svg>
diff --git a/afb-client/bower_components/foundation-apps/iconic/zoom.svg b/afb-client/bower_components/foundation-apps/iconic/zoom.svg
new file mode 100755
index 0000000..af1fbee
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/iconic/zoom.svg
@@ -0,0 +1,56 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" data-icon="zoom" width="128" height="128" class="iconic iconic-zoom" viewBox="0 0 128 128">
+ <g><title>Zoom</title></g>
+ <defs>
+ <clipPath id="iconic-size-lg-zoom-in-clip-0">
+ <path d="M95.7 83.7l-6.7 6.7-1.4-1.4 6.7-6.7-4.3-4.3-12 12 38 38 12-12z"/>
+ </clipPath>
+ <clipPath id="iconic-size-lg-zoom-out-clip-0">
+ <path d="M95.7 83.7l-6.7 6.7-1.4-1.4 6.7-6.7-4.3-4.3-12 12 38 38 12-12z"/>
+ </clipPath>
+ </defs>
+ <g data-width="128" data-height="128" class="iconic-lg iconic-container" display="inline">
+ <g class="iconic-zoom-in">
+ <path stroke="#000" stroke-width="8" stroke-miterlimit="10" class="iconic-zoom-in-handle iconic-zoom-in-handle-connector iconic-property-stroke" d="M85 85l-7.9-7.9" fill="none"/>
+ <path d="M126.9 117.1l-9.9 9.9c-.6.6-1.5.6-2.1 0l-35.8-35.9c-.6-.6-.6-1.5 0-2.1l9.9-9.9c.6-.6 1.5-.6 2.1 0l35.9 35.9c.5.5.5 1.5-.1 2.1z" clip-path="url(#iconic-size-lg-zoom-in-clip-0)" class="iconic-zoom-in-handle iconic-property-fill"/>
+ <circle stroke="#000" stroke-width="8" stroke-miterlimit="10" cx="46" cy="46" r="42" class="iconic-zoom-in-rim iconic-property-stroke" fill="none"/>
+ <path stroke="#000" stroke-width="4" stroke-linecap="square" stroke-miterlimit="10" class="iconic-zoom-in-plus iconic-property-accent iconic-property-stroke" d="M46 34v24m12-12h-24" fill="none"/>
+ </g>
+ <g class="iconic-zoom-out" display="none">
+ <path stroke="#000" stroke-width="8" stroke-miterlimit="10" class="iconic-zoom-out-handle iconic-zoom-out-handle-connector iconic-property-stroke" d="M85 85l-7.9-7.9" fill="none"/>
+ <path d="M126.9 117.1l-9.9 9.9c-.6.6-1.5.6-2.1 0l-35.8-35.9c-.6-.6-.6-1.5 0-2.1l9.9-9.9c.6-.6 1.5-.6 2.1 0l35.9 35.9c.5.5.5 1.5-.1 2.1z" clip-path="url(#iconic-size-lg-zoom-out-clip-0)" class="iconic-zoom-out-handle iconic-property-fill"/>
+ <circle stroke="#000" stroke-width="8" stroke-miterlimit="10" cx="46" cy="46" r="42" class="iconic-zoom-out-rim iconic-property-stroke" fill="none"/>
+ <path stroke="#000" stroke-width="4" stroke-linecap="square" stroke-miterlimit="10" class="iconic-zoom-out-minus iconic-property-accent iconic-property-stroke" d="M58 46h-24" fill="none"/>
+ </g>
+ </g>
+ <g data-width="32" data-height="32" class="iconic-md iconic-container" display="none" transform="scale(4)">
+ <g class="iconic-zoom-in">
+ <path fill="none" stroke="#000" stroke-width="3" stroke-miterlimit="10" class="iconic-zoom-in-handle iconic-zoom-in-handle-connector iconic-property-stroke" d="M19.5 19.6l9.4 9.4"/>
+ <circle stroke="#000" stroke-width="3" stroke-miterlimit="10" cx="12" cy="12" r="10.5" class="iconic-zoom-in-rim iconic-property-stroke" fill="none"/>
+ <path d="M23.6 20.4l-3.3 3.3c-.2.2-.2.5 0 .7l7.3 7.3c.2.2.5.2.7 0l3.3-3.3c.2-.2.2-.5 0-.7l-7.3-7.3c-.1-.2-.5-.2-.7 0z" class="iconic-zoom-in-handle iconic-property-fill"/>
+ <path stroke="#000" stroke-width="2" stroke-linecap="square" stroke-miterlimit="10" class="iconic-zoom-in-plus iconic-property-accent iconic-property-stroke" d="M12 8v8m4-4h-8" fill="none"/>
+ </g>
+ <g class="iconic-zoom-out" display="none">
+ <path fill="none" stroke="#000" stroke-width="3" stroke-miterlimit="10" class="iconic-zoom-out-handle iconic-zoom-out-handle-connector iconic-property-stroke" d="M19.5 19.6l9.4 9.4"/>
+ <circle stroke="#000" stroke-width="3" stroke-miterlimit="10" cx="12" cy="12" r="10.5" class="iconic-zoom-out-rim iconic-property-stroke" fill="none"/>
+ <path d="M23.6 20.4l-3.3 3.3c-.2.2-.2.5 0 .7l7.3 7.3c.2.2.5.2.7 0l3.3-3.3c.2-.2.2-.5 0-.7l-7.3-7.3c-.1-.2-.5-.2-.7 0z" class="iconic-zoom-out-handle iconic-property-fill"/>
+ <path stroke="#000" stroke-width="2" stroke-linecap="square" stroke-miterlimit="10" class="iconic-zoom-out-minus iconic-property-accent iconic-property-stroke" d="M16 12h-8" fill="none"/>
+ </g>
+ </g>
+ <g data-width="16" data-height="16" class="iconic-sm iconic-container" display="none" transform="scale(8)" stroke="#000" stroke-miterlimit="10" fill="none">
+ <g class="iconic-zoom-in">
+ <path stroke-width="3" stroke-linecap="round" class="iconic-zoom-in-handle iconic-property-stroke" d="M11 11l3.5 3.5"/>
+ <circle stroke-width="2" cx="6.5" cy="6.5" r="5.5" class="iconic-zoom-in-rim iconic-property-stroke"/>
+ <path stroke-linecap="square" class="iconic-zoom-in-plus iconic-property-accent iconic-property-stroke" d="M6.5 4.5v4m2-2h-4"/>
+ </g>
+ <g class="iconic-zoom-out" display="none">
+ <path stroke-width="3" stroke-linecap="round" class="iconic-zoom-out-handle iconic-property-stroke" d="M11 11l3.5 3.5"/>
+ <circle stroke-width="2" cx="6.5" cy="6.5" r="5.5" class="iconic-zoom-out-rim iconic-property-stroke"/>
+ <path stroke-linecap="square" class="iconic-zoom-out-minus iconic-property-accent iconic-property-stroke" d="M8.5 6.5h-4"/>
+ </g>
+ </g>
+<script class="iconic-api" type="application/ecmascript">
+//<![CDATA[
+var iconicApis=window._Iconic?window._Iconic.smartIconApis:{};iconicApis["zoom"]=iconicApis["zoom"]||function(t){var e=function(e){t.setAttribute("data-state",e);var i,r,n=t.querySelectorAll(".iconic-zoom-in"),a=t.querySelectorAll(".iconic-zoom-out");i=r="none","out"===e?r="inline":i="inline";for(var c=0;c<n.length;c++)n[c].setAttribute("display",i),a[c].setAttribute("display",r)},i=function(){var i=t.getAttribute("data-state");i&&e(i)};return{update:i,setState:e}};
+//]]>
+</script>
+</svg>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/app.js b/afb-client/bower_components/foundation-apps/js/angular/app.js
new file mode 100644
index 0000000..7251eb1
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/app.js
@@ -0,0 +1,35 @@
+(function() {
+ 'use strict';
+
+ angular.module('application', [
+ 'ui.router',
+ 'ngAnimate',
+
+ //foundation
+ 'foundation',
+ 'foundation.dynamicRouting',
+ 'foundation.dynamicRouting.animations'
+ ])
+ .config(config)
+ .run(run)
+ ;
+
+ config.$inject = ['$urlRouterProvider', '$locationProvider'];
+
+ function config($urlProvider, $locationProvider) {
+ $urlProvider.otherwise('/');
+
+ $locationProvider.html5Mode({
+ enabled: false,
+ requireBase: false
+ });
+
+ $locationProvider.hashPrefix('!');
+ }
+
+
+ function run() {
+ FastClick.attach(document.body);
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion-item.html b/afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion-item.html
new file mode 100644
index 0000000..2bc4892
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion-item.html
@@ -0,0 +1,4 @@
+<div class="accordion-item" ng-class="{'is-active': active}">
+ <div class="accordion-title" ng-click="activate()">{{ title }}</div>
+ <div class="accordion-content" ng-transclude></div>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion.html b/afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion.html
new file mode 100644
index 0000000..344586e
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion.html
@@ -0,0 +1,2 @@
+<div class="accordion" ng-transclude>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion.js b/afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion.js
new file mode 100644
index 0000000..2b2dac7
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/accordion/accordion.js
@@ -0,0 +1,107 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.accordion', [])
+ .controller('ZfAccordionController', zfAccordionController)
+ .directive('zfAccordion', zfAccordion)
+ .directive('zfAccordionItem', zfAccordionItem)
+ ;
+
+ zfAccordionController.$inject = ['$scope'];
+
+ function zfAccordionController($scope) {
+ var controller = this;
+ var sections = controller.sections = $scope.sections = [];
+ var multiOpen = controller.multiOpen = $scope.multiOpen = $scope.multiOpen || false;
+ var collapsible = controller.collapsible = $scope.collapsible = $scope.multiOpen || $scope.collapsible || true; //multi open infers a collapsible true
+ var autoOpen = controller.autoOpen = $scope.autoOpen = $scope.autoOpen || true; //auto open opens first tab on render
+
+ controller.select = function(selectSection) {
+ sections.forEach(function(section) {
+ //if multi open is allowed, toggle a tab
+ if(controller.multiOpen) {
+ if(section.scope === selectSection) {
+ section.scope.active = !section.scope.active;
+ }
+ } else {
+ //non multi open will close all tabs and open one
+ if(section.scope === selectSection) {
+ //if collapsible is allowed, a tab will toggle
+ section.scope.active = collapsible ? !section.scope.active : true;
+ } else {
+ section.scope.active = false;
+ }
+ }
+
+ });
+ };
+
+ controller.addSection = function addsection(sectionScope) {
+ sections.push({ scope: sectionScope });
+
+ if(sections.length === 1 && autoOpen === true) {
+ sections[0].active = true;
+ sections[0].scope.active = true;
+ }
+ };
+
+ controller.closeAll = function() {
+ sections.forEach(function(section) {
+ section.scope.active = false;
+ });
+ };
+ }
+
+ function zfAccordion() {
+ var directive = {
+ restrict: 'EA',
+ transclude: 'true',
+ replace: true,
+ templateUrl: 'components/accordion/accordion.html',
+ controller: 'ZfAccordionController',
+ scope: {
+ multiOpen: '@?',
+ collapsible: '@?',
+ autoOpen: '@?'
+ },
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+ scope.multiOpen = controller.multiOpen = scope.multiOpen === "true" ? true : false;
+ scope.collapsible = controller.collapsible = scope.collapsible === "true" ? true : false;
+ scope.autoOpen = controller.autoOpen = scope.autoOpen === "true" ? true : false;
+ }
+ }
+
+ //accordion item
+ function zfAccordionItem() {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/accordion/accordion-item.html',
+ transclude: true,
+ scope: {
+ title: '@'
+ },
+ require: '^zfAccordion',
+ replace: true,
+ controller: function() {},
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller, transclude) {
+ scope.active = false;
+ controller.addSection(scope);
+
+ scope.activate = function() {
+ controller.select(scope);
+ };
+
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet-button.html b/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet-button.html
new file mode 100644
index 0000000..6df405c
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet-button.html
@@ -0,0 +1,6 @@
+<div>
+ <a href="#"
+ class="button"
+ ng-if="title.length > 0">{{ title }}</a>
+ <div ng-transclude></div>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet-content.html b/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet-content.html
new file mode 100644
index 0000000..cafb733
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet-content.html
@@ -0,0 +1,8 @@
+<div
+ class="action-sheet {{ position }}"
+ ng-class="{'is-active': active}"
+ >
+ <div
+ ng-transclude>
+ </div>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet.html b/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet.html
new file mode 100644
index 0000000..0b1006c
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet.html
@@ -0,0 +1,3 @@
+<div class="action-sheet-container"
+ ng-transclude>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet.js b/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet.js
new file mode 100644
index 0000000..e38b67a
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/actionsheet/actionsheet.js
@@ -0,0 +1,226 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.actionsheet', ['foundation.core'])
+ .controller('ZfActionSheetController', zfActionSheetController)
+ .directive('zfActionSheet', zfActionSheet)
+ .directive('zfAsContent', zfAsContent)
+ .directive('zfAsButton', zfAsButton)
+ .service('FoundationActionSheet', FoundationActionSheet)
+ ;
+
+ FoundationActionSheet.$inject = ['FoundationApi'];
+
+ function FoundationActionSheet(foundationApi) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+ }
+
+ zfActionSheetController.$inject = ['$scope', 'FoundationApi'];
+
+ function zfActionSheetController($scope, foundationApi) {
+ var controller = this;
+ var content = controller.content = $scope.content;
+ var container = controller.container = $scope.container;
+ var body = angular.element(document.body);
+
+ controller.registerContent = function(scope) {
+ content = scope;
+ content.active = false;
+ };
+
+ controller.registerContainer = function(scope) {
+ container = scope;
+ container.active = false;
+ };
+
+ controller.toggle = toggle;
+ controller.hide = hide;
+
+ controller.registerListener = function() {
+ document.body.addEventListener('click', listenerLogic);
+ };
+
+ controller.deregisterListener = function() {
+ document.body.removeEventListener('click', listenerLogic);
+ }
+
+ function listenerLogic(e) {
+ var el = e.target;
+ var insideActionSheet = false;
+
+ do {
+ if(el.classList && el.classList.contains('action-sheet-container')) {
+ insideActionSheet = true;
+ break;
+ }
+
+ } while ((el = el.parentNode));
+
+ if(!insideActionSheet) {
+ // if the element has a toggle attribute, do nothing
+ if (e.target.attributes['zf-toggle'] || e.target.attributes['zf-hard-toggle']) {
+ return;
+ };
+ // if the element is outside the action sheet and is NOT a toggle element, hide
+ hide();
+ }
+ }
+
+ function hide() {
+ content.hide();
+ container.hide();
+
+ content.$apply();
+ container.$apply();
+ }
+
+ function toggle() {
+ content.toggle();
+ container.toggle();
+
+ content.$apply();
+ container.$apply();
+ }
+ }
+
+ zfActionSheet.$inject = ['FoundationApi'];
+
+ function zfActionSheet(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ templateUrl: 'components/actionsheet/actionsheet.html',
+ controller: 'ZfActionSheetController',
+ compile: compile
+ };
+
+ return directive;
+
+ function compile() {
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs) {
+ iAttrs.$set('zf-closable', 'actionsheet');
+ }
+
+ function postLink(scope, element, attrs, controller) {
+ var id = attrs.id || foundationApi.generateUuid();
+ attrs.$set('id', id);
+
+ scope.active = false;
+
+ foundationApi.subscribe(id, function(msg) {
+ if (msg === 'toggle') {
+ controller.toggle();
+ }
+
+ if (msg === 'hide' || msg === 'close') {
+ controller.hide();
+ }
+
+ });
+
+ controller.registerContainer(scope);
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ return;
+ };
+
+ scope.hide = function() {
+ scope.active = false;
+ return;
+ };
+ }
+ }
+ }
+
+ zfAsContent.$inject = ['FoundationApi'];
+
+ function zfAsContent(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ templateUrl: 'components/actionsheet/actionsheet-content.html',
+ require: '^zfActionSheet',
+ scope: {
+ position: '@?'
+ },
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+ scope.active = false;
+ scope.position = scope.position || 'bottom';
+ controller.registerContent(scope);
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ if(scope.active) {
+ controller.registerListener();
+ } else {
+ controller.deregisterListener();
+ }
+
+ return;
+ };
+
+ scope.hide = function() {
+ scope.active = false;
+ controller.deregisterListener();
+ return;
+ };
+ }
+ }
+
+ zfAsButton.$inject = ['FoundationApi'];
+
+ function zfAsButton(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ templateUrl: 'components/actionsheet/actionsheet-button.html',
+ require: '^zfActionSheet',
+ scope: {
+ title: '@?'
+ },
+ link: link
+ }
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+
+ element.on('click', function(e) {
+ controller.toggle();
+ e.preventDefault();
+ });
+
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/common/common.js b/afb-client/bower_components/foundation-apps/js/angular/components/common/common.js
new file mode 100644
index 0000000..a818a6d
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/common/common.js
@@ -0,0 +1,171 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.common', ['foundation.core'])
+ .directive('zfClose', zfClose)
+ .directive('zfOpen', zfOpen)
+ .directive('zfToggle', zfToggle)
+ .directive('zfEscClose', zfEscClose)
+ .directive('zfSwipeClose', zfSwipeClose)
+ .directive('zfHardToggle', zfHardToggle)
+ ;
+
+ zfClose.$inject = ['FoundationApi'];
+
+ function zfClose(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ var targetId = '';
+ if (attrs.zfClose) {
+ targetId = attrs.zfClose;
+ } else {
+ var parentElement= false;
+ var tempElement = element.parent();
+ //find parent modal
+ while(parentElement === false) {
+ if(tempElement[0].nodeName == 'BODY') {
+ parentElement = '';
+ }
+
+ if(typeof tempElement.attr('zf-closable') !== 'undefined' && tempElement.attr('zf-closable') !== false) {
+ parentElement = tempElement;
+ }
+
+ tempElement = tempElement.parent();
+ }
+ targetId = parentElement.attr('id');
+ }
+
+ element.on('click', function(e) {
+ foundationApi.publish(targetId, 'close');
+ e.preventDefault();
+ });
+ }
+ }
+
+ zfOpen.$inject = ['FoundationApi'];
+
+ function zfOpen(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ element.on('click', function(e) {
+ foundationApi.publish(attrs.zfOpen, 'open');
+ e.preventDefault();
+ });
+ }
+ }
+
+ zfToggle.$inject = ['FoundationApi'];
+
+ function zfToggle(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ }
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ element.on('click', function(e) {
+ foundationApi.publish(attrs.zfToggle, 'toggle');
+ e.preventDefault();
+ });
+ }
+ }
+
+ zfEscClose.$inject = ['FoundationApi'];
+
+ function zfEscClose(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ element.on('keyup', function(e) {
+ if (e.keyCode === 27) {
+ foundationApi.closeActiveElements();
+ }
+ e.preventDefault();
+ });
+ }
+ }
+
+ zfSwipeClose.$inject = ['FoundationApi'];
+
+ function zfSwipeClose(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+ return directive;
+
+ function link($scope, element, attrs) {
+ var swipeDirection;
+ var hammerElem;
+ if (Hammer) {
+ hammerElem = new Hammer(element[0]);
+ // set the options for swipe (to make them a bit more forgiving in detection)
+ hammerElem.get('swipe').set({
+ direction: Hammer.DIRECTION_ALL,
+ threshold: 5, // this is how far the swipe has to travel
+ velocity: 0.5 // and this is how fast the swipe must travel
+ });
+ }
+ // detect what direction the directive is pointing
+ switch (attrs.zfSwipeClose) {
+ case 'right':
+ swipeDirection = 'swiperight';
+ break;
+ case 'left':
+ swipeDirection = 'swipeleft';
+ break;
+ case 'up':
+ swipeDirection = 'swipeup';
+ break;
+ case 'down':
+ swipeDirection = 'swipedown';
+ break;
+ default:
+ swipeDirection = 'swipe';
+ }
+ hammerElem.on(swipeDirection, function() {
+ foundationApi.publish(attrs.id, 'close');
+ });
+ }
+ }
+
+ zfHardToggle.$inject = ['FoundationApi'];
+
+ function zfHardToggle(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ element.on('click', function(e) {
+ foundationApi.closeActiveElements({exclude: attrs.zfHardToggle});
+ foundationApi.publish(attrs.zfHardToggle, 'toggle');
+ e.preventDefault();
+ });
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/iconic/iconic.js b/afb-client/bower_components/foundation-apps/js/angular/components/iconic/iconic.js
new file mode 100644
index 0000000..19cf192
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/iconic/iconic.js
@@ -0,0 +1,186 @@
+(function () {
+ 'use strict';
+
+ angular.module('foundation.iconic', [])
+ .provider('Iconic', Iconic)
+ .directive('zfIconic', zfIconic)
+ ;
+
+ // iconic wrapper
+ function Iconic() {
+ // default path
+ var assetPath = 'assets/img/iconic/';
+
+ /**
+ * Sets the path used to locate the iconic SVG files
+ * @param {string} path - the base path used to locate the iconic SVG files
+ */
+ this.setAssetPath = function (path) {
+ assetPath = angular.isString(path) ? path : assetPath;
+ };
+
+ /**
+ * Service implementation
+ * @returns {{}}
+ */
+ this.$get = function () {
+ var iconicObject = new IconicJS();
+
+ var service = {
+ getAccess: getAccess,
+ getAssetPath: getAssetPath
+ };
+
+ return service;
+
+ /**
+ *
+ * @returns {Window.IconicJS}
+ */
+ function getAccess() {
+ return iconicObject;
+ }
+
+ /**
+ *
+ * @returns {string}
+ */
+ function getAssetPath() {
+ return assetPath;
+ }
+ };
+ }
+
+ zfIconic.$inject = ['Iconic', 'FoundationApi', '$compile'];
+
+ function zfIconic(iconic, foundationApi, $compile) {
+ var directive = {
+ restrict: 'A',
+ template: '<img ng-transclude>',
+ transclude: true,
+ replace: true,
+ scope: {
+ dynSrc: '=?',
+ dynIcon: '=?',
+ size: '@?',
+ icon: '@',
+ iconDir: '@?'
+ },
+ compile: compile
+ };
+
+ return directive;
+
+ function compile() {
+ var contents, assetPath;
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, element, attrs) {
+
+ if (scope.iconDir) {
+ // path set via attribute
+ assetPath = scope.iconDir;
+ } else {
+ // default path
+ assetPath = iconic.getAssetPath();
+ }
+ // make sure ends with /
+ if (assetPath.charAt(assetPath.length - 1) !== '/') {
+ assetPath += '/';
+ }
+
+ if (scope.dynSrc) {
+ attrs.$set('data-src', scope.dynSrc);
+ } else if (scope.dynIcon) {
+ attrs.$set('data-src', assetPath + scope.dynIcon + '.svg');
+ } else {
+ if (scope.icon) {
+ attrs.$set('data-src', assetPath + scope.icon + '.svg');
+ } else {
+ // To support expressions on data-src
+ attrs.$set('data-src', attrs.src);
+ }
+ }
+
+ // check if size already added as class
+ if (!element.hasClass('iconic-sm') && !element.hasClass('iconic-md') && !element.hasClass('iconic-lg')) {
+ var iconicClass;
+ switch (scope.size) {
+ case 'small':
+ iconicClass = 'iconic-sm';
+ break;
+ case 'medium':
+ iconicClass = 'iconic-md';
+ break;
+ case 'large':
+ iconicClass = 'iconic-lg';
+ break;
+ default:
+ iconicClass = 'iconic-fluid';
+ }
+ element.addClass(iconicClass);
+ }
+
+ // save contents of un-inject html, to use for dynamic re-injection
+ contents = element[0].outerHTML;
+ }
+
+ function postLink(scope, element, attrs) {
+ var svgElement, ico = iconic.getAccess();
+
+ injectSvg(element[0]);
+
+ foundationApi.subscribe('resize', function () {
+ // only run update on current element
+ ico.update(element[0]);
+ });
+
+ // handle dynamic updating of src
+ if (scope.dynSrc) {
+ scope.$watch('dynSrc', function (newVal, oldVal) {
+ if (newVal && newVal !== oldVal) {
+ reinjectSvg(scope.dynSrc);
+ }
+ });
+ }
+ // handle dynamic updating of icon
+ if (scope.dynIcon) {
+ scope.$watch('dynIcon', function (newVal, oldVal) {
+ if (newVal && newVal !== oldVal) {
+ reinjectSvg(assetPath + scope.dynIcon + '.svg');
+ }
+ });
+ }
+
+ function reinjectSvg(newSrc) {
+ if (svgElement) {
+ // set html
+ svgElement.empty();
+ svgElement.append(angular.element(contents));
+
+ // set new source
+ svgElement.attr('data-src', newSrc);
+
+ // reinject
+ injectSvg(svgElement[0]);
+ }
+ }
+
+ function injectSvg(element) {
+ ico.inject(element, {
+ each: function (injectedElem) {
+ // compile injected svg
+ var angElem = angular.element(injectedElem);
+ svgElement = $compile(angElem)(angElem.scope());
+ }
+ });
+ }
+ }
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/interchange/interchange.js b/afb-client/bower_components/foundation-apps/js/angular/components/interchange/interchange.js
new file mode 100644
index 0000000..74ea897
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/interchange/interchange.js
@@ -0,0 +1,94 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.interchange', ['foundation.core', 'foundation.mediaquery'])
+ .directive('zfInterchange', zfInterchange)
+ ;
+
+ zfInterchange.$inject = [ '$compile', '$http', '$templateCache', 'FoundationApi', 'FoundationMQ'];
+
+ function zfInterchange($compile, $http, $templateCache, foundationApi, foundationMQ) {
+
+ var directive = {
+ restrict: 'EA',
+ transclude: 'element',
+ scope: {
+ position: '@'
+ },
+ replace: true,
+ template: '<div></div>',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, ctrl, transclude) {
+ var childScope, current, scenarios, innerTemplates;
+
+ var globalQueries = foundationMQ.getMediaQueries();
+
+ //setup
+ foundationApi.subscribe('resize', function(msg) {
+ transclude(function(clone, newScope) {
+ if(!scenarios || !innerTemplates) {
+ collectInformation(clone);
+ }
+
+ var ruleMatches = foundationMQ.match(scenarios);
+ var scenario = ruleMatches.length === 0 ? null : scenarios[ruleMatches[0].ind];
+
+ //this could use some love
+ if(scenario && checkScenario(scenario)) {
+ var compiled;
+
+ if(childScope) {
+ childScope.$destroy();
+ childScope = null;
+ }
+
+ if(typeof scenario.templ !== 'undefined') {
+ childScope = newScope;
+
+ //temp container
+ var tmp = document.createElement('div');
+ tmp.appendChild(innerTemplates[scenario.templ][0]);
+
+ element.html(tmp.innerHTML);
+ $compile(element.contents())(childScope);
+ current = scenario;
+ } else {
+ var loader = templateLoader(scenario.src);
+ loader.success(function(html) {
+ childScope = newScope;
+ element.html(html);
+ }).then(function(){
+ $compile(element.contents())(childScope);
+ current = scenario;
+ });
+ }
+ }
+ });
+
+ });
+
+ //init
+ foundationApi.publish('resize', 'initial resize');
+
+ function templateLoader(templateUrl) {
+ return $http.get(templateUrl, {cache: $templateCache});
+ }
+
+ function collectInformation(el) {
+ var data = foundationMQ.collectScenariosFromElement(el);
+
+ scenarios = data.scenarios;
+ innerTemplates = data.templates;
+ }
+
+ function checkScenario(scenario) {
+ return !current || current !== scenario;
+ }
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/modal/modal.html b/afb-client/bower_components/foundation-apps/js/angular/components/modal/modal.html
new file mode 100644
index 0000000..83618db
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/modal/modal.html
@@ -0,0 +1,9 @@
+<div
+ class="modal-overlay"
+ ng-click="hideOverlay()">
+ <aside
+ class="modal"
+ ng-click="$event.stopPropagation();"
+ ng-transclude>
+ </aside>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/modal/modal.js b/afb-client/bower_components/foundation-apps/js/angular/components/modal/modal.js
new file mode 100644
index 0000000..415f21b
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/modal/modal.js
@@ -0,0 +1,291 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.modal', ['foundation.core'])
+ .directive('zfModal', modalDirective)
+ .factory('ModalFactory', ModalFactory)
+ ;
+
+ FoundationModal.$inject = ['FoundationApi', 'ModalFactory'];
+
+ function FoundationModal(foundationApi, ModalFactory) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+ service.newModal = newModal;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+
+ //new modal has to be controlled via the new instance
+ function newModal(config) {
+ return new ModalFactory(config);
+ }
+ }
+
+ modalDirective.$inject = ['FoundationApi'];
+
+ function modalDirective(foundationApi) {
+
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/modal/modal.html',
+ transclude: true,
+ scope: true,
+ replace: true,
+ compile: compile
+ };
+
+ return directive;
+
+ function compile(tElement, tAttrs, transclude) {
+ var type = 'modal';
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs, controller) {
+ iAttrs.$set('zf-closable', type);
+ }
+
+ function postLink(scope, element, attrs) {
+ var dialog = angular.element(element.children()[0]);
+
+ scope.active = scope.active || false;
+ scope.overlay = attrs.overlay === 'false' ? false : true;
+ scope.overlayClose = attrs.overlayClose === 'false' ? false : true;
+
+ var animationIn = attrs.animationIn || 'fadeIn';
+ var animationOut = attrs.animationOut || 'fadeOut';
+
+ var overlayIn = 'fadeIn';
+ var overlayOut = 'fadeOut';
+
+ scope.hideOverlay = function() {
+ if(scope.overlayClose) {
+ scope.hide();
+ }
+ };
+
+ scope.hide = function() {
+ scope.active = false;
+ animate();
+ return;
+ };
+
+ scope.show = function() {
+ scope.active = true;
+ animate();
+ dialog.tabIndex = -1;
+ dialog[0].focus();
+ return;
+ };
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ animate();
+ return;
+ };
+
+ init();
+
+ //setup
+ foundationApi.subscribe(attrs.id, function(msg) {
+ if(msg === 'show' || msg === 'open') {
+ scope.show();
+ } else if (msg === 'close' || msg === 'hide') {
+ scope.hide();
+ } else if (msg === 'toggle') {
+ scope.toggle();
+ }
+
+ if (scope.$root && !scope.$root.$$phase) {
+ scope.$apply();
+ }
+
+ return;
+ });
+
+ function animate() {
+ //animate both overlay and dialog
+ if(!scope.overlay) {
+ element.css('background', 'transparent');
+ }
+
+ foundationApi.animate(element, scope.active, overlayIn, overlayOut);
+ foundationApi.animate(dialog, scope.active, animationIn, animationOut);
+ }
+
+ function init() {
+ if(scope.active) {
+ scope.show();
+ }
+ }
+ }
+ }
+ }
+
+ ModalFactory.$inject = ['$http', '$templateCache', '$rootScope', '$compile', '$timeout', '$q', 'FoundationApi'];
+
+ function ModalFactory($http, $templateCache, $rootScope, $compile, $timeout, $q, foundationApi) {
+ return modalFactory;
+
+ function modalFactory(config) {
+ var self = this, //for prototype functions
+ container = angular.element(config.container || document.body),
+ id = config.id || foundationApi.generateUuid(),
+ attached = false,
+ destroyed = false,
+ html,
+ element,
+ fetched,
+ scope,
+ contentScope
+ ;
+
+ var props = [
+ 'animationIn',
+ 'animationOut',
+ 'overlay',
+ 'overlayClose'
+ ];
+
+ if(config.templateUrl) {
+ //get template
+ fetched = $http.get(config.templateUrl, {
+ cache: $templateCache
+ }).then(function (response) {
+ html = response.data;
+ assembleDirective();
+ });
+
+ } else if(config.template) {
+ //use provided template
+ fetched = true;
+ html = config.template;
+ assembleDirective();
+ }
+
+ self.activate = activate;
+ self.deactivate = deactivate;
+ self.toggle = toggle;
+ self.destroy = destroy;
+
+
+ return {
+ activate: activate,
+ deactivate: deactivate,
+ toggle: toggle,
+ destroy: destroy
+ };
+
+ function checkStatus() {
+ if(destroyed) {
+ throw "Error: Modal was destroyed. Delete the object and create a new ModalFactory instance."
+ }
+ }
+
+ function activate() {
+ checkStatus();
+ $timeout(function() {
+ init(true);
+ foundationApi.publish(id, 'show');
+ }, 0, false);
+ }
+
+ function deactivate() {
+ checkStatus();
+ $timeout(function() {
+ init(false);
+ foundationApi.publish(id, 'hide');
+ }, 0, false);
+ }
+
+ function toggle() {
+ checkStatus();
+ $timeout(function() {
+ init(true);
+ foundationApi.publish(id, 'toggle');
+ }, 0, false);
+ }
+
+ function init(state) {
+ $q.when(fetched).then(function() {
+ if(!attached && html.length > 0) {
+ var modalEl = container.append(element);
+
+ scope.active = state;
+ $compile(element)(scope);
+
+ attached = true;
+ }
+ });
+ }
+
+ function assembleDirective() {
+ // check for duplicate elements to prevent factory from cloning modals
+ if (document.getElementById(id)) {
+ return;
+ }
+
+ html = '<zf-modal id="' + id + '">' + html + '</zf-modal>';
+
+ element = angular.element(html);
+
+ scope = $rootScope.$new();
+
+ // account for directive attributes
+ for(var i = 0; i < props.length; i++) {
+ var prop = props[i];
+
+ if(config[prop]) {
+ switch (prop) {
+ case 'animationIn':
+ element.attr('animation-in', config[prop]);
+ break;
+ case 'animationOut':
+ element.attr('animation-out', config[prop]);
+ break;
+ default:
+ element.attr(prop, config[prop]);
+ }
+ }
+ }
+ // access view scope variables
+ if (config.contentScope) {
+ contentScope = config.contentScope;
+ for (var prop in config.contentScope) {
+ if (config.contentScope.hasOwnProperty(prop)) {
+ scope[prop] = config.contentScope[prop];
+ }
+ }
+ }
+ }
+
+ function destroy() {
+ self.deactivate();
+ setTimeout(function() {
+ scope.$destroy();
+ element.remove();
+ destroyed = true;
+ }, 3000);
+ foundationApi.unsubscribe(id);
+ }
+
+ }
+
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification-set.html b/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification-set.html
new file mode 100644
index 0000000..9193026
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification-set.html
@@ -0,0 +1,9 @@
+<div class="notification-container {{position}}">
+ <zf-notification ng-repeat="notification in notifications"
+ title="notification.title"
+ image="notification.image"
+ notif-id = "notification.id"
+ color="notification.color"
+ autoclose="notification.autoclose"
+ >{{ notification.content }}</zf-notification>
+</div> \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification-static.html b/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification-static.html
new file mode 100644
index 0000000..f524eed
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification-static.html
@@ -0,0 +1,12 @@
+<div zf-swipe-close="swipe" class="static-notification {{ color }} {{ position }}">
+ <a href="#"
+ class="close-button"
+ ng-click="hide(); $event.preventDefault(); $event.stopPropagation()">&times;</a>
+ <div class="notification-icon" ng-if="image">
+ <img ng-src="{{ image }}"/>
+ </div>
+ <div class="notification-content">
+ <h1>{{ title }}</h1>
+ <p ng-transclude></p>
+ </div>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification.html b/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification.html
new file mode 100644
index 0000000..a311f01
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification.html
@@ -0,0 +1,12 @@
+<div zf-swipe-close="swipe" class="notification {{ color }}">
+ <a href="#"
+ class="close-button"
+ ng-click="hide(); $event.preventDefault(); $event.stopPropagation()">&times;</a>
+ <div class="notification-icon" ng-if="image">
+ <img ng-src="{{ image }}"/>
+ </div>
+ <div class="notification-content">
+ <h1>{{ title }}</h1>
+ <p ng-transclude></p>
+ </div>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification.js b/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification.js
new file mode 100644
index 0000000..2c0e3bc
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/notification/notification.js
@@ -0,0 +1,417 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.notification', ['foundation.core'])
+ .controller('ZfNotificationController', ZfNotificationController)
+ .directive('zfNotificationSet', zfNotificationSet)
+ .directive('zfNotification', zfNotification)
+ .directive('zfNotificationStatic', zfNotificationStatic)
+ .directive('zfNotify', zfNotify)
+ .factory('NotificationFactory', NotificationFactory)
+ .service('FoundationNotification', FoundationNotification)
+ ;
+
+ FoundationNotification.$inject = ['FoundationApi', 'NotificationFactory'];
+
+ function FoundationNotification(foundationApi, NotificationFactory) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+
+ function toggle(target) {
+ foundationApi.publish(target, 'toggle');
+ }
+
+ function createNotificationSet(config) {
+ return new NotificationFactory(config);
+ }
+ }
+
+
+ ZfNotificationController.$inject = ['$scope', 'FoundationApi'];
+
+ function ZfNotificationController($scope, foundationApi) {
+ var controller = this;
+ controller.notifications = $scope.notifications = $scope.notifications || [];
+
+ controller.addNotification = function(info) {
+ var id = foundationApi.generateUuid();
+ info.id = id;
+ $scope.notifications.push(info);
+ };
+
+ controller.removeNotification = function(id) {
+ $scope.notifications.forEach(function(notification) {
+ if(notification.id === id) {
+ var ind = $scope.notifications.indexOf(notification);
+ $scope.notifications.splice(ind, 1);
+ }
+ });
+ };
+
+ controller.clearAll = function() {
+ while($scope.notifications.length > 0) {
+ $scope.notifications.pop();
+ }
+ };
+ }
+
+ zfNotificationSet.$inject = ['FoundationApi'];
+
+ function zfNotificationSet(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/notification/notification-set.html',
+ controller: 'ZfNotificationController',
+ replace: true,
+ scope: {
+ position: '@'
+ },
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+ scope.position = scope.position ? scope.position.split(' ').join('-') : 'top-right';
+
+ foundationApi.subscribe(attrs.id, function(msg) {
+ if(msg === 'clearall') {
+ controller.clearAll();
+ }
+ else {
+ controller.addNotification(msg);
+ if (!scope.$root.$$phase) {
+ scope.$apply();
+ }
+ }
+ });
+ }
+ }
+
+ zfNotification.$inject = ['FoundationApi'];
+
+ function zfNotification(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/notification/notification.html',
+ replace: true,
+ transclude: true,
+ require: '^zfNotificationSet',
+ controller: function() { },
+ scope: {
+ title: '=?',
+ content: '=?',
+ image: '=?',
+ notifId: '=',
+ color: '=?',
+ autoclose: '=?'
+ },
+ compile: compile
+ };
+
+ return directive;
+
+ function compile() {
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs) {
+ iAttrs.$set('zf-closable', 'notification');
+ }
+
+ function postLink(scope, element, attrs, controller) {
+ scope.active = false;
+ var animationIn = attrs.animationIn || 'fadeIn';
+ var animationOut = attrs.animationOut || 'fadeOut';
+ var hammerElem;
+
+ //due to dynamic insertion of DOM, we need to wait for it to show up and get working!
+ setTimeout(function() {
+ scope.active = true;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ }, 50);
+
+ scope.hide = function() {
+ scope.active = false;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ setTimeout(function() {
+ controller.removeNotification(scope.notifId);
+ }, 50);
+ };
+
+ // close if autoclose
+ if (scope.autoclose) {
+ setTimeout(function() {
+ if (scope.active) {
+ scope.hide();
+ }
+ }, parseInt(scope.autoclose));
+ };
+
+ // close on swipe
+ if (Hammer) {
+ hammerElem = new Hammer(element[0]);
+ // set the options for swipe (to make them a bit more forgiving in detection)
+ hammerElem.get('swipe').set({
+ direction: Hammer.DIRECTION_ALL,
+ threshold: 5, // this is how far the swipe has to travel
+ velocity: 0.5 // and this is how fast the swipe must travel
+ });
+ }
+
+ hammerElem.on('swipe', function() {
+ if (scope.active) {
+ scope.hide();
+ }
+ });
+ }
+ }
+ }
+
+ zfNotificationStatic.$inject = ['FoundationApi'];
+
+ function zfNotificationStatic(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/notification/notification-static.html',
+ replace: true,
+ transclude: true,
+ scope: {
+ title: '@?',
+ content: '@?',
+ image: '@?',
+ color: '@?',
+ autoclose: '@?'
+ },
+ compile: compile
+ };
+
+ return directive;
+
+ function compile() {
+ var type = 'notification';
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs, controller) {
+ iAttrs.$set('zf-closable', type);
+ }
+
+ function postLink(scope, element, attrs, controller) {
+ scope.position = attrs.position ? attrs.position.split(' ').join('-') : 'top-right';
+
+ var animationIn = attrs.animationIn || 'fadeIn';
+ var animationOut = attrs.animationOut || 'fadeOut';
+
+ //setup
+ foundationApi.subscribe(attrs.id, function(msg) {
+ if(msg == 'show' || msg == 'open') {
+ scope.show();
+ // close if autoclose
+ if (scope.autoclose) {
+ setTimeout(function() {
+ if (scope.active) {
+ scope.hide();
+ }
+ }, parseInt(scope.autoclose));
+ };
+ } else if (msg == 'close' || msg == 'hide') {
+ scope.hide();
+ } else if (msg == 'toggle') {
+ scope.toggle();
+ // close if autoclose
+ if (scope.autoclose) {
+ setTimeout(function() {
+ if (scope.active) {
+ scope.toggle();
+ }
+ }, parseInt(scope.autoclose));
+ };
+ }
+
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ scope.$apply();
+
+ return;
+ });
+
+ scope.hide = function() {
+ scope.active = false;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ return;
+ };
+
+ scope.show = function() {
+ scope.active = true;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ return;
+ };
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ return;
+ };
+
+ }
+ }
+ }
+
+ zfNotify.$inject = ['FoundationApi'];
+
+ function zfNotify(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ scope: {
+ title: '@?',
+ content: '@?',
+ color: '@?',
+ image: '@?',
+ autoclose: '@?'
+ },
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+ element.on('click', function(e) {
+ foundationApi.publish(attrs.zfNotify, {
+ title: scope.title,
+ content: scope.content,
+ color: scope.color,
+ image: scope.image,
+ autoclose: scope.autoclose
+ });
+ e.preventDefault();
+ });
+ }
+ }
+
+ NotificationFactory.$inject = ['$http', '$templateCache', '$rootScope', '$compile', '$timeout', 'FoundationApi'];
+
+ function NotificationFactory($http, $templateCache, $rootScope, $compile, $timeout, foundationApi) {
+ return notificationFactory;
+
+ function notificationFactory(config) {
+ var self = this, //for prototype functions
+ container = angular.element(config.container || document.body),
+ id = config.id || foundationApi.generateUuid(),
+ attached = false,
+ destroyed = false,
+ html,
+ element,
+ scope,
+ contentScope
+ ;
+
+ var props = [
+ 'position'
+ ];
+
+ assembleDirective();
+
+ self.addNotification = addNotification;
+ self.clearAll = clearAll;
+ self.destroy = destroy;
+
+ return {
+ addNotification: addNotification,
+ clearAll: clearAll,
+ destroy: destroy
+ };
+
+ function checkStatus() {
+ if(destroyed) {
+ throw "Error: Notification Set was destroyed. Delete the object and create a new NotificationFactory instance."
+ }
+ }
+
+ function addNotification(notification) {
+ checkStatus();
+ $timeout(function() {
+ foundationApi.publish(id, notification);
+ }, 0, false);
+ }
+
+ function clearAll() {
+ checkStatus();
+ $timeout(function() {
+ foundationApi.publish(id, 'clearall');
+ }, 0, false);
+ }
+
+ function init(state) {
+ if(!attached && html.length > 0) {
+ var modalEl = container.append(element);
+
+ scope.active = state;
+ $compile(element)(scope);
+
+ attached = true;
+ }
+ }
+
+ function assembleDirective() {
+ // check for duplicate element to prevent factory from cloning notification sets
+ if (document.getElementById(id)) {
+ return;
+ }
+ html = '<zf-notification-set id="' + id + '"></zf-notification-set>';
+
+ element = angular.element(html);
+
+ scope = $rootScope.$new();
+
+ for(var i = 0; i < props.length; i++) {
+ if(config[props[i]]) {
+ element.attr(props[i], config[props[i]]);
+ }
+ }
+
+ // access view scope variables
+ if (config.contentScope) {
+ contentScope = config.contentScope;
+ for (var prop in contentScope) {
+ if (contentScope.hasOwnProperty(prop)) {
+ scope[prop] = contentScope[prop];
+ }
+ }
+ }
+ init(true);
+ }
+
+ function destroy() {
+ self.clearAll();
+ setTimeout(function() {
+ scope.$destroy();
+ element.remove();
+ destroyed = true;
+ }, 3000);
+ foundationApi.unsubscribe(id);
+ }
+
+ }
+
+ }
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/offcanvas/offcanvas.html b/afb-client/bower_components/foundation-apps/js/angular/components/offcanvas/offcanvas.html
new file mode 100644
index 0000000..233cb02
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/offcanvas/offcanvas.html
@@ -0,0 +1,5 @@
+<div
+ class="off-canvas {{ position }}"
+ ng-class="{'is-active': active}"
+ ng-transclude>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/offcanvas/offcanvas.js b/afb-client/bower_components/foundation-apps/js/angular/components/offcanvas/offcanvas.js
new file mode 100644
index 0000000..b1d6cff
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/offcanvas/offcanvas.js
@@ -0,0 +1,102 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.offcanvas', ['foundation.core'])
+ .directive('zfOffcanvas', zfOffcanvas)
+ .service('FoundationOffcanvas', FoundationOffcanvas)
+ ;
+
+ FoundationOffcanvas.$inject = ['FoundationApi'];
+
+ function FoundationOffcanvas(foundationApi) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+
+ function toggle(target) {
+ foundationApi.publish(target, 'toggle');
+ }
+ }
+
+ zfOffcanvas.$inject = ['FoundationApi'];
+
+ function zfOffcanvas(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/offcanvas/offcanvas.html',
+ transclude: true,
+ scope: {
+ position: '@'
+ },
+ replace: true,
+ compile: compile
+ };
+
+ return directive;
+
+ function compile(tElement, tAttrs, transclude) {
+ var type = 'offcanvas';
+
+ return {
+ pre: preLink,
+ post: postLink
+ }
+
+ function preLink(scope, iElement, iAttrs, controller) {
+ iAttrs.$set('zf-closable', type);
+ document.body.classList.add('has-off-canvas');
+ }
+
+ function postLink(scope, element, attrs) {
+ scope.position = scope.position || 'left';
+
+ scope.active = false;
+ //setup
+ foundationApi.subscribe(attrs.id, function(msg) {
+ if(msg === 'show' || msg === 'open') {
+ scope.show();
+ } else if (msg === 'close' || msg === 'hide') {
+ scope.hide();
+ } else if (msg === 'toggle') {
+ scope.toggle();
+ }
+
+ if (!scope.$root.$$phase) {
+ scope.$apply();
+ }
+
+ return;
+ });
+
+ scope.hide = function() {
+ scope.active = false;
+ return;
+ };
+
+ scope.show = function() {
+ scope.active = true;
+ return;
+ };
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ return;
+ };
+ }
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/panel/panel.html b/afb-client/bower_components/foundation-apps/js/angular/components/panel/panel.html
new file mode 100644
index 0000000..75a5b48
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/panel/panel.html
@@ -0,0 +1,6 @@
+<div
+ class="panel"
+ ng-class="positionClass"
+ ng-transclude
+ >
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/panel/panel.js b/afb-client/bower_components/foundation-apps/js/angular/components/panel/panel.js
new file mode 100644
index 0000000..396ca28
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/panel/panel.js
@@ -0,0 +1,144 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.panel', ['foundation.core'])
+ .directive('zfPanel', zfPanel)
+ .service('FoundationPanel', FoundationPanel)
+ ;
+
+ FoundationPanel.$inject = ['FoundationApi'];
+
+ function FoundationPanel(foundationApi) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+ }
+
+ zfPanel.$inject = ['FoundationApi', '$window'];
+
+ function zfPanel(foundationApi, $window) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/panel/panel.html',
+ transclude: true,
+ scope: {
+ position: '@?'
+ },
+ replace: true,
+ compile: compile
+ };
+
+ return directive;
+
+ function compile(tElement, tAttrs, transclude) {
+ var type = 'panel';
+
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs, controller) {
+ iAttrs.$set('zf-closable', type);
+ scope.position = scope.position || 'left';
+ scope.positionClass = 'panel-' + scope.position;
+ }
+
+ function postLink(scope, element, attrs) {
+ scope.active = false;
+ var animationIn, animationOut;
+ var globalQueries = foundationApi.getSettings().mediaQueries;
+
+ //urgh, there must be a better way
+ if(scope.position === 'left') {
+ animationIn = attrs.animationIn || 'slideInRight';
+ animationOut = attrs.animationOut || 'slideOutLeft';
+ } else if (scope.position === 'right') {
+ animationIn = attrs.animationIn || 'slideInLeft';
+ animationOut = attrs.animationOut || 'slideOutRight';
+ } else if (scope.position === 'top') {
+ animationIn = attrs.animationIn || 'slideInDown';
+ animationOut = attrs.animationOut || 'slideOutUp';
+ } else if (scope.position === 'bottom') {
+ animationIn = attrs.animationIn || 'slideInUp';
+ animationOut = attrs.animationOut || 'slideOutBottom';
+ }
+
+
+ //setup
+ foundationApi.subscribe(attrs.id, function(msg) {
+ var panelPosition = $window.getComputedStyle(element[0]).getPropertyValue("position");
+
+ // patch to prevent panel animation on larger screen devices
+ if (panelPosition !== 'absolute') {
+ return;
+ }
+
+ if(msg == 'show' || msg == 'open') {
+ scope.show();
+ } else if (msg == 'close' || msg == 'hide') {
+ scope.hide();
+ } else if (msg == 'toggle') {
+ scope.toggle();
+ }
+
+ if (!scope.$root.$$phase) {
+ scope.$apply();
+ }
+
+ return;
+ });
+
+ scope.hide = function() {
+ if(scope.active){
+ scope.active = false;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ }
+
+ return;
+ };
+
+ scope.show = function() {
+ if(!scope.active){
+ scope.active = true;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ }
+
+ return;
+ };
+
+ scope.toggle = function() {
+ scope.active = !scope.active;
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+
+ return;
+ };
+
+ element.on('click', function(e) {
+ //check sizing
+ var srcEl = e.srcElement;
+
+ if(!matchMedia(globalQueries.medium).matches && srcEl.href && srcEl.href.length > 0) {
+ //hide element if it can't match at least medium
+ scope.hide();
+ foundationApi.animate(element, scope.active, animationIn, animationOut);
+ }
+ });
+ }
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/popup/popup.html b/afb-client/bower_components/foundation-apps/js/angular/components/popup/popup.html
new file mode 100644
index 0000000..50abed7
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/popup/popup.html
@@ -0,0 +1,2 @@
+<div class="popup" ng-class="{'is-active': active }" ng-transclude>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/popup/popup.js b/afb-client/bower_components/foundation-apps/js/angular/components/popup/popup.js
new file mode 100644
index 0000000..f51b1c6
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/popup/popup.js
@@ -0,0 +1,160 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.popup', ['foundation.core'])
+ .directive('zfPopup', zfPopup)
+ .directive('zfPopupToggle', zfPopupToggle)
+ .service('FoundationPopup', FoundationPopup)
+ ;
+
+ FoundationPopup.$inject = ['FoundationApi'];
+
+ function FoundationPopup(foundationApi) {
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ //target should be element ID
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+
+ function toggle(target, popupTarget) {
+ foundationApi.publish(target, ['toggle', popupTarget]);
+ }
+ }
+
+ zfPopup.$inject = ['FoundationApi'];
+
+ function zfPopup(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ templateUrl: 'components/popup/popup.html',
+ scope: {
+ pinTo: '@?',
+ pinAt: '@?',
+ target: '@?'
+ },
+ compile: compile
+ };
+
+ return directive;
+
+ function compile() {
+ return {
+ pre: preLink,
+ post: postLink
+ };
+
+ function preLink(scope, iElement, iAttrs) {
+ iAttrs.$set('zf-closable', 'popup');
+ }
+
+ function postLink(scope, element, attrs) {
+ scope.active = false;
+ scope.target = scope.target || false;
+
+ var attachment = scope.pinTo || 'top center';
+ var targetAttachment = scope.pinAt || 'bottom center';
+ var tetherInit = false;
+ var tether = {};
+
+ //setup
+ foundationApi.subscribe(attrs.id, function(msg) {
+ if(msg[0] === 'show' || msg[0] === 'open') {
+ scope.show(msg[1]);
+ } else if (msg[0] === 'close' || msg[0] === 'hide') {
+ scope.hide();
+ } else if (msg[0] === 'toggle') {
+ scope.toggle(msg[1]);
+ }
+
+ scope.$apply();
+
+ return;
+ });
+
+
+ scope.hide = function() {
+ scope.active = false;
+ tetherElement();
+ tether.disable();
+ return;
+ };
+
+ scope.show = function(newTarget) {
+ scope.active = true;
+ tetherElement(newTarget);
+ tether.enable();
+
+ return;
+ };
+
+ scope.toggle = function(newTarget) {
+ scope.active = !scope.active;
+ tetherElement(newTarget);
+
+ if(scope.active) {
+ tether.enable();
+ } else {
+ tether.disable();
+ }
+
+ return;
+ };
+
+ function tetherElement(target) {
+ if(tetherInit) {
+ return;
+ }
+
+ scope.target = scope.target ? document.getElementById(scope.target) : document.getElementById(target);
+
+ tether = new Tether({
+ element: element[0],
+ target: scope.target,
+ attachment: attachment,
+ targetAttachment: targetAttachment,
+ enable: false
+ });
+
+ tetherInit = true;
+ }
+
+ }
+ }
+ }
+
+ zfPopupToggle.$inject = ['FoundationApi'];
+
+ function zfPopupToggle(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs) {
+ var target = attrs.zfPopupToggle;
+ var id = attrs.id || foundationApi.generateUuid();
+ attrs.$set('id', id);
+
+ element.on('click', function(e) {
+ foundationApi.publish(target, ['toggle', id]);
+ e.preventDefault();
+ });
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tab-content.html b/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tab-content.html
new file mode 100644
index 0000000..6ae46e7
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tab-content.html
@@ -0,0 +1,8 @@
+<div class="tab-contents">
+ <div zf-tab-individual
+ class="tab-content"
+ ng-class="{'is-active': tab.active}"
+ ng-repeat="tab in tabs"
+ tab="tab">
+ </div>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tab.html b/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tab.html
new file mode 100644
index 0000000..082bf86
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tab.html
@@ -0,0 +1,3 @@
+<div class="tab-item"
+ ng-class="{'is-active': active}"
+ ng-click="makeActive()">{{ title }}</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tabs.html b/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tabs.html
new file mode 100644
index 0000000..b8a66f5
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tabs.html
@@ -0,0 +1,8 @@
+<div>
+ <div class="tabs" ng-transclude>
+ </div>
+ <div zf-tab-content
+ target="{{ id }}"
+ ng-if="showTabContent">
+ </div>
+</div>
diff --git a/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tabs.js b/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tabs.js
new file mode 100644
index 0000000..3818a2a
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/components/tabs/tabs.js
@@ -0,0 +1,311 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.tabs', ['foundation.core'])
+ .controller('ZfTabsController', ZfTabsController)
+ .directive('zfTabs', zfTabs)
+ .directive('zfTabContent', zfTabContent)
+ .directive('zfTab', zfTab)
+ .directive('zfTabIndividual', zfTabIndividual)
+ .directive('zfTabHref', zfTabHref)
+ .directive('zfTabCustom', zfTabCustom)
+ .directive('zfTabContentCustom', zfTabContentCustom)
+ .service('FoundationTabs', FoundationTabs)
+ ;
+
+ FoundationTabs.$inject = ['FoundationApi'];
+
+ function FoundationTabs(foundationApi) {
+ var service = {};
+
+ service.activate = activate;
+
+ return service;
+
+ //target should be element ID
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ }
+
+ ZfTabsController.$inject = ['$scope', 'FoundationApi'];
+
+ function ZfTabsController($scope, foundationApi) {
+ var controller = this;
+ var tabs = controller.tabs = $scope.tabs = [];
+ var id = '';
+
+ controller.select = function(selectTab) {
+ tabs.forEach(function(tab) {
+ tab.active = false;
+ tab.scope.active = false;
+
+ if(tab.scope === selectTab) {
+ foundationApi.publish(id, ['activate', tab]);
+
+ tab.active = true;
+ tab.scope.active = true;
+ }
+ });
+
+ };
+
+ controller.addTab = function addTab(tabScope) {
+ tabs.push({ scope: tabScope, active: false, parentContent: controller.id });
+
+ if(tabs.length === 1) {
+ tabs[0].active = true;
+ tabScope.active = true;
+ }
+ };
+
+ controller.getId = function() {
+ return id;
+ };
+
+ controller.setId = function(newId) {
+ id = newId;
+ };
+ }
+
+ zfTabs.$inject = ['FoundationApi'];
+
+ function zfTabs(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: 'true',
+ replace: true,
+ templateUrl: 'components/tabs/tabs.html',
+ controller: 'ZfTabsController',
+ scope: {
+ displaced: '@?'
+ },
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller) {
+ scope.id = attrs.id || foundationApi.generateUuid();
+ scope.showTabContent = scope.displaced !== 'true';
+ attrs.$set('id', scope.id);
+ controller.setId(scope.id);
+
+ //update tabs in case tab-content doesn't have them
+ var updateTabs = function() {
+ foundationApi.publish(scope.id + '-tabs', scope.tabs);
+ };
+
+ foundationApi.subscribe(scope.id + '-get-tabs', function() {
+ updateTabs();
+ });
+ }
+ }
+
+ zfTabContent.$inject = ['FoundationApi'];
+
+ function zfTabContent(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ transclude: 'true',
+ replace: true,
+ scope: {
+ tabs: '=?',
+ target: '@'
+ },
+ templateUrl: 'components/tabs/tab-content.html',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, ctrl) {
+ scope.tabs = scope.tabs || [];
+ var id = scope.target;
+
+ foundationApi.subscribe(id, function(msg) {
+ if(msg[0] === 'activate') {
+ var tabId = msg[1];
+ scope.tabs.forEach(function (tab) {
+ tab.scope.active = false;
+ tab.active = false;
+
+ if(tab.scope.id === id) {
+ tab.scope.active = true;
+ tab.active = true;
+ }
+ });
+ }
+ });
+
+ //if tabs empty, request tabs
+ if(scope.tabs.length === 0) {
+ foundationApi.subscribe(id + '-tabs', function(tabs) {
+ scope.tabs = tabs;
+ });
+
+ foundationApi.publish(id + '-get-tabs', '');
+ }
+ }
+ }
+
+ zfTab.$inject = ['FoundationApi'];
+
+ function zfTab(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ templateUrl: 'components/tabs/tab.html',
+ transclude: true,
+ scope: {
+ title: '@'
+ },
+ require: '^zfTabs',
+ replace: true,
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, controller, transclude) {
+ scope.id = attrs.id || foundationApi.generateUuid();
+ scope.active = false;
+ scope.transcludeFn = transclude;
+ controller.addTab(scope);
+
+ foundationApi.subscribe(scope.id, function(msg) {
+ if(msg === 'show' || msg === 'open' || msg === 'activate') {
+ scope.makeActive();
+ }
+ });
+
+ scope.makeActive = function() {
+ controller.select(scope);
+ };
+ }
+ }
+
+ zfTabIndividual.$inject = ['FoundationApi'];
+
+ function zfTabIndividual(foundationApi) {
+ var directive = {
+ restrict: 'EA',
+ transclude: 'true',
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, ctrl, transclude) {
+ var tab = scope.$eval(attrs.tab);
+ var id = tab.scope.id;
+
+ tab.scope.transcludeFn(tab.scope, function(tabContent) {
+ element.append(tabContent);
+ });
+
+ foundationApi.subscribe(tab.scope.id, function(msg) {
+ foundationApi.publish(tab.parentContent, ['activate', tab.scope.id]);
+ scope.$apply();
+ });
+
+ }
+ }
+
+ //custom tabs
+
+ zfTabHref.$inject = ['FoundationApi'];
+
+ function zfTabHref(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ replace: false,
+ link: link
+ }
+
+ return directive;
+
+ function link(scope, element, attrs, ctrl) {
+ var target = attrs.zfTabHref;
+
+ foundationApi.subscribe(target, function(msg) {
+ if(msg === 'activate' || msg === 'show' || msg === 'open') {
+ makeActive();
+ }
+ });
+
+
+ element.on('click', function(e) {
+ foundationApi.publish(target, 'activate');
+ makeActive();
+ e.preventDefault();
+ });
+
+ function makeActive() {
+ element.parent().children().removeClass('is-active');
+ element.addClass('is-active');
+ }
+ }
+ }
+
+ zfTabCustom.$inject = ['FoundationApi'];
+
+ function zfTabCustom(foundationApi) {
+ var directive = {
+ restrict: 'A',
+ replace: false,
+ link: link
+ };
+
+ return directive;
+
+ function link(scope, element, attrs, ctrl, transclude) {
+ var children = element.children();
+ angular.element(children[0]).addClass('is-active');
+ }
+ }
+
+ zfTabContentCustom.$inject = ['FoundationApi'];
+
+ function zfTabContentCustom(foundationApi) {
+ return {
+ restrict: 'A',
+ link: link
+ };
+
+ function link(scope, element, attrs) {
+ var tabs = [];
+ var children = element.children();
+
+ angular.forEach(children, function(node) {
+ if(node.id) {
+ var tabId = node.id;
+ tabs.push(tabId);
+ foundationApi.subscribe(tabId, function(msg) {
+ if(msg === 'activate' || msg === 'show' || msg === 'open') {
+ activateTabs(tabId);
+ }
+ });
+
+ if(tabs.length === 1) {
+ var el = angular.element(node);
+ el.addClass('is-active');
+ }
+ }
+ });
+
+ function activateTabs(tabId) {
+ var tabNodes = element.children();
+ angular.forEach(tabNodes, function(node) {
+ var el = angular.element(node);
+ el.removeClass('is-active');
+ if(el.attr('id') === tabId) {
+ el.addClass('is-active');
+ }
+
+ });
+ }
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/foundation.js b/afb-client/bower_components/foundation-apps/js/angular/foundation.js
new file mode 100644
index 0000000..71ac6e3
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/foundation.js
@@ -0,0 +1,22 @@
+(function() {
+ 'use strict';
+
+ // imports all components and dependencies under a single namespace
+
+ angular.module('foundation', [
+ 'foundation.core',
+ 'foundation.mediaquery',
+ 'foundation.accordion',
+ 'foundation.actionsheet',
+ 'foundation.common',
+ 'foundation.iconic',
+ 'foundation.interchange',
+ 'foundation.modal',
+ 'foundation.notification',
+ 'foundation.offcanvas',
+ 'foundation.panel',
+ 'foundation.popup',
+ 'foundation.tabs'
+ ]);
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/services/foundation.core.animation.js b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.core.animation.js
new file mode 100644
index 0000000..535798a
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.core.animation.js
@@ -0,0 +1,129 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.core.animation', [])
+ .service('FoundationAnimation', FoundationAnimation)
+ ;
+
+ function FoundationAnimation() {
+ var animations = [];
+ var service = {};
+
+ var initClasses = ['ng-enter', 'ng-leave'];
+ var activeClasses = ['ng-enter-active', 'ng-leave-active'];
+ var activeGenericClass = 'is-active';
+ var events = [
+ 'webkitAnimationEnd', 'mozAnimationEnd',
+ 'MSAnimationEnd', 'oanimationend',
+ 'animationend', 'webkitTransitionEnd',
+ 'otransitionend', 'transitionend'
+ ];
+
+ service.animate = animate;
+ service.toggleAnimation = toggleAnimation;
+
+ return service;
+
+ function toggleAnimation(element, futureState) {
+ if(futureState) {
+ element.addClass(activeGenericClass);
+ } else {
+ element.removeClass(activeGenericClass);
+ }
+ }
+
+ function animate(element, futureState, animationIn, animationOut) {
+ var timedOut = true;
+ var self = this;
+ self.cancelAnimation = cancelAnimation;
+
+ var animationClass = futureState ? animationIn: animationOut;
+ var activation = futureState;
+ var initClass = activation ? initClasses[0] : initClasses[1];
+ var activeClass = activation ? activeClasses[0] : activeClasses[1];
+ //stop animation
+ registerElement(element);
+ reset();
+ element.addClass(animationClass);
+ element.addClass(initClass);
+
+ element.addClass(activeGenericClass);
+
+ //force a "tick"
+ reflow();
+
+ //activate
+ element[0].style.transitionDuration = '';
+ element.addClass(activeClass);
+
+ element.one(events.join(' '), function() {
+ finishAnimation();
+ });
+
+ setTimeout(function() {
+ if(timedOut) {
+ finishAnimation();
+ }
+ }, 3000);
+
+ function finishAnimation() {
+ deregisterElement(element);
+ reset(); //reset all classes
+ element[0].style.transitionDuration = '';
+ element.removeClass(!activation ? activeGenericClass : ''); //if not active, remove active class
+ reflow();
+ timedOut = false;
+ }
+
+
+ function cancelAnimation(element) {
+ deregisterElement(element);
+ angular.element(element).off(events.join(' ')); //kill all animation event handlers
+ timedOut = false;
+ }
+
+ function registerElement(el) {
+ var elObj = {
+ el: el,
+ animation: self
+ };
+
+ //kill in progress animations
+ var inProgress = animations.filter(function(obj) {
+ return obj.el === el;
+ });
+ if(inProgress.length > 0) {
+ var target = inProgress[0].el[0];
+
+ inProgress[0].animation.cancelAnimation(target);
+ }
+
+ animations.push(elObj);
+ }
+
+ function deregisterElement(el) {
+ var index;
+ var currentAnimation = animations.filter(function(obj, ind) {
+ if(obj.el === el) {
+ index = ind;
+ }
+ });
+
+ if(index >= 0) {
+ animations.splice(index, 1);
+ }
+
+ }
+
+ function reflow() {
+ return element[0].offsetWidth;
+ }
+
+ function reset() {
+ element[0].style.transitionDuration = 0;
+ element.removeClass(initClasses.join(' ') + ' ' + activeClasses.join(' ') + ' ' + animationIn + ' ' + animationOut);
+ }
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/services/foundation.core.js b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.core.js
new file mode 100644
index 0000000..6aeb9da
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.core.js
@@ -0,0 +1,163 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.core', [
+ 'foundation.core.animation'
+ ])
+ .service('FoundationApi', FoundationApi)
+ .service('FoundationAdapter', FoundationAdapter)
+ .factory('Utils', Utils)
+ ;
+
+ FoundationApi.$inject = ['FoundationAnimation'];
+
+ function FoundationApi(FoundationAnimation) {
+ var listeners = {};
+ var settings = {};
+ var uniqueIds = [];
+ var service = {};
+
+ service.subscribe = subscribe;
+ service.unsubscribe = unsubscribe;
+ service.publish = publish;
+ service.getSettings = getSettings;
+ service.modifySettings = modifySettings;
+ service.generateUuid = generateUuid;
+ service.toggleAnimate = toggleAnimate;
+ service.closeActiveElements = closeActiveElements;
+ service.animate = animate;
+
+ return service;
+
+ function subscribe(name, callback) {
+ if (!listeners[name]) {
+ listeners[name] = [];
+ }
+
+ listeners[name].push(callback);
+ return true;
+ }
+
+ function unsubscribe(name, callback) {
+ if (listeners[name] !== undefined) {
+ delete listeners[name];
+ }
+ if (typeof callback == 'function') {
+ callback.call(this);
+ }
+ }
+
+ function publish(name, msg) {
+ if (!listeners[name]) {
+ listeners[name] = [];
+ }
+
+ listeners[name].forEach(function(cb) {
+ cb(msg);
+ });
+
+ return;
+ }
+
+ function getSettings() {
+ return settings;
+ }
+
+ function modifySettings(tree) {
+ settings = angular.extend(settings, tree);
+ return settings;
+ }
+
+ function generateUuid() {
+ var uuid = '';
+
+ //little trick to produce semi-random IDs
+ do {
+ uuid += 'zf-uuid-';
+ for (var i=0; i<15; i++) {
+ uuid += Math.floor(Math.random()*16).toString(16);
+ }
+ } while(!uniqueIds.indexOf(uuid));
+
+ uniqueIds.push(uuid);
+ return uuid;
+ }
+
+ function toggleAnimate(element, futureState) {
+ FoundationAnimation.toggleAnimate(element, futureState);
+ }
+
+ function closeActiveElements(options) {
+ var self = this;
+ options = options || {};
+ var activeElements = document.querySelectorAll('.is-active[zf-closable]');
+ // action sheets are nested zf-closable elements, so we have to target the parent
+ var nestedActiveElements = document.querySelectorAll('[zf-closable] > .is-active')
+
+ if (activeElements.length) {
+ angular.forEach(activeElements, function(el) {
+ if (options.exclude !== el.id) {
+ self.publish(el.id, 'close');
+ }
+ });
+ }
+ if (nestedActiveElements.length) {
+ angular.forEach(nestedActiveElements, function(el) {
+ var parentId = el.parentNode.id;
+ if (options.exclude !== parentId) {
+ self.publish(parentId, 'close');
+ }
+ })
+ }
+ }
+
+ function animate(element, futureState, animationIn, animationOut) {
+ FoundationAnimation.animate(element, futureState, animationIn, animationOut);
+ }
+ }
+
+ FoundationAdapter.$inject = ['FoundationApi'];
+
+ function FoundationAdapter(foundationApi) {
+
+ var service = {};
+
+ service.activate = activate;
+ service.deactivate = deactivate;
+
+ return service;
+
+ function activate(target) {
+ foundationApi.publish(target, 'show');
+ }
+
+ function deactivate(target) {
+ foundationApi.publish(target, 'hide');
+ }
+ }
+
+
+ function Utils() {
+ var utils = {};
+
+ utils.throttle = throttleUtil;
+
+ return utils;
+
+ function throttleUtil(func, delay) {
+ var timer = null;
+
+ return function () {
+ var context = this, args = arguments;
+
+ if (timer === null) {
+ timer = setTimeout(function () {
+ func.apply(context, args);
+ timer = null;
+ }, delay);
+ }
+ };
+ }
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.animations.js b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.animations.js
new file mode 100644
index 0000000..ba79c52
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.animations.js
@@ -0,0 +1,125 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.dynamicRouting.animations', ['foundation.dynamicRouting'])
+ .directive('uiView', uiView)
+ ;
+
+ uiView.$inject = ['$rootScope', '$state'];
+
+ function uiView($rootScope, $state) {
+ var directive = {
+ restrict : 'ECA',
+ priority : -400,
+ link : link
+ };
+
+ return directive;
+
+ function link(scope, element) {
+ var animation = {};
+ var animationEnded = false;
+ var presetHeight;
+
+ var cleanup = [
+ $rootScope.$on('$stateChangeStart', onStateChangeStart),
+ $rootScope.$on('$stateChangeError', onStateChangeError),
+ scope.$on('$stateChangeSuccess', onStateChangeSuccess),
+ scope.$on('$viewContentAnimationEnded', onViewContentAnimationEnded)
+ ];
+
+ var destroyed = scope.$on('$destroy', function onDestroy() {
+ angular.forEach(cleanup, function (cb) {
+ if (angular.isFunction(cb)) {
+ cb();
+ }
+ });
+
+ destroyed();
+ });
+
+ function onStateChangeStart(event, toState, toParams, fromState, fromParams) {
+
+ if (fromState.animation) {
+ if (!fromState.animation.leave && !toState.animation.leave) {
+ return;
+ }
+ else {
+ animationRouter(event, toState, fromState);
+ }
+ }
+ }
+
+ function animationRouter(event, toState, fromState) {
+ if (!animationEnded) {
+ resetParent();
+ prepareParent();
+
+ element.removeClass(fromState.animation.leave);
+ }
+ else {
+ prepareParent();
+
+ element.addClass(fromState.animation.leave);
+ }
+
+ }
+
+ function onStateChangeError() {
+ if(animation.leave) {
+ element.removeClass(animation.leave);
+ }
+
+ resetParent(); //reset parent if state change fails
+ }
+
+ function onStateChangeSuccess() {
+ resetParent();
+ if ($state.includes(getState()) && animation.enter) {
+ element.addClass(animation.enter);
+ }
+ }
+
+ function onViewContentAnimationEnded(event) {
+ if (event.targetScope === scope && animation.enter) {
+ element.removeClass(animation.enter);
+ }
+
+ animationEnded = true;
+
+ }
+
+ function getState() {
+ var view = element.data('$uiView');
+ var state = view && view.state && view.state.self;
+
+ if (state) {
+ angular.extend(animation, state.animation);
+ }
+
+ return state;
+ }
+
+ function resetParent() {
+ element.parent().removeClass('position-absolute');
+ if(presetHeight !== true) {
+ element.parent()[0].style.height = null;
+ }
+ }
+
+ function prepareParent() {
+ var parentHeight = parseInt(element.parent()[0].style.height);
+ var elHeight = parseInt(window.getComputedStyle(element[0], null).getPropertyValue('height'));
+ var tempHeight = parentHeight > 0 ? parentHeight : elHeight > 0 ? elHeight : '';
+
+ if(parentHeight > 0) {
+ presetHeight = true;
+ }
+
+ element.parent()[0].style.height = tempHeight + 'px';
+ element.parent().addClass('position-absolute');
+ }
+ }
+ }
+
+})(); \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.js b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.js
new file mode 100644
index 0000000..27e3767
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.js
@@ -0,0 +1,156 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.dynamicRouting', ['ui.router'])
+ .provider('$FoundationState', FoundationState)
+ .controller('DefaultController', DefaultController)
+ .config(DynamicRoutingConfig)
+ .run(DynamicRoutingRun)
+ ;
+
+ FoundationState.$inject = ['$stateProvider'];
+
+ function FoundationState($stateProvider) {
+ var complexViews = {};
+
+ this.registerDynamicRoutes = function(routes) {
+ var dynamicRoutes = routes || foundationRoutes;
+
+ angular.forEach(dynamicRoutes, function(page) {
+ if (page.hasComposed) {
+ if (!angular.isDefined(complexViews[page.parent])) {
+ complexViews[page.parent] = { children: {} };
+ }
+
+ if (page.controller) {
+ page.controller = getController(page);
+ }
+
+ complexViews[page.parent].children[page.name] = page;
+
+ } else if (page.composed) {
+ if(!angular.isDefined(complexViews[page.name])) {
+ complexViews[page.name] = { children: {} };
+ }
+
+ if (page.controller) {
+ page.controller = getController(page);
+ }
+
+ angular.extend(complexViews[page.name], page);
+ } else {
+ var state = {
+ url: page.url,
+ templateUrl: page.path,
+ abstract: page.abstract || false,
+ parent: page.parent || '',
+ controller: getController(page),
+ data: getData(page),
+ animation: buildAnimations(page),
+ };
+
+ $stateProvider.state(page.name, state);
+ }
+ });
+
+ angular.forEach(complexViews, function(page) {
+ var state = {
+ url: page.url,
+ parent: page.parent || '',
+ abstract: page.abstract || false,
+ data: getData(page),
+ animation: buildAnimations(page),
+ views: {
+ '': buildState(page.path, page)
+ }
+ };
+
+ angular.forEach(page.children, function(sub) {
+ state.views[sub.name + '@' + page.name] = buildState(sub.path, page);
+ });
+
+ $stateProvider.state(page.name, state);
+ });
+ };
+
+ this.$get = angular.noop;
+
+ function getData(page) {
+ var data = { vars: {} };
+ if (page.data) {
+ if (typeof page.data.vars === "object") {
+ data.vars = page.data.vars;
+ }
+ delete page.data.vars;
+ angular.extend(data, page.data);
+ }
+ delete page.data;
+ angular.extend(data.vars, page);
+ return data;
+ }
+
+ function buildState(path, state) {
+ return {
+ templateUrl: path,
+ controller: getController(state),
+ };
+ }
+
+ function getController(state) {
+ var ctrl = state.controller || 'DefaultController';
+
+ if (!/\w\s+as\s+\w/.test(ctrl)) {
+ ctrl += ' as PageCtrl';
+ }
+
+ return ctrl;
+ }
+
+ function buildAnimations(state) {
+ var animations = {};
+
+ if (state.animationIn) {
+ animations.enter = state.animationIn;
+ }
+
+ if (state.animationOut) {
+ animations.leave = state.animationOut;
+ }
+
+ return animations;
+ }
+ }
+
+ DefaultController.$inject = ['$scope', '$stateParams', '$state'];
+
+ function DefaultController($scope, $stateParams, $state) {
+ var params = {};
+ angular.forEach($stateParams, function(value, key) {
+ params[key] = value;
+ });
+
+ $scope.params = params;
+ $scope.current = $state.current.name;
+
+ if($state.current.views) {
+ $scope.vars = $state.current.data.vars;
+ $scope.composed = $state.current.data.vars.children;
+ } else {
+ $scope.vars = $state.current.data.vars;
+ }
+ }
+
+ DynamicRoutingConfig.$inject = ['$FoundationStateProvider'];
+
+ function DynamicRoutingConfig(FoundationStateProvider) {
+ FoundationStateProvider.registerDynamicRoutes(foundationRoutes);
+ }
+
+ DynamicRoutingRun.$inject = ['$rootScope', '$state', '$stateParams'];
+
+ function DynamicRoutingRun($rootScope, $state, $stateParams) {
+ $rootScope.$state = $state;
+ $rootScope.$stateParams = $stateParams;
+ }
+
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/services/foundation.mediaquery.js b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.mediaquery.js
new file mode 100644
index 0000000..12715f6
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.mediaquery.js
@@ -0,0 +1,198 @@
+(function() {
+ 'use strict';
+
+ angular.module('foundation.mediaquery', ['foundation.core'])
+ .run(mqInitRun)
+ .factory('FoundationMQInit', FoundationMQInit)
+ .factory('mqHelpers', mqHelpers)
+ .service('FoundationMQ', FoundationMQ)
+ ;
+
+ mqInitRun.$inject = ['FoundationMQInit'];
+
+ function mqInitRun(mqInit) {
+ mqInit.init();
+ }
+
+ FoundationMQInit.$inject = ['mqHelpers', 'FoundationApi', 'Utils'];
+
+ function FoundationMQInit(helpers, foundationApi, u){
+ var factory = {};
+ var namedQueries = {
+ 'default' : 'only screen',
+ landscape : 'only screen and (orientation: landscape)',
+ portrait : 'only screen and (orientation: portrait)',
+ retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +
+ 'only screen and (min--moz-device-pixel-ratio: 2),' +
+ 'only screen and (-o-min-device-pixel-ratio: 2/1),' +
+ 'only screen and (min-device-pixel-ratio: 2),' +
+ 'only screen and (min-resolution: 192dpi),' +
+ 'only screen and (min-resolution: 2dppx)'
+ };
+
+ factory.init = init;
+
+ return factory;
+
+ function init() {
+ var mediaQueries;
+ var extractedMedia;
+ var mediaObject;
+
+ helpers.headerHelper(['foundation-mq']);
+ extractedMedia = helpers.getStyle('.foundation-mq', 'font-family');
+
+ mediaQueries = helpers.parseStyleToObject((extractedMedia));
+
+ for(var key in mediaQueries) {
+ mediaQueries[key] = 'only screen and (min-width: ' + mediaQueries[key].replace('rem', 'em') + ')';
+ }
+
+
+ foundationApi.modifySettings({
+ mediaQueries: angular.extend(mediaQueries, namedQueries)
+ });
+
+ window.addEventListener('resize', u.throttle(function() {
+ foundationApi.publish('resize', 'window resized');
+ }, 50));
+
+ }
+ }
+
+
+ function mqHelpers() {
+ var factory = {};
+
+ factory.headerHelper = headerHelper;
+ factory.getStyle = getStyle;
+ factory.parseStyleToObject = parseStyleToObject;
+
+ return factory;
+
+ function headerHelper(classArray) {
+ var i = classArray.length;
+ var head = angular.element(document.querySelectorAll('head'));
+
+ while(i--) {
+ head.append('<meta class="' + classArray[i] + '" />');
+ }
+
+ return;
+ }
+
+ function getStyle(selector, styleName) {
+ var elem = document.querySelectorAll(selector)[0];
+ var style = window.getComputedStyle(elem, null);
+
+ return style.getPropertyValue('font-family');
+ }
+
+ // https://github.com/sindresorhus/query-string
+ function parseStyleToObject(str) {
+ var styleObject = {};
+
+ if (typeof str !== 'string') {
+ return styleObject;
+ }
+
+ str = str.trim().slice(1, -1); // browsers re-quote string style values
+
+ if (!str) {
+ return styleObject;
+ }
+
+ styleObject = str.split('&').reduce(function(ret, param) {
+ var parts = param.replace(/\+/g, ' ').split('=');
+ var key = parts[0];
+ var val = parts[1];
+ key = decodeURIComponent(key);
+
+ // missing `=` should be `null`:
+ // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
+ val = val === undefined ? null : decodeURIComponent(val);
+
+ if (!ret.hasOwnProperty(key)) {
+ ret[key] = val;
+ } else if (Array.isArray(ret[key])) {
+ ret[key].push(val);
+ } else {
+ ret[key] = [ret[key], val];
+ }
+ return ret;
+ }, {});
+
+ return styleObject;
+ }
+ }
+
+ FoundationMQ.$inject = ['FoundationApi'];
+
+ function FoundationMQ(foundationApi) {
+ var service = [];
+
+ service.getMediaQueries = getMediaQueries;
+ service.match = match;
+ service.collectScenariosFromElement = collectScenariosFromElement;
+
+ return service;
+
+ function getMediaQueries() {
+ return foundationApi.getSettings().mediaQueries;
+ }
+
+ function match(scenarios) {
+ var count = scenarios.length;
+ var queries = service.getMediaQueries();
+ var matches = [];
+
+ if (count > 0) {
+ while (count--) {
+ var mq;
+ var rule = scenarios[count].media;
+
+ if (queries[rule]) {
+ mq = matchMedia(queries[rule]);
+ } else {
+ mq = matchMedia(rule);
+ }
+
+ if (mq.matches) {
+ matches.push({ ind: count});
+ }
+ }
+ }
+
+ return matches;
+ }
+
+ // Collects a scenario object and templates from element
+ function collectScenariosFromElement(parentElement) {
+ var scenarios = [];
+ var templates = [];
+
+ var elements = parentElement.children();
+ var i = 0;
+
+ angular.forEach(elements, function(el) {
+ var elem = angular.element(el);
+
+
+ //if no source or no html, capture element itself
+ if (!elem.attr('src') || !elem.attr('src').match(/.html$/)) {
+ templates[i] = elem;
+ scenarios[i] = { media: elem.attr('media'), templ: i };
+ } else {
+ scenarios[i] = { media: elem.attr('media'), src: elem.attr('src') };
+ }
+
+ i++;
+ });
+
+ return {
+ scenarios: scenarios,
+ templates: templates
+ };
+ }
+ }
+})();
diff --git a/afb-client/bower_components/foundation-apps/js/angular/vendor/markdown.js b/afb-client/bower_components/foundation-apps/js/angular/vendor/markdown.js
new file mode 100644
index 0000000..d0dd9d6
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/vendor/markdown.js
@@ -0,0 +1,10 @@
+angular.module('markdown', [])
+ .directive('markdown', function() {
+ return {
+ restrict: 'A',
+ link: function(scope, element, attrs, controller) {
+ element.html(marked(element.html()));
+ }
+ };
+
+});
diff --git a/afb-client/bower_components/foundation-apps/js/angular/vendor/svgDirs.js b/afb-client/bower_components/foundation-apps/js/angular/vendor/svgDirs.js
new file mode 100755
index 0000000..c07c883
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/angular/vendor/svgDirs.js
@@ -0,0 +1,101 @@
+'use strict';
+
+(function(){
+ var svgDirectives = {};
+
+ angular.forEach([
+ 'clipPath',
+ 'colorProfile',
+ 'src',
+ 'cursor',
+ 'fill',
+ 'filter',
+ 'marker',
+ 'markerStart',
+ 'markerMid',
+ 'markerEnd',
+ 'mask',
+ 'stroke'
+ ],
+ function(attr) {
+ svgDirectives[attr] = [
+ '$rootScope',
+ '$location',
+ '$interpolate',
+ '$sniffer',
+ 'urlResolve',
+ 'computeSVGAttrValue',
+ 'svgAttrExpressions',
+ function(
+ $rootScope,
+ $location,
+ $interpolate,
+ $sniffer,
+ urlResolve,
+ computeSVGAttrValue,
+ svgAttrExpressions) {
+ return {
+ restrict: 'A',
+ link: function(scope, element, attrs) {
+ var initialUrl;
+
+ //Only apply to svg elements to avoid unnecessary observing
+ //Check that is in html5Mode and that history is supported
+ if ((!svgAttrExpressions.SVG_ELEMENT.test(element[0] &&
+ element[0].toString())) ||
+ !$location.$$html5 ||
+ !$sniffer.history) return;
+
+ //Assumes no expressions, since svg is unforgiving of xml violations
+ initialUrl = attrs[attr];
+ attrs.$observe(attr, updateValue);
+ $rootScope.$on('$locationChangeSuccess', updateValue);
+
+ function updateValue () {
+ var newVal = computeSVGAttrValue(initialUrl);
+ //Prevent recursive updating
+ if (newVal && attrs[attr] !== newVal) attrs.$set(attr, newVal);
+ }
+ }
+ };
+ }];
+ });
+
+ angular.module('ngSVGAttributes', []).
+ factory('urlResolve', [function() {
+ //Duplicate of urlResolve & urlParsingNode in angular core
+ var urlParsingNode = document.createElement('a');
+ return function urlResolve(url) {
+ urlParsingNode.setAttribute('href', url);
+ return urlParsingNode;
+ };
+ }]).
+ value('svgAttrExpressions', {
+ FUNC_URI: /^url\((.*)\)$/,
+ SVG_ELEMENT: /SVG[a-zA-Z]*Element/,
+ HASH_PART: /#.*/
+ }).
+ factory('computeSVGAttrValue', [
+ '$location', '$sniffer', 'svgAttrExpressions', 'urlResolve',
+ function($location, $sniffer, svgAttrExpressions, urlResolve) {
+ return function computeSVGAttrValue(url) {
+ var match, fullUrl;
+ if (match = svgAttrExpressions.FUNC_URI.exec(url)) {
+ //hash in html5Mode, forces to be relative to current url instead of base
+ if (match[1].indexOf('#') === 0) {
+ fullUrl = $location.absUrl().
+ replace(svgAttrExpressions.HASH_PART, '') +
+ match[1];
+ }
+ //Presumably links to external SVG document
+ else {
+ fullUrl = urlResolve(match[1]);
+ }
+ }
+ return fullUrl ? 'url(' + fullUrl + ')' : null;
+ };
+ }
+ ]
+ ).
+ directive(svgDirectives);
+}());
diff --git a/afb-client/bower_components/foundation-apps/js/vendor/iconic.min.js b/afb-client/bower_components/foundation-apps/js/vendor/iconic.min.js
new file mode 100755
index 0000000..a18ac59
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/js/vendor/iconic.min.js
@@ -0,0 +1,6 @@
+/*!
+ * iconic.js v0.4.0 - The Iconic JavaScript library
+ * Copyright (c) 2014 Waybury - http://useiconic.com
+ */
+
+!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.IconicJS=a():"undefined"!=typeof global?global.IconicJS=a():"undefined"!=typeof self&&(self.IconicJS=a())}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b){var c=(a("./modules/polyfills"),a("./modules/svg-injector")),d=a("./modules/extend"),e=a("./modules/responsive"),f=a("./modules/position"),g=a("./modules/container"),h=a("./modules/log"),i={},j=window.iconicSmartIconApis={},k=("file:"===window.location.protocol,0),l=function(a,b,e){b=d({},i,b||{});var f={evalScripts:b.evalScripts,pngFallback:b.pngFallback};f.each=function(a){if(a)if("string"==typeof a)h.debug(a);else if(a instanceof SVGSVGElement){var c=a.getAttribute("data-icon");if(c&&j[c]){var d=j[c](a);for(var e in d)a[e]=d[e]}/iconic-bg-/.test(a.getAttribute("class"))&&g.addBackground(a),m(a),k++,b&&b.each&&"function"==typeof b.each&&b.each(a)}},"string"==typeof a&&(a=document.querySelectorAll(a)),c(a,f,e)},m=function(a){var b=[];a?"string"==typeof a?b=document.querySelectorAll(a):void 0!==a.length?b=a:"object"==typeof a&&b.push(a):b=document.querySelectorAll("svg.iconic"),Array.prototype.forEach.call(b,function(a){a instanceof SVGSVGElement&&(a.update&&a.update(),e.refresh(a),f.refresh(a))})},n=function(){i.debug&&console.time&&console.time("autoInjectSelector - "+i.autoInjectSelector);var a=k;l(i.autoInjectSelector,{},function(){if(i.debug&&console.timeEnd&&console.timeEnd("autoInjectSelector - "+i.autoInjectSelector),h.debug("AutoInjected: "+(k-a)),e.refreshAll(),i.autoInjectDone&&"function"==typeof i.autoInjectDone){var b=k-a;i.autoInjectDone(b)}})},o=function(a){a&&""!==a&&"complete"!==document.readyState?document.addEventListener("DOMContentLoaded",n):document.removeEventListener("DOMContentLoaded",n)},p=function(a){return a=a||{},d(i,a),o(i.autoInjectSelector),h.enableDebug(i.debug),window._Iconic?window._Iconic:{inject:l,update:m,smartIconApis:j,svgInjectedCount:k}};b.exports=p,window._Iconic=new p({autoInjectSelector:"img.iconic",evalScripts:"once",pngFallback:!1,each:null,autoInjectDone:null,debug:!1})},{"./modules/container":2,"./modules/extend":3,"./modules/log":4,"./modules/polyfills":5,"./modules/position":6,"./modules/responsive":7,"./modules/svg-injector":8}],2:[function(a,b){var c=function(a){var b=a.getAttribute("class").split(" "),c=-1!==b.indexOf("iconic-fluid"),d=[],e=["iconic-bg"];Array.prototype.forEach.call(b,function(a){switch(a){case"iconic-sm":case"iconic-md":case"iconic-lg":d.push(a),c||e.push(a.replace(/-/,"-bg-"));break;case"iconic-fluid":d.push(a),e.push(a.replace(/-/,"-bg-"));break;case"iconic-bg-circle":case"iconic-bg-rounded-rect":case"iconic-bg-badge":e.push(a);break;default:d.push(a)}}),a.setAttribute("class",d.join(" "));var f=a.parentNode,g=Array.prototype.indexOf.call(f.childNodes,a),h=document.createElement("span");h.setAttribute("class",e.join(" ")),h.appendChild(a),f.insertBefore(h,f.childNodes[g])};b.exports={addBackground:c}},{}],3:[function(a,b){b.exports=function(a){return Array.prototype.forEach.call(Array.prototype.slice.call(arguments,1),function(b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])}),a}},{}],4:[function(a,b){var c=!1,d=function(a){console&&console.log&&console.log(a)},e=function(a){d("Iconic INFO: "+a)},f=function(a){d("Iconic WARNING: "+a)},g=function(a){c&&d("Iconic DEBUG: "+a)},h=function(a){c=a};b.exports={info:e,warn:f,debug:g,enableDebug:h}},{}],5:[function(){Array.prototype.forEach||(Array.prototype.forEach=function(a,b){"use strict";if(void 0===this||null===this||"function"!=typeof a)throw new TypeError;var c,d=this.length>>>0;for(c=0;d>c;++c)c in this&&a.call(b,this[c],c,this)}),function(){if(Event.prototype.preventDefault||(Event.prototype.preventDefault=function(){this.returnValue=!1}),Event.prototype.stopPropagation||(Event.prototype.stopPropagation=function(){this.cancelBubble=!0}),!Element.prototype.addEventListener){var a=[],b=function(b,c){var d=this,e=function(a){a.target=a.srcElement,a.currentTarget=d,c.handleEvent?c.handleEvent(a):c.call(d,a)};if("DOMContentLoaded"==b){var f=function(a){"complete"==document.readyState&&e(a)};if(document.attachEvent("onreadystatechange",f),a.push({object:this,type:b,listener:c,wrapper:f}),"complete"==document.readyState){var g=new Event;g.srcElement=window,f(g)}}else this.attachEvent("on"+b,e),a.push({object:this,type:b,listener:c,wrapper:e})},c=function(b,c){for(var d=0;d<a.length;){var e=a[d];if(e.object==this&&e.type==b&&e.listener==c){"DOMContentLoaded"==b?this.detachEvent("onreadystatechange",e.wrapper):this.detachEvent("on"+b,e.wrapper);break}++d}};Element.prototype.addEventListener=b,Element.prototype.removeEventListener=c,HTMLDocument&&(HTMLDocument.prototype.addEventListener=b,HTMLDocument.prototype.removeEventListener=c),Window&&(Window.prototype.addEventListener=b,Window.prototype.removeEventListener=c)}}()},{}],6:[function(a,b){var c=function(a){var b=a.getAttribute("data-position");if(b&&""!==b){var c,d,e,f,g,h,i,j=a.getAttribute("width"),k=a.getAttribute("height"),l=b.split("-"),m=a.querySelectorAll("g.iconic-container");Array.prototype.forEach.call(m,function(a){if(c=a.getAttribute("data-width"),d=a.getAttribute("data-height"),c!==j||d!==k){if(e=a.getAttribute("transform"),f=1,e){var b=e.match(/scale\((\d)/);f=b&&b[1]?b[1]:1}g=Math.floor((j/f-c)/2),h=Math.floor((k/f-d)/2),Array.prototype.forEach.call(l,function(a){switch(a){case"top":h=0;break;case"bottom":h=k/f-d;break;case"left":g=0;break;case"right":g=j/f-c;break;case"center":break;default:console&&console.log&&console.log("Unknown position: "+a)}}),i=0===h?g:g+" "+h,i="translate("+i+")",e?/translate/.test(e)?e=e.replace(/translate\(.*?\)/,i):e+=" "+i:e=i,a.setAttribute("transform",e)}})}};b.exports={refresh:c}},{}],7:[function(a,b){var c=/(iconic-sm\b|iconic-md\b|iconic-lg\b)/,d=function(a,b){var c="undefined"!=typeof window.getComputedStyle&&window.getComputedStyle(a,null).getPropertyValue(b);return!c&&a.currentStyle&&(c=a.currentStyle[b.replace(/([a-z])\-([a-z])/,function(a,b,c){return b+c.toUpperCase()})]||a.currentStyle[b]),c},e=function(a){var b=a.style.display;a.style.display="block";var c=parseFloat(d(a,"width").slice(0,-2)),e=parseFloat(d(a,"height").slice(0,-2));return a.style.display=b,{width:c,height:e}},f=function(){var a="/* Iconic Responsive Support Styles */\n.iconic-property-fill, .iconic-property-text {stroke: none !important;}\n.iconic-property-stroke {fill: none !important;}\nsvg.iconic.iconic-fluid {height:100% !important;width:100% !important;}\nsvg.iconic.iconic-sm:not(.iconic-size-md):not(.iconic-size-lg), svg.iconic.iconic-size-sm{width:16px;height:16px;}\nsvg.iconic.iconic-md:not(.iconic-size-sm):not(.iconic-size-lg), svg.iconic.iconic-size-md{width:32px;height:32px;}\nsvg.iconic.iconic-lg:not(.iconic-size-sm):not(.iconic-size-md), svg.iconic.iconic-size-lg{width:128px;height:128px;}\nsvg.iconic-sm > g.iconic-md, svg.iconic-sm > g.iconic-lg, svg.iconic-md > g.iconic-sm, svg.iconic-md > g.iconic-lg, svg.iconic-lg > g.iconic-sm, svg.iconic-lg > g.iconic-md {display: none;}\nsvg.iconic.iconic-icon-sm > g.iconic-lg, svg.iconic.iconic-icon-md > g.iconic-lg {display:none;}\nsvg.iconic-sm:not(.iconic-icon-md):not(.iconic-icon-lg) > g.iconic-sm, svg.iconic-md.iconic-icon-sm > g.iconic-sm, svg.iconic-lg.iconic-icon-sm > g.iconic-sm {display:inline;}\nsvg.iconic-md:not(.iconic-icon-sm):not(.iconic-icon-lg) > g.iconic-md, svg.iconic-sm.iconic-icon-md > g.iconic-md, svg.iconic-lg.iconic-icon-md > g.iconic-md {display:inline;}\nsvg.iconic-lg:not(.iconic-icon-sm):not(.iconic-icon-md) > g.iconic-lg, svg.iconic-sm.iconic-icon-lg > g.iconic-lg, svg.iconic-md.iconic-icon-lg > g.iconic-lg {display:inline;}";navigator&&navigator.userAgent&&/MSIE 10\.0/.test(navigator.userAgent)&&(a+="svg.iconic{zoom:1.0001;}");var b=document.createElement("style");b.id="iconic-responsive-css",b.type="text/css",b.styleSheet?b.styleSheet.cssText=a:b.appendChild(document.createTextNode(a)),(document.head||document.getElementsByTagName("head")[0]).appendChild(b)},g=function(a){if(/iconic-fluid/.test(a.getAttribute("class"))){var b,d=e(a),f=a.viewBox.baseVal.width/a.viewBox.baseVal.height;b=1===f?Math.min(d.width,d.height):1>f?d.width:d.height;var g;g=32>b?"iconic-sm":b>=32&&128>b?"iconic-md":"iconic-lg";var h=a.getAttribute("class"),i=c.test(h)?h.replace(c,g):h+" "+g;a.setAttribute("class",i)}},h=function(){var a=document.querySelectorAll(".injected-svg.iconic-fluid");Array.prototype.forEach.call(a,function(a){g(a)})};document.addEventListener("DOMContentLoaded",function(){f()}),window.addEventListener("resize",function(){h()}),b.exports={refresh:g,refreshAll:h}},{}],8:[function(b,c,d){!function(b,e){"use strict";function f(a){a=a.split(" ");for(var b={},c=a.length,d=[];c--;)b.hasOwnProperty(a[c])||(b[a[c]]=1,d.unshift(a[c]));return d.join(" ")}var g="file:"===b.location.protocol,h=e.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"),i=Array.prototype.forEach||function(a,b){if(void 0===this||null===this||"function"!=typeof a)throw new TypeError;var c,d=this.length>>>0;for(c=0;d>c;++c)c in this&&a.call(b,this[c],c,this)},j={},k=0,l=[],m=[],n={},o=function(a){return a.cloneNode(!0)},p=function(a,b){m[a]=m[a]||[],m[a].push(b)},q=function(a){for(var b=0,c=m[a].length;c>b;b++)!function(b){setTimeout(function(){m[a][b](o(j[a]))},0)}(b)},r=function(a,c){if(void 0!==j[a])j[a]instanceof SVGSVGElement?c(o(j[a])):p(a,c);else{if(!b.XMLHttpRequest)return c("Browser does not support XMLHttpRequest"),!1;j[a]={},p(a,c);var d=new XMLHttpRequest;d.onreadystatechange=function(){if(4===d.readyState){if(404===d.status||null===d.responseXML)return c("Unable to load SVG file: "+a),g&&c("Note: SVG injection ajax calls do not work locally without adjusting security setting in your browser. Or consider using a local webserver."),c(),!1;if(!(200===d.status||g&&0===d.status))return c("There was a problem injecting the SVG: "+d.status+" "+d.statusText),!1;if(d.responseXML instanceof Document)j[a]=d.responseXML.documentElement;else if(DOMParser&&DOMParser instanceof Function){var b;try{var e=new DOMParser;b=e.parseFromString(d.responseText,"text/xml")}catch(f){b=void 0}if(!b||b.getElementsByTagName("parsererror").length)return c("Unable to parse SVG file: "+a),!1;j[a]=b.documentElement}q(a)}},d.open("GET",a),d.overrideMimeType&&d.overrideMimeType("text/xml"),d.send()}},s=function(a,c,d,e){var g=a.getAttribute("data-src")||a.getAttribute("src");if(!/svg$/i.test(g))return e("Attempted to inject a file with a non-svg extension: "+g),void 0;if(!h){var j=a.getAttribute("data-fallback")||a.getAttribute("data-png");return j?(a.setAttribute("src",j),e(null)):d?(a.setAttribute("src",d+"/"+g.split("/").pop().replace(".svg",".png")),e(null)):e("This browser does not support SVG and no PNG fallback was defined."),void 0}-1===l.indexOf(a)&&(l.push(a),a.setAttribute("src",""),r(g,function(d){if("undefined"==typeof d||"string"==typeof d)return e(d),!1;var h=a.getAttribute("id");h&&d.setAttribute("id",h);var j=a.getAttribute("title");j&&d.setAttribute("title",j);var m=[].concat(d.getAttribute("class")||[],"injected-svg",a.getAttribute("class")||[]).join(" ");d.setAttribute("class",f(m));var o=a.getAttribute("style");o&&d.setAttribute("style",o);var p=[].filter.call(a.attributes,function(a){return/^data-\w[\w\-]*$/.test(a.name)});i.call(p,function(a){a.name&&a.value&&d.setAttribute(a.name,a.value)});for(var q,r=d.querySelectorAll("defs clipPath[id]"),s=0,t=r.length;t>s;s++){q=r[s].id+"-"+k;for(var u=d.querySelectorAll('[clip-path*="'+r[s].id+'"]'),v=0,w=u.length;w>v;v++)u[v].setAttribute("clip-path","url(#"+q+")");r[s].id=q}d.removeAttribute("xmlns:a");for(var x,y,z=d.querySelectorAll("script"),A=[],B=0,C=z.length;C>B;B++)y=z[B].getAttribute("type"),y&&"application/ecmascript"!==y&&"application/javascript"!==y||(x=z[B].innerText||z[B].textContent,A.push(x),d.removeChild(z[B]));if(A.length>0&&("always"===c||"once"===c&&!n[g])){for(var D=0,E=A.length;E>D;D++)new Function(A[D])(b);n[g]=!0}a.parentNode.replaceChild(d,a),delete l[l.indexOf(a)],a=null,k++,e(d)}))},t=function(a,b,c){b=b||{};var d=b.evalScripts||"always",e=b.pngFallback||!1,f=b.each;if(void 0!==a.length){var g=0;i.call(a,function(b){s(b,d,e,function(b){f&&"function"==typeof f&&f(b),c&&a.length===++g&&c(g)})})}else a?s(a,d,e,function(b){f&&"function"==typeof f&&f(b),c&&c(1),a=null}):c&&c(0)};"object"==typeof c&&"object"==typeof c.exports?c.exports=d=t:"function"==typeof a&&a.amd?a(function(){return t}):"object"==typeof b&&(b.SVGInjector=t)}(window,document)},{}]},{},[1])(1)}); \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/scss/_global.scss b/afb-client/bower_components/foundation-apps/scss/_global.scss
new file mode 100755
index 0000000..e4cffc6
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/_global.scss
@@ -0,0 +1,131 @@
+/*
+ GLOBAL
+ ------
+
+ Global styles and settings for Foundation for Apps are stored here. This file must always
+ be imported, no matter what.
+
+ Includes:
+ -
+*/
+
+/// @Foundation.settings
+// Global Styles
+// This sets 1rem to be 16px
+$rem-base: 16px;
+
+// The default font-size is set to 100% of the browser style sheet (usually 16px)
+// for compatibility with browser-based text zoom or user-set defaults.
+
+// Since the typical default browser font-size is 16px, that makes the calculation for grid size.
+// If you want your base font-size to be different and not have it affect the grid breakpoints,
+// set $rem-base to $base-font-size and make sure $base-font-size is a px value.
+$base-font-size: 100% !default;
+
+// $base-line-height is 24px while $base-font-size is 16px
+$base-line-height: 1.5 !default;
+
+// Text selector helpers
+$headers: "h1,h2,h3,h4,h5,h6";
+
+// We use these to define default font weights
+$font-weight-normal: normal !default;
+$font-weight-bold: bold !default;
+
+// We use these to control various global styles
+$body-background: #fff !default;
+$body-font-color: #222 !default;
+$body-font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif !default;
+$body-font-weight: $font-weight-normal !default;
+$body-font-style: normal !default;
+$body-antialiased: true;
+
+// Application Colors
+$primary-color: #00558b !default;
+$secondary-color: #f1f1f1 !default;
+$alert-color: #F04124 !default;
+$info-color: #A0D3E8 !default;
+$success-color: #43AC6A !default;
+$warning-color: #F08A24 !default;
+$dark-color: #232323 !default;
+$gray: #dfdfdf !default;
+$gray-dark: darken($gray, 8) !default;
+$gray-light: lighten($gray, 8) !default;
+
+// We use these to make sure border radius matches unless we want it different.
+$global-radius: 4px !default;
+$global-rounded: 1000px !default;
+
+// We use this for default spacing
+$global-padding: 1rem !default;
+$global-spacing: rem-calc(15) !default;
+///
+
+// For internal use: a color map
+$foundation-colors: (
+ primary: $primary-color,
+ success: $success-color,
+ warning: $warning-color,
+ alert: $alert-color,
+ dark: $dark-color,
+);
+
+@include exports(global) {
+ // Make extra sure we're using the whole window
+ html, body {
+ height: 100%;
+ font-size: $base-font-size;
+ }
+ // Set box-sizing globally to handle padding and border widths
+ html {
+ box-sizing: border-box;
+ }
+ *, *:before, *:after {
+ box-sizing: inherit;
+ }
+
+ // Default body styles
+ body {
+ background: $body-background;
+ color: $body-font-color;
+ padding: 0;
+ margin: 0;
+ font-family: $body-font-family;
+ font-weight: $body-font-weight;
+ font-style: $body-font-style;
+ line-height: 1;
+ position: relative;
+
+ @if $body-antialiased {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
+ }
+
+ img {
+ // Grid Defaults to get images and embeds to work properly
+ max-width: 100%;
+ height: auto;
+ -ms-interpolation-mode: bicubic;
+
+ // Get rid of gap under images by making them display: inline-block; by default
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ // Give all anchors and interactive directives the hover cusor
+ a, [ui-sref], [zf-open], [zf-close], [zf-toggle] {
+ cursor: pointer;
+ }
+
+ #map_canvas,
+ .map_canvas {
+ img,
+ embed,
+ object { max-width: none !important; }
+ }
+
+ .padding {
+ padding: $global-padding;
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/_settings.scss b/afb-client/bower_components/foundation-apps/scss/_settings.scss
new file mode 100644
index 0000000..7374cbc
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/_settings.scss
@@ -0,0 +1,614 @@
+// FOUNDATION FOR APPS SETTINGS
+// ----------------------------
+//
+// Table of Contents:
+//
+// 1. CSS Exports
+// 2. Global Styles
+// 3. Breakpoints
+// 4. Typography
+// 5. Grid
+// 6. Button
+// 7. Accordion
+// 8. Action Sheet
+// 9. Block List
+// 10. Button Group
+// 11. Card
+// 12. Extras
+// 13. Forms
+// 14. Iconic
+// 15. Label
+// 16. Menu Bar
+// 17. Modal
+// 18. Motion UI
+// 19. Notification
+// 20. Off-canvas
+// 21. Panel
+// 22. Popup
+// 23. Switch
+// 24. Tabs
+// 25. Title Bar
+
+@import "helpers/functions";
+
+// 1. CSS Exports
+// - - - - - - - - - - - - - - -
+
+// Change any value in this map from "true" to "false" to disable that component's CSS class output. You'll still be able to use the component's mixins, but none of our pre-written classes will be in your CSS.
+
+// $include-css: (
+// accordion: true,
+// action-sheet: true,
+// block-list: true,
+// button: true,
+// button-group: true,
+// card: true,
+// coloring: true,
+// extras: true,
+// forms: true,
+// grid: true,
+// iconic: true,
+// label: true,
+// badge: true,
+// list: true,
+// menu-bar: true,
+// modal: true,
+// motion: true,
+// notification: true,
+// off-canvas: true,
+// panel: true,
+// popup: true,
+// switch: true,
+// tabs: true,
+// title-bar: true,
+// typography: true,
+// utilities: true,
+// );
+
+// 2. Global Styles
+// - - - - - - - - - - - - - - -
+
+// This sets 1rem to be 16px
+// $rem-base: 16px;
+
+// The default font-size is set to 100% of the browser style sheet (usually 16px)
+// for compatibility with browser-based text zoom or user-set defaults.
+
+// Since the typical default browser font-size is 16px, that makes the calculation for grid size.
+// If you want your base font-size to be different and not have it affect the grid breakpoints,
+// set $rem-base to $base-font-size and make sure $base-font-size is a px value.
+// $base-font-size: 100%;
+
+// $base-line-height is 24px while $base-font-size is 16px
+// $base-line-height: 1.5;
+
+// Text selector helpers
+// $headers: "h1,h2,h3,h4,h5,h6";
+
+// We use these to define default font weights
+// $font-weight-normal: normal;
+// $font-weight-bold: bold;
+
+// We use these to control various global styles
+// $body-background: #fff;
+// $body-font-color: #222;
+// $body-font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
+// $body-font-weight: $font-weight-normal;
+// $body-font-style: normal;
+// $body-antialiased: true;
+
+// Application Colors
+// $primary-color: #00558b;
+// $secondary-color: #f1f1f1;
+// $alert-color: #F04124;
+// $info-color: #A0D3E8;
+// $success-color: #43AC6A;
+// $warning-color: #F08A24;
+// $dark-color: #232323;
+// $gray: #dfdfdf;
+// $gray-dark: darken($gray, 8);
+// $gray-light: lighten($gray, 8);
+
+// We use these to make sure border radius matches unless we want it different.
+// $global-radius: 4px;
+// $global-rounded: 1000px;
+
+// We use this for default spacing
+// $global-padding: 1rem;
+// $global-spacing: rem-calc(15);
+
+// 3. Breakpoints
+// - - - - - - - - - - - - - - -
+
+// These are our named breakpoints. You can use them in our breakpoint function like this: @include breakpoint(medium) { // Medium and larger styles }
+// $breakpoints: (
+// small: rem-calc(0),
+// medium: rem-calc(640),
+// large: rem-calc(1200),
+// xlarge: rem-calc(1440),
+// xxlarge: rem-calc(1920),
+// );
+
+// All of the names in this list will be output as classes in your CSS, like small-12, medium-6, and so on.
+// $breakpoint-classes: (small medium large);
+
+// 4. Typography
+// - - - - - - - - - - - - - - -
+
+// We use these to control header font styles
+// $header-font-family: $body-font-family;
+// $header-font-weight: $font-weight-normal;
+// $header-font-style: $font-weight-normal;
+// $header-font-color: #222;
+// $header-line-height: 1.4;
+// $header-top-margin: .2rem;
+// $header-bottom-margin: .5rem;
+// $header-text-rendering: optimizeLegibility;
+
+// We use these to control header font sizes
+// $h1-font-size: rem-calc(44);
+// $h2-font-size: rem-calc(37);
+// $h3-font-size: rem-calc(27);
+// $h4-font-size: rem-calc(23);
+// $h5-font-size: rem-calc(18);
+// $h6-font-size: 1rem;
+
+// We use these to control header size reduction on small screens
+// $h1-font-reduction: rem-calc(10);
+// $h2-font-reduction: rem-calc(10);
+// $h3-font-reduction: rem-calc(5);
+// $h4-font-reduction: rem-calc(5);
+// $h5-font-reduction: 0;
+// $h6-font-reduction: 0;
+
+// These control how subheaders are styled.
+// $subheader-line-height: 1.4;
+// $subheader-font-color: scale-color($header-font-color, $lightness: 35%);
+// $subheader-font-weight: $font-weight-normal;
+// $subheader-top-margin: .2rem;
+// $subheader-bottom-margin: .5rem;
+
+// A general <small> styling
+// $small-font-size: 60%;
+// $small-font-color: scale-color($header-font-color, $lightness: 35%);
+
+// We use these to style paragraphs
+// $paragraph-font-family: inherit;
+// $paragraph-font-weight: $font-weight-normal;
+// $paragraph-font-size: 1rem;
+// $paragraph-line-height: 1.6;
+// $paragraph-margin-bottom: rem-calc(20);
+// $paragraph-aside-font-size: rem-calc(14);
+// $paragraph-aside-line-height: 1.35;
+// $paragraph-aside-font-style: italic;
+// $paragraph-text-rendering: optimizeLegibility;
+
+// We use these to style <code> tags
+// $code-color: grayscale($primary-color);
+// $code-font-family: Consolas, 'Liberation Mono', Courier, monospace;
+// $code-font-weight: $font-weight-normal;
+// $code-background-color: scale-color($secondary-color, $lightness: 70%);
+// $code-border-size: 1px;
+// $code-border-style: solid;
+// $code-border-color: scale-color($code-background-color, $lightness: -10%);
+// $code-padding: rem-calc(2) rem-calc(5) rem-calc(1);
+
+// We use these to style anchors
+// $anchor-text-decoration: none;
+// $anchor-text-decoration-hover: none;
+// $anchor-font-color: $primary-color;
+// $anchor-font-color-hover: scale-color($anchor-font-color, $lightness: -14%);
+
+// We use these to style the <hr> element
+// $hr-border-width: 1px;
+// $hr-border-style: solid;
+// $hr-border-color: #ddd;
+// $hr-margin: rem-calc(20);
+
+// We use these to style lists
+// $list-font-family: $paragraph-font-family;
+// $list-font-size: $paragraph-font-size;
+// $list-line-height: $paragraph-line-height;
+// $list-margin-bottom: $paragraph-margin-bottom;
+// $list-style-position: outside;
+// $list-side-margin: 1.1rem;
+// $list-ordered-side-margin: 1.4rem;
+// $list-side-margin-no-bullet: 0;
+// $list-nested-margin: rem-calc(20);
+// $definition-list-header-weight: $font-weight-bold;
+// $definition-list-header-margin-bottom: .3rem;
+// $definition-list-margin-bottom: rem-calc(12);
+
+// We use these to style blockquotes
+// $blockquote-font-color: scale-color($header-font-color, $lightness: 35%);
+// $blockquote-padding: rem-calc(9 20 0 19);
+// $blockquote-border: 1px solid #ddd;
+// $blockquote-cite-font-size: rem-calc(13);
+// $blockquote-cite-font-color: scale-color($header-font-color, $lightness: 23%);
+// $blockquote-cite-link-color: $blockquote-cite-font-color;
+
+// Acronym styles
+// $acronym-underline: 1px dotted #ddd;
+
+// 5. Grid
+// - - - - - - - - - - - - - - -
+
+// $container-width: rem-calc(900);
+// $block-padding: $global-padding;
+// $total-columns: 12;
+// $block-grid-max-size: 6;
+
+// 6. Button
+// - - - - - - - - - - - - - - -
+
+// $button-padding: 0.85em 1em;
+// $button-margin: 0 $global-padding $global-padding 0;
+// $button-style: solid;
+// $button-background: $primary-color;
+// $button-background-hover: scale-color($button-background, $lightness: -15%);
+// $button-color: auto;
+// $button-radius: 0;
+// $button-sizes: (
+// tiny: 0.7,
+// small: 0.8,
+// medium: 1,
+// large: 1.3,
+// );
+// $button-font-size: 0.9rem;
+// $button-opacity-disabled: 0.5;
+// $button-tag-selector: false;
+
+// 7. Accordion
+// - - - - - - - - - - - - - - -
+
+// $accordion-border: 1px solid $gray-dark;
+
+// $accordion-title-background: $gray-light;
+// $accordion-title-background-hover: smartscale($accordion-title-background, 5%);
+// $accordion-title-background-active: smartscale($accordion-title-background, 3%);
+// $accordion-title-color: isitlight($accordion-title-background);
+// $accordion-title-color-active: isitlight($accordion-title-background);
+
+// $accordion-title-padding: $global-padding;
+// $accordion-content-padding: $global-padding;
+
+// 8. Action Sheet
+// - - - - - - - - - - - - - - -
+
+// $actionsheet-background: white;
+// $actionsheet-border-color: #ccc;
+// $actionsheet-animate: transform opacity;
+// $actionsheet-animation-speed: 0.25s;
+// $actionsheet-width: 300px;
+// $actionsheet-radius: 4px;
+// $actionsheet-shadow: 0 -3px 10px rgba(black, 0.25);
+// $actionsheet-padding: $global-padding;
+// $actionsheet-tail-size: 10px;
+
+// $actionsheet-popup-shadow: 0 0 10px rgba(black, 0.25);
+
+// $actionsheet-link-color: #000;
+// $actionsheet-link-background-hover: smartscale($actionsheet-background);
+
+// 9. Block List
+// - - - - - - - - - - - - - - -
+
+// $blocklist-background: #fff;
+// $blocklist-fullbleed: true;
+// $blocklist-fontsize: 1rem;
+
+// $blocklist-item-padding: 0.8rem 1rem;
+// $blocklist-item-color: isitlight($blocklist-background, #000, #fff);
+// $blocklist-item-background-hover: smartscale($blocklist-background, 4.5%);
+// $blocklist-item-color-disabled: #999;
+// $blocklist-item-border: 1px solid smartscale($blocklist-background, 18.5%);
+
+// $blocklist-item-label-color: scale-color($blocklist-item-color, $lightness: 60%);
+// $blocklist-item-icon-size: 0.8;
+
+// $blocklist-header-fontsize: 0.8em;
+// $blocklist-header-color: smartscale($blocklist-item-color, 40%);
+// $blocklist-header-uppercase: true;
+
+// $blocklist-check-icons: true;
+
+// 10. Button Group
+// - - - - - - - - - - - - - - -
+
+// $btngroup-background: $primary-color;
+// $btngroup-color: #fff;
+// $btngroup-radius: $button-radius;
+
+// 11. Card
+// - - - - - - - - - - - - - - -
+
+// $card-background: #fff;
+// $card-color: isitlight($card-background);
+// $card-border: 1px solid smartscale($card-background, 7%);
+// $card-radius: $global-radius;
+// $card-shadow: 0 1px 2px rgba(#000, 0.2);
+// $card-padding: $global-padding;
+// $card-margin: 0.5rem;
+
+// $card-divider-background: smartscale($card-background, 7%);
+
+// 12. Extras
+// - - - - - - - - - - - - - - -
+
+// $closebutton-position: (top right);
+// $closebutton-size: 2em;
+// $closebutton-lineheight: 0.5;
+// $closebutton-color: #999;
+// $closebutton-color-hover: #333;
+
+// $thumbnail-padding: 0.5rem;
+// $thumbnail-shadow: 0 3px 15px rgba(black, 0.25);
+
+// 13. Forms
+// - - - - - - - - - - - - - - -
+
+// Basic form variables
+// $form-fontsize: 1rem;
+// $form-padding: 0.5rem;
+
+// Text fields
+// $input-color: #000;
+// $input-color-hover: $input-color;
+// $input-color-focus: $input-color;
+// $input-background: #fff;
+// $input-background-hover: $input-background;
+// $input-background-focus: $input-background;
+// $input-background-disabled: smartscale($input-background);
+// $input-border: 1px solid #ccc;
+// $input-border-hover: 1px solid #bbb;
+// $input-border-focus: 1px solid #999;
+// $input-cursor-disabled: not-allowed;
+
+// Select menus
+// $select-color: #000;
+// $select-background: #fafafa;
+// $select-background-hover: smartscale($select-background, 4%);
+// $select-arrow: true;
+// $select-arrow-color: $select-color;
+
+// Labels
+// $form-label-fontsize: 0.9rem;
+// $form-label-margin: 0.5rem;
+// $form-label-color: #333;
+
+// Inline labels
+// $inlinelabel-color: #333;
+// $inlinelabel-background: #eee;
+// $inlinelabel-border: $input-border;
+
+// Range slider
+// $slider-background: #ddd;
+// $slider-height: 1rem;
+// $slider-radius: 0px;
+// $slider-thumb-height: 1.5rem;
+// $slider-thumb-color: $primary-color;
+// $slider-thumb-radius: 0px;
+
+// Progress and meter
+// $meter-height: 1.5rem;
+// $meter-background: #ccc;
+// $meter-fill: $primary-color;
+// $meter-fill-high: $success-color;
+// $meter-fill-medium: #e7cf00;
+// $meter-fill-low: $alert-color;
+// $meter-radius: 0;
+
+// 14. Iconic
+// - - - - - - - - - - - - - - -
+
+// $iconic-primary-fill: $primary-color;
+// $iconic-primary-stroke: $primary-color;
+// $iconic-accent-fill: $iconic-primary-fill;
+// $iconic-accent-stroke: $iconic-accent-fill;
+
+// 15. Label
+// - - - - - - - - - - - - - - -
+
+// $label-fontsize: 0.8rem;
+// $label-padding: ($global-padding / 3) ($global-padding / 2);
+// $label-radius: 0;
+// $label-background: $primary-color;
+// $label-color: isitlight($primary-color);
+
+// $badge-fontsize: 0.8em;
+// $badge-diameter: 1.5rem;
+// $badge-background: $primary-color;
+// $badge-color: #fff;
+
+// 16. Menu Bar
+// - - - - - - - - - - - - - - -
+
+// $menubar-fontsize: 1rem;
+// $menubar-background: #fff;
+// $menubar-background-hover: smartscale($menubar-background, 7%);
+// $menubar-background-active: $menubar-background-hover;
+// $menubar-color: isitlight($menubar-background);
+// $menubar-color-hover: $menubar-color;
+// $menubar-color-active: $menubar-color-hover;
+
+// $menubar-item-padding: $global-padding;
+// $menubar-icon-size: 25px;
+// $menubar-icon-spacing: $menubar-item-padding;
+
+// 17. Modal
+// - - - - - - - - - - - - - - -
+
+// $modal-background: #fff;
+// $modal-border: 0;
+// $modal-radius: 0px;
+// $modal-shadow: none;
+// $modal-zindex: 1000;
+// $modal-sizes: (
+// tiny: 300px,
+// small: 500px,
+// medium: 600px,
+// large: 800px,
+// );
+
+// $modal-overlay-class: 'modal-overlay';
+// $modal-overlay-background: rgba(#333, 0.7);
+
+// 18. Motion UI
+// - - - - - - - - - - - - - - -
+
+// Classes to use when triggering in/out animations
+// $motion-class: (
+// in: "ng-enter",
+// out: "ng-leave",
+// );
+// $motion-class-active: (
+// in: "ng-enter-active",
+// out: "ng-leave-active",
+// );
+// $motion-class-stagger: (
+// in: "ng-enter-stagger",
+// out: "ng-leave-stagger",
+// );
+// $motion-class-showhide: (
+// in: "ng-hide-remove",
+// out: "ng-hide-add",
+// );
+// $motion-class-showhide-active: (
+// in: "ng-hide-remove-active",
+// out: "ng-hide-add-active",
+// );
+
+// Set if movement-based transitions should also fade the element in and out
+// $motion-slide-and-fade: false;
+// $motion-hinge-and-fade: true;
+// $motion-scale-and-fade: true;
+// $motion-spin-and-fade: true;
+
+// Default speed for transitions and animations
+// $motion-duration-default: 500ms;
+
+// Slow and fast modifiders
+// $motion-duration-slow: 750ms;
+// $motion-duration-fast: 250ms;
+// $motion-stagger-duration-default: 150ms;
+// $motion-stagger-duration-short: 50ms;
+// $motion-stagger-duration-long: 300ms;
+
+// Default timing function for transitions and animations
+// $motion-timing-default: ease;
+
+// Built-in and custom easing functions
+// Every item in this map becomes a CSS class
+// $motion-timings: (
+// linear: linear,
+// ease: ease,
+// easeIn: ease-in,
+// easeOut: ease-out,
+// easeInOut: ease-in-out,
+// bounceIn: cubic-bezier(0.485, 0.155, 0.240, 1.245),
+// bounceOut: cubic-bezier(0.485, 0.155, 0.515, 0.845),
+// bounceInOut: cubic-bezier(0.760, -0.245, 0.240, 1.245),
+// );
+
+// Default delay for all transitions and animations
+// $motion-delay-default: 0;
+// Short and long delay modifiers
+// $motion-delay-short: 300ms;
+// $motion-delay-long: 700ms;
+
+// 19. Notification
+// - - - - - - - - - - - - - - -
+
+// $notification-default-position: right top;
+// $notification-width: rem-calc(400);
+// $notification-offset: $global-padding;
+
+// $notification-background: $primary-color;
+// $notification-color: white;
+// $notification-padding: $global-padding;
+// $notification-radius: 4px;
+
+// $notification-icon-size: 60px;
+// $notification-icon-margin: $global-padding;
+// $notification-icon-align: top;
+
+
+// 20. Off-canvas
+// - - - - - - - - - - - - - - -
+
+// $offcanvas-size-horizontal: 250px;
+// $offcanvas-size-vertical: 250px;
+
+// $offcanvas-background: #fff;
+// $offcanvas-color: isitlight($offcanvas-background);
+// $offcanvas-padding: 0;
+// $offcanvas-shadow: 3px 0 10px rgba(black, 0.25);
+// $offcanvas-animation-speed: 0.25s;
+
+// $offcanvas-frame-selector: '.grid-frame';
+
+// 21. Panel
+// - - - - - - - - - - - - - - -
+
+// $panel-size-horizontal: 300px;
+// $panel-size-vertical: 300px;
+// $panel-padding: 0;
+
+// $panel-background: #fff;
+// $panel-shadow: 3px 0 10px rgba(black, 0.25);
+
+// DEPRECATED: these variables will be removed in a future version.
+// $panel-animation-speed: 0.25s;
+
+// 22. Popup
+// - - - - - - - - - - - - - - -
+
+// $popup-width: rem-calc(300);
+// $popup-background: #fff;
+// $popup-border: 0;
+// $popup-radius: 0;
+// $popup-shadow: 0 0 10px rgba(#000, 0.25);
+
+// 23. Switch
+// - - - - - - - - - - - - - - -
+
+// $switch-width: rem-calc(50);
+// $switch-height: rem-calc(32);
+// $switch-background: #ccc;
+// $switch-background-active: $primary-color;
+// $switch-border: 0;
+// $switch-radius: 9999px;
+// $switch-animation-speed: 0.15s;
+
+// $switch-paddle-color: white;
+// $switch-paddle-offset: 4px;
+
+// 24. Tabs
+// - - - - - - - - - - - - - - -
+
+// $tabstrip-background: transparent;
+
+// $tab-title-background: $gray-light;
+// $tab-title-background-hover: smartscale($tab-title-background, 5%);
+// $tab-title-background-active: smartscale($tab-title-background, 3%);
+// $tab-title-color: isitlight($tab-title-background);
+// $tab-title-color-active: $tab-title-color;
+
+// $tab-title-padding: $global-padding;
+// $tab-content-padding: $global-padding;
+
+// 25. Title Bar
+// - - - - - - - - - - - - - - -
+
+// $titlebar-center-width: 50%;
+// $titlebar-side-width: (100% - $titlebar-center-width) / 2;
+// $titlebar-background: #eee;
+// $titlebar-color: #000;
+// $titlebar-border: 1px solid #ccc;
+// $titlebar-padding: $global-padding;
+// $titlebar-item-classes: (
+// center: 'center',
+// left: 'left',
+// right: 'right',
+// title: 'title',
+// );
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_accordion.scss b/afb-client/bower_components/foundation-apps/scss/components/_accordion.scss
new file mode 100644
index 0000000..d330f47
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_accordion.scss
@@ -0,0 +1,72 @@
+/*
+ ACCORDION
+ ---------
+
+ The trusy accordion allows you to create a series of vertical tabs.
+*/
+
+/// @Foundation.settings
+// Accordion
+$accordion-border: 1px solid $gray-dark !default;
+
+$accordion-title-background: $gray-light !default;
+$accordion-title-background-hover: smartscale($accordion-title-background, 5%) !default;
+$accordion-title-background-active: smartscale($accordion-title-background, 3%) !default;
+$accordion-title-color: isitlight($accordion-title-background) !default;
+$accordion-title-color-active: isitlight($accordion-title-background) !default;
+
+$accordion-title-padding: $global-padding !default;
+$accordion-content-padding: $global-padding !default;
+///
+
+@mixin accordion-title(
+ $background: $accordion-title-background,
+ $background-hover: $accordion-title-background-hover,
+ $background-active: $accordion-title-background-active,
+ $color: $accordion-title-color,
+ $color-active: $accordion-title-color-active,
+ $padding: $accordion-title-padding
+) {
+ padding: $padding;
+ background: $background;
+ color: $color;
+ line-height: 1;
+ cursor: pointer;
+
+ &:hover {
+ background: $background-hover;
+ }
+
+ .is-active > & {
+ background: $background-active;
+ color: $color-active;
+ }
+}
+
+@mixin accordion-content(
+ $padding: $accordion-content-padding
+) {
+ padding: $padding;
+
+ display: none;
+ .is-active > & {
+ display: block;
+ }
+}
+
+@include exports(accordion) {
+ .accordion {
+ @if hasvalue($accordion-border) {
+ border: $accordion-border;
+ }
+ }
+ .accordion-item {
+
+ }
+ .accordion-title {
+ @include accordion-title;
+ }
+ .accordion-content {
+ @include accordion-content;
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_action-sheet.scss b/afb-client/bower_components/foundation-apps/scss/components/_action-sheet.scss
new file mode 100644
index 0000000..28b945c
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_action-sheet.scss
@@ -0,0 +1,265 @@
+/*
+ ACTION SHEET
+ ------------
+
+ A dropdown menu that sticks to the bottom of the screen on small devices, and becomes a dropdown menu on larger devices.
+*/
+
+/// @Foundation.settings
+// Action Sheet
+$actionsheet-background: white !default;
+$actionsheet-border-color: #ccc !default;
+$actionsheet-animate: transform opacity !default;
+$actionsheet-animation-speed: 0.25s !default;
+$actionsheet-width: 300px !default;
+$actionsheet-radius: 4px !default;
+$actionsheet-shadow: 0 -3px 10px rgba(black, 0.25) !default;
+$actionsheet-padding: $global-padding !default;
+$actionsheet-tail-size: 10px !default;
+
+$actionsheet-popup-shadow: 0 0 10px rgba(black, 0.25) !default;
+
+$actionsheet-link-color: #000 !default;
+$actionsheet-link-background-hover: smartscale($actionsheet-background) !default;
+///
+
+/*
+ Styles for the list inside an action sheet.
+ Don't include this mixin if you want to build custom controls inside the sheet.
+*/
+@mixin action-sheet-menu(
+ $padding: $actionsheet-padding,
+ $color: $actionsheet-link-color,
+ $border-color: $actionsheet-border-color,
+ $background-hover: $actionsheet-link-background-hover
+) {
+ // Menu container
+ ul {
+ margin: -($padding);
+ margin-top: 0;
+ list-style-type: none;
+ user-select: none;
+
+ // If the menu has no content above it
+ &:first-child {
+ margin-top: -$padding;
+
+ li:first-child {
+ border-top: 0;
+ }
+ }
+
+ // Menu links
+ a {
+ display: block;
+ padding: $padding * 0.8;
+ line-height: 1;
+ color: $color;
+ border-top: 1px solid $border-color;
+
+ &:hover {
+ color: $color;
+ background: $background-hover;
+ }
+ }
+
+ .alert > a {
+ color: $alert-color;
+ }
+ .disabled > a {
+ pointer-events: none;
+ color: #999;
+ }
+ }
+}
+
+/*
+ Styles for the action sheet container. Action sheets pin to the top or bottom of the screen.
+*/
+@mixin action-sheet(
+ $position: bottom,
+ $shadow: $actionsheet-shadow,
+ $animate: $actionsheet-animate,
+ $animation-speed: $actionsheet-animation-speed,
+ $padding: $actionsheet-padding,
+ $background: $actionsheet-background
+) {
+ position: fixed;
+ left: 0;
+ z-index: 1000;
+ width: 100%;
+ padding: $padding;
+ background: $background;
+ text-align: center;
+ transition-property: $animate;
+ transition-duration: $animation-speed;
+ transition-timing-function: ease-out;
+
+ @if hasvalue($shadow) {
+ box-shadow: $shadow;
+ }
+
+ // Positions
+ @if $position == bottom {
+ bottom: 0;
+ transform: translateY(100%);
+
+ &.is-active {
+ transform: translateY(0%);
+ }
+ }
+ // These two don't quite work as planned yet
+ @else if $position == top {
+ top: 0;
+ transform: translateY(-100%);
+
+ &.is-active {
+ transform: translateY(0%);
+ }
+ }
+}
+
+@mixin popup-menu(
+ $position: bottom,
+ $background: $actionsheet-background,
+ $width: $actionsheet-width,
+ $radius: $actionsheet-radius,
+ $shadow: $actionsheet-popup-shadow,
+ $tail-size: $actionsheet-tail-size
+) {
+ /*
+ Core styles
+ */
+ position: absolute;
+ left: 50%;
+ width: $width;
+ border-radius: $radius;
+ opacity: 0;
+ pointer-events: none;
+
+ /*
+ Menu shadow
+ */
+ @if hasvalue($shadow) {
+ box-shadow: $shadow;
+ }
+
+ /*
+ Active state
+ */
+ &.is-active {
+ opacity: 1;
+ pointer-events: auto;
+ }
+
+ /*
+ Menu tail
+ */
+ &::before, &::after {
+ content: '';
+ position: absolute;
+ left: 50%;
+ display: block;
+ width: 0px;
+ height: 0px;
+ border-left: $tail-size solid transparent;
+ border-right: $tail-size solid transparent;
+ margin-left: -($tail-size);
+ }
+
+ /*
+ Positioning
+ */
+ @if $position == bottom {
+ top: auto;
+ bottom: 0;
+ transform: translateX(-50%) translateY(110%);
+ &.is-active {
+ transform: translateX(-50%) translateY(100%);
+ }
+
+ &::before, &::after {
+ top: -($tail-size);
+ bottom: auto;
+ border-top: 0;
+ border-bottom: $tail-size solid $background;
+ }
+ &::before {
+ top: -($tail-size + 2);
+ border-bottom-color: rgba(black, 0.15);
+ }
+
+ }
+ @else if $position == top {
+ top: 0;
+ bottom: auto;
+ transform: translateX(-50%) translateY(-120%);
+ &.is-active {
+ transform: translateX(-50%) translateY(-110%);
+ }
+
+ &::before, &::after {
+ top: auto;
+ bottom: -($tail-size);
+ border-top: $tail-size solid $background;
+ border-bottom: 0;
+ }
+ &::before {
+ bottom: -($tail-size + 2);
+ border-top-color: rgba(black, 0.15);
+ }
+ }
+}
+
+@include exports(action-sheet) {
+ .action-sheet-container {
+ position: relative;
+ display: inline-block;
+
+ .button {
+ margin-left: 0;
+ margin-right: 0;
+ }
+ }
+ .action-sheet {
+ @include action-sheet;
+ @include action-sheet-menu;
+
+ @include breakpoint(medium) {
+ @include popup-menu;
+
+ &.top {
+ @include popup-menu(top);
+ }
+ }
+
+ &.primary {
+ background: $primary-color;
+ color: isitlight($primary-color);
+ border: 0;
+ &::before { display: none; }
+ &::before, &::after { border-top-color: $primary-color; }
+ &.top::before, &.top::after { border-bottom-color: $primary-color; }
+
+ @include action-sheet-menu(
+ $color: isitlight($primary-color),
+ $border-color: smartscale($primary-color, 10%),
+ $background-hover: smartscale($primary-color)
+ );
+ }
+ &.dark {
+ background: $dark-color;
+ color: isitlight($dark-color);
+ border: 0;
+ &::before { display: none; }
+ &::before, &::after { border-top-color: $dark-color; }
+ &.top::before, &.top::after { border-bottom-color: $dark-color; }
+
+ @include action-sheet-menu(
+ $color: isitlight($dark-color),
+ $border-color: smartscale($dark-color, 10%),
+ $background-hover: smartscale($dark-color)
+ );
+ }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_block-list.scss b/afb-client/bower_components/foundation-apps/scss/components/_block-list.scss
new file mode 100644
index 0000000..5b1cbe4
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_block-list.scss
@@ -0,0 +1,350 @@
+/*
+ BLOCK LIST
+ ----------
+
+ A generic list component that can accomodate a variety of styles and controls.
+
+ Features:
+ - Icons
+ - Labels
+ - Chevrons
+ - Text fields
+ - Dropdown menus
+ - Checkbox/radio inputs
+*/
+
+/// @Foundation.settings
+// Block List
+$blocklist-background: #fff !default;
+$blocklist-fullbleed: true !default;
+$blocklist-fontsize: 1rem !default;
+
+$blocklist-item-padding: 0.8rem 1rem !default;
+$blocklist-item-color: isitlight($blocklist-background, #000, #fff) !default;
+$blocklist-item-background-hover: smartscale($blocklist-background, 4.5%) !default;
+$blocklist-item-color-disabled: #999 !default;
+$blocklist-item-border: 1px solid smartscale($blocklist-background, 18.5%) !default;
+
+$blocklist-item-label-color: scale-color($blocklist-item-color, $lightness: 60%) !default;
+$blocklist-item-icon-size: 0.8 !default;
+
+$blocklist-header-fontsize: 0.8em !default;
+$blocklist-header-color: smartscale($blocklist-item-color, 40%) !default;
+$blocklist-header-uppercase: true;
+
+$blocklist-check-icons: true !default;
+///
+
+/*
+ Adds styles for a block list container.
+
+ $font-size: global font size for the list.
+ $full-bleed: when "true", the margins of the list invert to line it up with the edge of a padded element.
+*/
+%block-list-container {
+ margin-bottom: 1rem;
+ line-height: 1;
+ user-select: none;
+
+ &, ul {
+ list-style-type: none;
+ }
+ ul {
+ margin-left: 0;
+ }
+}
+@mixin block-list-container(
+ $font-size: $blocklist-fontsize,
+ $full-bleed: $blocklist-fullbleed
+) {
+ @extend %block-list-container;
+ font-size: $font-size;
+
+ @if $full-bleed {
+ margin-left: -$global-padding;
+ margin-right: -$global-padding;
+ }
+}
+
+/*
+ Styles block list headers on the selector you include this mixin in (normally a <header>).
+
+ $color - color of the header.
+ $font-size - font size of the header.
+ $offset - left margin to add to the header, to line it up with the list items.
+*/
+@mixin block-list-header(
+ $color: $blocklist-header-color,
+ $font-size: $blocklist-header-fontsize,
+ $uppercase: $blocklist-header-uppercase,
+ $offset: get-side($blocklist-item-padding, left)
+) {
+ margin-top: 1em;
+ color: $color;
+ font-weight: bold;
+ margin-bottom: 0.5em;
+ margin-left: $offset;
+ font-size: $font-size;
+ cursor: default;
+ @if $uppercase { text-transform: uppercase; }
+}
+
+/*
+ Styles block list items on the selector you include this mixin in (normally an <li>).
+
+ $color - color of items.
+ $color-hover - color of items on hover.
+ $background - background of items.
+ $background-hover - background of items on hover.
+ $border - border between items.
+ $padding - padding on items.
+*/
+@mixin block-list-item(
+ $color: $blocklist-item-color,
+ $color-hover: $blocklist-item-color,
+ $color-disabled: $blocklist-item-color-disabled,
+ $background: transparent,
+ $background-hover: $blocklist-item-background-hover,
+ $border: $blocklist-item-border,
+ $padding: $blocklist-item-padding
+) {
+ position: relative;
+
+ @if hasvalue($border) {
+ border-bottom: $border;
+ &:first-child {
+ border-top: $border;
+ }
+ }
+
+ // Inner elements share the same basic styles
+ > a, > span, > label {
+ display: block;
+ padding: $padding;
+ padding-left: get-side($padding, left);
+ color: $color;
+ line-height: 1;
+ }
+ > span {
+ cursor: default;
+ }
+ > a, > label {
+ cursor: pointer;
+
+ &:hover {
+ color: $color-hover;
+ }
+ }
+ > a, > label, select {
+ &:hover {
+ background: $background-hover;
+ }
+ }
+
+ // Coloring classes
+ &.caution > a {
+ &, &:hover { color: $alert-color; }
+ }
+ &.disabled > a {
+ cursor: default;
+ &, &:hover { color: $color-disabled; }
+ &:hover { background: transparent; }
+ }
+}
+
+/*
+ Adds label styles to the class you include this mixin in.
+
+ $color - color of the label.
+ $left-class - extra class to flip the orientation of the label.
+ $left-padding - left padding to use for left-hand labels.
+*/
+@mixin block-list-label(
+ $color: $blocklist-item-label-color,
+ $left-class: 'left',
+ $left-padding: get-side($blocklist-item-padding, top)
+) {
+ display: inline-block;
+ float: right;
+ padding: 0;
+ color: $color;
+ pointer-events: none;
+
+ &.#{$left-class} {
+ margin-left: $left-padding;
+ float: none;
+ }
+}
+
+/*
+ Adds support for chevrons, which appear on the right-hand side of the item.
+
+ $color - color of the chevron.
+ $padding - include the global padding of block list items here.
+*/
+@mixin block-list-chevron(
+ $color: $blocklist-header-color,
+ $padding: $blocklist-item-padding,
+ $label-class: 'block-list-label'
+) {
+ // Chevrons are a pseudo-element
+ &::after {
+ content: '\203A';
+ display: block;
+ position: absolute;
+ right: get-side($padding, right);
+ top: 50%;
+ transform: translateY(-50%);
+ font-weight: bold;
+ color: $color;
+ font-size: 2em;
+ }
+
+ // Labels next to links move over to make room for the chevron
+ // TODO: this selector needs to be customiable, but adding a setting just for it might be weird
+ .#{$label-class} {
+ padding-right: get-side($padding, right) * 1.5;
+ }
+}
+
+/*
+ Adds icon styles. Call this mixin on a block list container.
+
+ $size - size of the icon as a percentage (decimal) of the list item's height.
+ $item-selector - overrides the 'li' selector used for list items.
+*/
+@mixin block-list-icons(
+ $size: $blocklist-item-icon-size,
+ $item-selector: 'li'
+) {
+ // PH - need a better solution
+ $item-height:
+ $blocklist-fontsize
+ + get-side($blocklist-item-padding, top)
+ + get-side($blocklist-item-padding, top);
+
+ $icon-height: $item-height * $blocklist-item-icon-size;
+ $icon-offset: ($item-height - $icon-height) / 2;
+
+ #{$item-selector} {
+ > a, > span, > label {
+ padding-left: (get-side($blocklist-item-padding, left) * 2) + $blocklist-item-icon-size;
+ }
+ img, .iconic {
+ position: absolute;
+ top: $icon-offset;
+ left: $icon-offset;
+ width: $icon-height;
+ height: $icon-height;
+ border-radius: 8px;
+ pointer-events: none;
+ }
+ }
+}
+
+/*
+ Adds support for text fields, select menus, and checkbox/radio groups in block lists.
+
+ $color - color of select menu arrow.
+ $background-hover - color of select menu when hovered over.
+ $padding - include the global padding of block list items here.
+ $dropdown-class - class to use for list items that contain a dropdown.
+ $switch-class - class to use for switches inside list items.
+*/
+@mixin block-list-inputs(
+ $color: $blocklist-item-color,
+ $background: $blocklist-background,
+ $background-hover: $blocklist-item-background-hover,
+ $padding: $blocklist-item-padding,
+ $icons: $blocklist-check-icons,
+ $dropdown-class: 'with-dropdown',
+ $switch-class: 'switch'
+) {
+ // Text fields
+ #{$text-input-selectors} {
+ margin: 0;
+ border: 0;
+ line-height: 1;
+ height: auto;
+ padding: $padding;
+ color: inherit;
+
+ &:hover, &:focus {
+ border: 0;
+ }
+ }
+
+ // Multiple select
+ li > input[type="checkbox"], li > input[type="radio"] {
+ position: absolute;
+ left: -9999px;
+
+ & + label {
+ display: block;
+ font-size: $blocklist-fontsize;
+ margin: 0;
+ }
+
+ @if $icons == true {
+ &:checked + label {
+ &::before {
+ @include image-checkmark($color);
+ content: '';
+ background-size: 100% 100%;
+ width: 1.5em;
+ height: 1.5em;
+ color: $primary-color;
+ float: right;
+ pointer-events: none;
+ margin-top: -0.25em;
+ }
+ }
+ }
+ }
+
+ // Dropdowns
+ .#{$dropdown-class} {
+ color: inherit;
+
+ select {
+ // Reset pesky <select> styles
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ outline: 0;
+ background: 0;
+ border: 0;
+ height: auto;
+ padding: $padding;
+ margin: 0;
+ font-size: 1em; // Same size as its parent
+ line-height: 1;
+ color: inherit;
+ background-color: transparent;
+ }
+ }
+
+ // Switches
+ .#{$switch-class} {
+ position: absolute;
+ top: 50%;
+ right: get-side($padding, right);
+ transform: translateY(-50%);
+ }
+}
+
+@include exports(block-list) {
+ .block-list {
+ @include block-list-container;
+ @include block-list-inputs;
+
+ &.with-icons { @include block-list-icons; }
+ header { @include block-list-header; }
+
+ li {
+ @include block-list-item;
+
+ &.with-chevron { @include block-list-chevron; }
+ .block-list-label { @include block-list-label; }
+ }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_button-group.scss b/afb-client/bower_components/foundation-apps/scss/components/_button-group.scss
new file mode 100644
index 0000000..8505c84
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_button-group.scss
@@ -0,0 +1,197 @@
+/// @Foundation.settings
+// Button Group
+$btngroup-background: $primary-color !default;
+$btngroup-color: #fff !default;
+$btngroup-radius: $button-radius !default;
+///
+
+$child-selectors: '> a, > label, > button';
+
+%button-group {
+ margin: 0;
+ margin-bottom: 1rem;
+ list-style-type: none;
+ display: inline-flex;
+ border-radius: $btngroup-radius;
+ overflow: hidden;
+ font-size: $button-font-size;
+
+ > li {
+ flex: 0 0 auto;
+
+ // Links become buttons
+ #{$child-selectors} {
+ @extend %button;
+ border-radius: 0;
+ font-size: inherit;
+ display: block;
+ margin: 0;
+ }
+ > input + label {
+ margin-left: 0;
+ }
+ // Add borders between items
+ &:not(:last-child) {
+ #{$child-selectors} {
+ border-right: 1px solid scale-color($btngroup-background, $lightness: -25%);
+ }
+ }
+ }
+
+ @if using(iconic) {
+ .iconic {
+ width: 1em;
+ height: 1em;
+ vertical-align: middle;
+ margin-right: 0.25em;
+ margin-top: -2px; // The icons are oddly misaligned
+ }
+ }
+}
+
+%button-group-segmented {
+ border: 1px solid $primary-color;
+ transition-property: background color;
+
+ > li {
+ // Hide the radio button
+ > input[type="radio"] {
+ position: absolute;
+ left: -9999px;
+ }
+ // This is the button
+ #{$child-selectors} {
+ margin-right: 0;
+ background: transparent;
+ }
+ }
+}
+
+@mixin button-group-size($size: medium, $expand: false) {
+ $size: $button-font-size * map-get($button-sizes, $size);
+ font-size: $size;
+
+ @if $expand {
+ @include button-group-expand;
+ }
+}
+@mixin button-group-expand($stretch: true) {
+ display: if($stretch, flex, inline-flex);
+
+ > li {
+ flex: if($stretch, 1, 0 0 auto);
+
+ #{$child-selectors} {
+ @if $stretch { @include button-expand; }
+ }
+ }
+}
+@mixin button-group-style(
+ $segmented: false,
+ $background: $primary-color,
+ $color: auto
+) {
+
+ @if not($segmented) {
+ > li {
+ #{$child-selectors} {
+ @include button-style($background, auto, $color);
+ border-color: scale-color($background, $lightness: -15%);
+ }
+ &.is-active {
+ #{$child-selectors} {
+ background: scale-color($background, $lightness: -15%);
+ }
+ }
+ }
+ }
+ @else {
+ @extend %button-group-segmented;
+ $hover-color: rgba($background, 0.25);
+ border-color: $background;
+
+ > li {
+ // This is the button
+ #{$child-selectors} {
+ border-color: $background;
+ color: $background;
+
+ // This is the button being hovered on
+ &:hover {
+ background: $hover-color;
+ color: $background;
+ }
+
+ @if using(iconic) {
+ .iconic { @include color-icon($background); }
+ }
+ }
+
+ // This is the button when it's active
+ &.is-active > a,
+ > input:checked + label {
+ &, &:hover {
+ background: $background;
+ color: isitlight($background);
+ }
+
+ @if using(iconic) {
+ .iconic { @include color-icon(isitlight($background)); }
+ }
+ }
+ }
+ }
+}
+
+@mixin button-group(
+ $segmented: false,
+ $expand: false,
+ $background: $primary-color,
+ $color: #fff
+) {
+ @extend %button-group;
+ @include button-group-expand($expand);
+ @include button-group-style($segmented, $background, $color);
+ border-radius: $btngroup-radius;
+}
+
+@include exports(button-group) {
+ .button-group {
+ @include button-group;
+
+ // Colors
+ &.secondary { @include button-group-style(false, $secondary-color); }
+ &.success { @include button-group-style(false, $success-color); }
+ &.warning { @include button-group-style(false, $warning-color); }
+ &.alert { @include button-group-style(false, $alert-color); }
+
+ // Individual colors
+ > li {
+ &.secondary { #{$child-selectors} { @include button-style($secondary-color, auto, $btngroup: true); } }
+ &.success { #{$child-selectors} { @include button-style($success-color, auto, $btngroup: true); } }
+ &.warning { #{$child-selectors} { @include button-style($warning-color, auto, $btngroup: true); } }
+ &.alert { #{$child-selectors} { @include button-style($alert-color, auto, $btngroup: true); } }
+ }
+
+ // Segmented
+ &.segmented { @include button-group-style(true);
+ &.secondary { @include button-group-style(true, $secondary-color); }
+ &.success { @include button-group-style(true, $success-color); }
+ &.warning { @include button-group-style(true, $warning-color); }
+ &.alert { @include button-group-style(true, $alert-color); }
+ }
+
+ // Sizing
+ &.tiny { @include button-group-size(tiny); }
+ &.small { @include button-group-size(small); }
+ &.large { @include button-group-size(large); }
+ &.expand { @include button-group-expand; }
+
+ // Disabled
+ li.disabled {
+ #{$child-selectors} {
+ @include button-disabled;
+ }
+ }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_button.scss b/afb-client/bower_components/foundation-apps/scss/components/_button.scss
new file mode 100644
index 0000000..6e22b19
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_button.scss
@@ -0,0 +1,205 @@
+/// @Foundation.settings
+// Button
+$button-padding: 0.85em 1em !default;
+$button-margin: 0 $global-padding $global-padding 0 !default;
+$button-style: solid !default;
+$button-background: $primary-color !default;
+$button-background-hover: scale-color($button-background, $lightness: -15%) !default;
+$button-color: auto !default;
+$button-radius: 0 !default;
+$button-sizes: (
+ tiny: 0.7,
+ small: 0.8,
+ medium: 1,
+ large: 1.3,
+) !default;
+$button-font-size: 0.9rem !default;
+$button-opacity-disabled: 0.5 !default;
+$button-tag-selector: false !default;
+///
+
+%button {
+ display: inline-block;
+ border: 0;
+ text-align: center;
+ line-height: 1;
+ cursor: pointer;
+ -webkit-appearance: none;
+ -webkit-font-smoothing: antialiased;
+ transition: background 0.25s ease-out;
+ vertical-align: middle;
+
+ padding: $button-padding;
+ margin: $button-margin;
+ font-size: $button-font-size;
+ border-radius: $button-radius;
+
+ // Dropdown arrow
+ // TODO: Change to class and mixin because now the toggle is 'fa-open' which is too generic
+ // &[data-popup-toggle] {
+ // position: relative;
+ // padding-right: 2em; // Placeholder
+
+ // &::after {
+ // @include css-triangle(6px, black, top);
+ // position: absolute;
+ // right: 0.7em;
+ // top: 50%;
+ // margin-top: -3px;
+ // }
+ // }
+}
+
+@mixin button-size($size: medium, $expand: false) {
+ $size: $button-font-size * map-get($button-sizes, $size);
+ font-size: $size;
+
+ @if $expand {
+ @include button-expand;
+ }
+
+ @if using(iconic) {
+ .iconic {
+ width: 1em;
+ height: 1em;
+ vertical-align: middle;
+ margin-right: 0.25em;
+ margin-top: -2px; // The icons are oddly misaligned
+ }
+ }
+}
+
+@mixin button-expand($expand: true) {
+ @if $expand {
+ display: block;
+ width: 100%;
+ margin-left: 0;
+ margin-right: 0;
+ }
+ @else {
+ display: inline-block;
+ width: auto;
+ margin: $button-margin;
+ }
+}
+
+@mixin button-style(
+ $background: $button-background,
+ $background-hover: $button-background-hover,
+ $color: $button-color,
+ $style: $button-style,
+ $radius: $button-radius,
+ $btngroup: false
+){
+ @if $style == hollow {
+ border: 1px solid $background;
+ background: transparent;
+ color: $background;
+
+ &:hover, &:focus {
+ border-color: scale-color($background, $lightness: 25%);
+ background: transparent;
+ color: scale-color($background, $lightness: 25%);
+ }
+ }
+ // Solid is the default
+ @else {
+ @if $color == auto {
+ $color: isitlight($background);
+ }
+
+ background: $background;
+ color: $color;
+
+ &:hover, &:focus {
+ @if $background-hover == auto {
+ background: scale-color($background, $lightness: -15%);
+ }
+ @else {
+ background: $background-hover;
+ }
+ color: $color;
+ }
+ }
+
+ @if $btngroup {
+ border-color: $background;
+ &:hover, &:focus {
+ border-color: scale-color($background, $lightness: -25%);
+ }
+ }
+
+ @if using(iconic) {
+ @if $style == hollow {
+ .iconic {
+ @include color-icon($background);
+ }
+ &:hover .iconic {
+ @include color-icon(scale-color($background, $lightness: 25%));
+ }
+ }
+ @else {
+ .iconic {
+ @include color-icon($color);
+ }
+ }
+ }
+}
+
+@mixin button-disabled() {
+ opacity: $button-opacity-disabled;
+ cursor: default;
+ pointer-events: none;
+}
+
+@mixin button(
+ $size: medium,
+ $expand: false,
+ $background: $button-background,
+ $background-hover: $button-background-hover,
+ $color: $button-color,
+ $style: $button-style,
+ $radius: $button-radius
+) {
+ @extend %button;
+ @include button-size($size);
+ @include button-expand($expand);
+ @include button-style($background, $background-hover, $color, $style);
+}
+
+@include exports(button) {
+ .button {
+ @include button;
+
+ &.tiny { @include button-size(tiny); }
+ &.small { @include button-size(small); }
+ &.large { @include button-size(large); }
+ &.expand { @include button-expand; }
+
+ &.secondary { @include button-style($secondary-color, auto) }
+ &.success { @include button-style($success-color, auto) }
+ &.warning { @include button-style($warning-color, auto) }
+ &.alert { @include button-style($alert-color, auto) }
+ &.info { @include button-style($info-color, auto) }
+ &.dark { @include button-style($dark-color, auto) }
+
+ @if $button-style != hollow {
+ &.hollow { @include button-style($style: hollow);
+ &.secondary { @include button-style($secondary-color, $style: hollow); }
+ &.success { @include button-style($success-color, $style: hollow); }
+ &.warning { @include button-style($warning-color, $style: hollow); }
+ &.alert { @include button-style($alert-color, $style: hollow); }
+ &.info { @include button-style($info-color, $style: hollow); }
+ &.dark { @include button-style($dark-color, $style: hollow); }
+ }
+ }
+
+ &.disabled { @include button-disabled; }
+ }
+
+ @if $button-tag-selector {
+ button {
+ @extend .button;
+ }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_card.scss b/afb-client/bower_components/foundation-apps/scss/components/_card.scss
new file mode 100644
index 0000000..680a755
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_card.scss
@@ -0,0 +1,93 @@
+/*
+ Cards
+
+ Structure:
+
+ titles
+ lists
+*/
+
+/// @Foundation.settings
+// Card
+$card-background: #fff !default;
+$card-color: isitlight($card-background) !default;
+$card-border: 1px solid smartscale($card-background, 7%) !default;
+$card-radius: $global-radius !default;
+$card-shadow: 0 1px 2px rgba(#000, 0.2) !default;
+$card-padding: $global-padding !default;
+$card-margin: 0.5rem !default;
+
+$card-divider-background: smartscale($card-background, 7%) !default;
+///
+
+@mixin card-container(
+ $background: $card-background,
+ $color: $card-color,
+ $border: $card-border,
+ $radius: $card-radius,
+ $shadow: $card-shadow,
+ $padding: $card-padding,
+ $margin: $card-margin
+) {
+ border: $border;
+ margin-bottom: $margin;
+ background: $background;
+ color: $color;
+ border-radius: $radius;
+ box-shadow: $shadow;
+ overflow: hidden;
+
+ h1, h2, h3, h4, h5, h6 {
+ color: inherit;
+ }
+
+ ul {
+ margin-bottom: 0;
+ }
+
+ img {
+ width: 100%;
+ }
+}
+
+@mixin card-divider(
+ $background: $card-divider-background,
+ $padding: $card-padding
+) {
+ background: $background;
+ padding: $padding;
+}
+
+@mixin card-section(
+ $padding: $card-padding
+) {
+ padding: $padding;
+}
+
+@include exports(card) {
+ .card {
+ @include card-container;
+
+ @each $color in map-keys($foundation-colors) {
+ &.#{$color} {
+ $color-value: map-get($foundation-colors, $color);
+ @include card-container(
+ $background: $color-value,
+ $color: isitlight($color-value),
+ $border: 0
+ );
+ .card-divider {
+ @include card-divider(
+ $background: smartscale($color-value, 7%)
+ );
+ }
+ }
+ }
+ }
+ .card-divider {
+ @include card-divider;
+ }
+ .card-section {
+ @include card-section;
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_extras.scss b/afb-client/bower_components/foundation-apps/scss/components/_extras.scss
new file mode 100644
index 0000000..1e2443a
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_extras.scss
@@ -0,0 +1,54 @@
+/*
+ Odds and ends.
+*/
+
+/// @Foundation.settings
+// Extras
+$closebutton-position: (top right) !default;
+$closebutton-size: 2em !default;
+$closebutton-lineheight: 0.5 !default;
+$closebutton-color: #999 !default;
+$closebutton-color-hover: #333 !default;
+
+$thumbnail-padding: 0.5rem !default;
+$thumbnail-shadow: 0 3px 15px rgba(black, 0.25) !default;
+///
+
+// A basic close button. They pin to the corner of the thing they're inside.
+%close-button {
+ $x: nth($closebutton-position, 1);
+ $y: nth($closebutton-position, 2);
+
+ position: absolute;
+ color: $closebutton-color;
+ #{$x}: $global-padding;
+ #{$y}: $global-padding;
+ font-size: $closebutton-size;
+ line-height: $closebutton-lineheight;
+ cursor: pointer;
+
+ &:hover {
+ color: $closebutton-color-hover;
+ }
+}
+
+// Make your images fancy-like.
+%thumbnail {
+ padding: $thumbnail-padding;
+ box-shadow: $thumbnail-shadow;
+}
+
+@include exports(extras) {
+ .close-button {
+ @extend %close-button;
+ }
+ .thumbnail {
+ @extend %thumbnail;
+ }
+ ul.thumbnails > li {
+ margin-bottom: 1rem;
+
+ a { display: block; }
+ img { @extend %thumbnail; }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_forms.scss b/afb-client/bower_components/foundation-apps/scss/components/_forms.scss
new file mode 100755
index 0000000..7d0376b
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_forms.scss
@@ -0,0 +1,458 @@
+/*
+ FORMS
+ -----
+
+ Our form styles include basic resets for text fields, select menus, and so on, along with some of our own custom components.
+
+ Includes:
+ - Text fields
+ - Text areas
+ - Select menus
+ - Checkboxes and radio buttons
+ - Range slider
+ - Progress bars and meters
+*/
+
+/// @Foundation.settings
+// Forms
+// Basic form variables
+$form-fontsize: 1rem !default;
+$form-padding: 0.5rem !default;
+
+// Text fields
+$input-color: #000 !default;
+$input-color-hover: $input-color !default;
+$input-color-focus: $input-color !default;
+$input-background: #fff !default;
+$input-background-hover: $input-background !default;
+$input-background-focus: $input-background !default;
+$input-background-disabled: smartscale($input-background) !default;
+$input-border: 1px solid #ccc !default;
+$input-border-hover: 1px solid #bbb !default;
+$input-border-focus: 1px solid #999 !default;
+$input-cursor-disabled: not-allowed !default;
+
+// Select menus
+$select-color: #000 !default;
+$select-background: #fafafa !default;
+$select-background-hover: smartscale($select-background, 4%) !default;
+$select-arrow: true !default;
+$select-arrow-color: $select-color !default;
+
+// Labels
+$form-label-fontsize: 0.9rem !default;
+$form-label-margin: 0.5rem !default;
+$form-label-color: #333 !default;
+
+// Inline labels
+$inlinelabel-color: #333 !default;
+$inlinelabel-background: #eee !default;
+$inlinelabel-border: $input-border !default;
+
+// Range slider
+$slider-background: #ddd !default;
+$slider-height: 1rem !default;
+$slider-radius: 0px !default;
+$slider-thumb-height: 1.5rem !default;
+$slider-thumb-color: $primary-color !default;
+$slider-thumb-radius: 0px !default;
+
+// Progress and meter
+$meter-height: 1.5rem !default;
+$meter-background: #ccc !default;
+$meter-fill: $primary-color !default;
+$meter-fill-high: $success-color !default;
+$meter-fill-medium: #e7cf00 !default;
+$meter-fill-low: $alert-color !default;
+$meter-radius: 0 !default;
+///
+
+// Disable OS-level styles
+@mixin no-appearance {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+}
+
+// Text fields
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+#{$text-input-selectors} {
+ $top-padding: get-side($form-padding, top);
+ $bottom-padding: get-side($form-padding, bottom);
+ $height: ($form-fontsize * 1.4) + $top-padding + $bottom-padding;
+
+ @include no-appearance;
+ display: block;
+ width: 100%;
+ height: $height;
+ padding: $form-padding;
+ margin: 0 0 $global-padding 0;
+ border: $input-border;
+ border-radius: 0;
+ background: $input-background;
+ color: $input-color;
+ font-size: $form-fontsize;
+ -webkit-font-smoothing: antialiased;
+ vertical-align: middle;
+
+ &:hover {
+ border: $input-border-hover;
+ background: $input-background-hover;
+ color: $input-color-hover;
+ }
+ &:focus {
+ outline: 0;
+ border: $input-border-focus;
+ background: $input-background-focus;
+ color: $input-color-focus;
+ }
+
+ label > & {
+ margin-top: $form-label-margin;
+ }
+}
+
+// Override the content-box declaration set by Normalize
+input[type="search"] {
+ box-sizing: border-box;
+}
+
+// Disabled state
+input {
+ &.disabled,
+ &[disabled],
+ &[readonly],
+ fieldset[disabled] & {
+ cursor: $input-cursor-disabled;
+
+ &, &:hover {
+ background-color: $input-background-disabled;
+ }
+ }
+}
+
+// Labels
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+label {
+ display: block;
+ font-size: $form-label-fontsize;
+ margin-bottom: $form-label-margin;
+ color: $form-label-color;
+
+ > input, > textarea {
+ margin-top: $form-label-margin;
+ }
+}
+
+// Checkbox/radio buttons
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+input[type="checkbox"], input[type="radio"] {
+ width: 1rem;
+ height: 1rem;
+
+ // Input inside of a label
+ label > & {
+ margin-right: $form-padding * 0.5;
+ }
+
+ // Input next to a label
+ & + label {
+ display: inline-block;
+ margin-left: $form-padding;
+ margin-right: $form-padding * 2;
+ margin-bottom: 0;
+ vertical-align: baseline;
+ }
+}
+
+// Inline labels
+// Inline labels allow you to prefix or postfix special labels to inputs
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+.inline-label {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: stretch;
+ margin-bottom: $global-padding;
+
+ // Imitates the top margin on normal inputs
+ label > & {
+ margin-top: $form-label-margin;
+ }
+
+ // Inputs stretch all the way out
+ > input, > select {
+ flex: 1;
+ margin: 0;
+ }
+
+ // Inline labels and buttons shrink
+ > .form-label {
+ flex: 0 0 auto;
+ background: $inlinelabel-background;
+ color: $inlinelabel-color;
+ border: $inlinelabel-border;
+ padding: 0 $form-padding;
+ display: flex;
+ align-items: center;
+
+ &:first-child { border-right: 0; }
+ &:last-child { border-left: 0; }
+ }
+ // Buttons also shrink
+ > a,
+ > button,
+ > input[type="button"],
+ > input[type="submit"] {
+ flex: 0 0 auto;
+ display: flex;
+ align-items: center;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin: 0;
+ border-radius: 0;
+ }
+}
+
+// Text areas
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+textarea {
+ height: auto;
+ width: 100%;
+ min-height: 50px;
+}
+
+// Select menus
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+select {
+ $top-padding: get-side($form-padding, top);
+ $bottom-padding: get-side($form-padding, bottom);
+ $height: ($form-fontsize * 1.4) + $top-padding + $bottom-padding;
+ $color: isitlight($select-background);
+
+ @include no-appearance;
+ display: block;
+ width: 100%;
+ height: $height;
+ padding: $form-padding;
+ margin: 0 0 $global-padding 0;
+ font-size: $form-fontsize;
+ color: $select-color;
+ border-radius: 0;
+ border: $input-border;
+
+ @if $select-arrow {
+ background: $select-background url(image-triangle($select-arrow-color)) right 10px center no-repeat;
+ background-size: 8px 8px;
+ padding-right: rem-calc(18px) + $form-padding;
+ }
+ @else {
+ background-color: $select-background
+ }
+
+ &:hover {
+ background-color: $select-background-hover;
+ }
+
+ &:focus {
+ outline: 0;
+ }
+
+ // Remove the dropdown arrow added in IE10/11
+ &::-ms-expand {
+ display: none;
+ }
+}
+
+// Range slider
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+input[type="range"] {
+ $margin: ($slider-thumb-height - $slider-height) / 2;
+
+ @include no-appearance;
+ display: block;
+ width: 100%;
+ height: auto;
+ cursor: pointer;
+ margin-top: $margin;
+ margin-bottom: $margin;
+ border: 0;
+ line-height: 1;
+
+ @if hasvalue($slider-radius) {
+ border-radius: $slider-radius;
+ }
+
+ &:focus {
+ outline: 0;
+ }
+
+ // Chrome/Safari
+ &::-webkit-slider-runnable-track {
+ height: $slider-height;
+ background: $slider-background;
+ }
+ &::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ background: $slider-thumb-color;
+ width: $slider-thumb-height;
+ height: $slider-thumb-height;
+ margin-top: -$margin;
+ @if hasvalue($slider-thumb-radius) {
+ border-radius: $slider-thumb-radius;
+ }
+ }
+ // Firefox
+ &::-moz-range-track {
+ -moz-appearance: none;
+ height: $slider-height;
+ background: #ccc;
+ }
+ &::-moz-range-thumb {
+ -moz-appearance: none;
+ background: $slider-thumb-color;
+ width: $slider-thumb-height;
+ height: $slider-thumb-height;
+ margin-top: -$margin;
+ @if hasvalue($slider-thumb-radius) {
+ border-radius: $slider-thumb-radius;
+ }
+ }
+ // Internet Explorer
+ &::-ms-track {
+ height: $slider-height;
+ background: $slider-background;
+ color: transparent;
+ border: 0;
+ overflow: visible;
+ border-top: $margin solid $body-background;
+ border-bottom: $margin solid $body-background;
+ }
+ &::-ms-thumb {
+ background: $slider-thumb-color;
+ width: $slider-thumb-height;
+ height: $slider-thumb-height;
+ border: 0;
+ @if hasvalue($slider-thumb-radius) {
+ border-radius: $slider-thumb-radius;
+ }
+ }
+ &::-ms-fill-lower, &::-ms-fill-upper {
+ background: $slider-background;
+ }
+}
+output {
+ line-height: $slider-thumb-height;
+ vertical-align: middle;
+ margin-left: 0.5em;
+}
+
+// Number inputs
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+input[type="number"] {
+ &::-webkit-inner-spin-button {
+
+ }
+ &::-webkit-outer-spin-button {
+ -webkit-appearance: none;
+ background: $primary-color;
+ }
+}
+
+// Progress and meter
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+progress, meter {
+ @include no-appearance;
+ display: block;
+ width: 100%;
+ height: $meter-height;
+ margin-bottom: 1rem;
+
+ @if hasvalue($meter-radius) {
+ border-radius: $meter-radius;
+ }
+
+ // For Firefox
+ background: $meter-background;
+ border: 0;
+}
+
+progress {
+ &::-webkit-progress-bar {
+ background: $meter-background;
+ @if hasvalue($meter-radius) {
+ border-radius: $meter-radius;
+ }
+ }
+ &::-webkit-progress-value {
+ background: $meter-fill;
+ @if hasvalue($meter-radius) {
+ border-radius: $meter-radius;
+ }
+ }
+ &::-moz-progress-bar {
+ background: $meter-fill;
+ @if hasvalue($meter-radius) {
+ border-radius: $meter-radius;
+ }
+ }
+
+ @each $name, $color in (high: $meter-fill-high, medium: $meter-fill-medium, low: $meter-fill-low) {
+ &.#{$name} {
+ &::-webkit-progress-value {
+ background: $color;
+ }
+ &::-moz-progress-bar {
+ background: $color;
+ }
+ }
+ }
+}
+meter {
+ // Chrome/Safari
+ &::-webkit-meter-bar {
+ background: $meter-background;
+ @if hasvalue($meter-radius) {
+ border-radius: $meter-radius;
+ }
+ }
+ &::-webkit-meter-inner-element {
+ @if hasvalue($meter-radius) {
+ border-radius: $meter-radius;
+ }
+ }
+ &::-webkit-meter-optimum-value {
+ background: $meter-fill-high;
+ @if hasvalue($meter-radius) {
+ border-radius: $meter-radius;
+ }
+ }
+ &::-webkit-meter-suboptimum-value {
+ background: $meter-fill-medium;
+ @if hasvalue($meter-radius) {
+ border-radius: $meter-radius;
+ }
+ }
+ &::-webkit-meter-even-less-good-value {
+ background: $meter-fill-low;
+ @if hasvalue($meter-radius) {
+ border-radius: $meter-radius;
+ }
+ }
+
+ // Firefox
+ background: $meter-background;
+ &::-moz-meter-bar {
+ background: $primary-color;
+ @if hasvalue($meter-radius) {
+ border-radius: $meter-radius;
+ }
+ }
+ &:-moz-meter-optimum::-moz-meter-bar {
+ background: $meter-fill-high;
+ }
+ &:-moz-meter-sub-optimum::-moz-meter-bar {
+ background: $meter-fill-medium;
+ }
+ &:-moz-meter-sub-sub-optimum::-moz-meter-bar {
+ background: $meter-fill-low;
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_grid.scss b/afb-client/bower_components/foundation-apps/scss/components/_grid.scss
new file mode 100644
index 0000000..4a00fd6
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_grid.scss
@@ -0,0 +1,420 @@
+@import "panel";
+
+/*
+ THE GRID
+ --------
+
+ Foundation's magical, flexbox-powered grid.
+
+ Features:
+ - Horizontal or vertical grids
+ - Auto-sizing or percentage width grid blocks
+ - Independently-scrollable blocks
+ - Column alignment
+ - Source ordering
+ - Offsets
+*/
+
+/// @Foundation.settings
+// Grid
+$container-width: rem-calc(900) !default;
+$block-padding: $global-padding !default;
+$total-columns: 12 !default;
+$block-grid-max-size: 6 !default;
+///
+
+/*
+ Define the size of a grid block. Blocks are flex items. By default, they stretch to fill all available space, based on the size of sibling blocks. This is the "expand" behavior.
+
+ If set to "shrink", the block will contract and only fill as much space as it needs for its content.
+
+ If set to a number, the block will be given a percentage width, based on the total number of columns (12 by default). Percentage widths don't work if a block is inside a vertical grid.
+
+ @group grid
+
+ @param {number|string} $size - Sizing behavior of the block. Should be expand, shrink, or a number.
+
+ @output The flex-basis, flex-grow, and flex-shrink properties.
+*/
+@mixin grid-size($size: expand) {
+ @if (type-of($size) == 'number') {
+ $pct: percentage($size / $total-columns);
+ flex: 0 0 $pct;
+ // max-width prevents columns from wrapping early in IE10/11
+ max-width: $pct;
+ }
+ @else if ($size == shrink) {
+ flex: 0 0 auto;
+ }
+ @else if ($size == expand) {
+ flex: 1 1 auto;
+ }
+}
+/*
+ Set the orientation of blocks within this block. The grid is re-oriented by changing the flex direction of the block.
+
+ @group grid
+
+ @param {string} $orientation - Direction of the grid, either horizontal or vertical.
+
+ @output A flex-flow property to match the direction given.
+*/
+@mixin grid-orient($orientation: horizontal) {
+ @if ($orientation == vertical) {
+ flex-flow: column nowrap;
+ align-items: stretch;
+ }
+ @else {
+ flex-flow: row wrap;
+ }
+}
+/*
+ Stretch a grid's child blocks across its cross-axis, making every column appear to have the same height.
+
+ @group grid
+
+ @param {bool} $stretch - Stretch blocks if true, or align blocks to top if false.
+
+ @output Sets align-items to "stretch" if $stretch is true, or "flex-start" (the default value) if false.
+*/
+@mixin grid-wrap($wrap: true) {
+ @if $wrap {
+ flex-wrap: wrap;
+ align-items: flex-start;
+ }
+ @else {
+ flex-wrap: nowrap;
+ align-items: stretch;
+ }
+}
+/*
+ Set the alignment of blocks within a grid.
+
+ left: Items align to the left.
+ right: Items align to the right.
+ center: Items align to the center.
+ justify: Items are spaced equally apart so they occupy the space of the entire grid.
+ spaced: Items are given equal space to their left and right.
+
+ @group grid
+
+ @param {string} $align - Alignment to use.
+
+ @output An appropriate justify-content value.
+*/
+@mixin grid-align($align: left) {
+ $options: (
+ left: flex-start,
+ right: flex-end,
+ center: center,
+ justify: space-between,
+ spaced: space-around,
+ );
+ justify-content: map-get($options, $align);
+}
+/*
+ Set the source order of a block. Items with lower numbers appear first. If multiple items have the same number, the one in the HTML first will appear first.
+
+ @group grid
+
+ @param {number} $order - Position in source order.
+
+ @output An order property.
+*/
+@mixin grid-order($order: 0) {
+ order: $order;
+}
+/*
+ Collapse a content block by removing the padding.
+
+ @group grid
+
+ @param {bool} $collapse - Collapses the block if true.
+
+ @output A padding value.
+
+ @todo No way to reverse collapse using this mixin. Solution:
+ - If true, add padding: 0;
+ - If false, add padding: 1rem;
+ - If null, add nothing, to cut down on CSS output
+ - Make null the default value
+*/
+@mixin grid-collapse($collapse: true) {
+ @if ($collapse) {
+ padding: 0;
+ }
+}
+/*
+ Constrain the size of a block to the size of the average grid row, and center-align it. This imitates the behavior of ordinary Foundation rows.
+
+ @group grid
+
+ @param {bool} $container - Adds container styles if true.
+
+ @output A maximum width and the good old margin: 0 auto for center alignment.
+*/
+@mixin grid-container($width: $container-width, $align: center) {
+ $margins: (
+ left: 0 auto 0 0,
+ right: 0 0 0 auto,
+ center: 0 auto,
+ );
+ max-width: $width;
+ margin: map-get($margins, $align);
+}
+/*
+ Add negative margins to a block, equal to the padding of a content block. This aligns the edges of a block nested inside a content block.
+
+ @group grid
+
+ @param {bool} $nest - Adds negative margins if true.
+
+ @output Negative margin values.
+*/
+@mixin grid-nest($nest: true) {
+ @if ($nest) {
+ margin-left: -1rem;
+ margin-right: -1rem;
+ }
+}
+/*
+ Offset a block by adding a left margin.
+
+ @group grid
+
+ @param {number | bool} $offset - If false, nothing is output. If a number, offsets the column by the specified number of columns.
+
+ @output A left margin based on the number of columns specified, and the global number of columns.
+*/
+@mixin grid-offset($offset: false) {
+ @if ($offset != false) {
+ margin-left: percentage($offset / $total-columns);
+ }
+}
+
+/*
+ Resets styles set by panels. Use this when a panel transforms into a block on larger screens.
+
+ @group grid
+
+ @output Resets to transform, position, and a few visual styles.
+*/
+@mixin grid-panel-reset() {
+ transform: none;
+ position: relative;
+ width: auto;
+ height: auto;
+ z-index: auto;
+ box-shadow: none;
+ background: transparent;
+ top: auto;
+ right: auto;
+ bottom: auto;
+ left: auto;
+}
+
+/*
+ Frames are containers that stretch to the full dimmensions of the browser window.
+*/
+@mixin grid-frame($size: expand, $orientation: horizontal, $wrap: false, $align: left, $order: 0) {
+ display: flex;
+ height: 100vh;
+ position: relative;
+ overflow: hidden;
+ backface-visibility: hidden;
+
+ @include grid-size($size);
+ @include grid-orient($orientation);
+ @include grid-wrap($wrap);
+ @include grid-align($align);
+ @include grid-order($order);
+}
+
+/*
+ Groups are collections of content items. They're the "rows" of Foundation for Apps.
+*/
+@mixin grid-block($size: expand, $orientation: horizontal, $wrap: false, $align: left, $order: 0) {
+ @include grid-frame($size, $orientation, $wrap, $align, $order);
+
+ // Reset the height used by frames
+ height: auto;
+
+ // Blocks will scroll by default if their content overflows
+ @if ($orientation == vertical) {
+ overflow-x: auto;
+ }
+ @else {
+ overflow-y: auto;
+ }
+
+ // Add scrolling with inertia
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+}
+
+/*
+ Blocks are containers for actual content. They're the "columns" of Foundation for Apps.
+*/
+@mixin grid-content($size: expand, $offset: null, $order: null) {
+ // Content blocks are not flex items and have padding
+ display: block;
+ padding: 0 $block-padding;
+
+ // Add scrolling with inertia
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+
+ @include grid-size($size);
+ @if $offset != null { @include grid-offset($offset); }
+ @if $order != null { @include grid-order($order); }
+}
+
+@mixin grid-layout($up) {
+ flex-flow: row wrap;
+ overflow: visible;
+ list-style-type: none;
+
+ > li, > div, > section {
+ padding: 0 1rem 1rem;
+ flex: 0 0 percentage(1 / $up);
+ }
+}
+
+// CSS Output
+// - - - - - - - - - - - - - - - - - - - -
+
+// Shared styles for frames and blocks (parent elements)
+%block-core {
+ // Change the direction children flow
+ &.vertical { @include grid-orient(vertical); }
+ @each $size in $breakpoint-classes {
+ @include breakpoint($size) {
+ &.#{$size}-vertical { @include grid-orient(vertical); }
+ &.#{$size}-horizontal { @include grid-orient(horizontal); }
+ }
+ }
+
+ // Align the children of a grid block
+ &.align-right { @include grid-align(right); }
+ &.align-center { @include grid-align(center); }
+ &.align-justify { @include grid-align(justify); }
+ &.align-spaced { @include grid-align(spaced); }
+
+ // Allow child elements to wrap
+ &.wrap { @include grid-wrap(true); }
+}
+
+// Shared styles for blocks and content blocks (child elements)
+%child-core {
+ // Shrink a flex item so it only takes up the space it needs
+ &.shrink { @include grid-size(shrink); }
+
+ // Prevent an element from scrolling
+ &.noscroll { overflow: hidden; }
+}
+
+@include exports(grid) {
+ // The core grid elements:
+ // - Frame
+ // - Block
+ // - Content block
+ // - Container
+ .grid-frame {
+ @extend %block-core;
+ @include grid-frame;
+ }
+ .grid-block {
+ @extend %block-core;
+ @extend %child-core;
+ @include grid-block;
+ }
+ .grid-content {
+ @extend %child-core;
+ @include grid-content;
+
+ &.collapse {
+ padding: 0;
+ }
+
+ // Grids inside content blocks should wrap by default, so they mimic traditional float grids
+ .grid-block {
+ margin-left: -($block-padding);
+ margin-right: -($block-padding);
+ flex-wrap: wrap;
+ overflow: visible;
+
+ // Reverse the above wrapping behavior
+ &.nowrap {
+ @include grid-wrap(false);
+ }
+
+ .grid-content {
+ overflow: visible;
+ }
+ }
+ }
+ .grid-container {
+ @include grid-container;
+
+ &.contain-left { @include grid-container($align: left); }
+ &.contain-right { @include grid-container($align: right); }
+ }
+
+ // Breakpoint classes for blocks
+ @each $size in $breakpoint-classes {
+ .#{$size}-grid-block {
+ @extend %block-core;
+ @extend %child-core;
+
+ @include breakpoint($size) {
+ @include grid-block;
+
+ // Override panel styles
+ &.panel { @include grid-panel-reset; }
+ }
+ }
+ .#{$size}-grid-content {
+ @extend %child-core;
+
+ @include breakpoint($size) {
+ @include grid-content;
+
+ // Override panel styles
+ &.panel { @include grid-panel-reset; }
+ }
+ }
+ }
+
+ // Sizing and ordering classes
+ @for $i from 1 through $total-columns {
+ // Source ordering
+ .order-#{$i} { @include grid-order($i); }
+ }
+ @each $size in $breakpoint-classes {
+ @for $i from 1 through $total-columns {
+ @include breakpoint($size) {
+ // Block sizing
+ .#{$size}-#{$i} {
+ @include grid-size($i);
+ }
+ // Source ordering
+ .#{$size}-order-#{$i} {
+ @include grid-order($i);
+ }
+ // Offsets
+ .#{$size}-offset-#{$i} {
+ @include grid-offset($i);
+ }
+ // Parent sizing (block grids)
+ .#{$size}-up-#{$i} {
+ @include grid-layout($i);
+ }
+ }
+ }
+ }
+
+ .grid-content .modal .grid-block {
+ flex-wrap: nowrap;
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_iconic.scss b/afb-client/bower_components/foundation-apps/scss/components/_iconic.scss
new file mode 100644
index 0000000..77d0bd3
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_iconic.scss
@@ -0,0 +1,95 @@
+// ICONIC
+// ------
+//
+// A sample of 24 flexible, easily schemable icons from the folks at Iconic.
+//
+// Features:
+// - 24 icons
+// - Built-in coloring and sizing classes
+// - Coloring mixin
+// - Angular support
+
+/// @Foundation.settings
+// Iconic
+$iconic-primary-fill: $primary-color !default;
+$iconic-primary-stroke: $primary-color !default;
+$iconic-accent-fill: $iconic-primary-fill !default;
+$iconic-accent-stroke: $iconic-accent-fill !default;
+///
+
+// Colors the fill, and optionally stroke, accent fill, and accent stroke of an Iconic icon.
+@mixin color-icon(
+ $fill,
+ $stroke: null,
+ $fillAccent: null,
+ $strokeAccent: null
+) {
+ * {
+ fill: $fill;
+
+ // Use the fill color if no stroke is provided
+ @if hasvalue($stroke) {
+ stroke: $stroke;
+ }
+ @else {
+ stroke: $fill;
+ }
+
+ &.iconic-property-accent {
+ // Use the fill color if no accent is provided
+ @if hasvalue($fillAccent) {
+ fill: $fillAccent;
+ }
+ @else {
+ fill: $fill;
+ }
+
+ // Use the normal stroke color if no accent is provided
+ @if hasvalue($strokeAccent) {
+ stroke: $strokeAccent;
+ }
+ @else {
+ // ...or use the fill if no normal stroke is provided
+ @if hasvalue($stroke) {
+ stroke: $stroke;
+ }
+ @else {
+ stroke: $fill;
+ }
+ }
+ }
+ }
+}
+
+@include exports(iconic) {
+ .iconic {
+ width: 1rem;
+ height: 1rem;
+ vertical-align: middle;
+
+ a > & {
+ @include color-icon($primary-color);
+ margin-top: -2px;
+ margin-right: 0.25rem;
+ }
+ }
+
+ .iconic * {
+ fill: $iconic-primary-fill;
+ stroke: $iconic-primary-stroke;
+
+ &.iconic-property-accent {
+ fill: $iconic-accent-fill;
+ stroke: $iconic-accent-stroke;
+ }
+ }
+
+ @each $color in map-keys($foundation-colors) {
+ .iconic-color-#{$color} {
+ @include color-icon(map-get($foundation-colors, $color));
+ }
+ }
+ .iconic-color-secondary {
+ @include color-icon($secondary-color);
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_label.scss b/afb-client/bower_components/foundation-apps/scss/components/_label.scss
new file mode 100644
index 0000000..129757e
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_label.scss
@@ -0,0 +1,134 @@
+/*
+ Label
+*/
+
+/// @Foundation.settings
+// Label
+$label-fontsize: 0.8rem !default;
+$label-padding: ($global-padding / 3) ($global-padding / 2) !default;
+$label-radius: 0 !default;
+$label-background: $primary-color !default;
+$label-color: isitlight($primary-color) !default;
+
+$badge-fontsize: 0.8em !default;
+$badge-diameter: 1.5rem !default;
+$badge-background: $primary-color !default;
+$badge-color: #fff !default;
+///
+
+%label {
+ line-height: 1;
+ white-space: nowrap;
+ display: inline-block;
+ cursor: default;
+}
+
+@mixin label-layout(
+ $fontsize: $label-fontsize,
+ $padding: $label-padding
+) {
+ font-size: $fontsize;
+ padding: $padding;
+}
+
+@mixin label-style(
+ $background: $label-background,
+ $color: $label-color,
+ $radius: $label-radius
+) {
+ background: $background;
+ border-radius: $radius;
+
+ @if $color == auto {
+ color: isitlight($background);
+ }
+ @else {
+ color: $color;
+ }
+}
+
+@mixin label(
+ $background: $label-background,
+ $color: $label-color,
+ $radius: $label-radius,
+ $fontsize: $label-fontsize,
+ $padding: $label-padding
+) {
+ @extend %label;
+ @include label-layout($fontsize, $padding);
+ @include label-style($background, $color, $radius);
+}
+
+@include exports(label) {
+ .label {
+ @include label;
+
+ @each $color in map-keys($foundation-colors) {
+ &.#{$color} {
+ $color-value: map-get($foundation-colors, $color);
+ @include label-style($color-value, auto);
+ }
+ }
+ }
+}
+
+/*
+ Badge
+*/
+
+%badge {
+ align-items: center;
+ justify-content: center;
+ display: inline-flex;
+ border-radius: 1000px;
+}
+
+@mixin badge-layout(
+ $fontsize: $badge-fontsize,
+ $diameter: $badge-diameter
+) {
+ font-size: $fontsize;
+ width: $diameter;
+ height: $diameter;
+}
+
+@mixin badge-style(
+ $background: $badge-background,
+ $color: $badge-font-color
+) {
+ background: $background;
+
+ @if $color == auto {
+ color: isitlight($background);
+ }
+ @else {
+ color: $color;
+ }
+}
+
+@mixin badge(
+ $background: $badge-background,
+ $color: $badge-color,
+ $diameter: $badge-diameter,
+ $fontsize: $badge-fontsize
+) {
+ @extend %badge;
+ @include badge-layout($fontsize, $diameter);
+ @include badge-style($background, $color);
+}
+
+@include exports(badge) {
+ .badge {
+ @include badge;
+
+ &.secondary {
+ @include badge-style($secondary-color, auto);
+ }
+ @each $color in map-keys($foundation-colors) {
+ &.#{$color} {
+ $color-value: map-get($foundation-colors, $color);
+ @include badge-style($color-value, auto);
+ }
+ }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_list.scss b/afb-client/bower_components/foundation-apps/scss/components/_list.scss
new file mode 100755
index 0000000..a303dcb
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_list.scss
@@ -0,0 +1,19 @@
+@mixin inline-list($alignment){
+ list-style-type: none;
+ text-align: $alignment;
+ li, dt, dd {
+ display: inline-block;
+ margin-left: -2px;
+ margin-right: -2px;
+ }
+}
+
+@include exports(list) {
+ .inline-list {
+ @include inline-list(left);
+ li {
+ margin-right: 1rem;
+ margin-left: 0;
+ }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_menu-bar.scss b/afb-client/bower_components/foundation-apps/scss/components/_menu-bar.scss
new file mode 100644
index 0000000..7e2f99d
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_menu-bar.scss
@@ -0,0 +1,363 @@
+/*
+ MENU BAR
+ --------
+
+ A generic, flexible menu component.
+
+ Features:
+ - Orient horizontally and vertically
+ - Change orientation at certain breakpoints
+ - Items with icons above, below, or to the left or right
+ - Text labels for vertical menus and badges for horizontal menus
+*/
+
+/// @Foundation.settings
+// Menu Bar
+$menubar-fontsize: 1rem !default;
+$menubar-background: #fff !default;
+$menubar-background-hover: smartscale($menubar-background, 7%) !default;
+$menubar-background-active: $menubar-background-hover;
+$menubar-color: isitlight($menubar-background) !default;
+$menubar-color-hover: $menubar-color !default;
+$menubar-color-active: $menubar-color-hover;
+
+$menubar-item-padding: $global-padding !default;
+$menubar-icon-size: 25px !default;
+$menubar-icon-spacing: $menubar-item-padding !default;
+///
+
+// Menu bar container
+%menu-bar {
+ display: flex;
+ align-items: stretch;
+ margin: 0;
+ list-style-type: none;
+
+ // Menu item
+ > li {
+ // This flex setting makes each item an equal width
+ flex: 1 0 auto;
+ align-items: center;
+
+ // Link inside menu item
+ > a {
+ display: flex;
+ flex-flow: column nowrap;
+ align-items: center;
+ padding: $menubar-item-padding;
+ font-size: $menubar-fontsize;
+ line-height: 1;
+ }
+ }
+}
+
+@mixin menu-bar-layout (
+ $orientation: horizontal,
+ $stretch: true
+) {
+ /*
+ Orientation
+ */
+ @if $orientation == horizontal {
+ overflow-x: hidden;
+ flex-flow: row nowrap;
+ > li > a {
+ flex-flow: column nowrap;
+ }
+ }
+ @else {
+ flex-flow: column nowrap;
+ > li > a {
+ flex-flow: row nowrap;
+ }
+ }
+
+ /*
+ Stretch
+ */
+ > li {
+ @if $stretch == false {
+ flex: 0 0 auto;
+ }
+ }
+}
+
+@mixin menu-bar-style(
+ $background: $menubar-background,
+ $background-hover: $menubar-background-hover,
+ $background-active: $menubar-background-active,
+ $color: $menubar-color,
+ $color-hover: $menubar-color-hover,
+ $color-active: $menubar-color-active,
+ $autocolor: false
+) {
+ // Autocoloring
+ @if ($autocolor) {
+ $background-hover: smartscale($background, 7%);
+ $background-active: $background-hover;
+
+ $color: isitlight($background);
+ $color-hover: $color;
+ $color-active: $color;
+ }
+
+ // Container
+ background: $background;
+
+ // Items
+ > li > a {
+ color: $color;
+
+ &:hover {
+ background: $background-hover;
+ color: $color-hover;
+ }
+ }
+ .is-active > a {
+ background: $background-active;
+ color: $color-active
+ }
+
+ // Iconic
+ @if using(iconic) {
+ .iconic { @include color-icon($color); }
+ }
+}
+
+@mixin menu-bar-icons(
+ $position: left,
+ $size: $menubar-icon-size
+) {
+ > li {
+ // Sizing
+ > img, > .iconic {
+ margin: 0;
+ @if $menubar-icon-size != false {
+ width: $menubar-icon-size;
+ height: $menubar-icon-size;
+ }
+ }
+
+ // Position
+ @if $position == left {
+ > a {
+ flex-flow: row nowrap;
+ align-items: center;
+ > img, > .iconic { margin: 0 $menubar-icon-spacing 0 0; }
+ }
+ }
+ @if $position == top {
+ > a {
+ flex-flow: column nowrap;
+ > img, > .iconic { margin: 0 0 $menubar-icon-spacing 0; }
+ }
+ }
+ @if $position == right {
+ > a {
+ flex-flow: row-reverse nowrap;
+ > img, > .iconic { margin: 0 0 0 $menubar-icon-spacing; }
+ }
+ }
+ @if $position == bottom {
+ > a {
+ flex-flow: column-reverse nowrap;
+ > img, > .iconic { margin: $menubar-icon-spacing 0 0 0; }
+ }
+ }
+ }
+}
+
+@mixin menu-bar-labels(
+ $x: right,
+ $y: center,
+ $offset: $menubar-item-padding,
+ $size: 1.2rem,
+ $background: red,
+ $color: auto,
+ $selector: '.menu-bar-label'
+) {
+ > li {
+ position: relative;
+
+ > a {
+ @if $x == left or $x == right {
+ padding-#{$x}: $size + $offset * 2;
+ }
+ }
+ }
+
+ #{$selector} {
+ display: block;
+ font-size: $size * 0.75;
+ width: $size;
+ height: $size;
+ line-height: $size;
+ text-align: center;
+ border-radius: 1000px;
+ background: $background;
+ color: if($color == auto, isitlight($background), $color);
+ position: absolute;
+ pointer-events: none;
+
+ @if $x == left or $x == right {
+ #{$x}: $offset;
+ }
+
+ @if $y == top or $y == bottom {
+ #{$y}: $offset;
+ }
+ @else {
+ top: 50%;
+ transform: translateY(-50%);
+ }
+ }
+}
+
+/*
+ Set the alignment of menu items (li) within a menu-bar
+
+ left: Items align to the left.
+ right: Items align to the right.
+ center: Items align to the center.
+ justify: Items are spaced equally apart so they occupy the space of the entire grid.
+ spaced: Items are given equal space to their left and right.
+
+ @group menu-bar
+
+ @param {string} $align - Alignment to use.
+
+ @output An appropriate justify-content value.
+*/
+@mixin menu-bar-align($align: left) {
+ $options: (
+ left: flex-start,
+ right: flex-end,
+ center: center,
+ justify: space-between,
+ spaced: space-around,
+ );
+ justify-content: map-get($options, $align);
+}
+
+/*
+ CSS output
+*/
+@include exports(menu-bar) {
+ .menu-bar {
+ @extend %menu-bar;
+ @include menu-bar-style;
+
+ // Positioning
+ &, &.horizontal { @include menu-bar-layout(horizontal); }
+ &.vertical { @include menu-bar-layout(vertical); }
+
+ // Condensed bar
+ &.condense {
+ > li { flex: 0 0 auto; }
+ }
+
+ // Align Menu Items
+ &.align-right { @include menu-bar-align(right); }
+ &.align-center { @include menu-bar-align(center); }
+ &.align-justify { @include menu-bar-align(justify); }
+ &.align-spaced { @include menu-bar-align(spaced); }
+
+ @each $size in $breakpoint-classes {
+ @include breakpoint($size) {
+ &.#{$size}-condense { li { flex: 0 0 auto; } }
+ &.#{$size}-expand { li { flex: 1 0 auto; } }
+
+ // Responsive Alignment
+ &.#{$size}-align-left { @include menu-bar-align(left); }
+ &.#{$size}-align-right { @include menu-bar-align(right); }
+ &.#{$size}-align-center { @include menu-bar-align(center); }
+ &.#{$size}-align-justify { @include menu-bar-align(justify); }
+ &.#{$size}-align-spaced { @include menu-bar-align(spaced); }
+ }
+ }
+
+ // Responsive positioning
+ @each $size in $breakpoint-classes {
+ @include breakpoint($size) {
+ &.#{$size}-horizontal {
+ @include menu-bar-layout(horizontal);
+ }
+ &.#{$size}-vertical {
+ @include menu-bar-layout(vertical);
+ }
+ }
+ }
+
+ // Icon positioning
+ &, &.icon-top { @include menu-bar-icons(top); }
+ &.icon-right { @include menu-bar-icons(right); }
+ &.icon-bottom { @include menu-bar-icons(bottom); }
+ &.icon-left { @include menu-bar-icons(left); }
+ @each $size in $breakpoint-classes {
+ @each $pos in (top, right, bottom, left) {
+ @include breakpoint($size) {
+ &.#{$size}-icon-#{$pos} { @include menu-bar-icons($pos); }
+ }
+ }
+ }
+
+ // Labels
+ &.label-side { @include menu-bar-labels(right, center); }
+ &.label-corner { @include menu-bar-labels(right, top); }
+
+ // Coloring
+ &.primary {
+ @include menu-bar-style($primary-color, $autocolor: true);
+ }
+ &.dark {
+ @include menu-bar-style($dark-color, $autocolor: true);
+ }
+
+ // Title
+ > li.title {
+ padding: $menubar-item-padding;
+ cursor: default;
+ font-weight: bold;
+ }
+ }
+
+ // Menu groups
+ .menu-group {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ flex-wrap: wrap;
+
+ @include breakpoint(medium) {
+ flex-wrap: nowrap;
+ }
+
+ > .menu-group-left, > .menu-group-right {
+ flex: 1 1 100%;
+
+ @include breakpoint(medium) {
+ flex: 0 0 auto;
+ }
+ }
+
+ // Menu bar is condensed
+ .menu-bar {
+ > li { flex: 0 0 auto; }
+ margin: 0;
+ }
+
+ // Coloring class cascades down to the menu bar
+ &.primary {
+ background-color: $primary-color;
+ .menu-bar {
+ @include menu-bar-style($primary-color, $autocolor: true);
+ }
+ }
+ &.dark {
+ background-color: $dark-color;
+ .menu-bar {
+ @include menu-bar-style($dark-color, $autocolor: true);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_modal.scss b/afb-client/bower_components/foundation-apps/scss/components/_modal.scss
new file mode 100644
index 0000000..0899a71
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_modal.scss
@@ -0,0 +1,126 @@
+/*
+ MODAL
+ -----
+
+ The humble modal hides off-canvas until summoned with an fa-open directive. Modals appear over an overlay that darkens the rest of the page, and have a maxmimum width. You can construct a grid inside a modal, or attach panels to it.
+
+ Note that the modal overlay is hardcoded into the CSS, because whether or not you build your modal semantically, the overlay is always required and will always look the same.
+*/
+
+/// @Foundation.settings
+// Modal
+$modal-background: #fff !default;
+$modal-border: 0 !default;
+$modal-radius: 0px !default;
+$modal-shadow: none !default;
+$modal-zindex: 1000 !default;
+$modal-sizes: (
+ tiny: 300px,
+ small: 500px,
+ medium: 600px,
+ large: 800px,
+) !default;
+
+$modal-overlay-class: 'modal-overlay' !default;
+$modal-overlay-background: rgba(#333, 0.7) !default;
+///
+
+%modal {
+ position: relative;
+ z-index: $modal-zindex + 1;
+ background: $modal-background;
+ flex: 0 0 auto;
+ width: 100%;
+ height: 100vh;
+ max-height: 100%;
+ overflow: hidden;
+ padding: $global-padding;
+
+ @include breakpoint(medium) {
+ height: auto;
+ max-width: map-get($modal-sizes, medium);
+ }
+
+ .grid-content, .grid-block {
+ margin: 0;
+ }
+
+ .close-button, [fa-close] {
+ z-index: $modal-zindex + 1;
+ }
+}
+
+@mixin modal-dialog() {
+ height: auto;
+}
+@mixin modal-layout(
+ $width: map-get($modal-sizes, medium),
+ $dialog: false
+) {
+ max-width: $width;
+}
+@mixin modal-style(
+ $border: $modal-border,
+ $radius: $modal-radius,
+ $shadow: $modal-shadow
+) {
+ @if $border != 0 {
+ border: $border;
+ }
+ @if $radius != 0 {
+ border-radius: $radius;
+ }
+ @if $shadow != none {
+ box-shadow: $shadow;
+ }
+}
+
+@mixin modal(
+ $width: map-get($modal-sizes, medium),
+ $border: $modal-border,
+ $radius: $modal-radius,
+ $shadow: $modal-shadow
+) {
+ @extend %modal;
+ @include modal-layout($width);
+ @include modal-style($border, $radius, $shadow);
+}
+
+@include exports(modal) {
+ .modal {
+ @include modal;
+
+ @each $size in map-keys($modal-sizes) {
+ $width: map-get($modal-sizes, $size);
+ @if $size != medium {
+ .#{$size} > & { @include modal-layout($width); }
+ }
+ }
+
+ .dialog > & {
+ @include modal-dialog;
+ }
+ .collapse > & {
+ padding: 0;
+ }
+ }
+
+ .#{$modal-overlay-class} {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: $modal-zindex;
+ display: none;
+ background-color: $modal-overlay-background;
+
+ // Horizontally and vertically center the modal
+ align-items: center;
+ justify-content: center;
+
+ &.is-active {
+ display: flex;
+ }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_motion.scss b/afb-client/bower_components/foundation-apps/scss/components/_motion.scss
new file mode 100644
index 0000000..88bd3a0
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_motion.scss
@@ -0,0 +1,524 @@
+// FOUNDATION MOTION UI
+// Table of Contents
+//
+// 0. Variables
+// 1. Base Transitions
+// a. Slide
+// b. Fade
+// c. Hinge
+// d. Scale
+// e. Spin
+// 2. Base Animations
+// a. Shake
+// b. Spinners
+// c. Wiggle
+// 3. HTML Attributes
+
+// 0. Variables
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+/// @Foundation.settings
+// Motion UI
+// Classes to use when triggering in/out animations
+$motion-class: (
+ in: "ng-enter",
+ out: "ng-leave",
+) !default;
+$motion-class-active: (
+ in: "ng-enter-active",
+ out: "ng-leave-active",
+) !default;
+$motion-class-stagger: (
+ in: "ng-enter-stagger",
+ out: "ng-leave-stagger",
+) !default;
+$motion-class-showhide: (
+ in: "ng-hide-remove",
+ out: "ng-hide-add",
+);
+$motion-class-showhide-active: (
+ in: "ng-hide-remove-active",
+ out: "ng-hide-add-active",
+);
+
+// Set if movement-based transitions should also fade the element in and out
+$motion-slide-and-fade: false !default;
+$motion-hinge-and-fade: true !default;
+$motion-scale-and-fade: true !default;
+$motion-spin-and-fade: true !default;
+
+// Default speed for transitions and animations
+$motion-duration-default: 500ms !default;
+
+// Slow and fast modifiders
+$motion-duration-slow: 750ms !default;
+$motion-duration-fast: 250ms !default;
+$motion-stagger-duration-default: 150ms !default;
+$motion-stagger-duration-short: 50ms !default;
+$motion-stagger-duration-long: 300ms !default;
+
+// Default timing function for transitions and animations
+$motion-timing-default: ease !default;
+
+// Built-in and custom easing functions
+// Every item in this map becomes a CSS class
+$motion-timings: (
+ linear: linear,
+ ease: ease,
+ easeIn: ease-in,
+ easeOut: ease-out,
+ easeInOut: ease-in-out,
+ bounceIn: cubic-bezier(0.485, 0.155, 0.240, 1.245),
+ bounceOut: cubic-bezier(0.485, 0.155, 0.515, 0.845),
+ bounceInOut: cubic-bezier(0.760, -0.245, 0.240, 1.245),
+) !default;
+
+// Default delay for all transitions and animations
+$motion-delay-default: 0 !default;
+// Short and long delay modifiers
+$motion-delay-short: 300ms !default;
+$motion-delay-long: 700ms !default;
+///
+
+// Looks for a timing function in the list of presets
+// If none are found, returns the value as-is.
+@function get-timing($timing) {
+ @if map-has-key($motion-timings, $timing) {
+ @return map-get($motion-timings, $timing);
+ }
+ @else {
+ @return $timing;
+ }
+}
+
+// Applies transition settings common to all mixins
+@mixin transition-basics(
+ $duration: $motion-duration-default,
+ $timing: $motion-timing-default,
+ $delay: $motion-delay-default
+) {
+ transition-duration: $duration;
+ transition-timing-function: get-timing($timing);
+ transition-delay: $delay;
+}
+
+// Wraps content in an enter/leave class, chained to the parent selector
+// Define the initial state of a transition here
+@mixin transition-start($dir) {
+ $sel1: map-get($motion-class, $dir);
+ $sel2: map-get($motion-class-showhide, $dir);
+
+ &.#{$sel1},
+ &.#{$sel2} {
+ @content;
+ }
+}
+
+// Wraps content in an enter/leave active class, chained to the matching
+// enter/leave class, chained to the parent selector
+// Define the end state of a transition here
+@mixin transition-end($dir) {
+ $sel1: map-get($motion-class, $dir);
+ $sel1A: map-get($motion-class-active, $dir);
+
+ $sel2: map-get($motion-class-showhide, $dir);
+ $sel2A: map-get($motion-class-showhide-active, $dir);
+
+ &.#{$sel1}.#{$sel1A},
+ &.#{$sel2}.#{$sel2A} {
+ @content;
+ }
+}
+
+@mixin stagger($delay-amount) {
+ transition-delay: $delay-amount;
+ // this is to avoid accidental CSS inheritance
+ transition-duration:0;
+}
+
+
+// 1. Base Transitions
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// SLIDE
+@mixin slide (
+ $dir: in,
+ $from: left,
+ $fade: $motion-slide-and-fade,
+ $duration: $motion-duration-default,
+ $timing: $motion-timing-default,
+ $delay: $motion-delay-default
+) {
+ $slideDirections: (
+ top: translateY(-100%),
+ right: translateX(100%),
+ bottom: translateY(100%),
+ left: translateX(-100%),
+ );
+ $start: '';
+ $end: '';
+
+ @if $dir == in {
+ $start: map-get($slideDirections, $from);
+ $end: translateX(0) translateY(0);
+ }
+ @else {
+ $start: translateX(0) translateY(0);
+ $end: map-get($slideDirections, $from);
+ }
+
+ // CSS Output
+ @include transition-start($dir) {
+ @include transition-basics($duration, $timing, $delay);
+ transition-property: transform, opacity;
+ backface-visibility: hidden;
+ transform: $start;
+
+ @if $fade { opacity: if($dir == in, 0, 1); }
+ }
+ @include transition-end($dir) {
+ transform: $end;
+
+ @if $fade { opacity: if($dir == in, 1, 0); }
+ }
+}
+
+// FADE
+@mixin fade(
+ $dir: in,
+ $from: 0,
+ $to: 1,
+ $duration: $motion-duration-default,
+ $timing: $motion-timing-default,
+ $delay: $motion-delay-default
+) {
+ @include transition-start($dir) {
+ @include transition-basics($duration, $timing, $delay);
+ transition-property: opacity;
+ opacity: $from;
+ }
+ @include transition-end($dir) {
+ opacity: $to;
+ }
+}
+
+// HINGE
+@mixin hinge (
+ $dir: in,
+ $from: left,
+ $axis: edge,
+ $perspective: 2000px,
+ $turn-origin: from-back,
+ $fade: $motion-hinge-and-fade,
+ $duration: $motion-duration-default,
+ $timing: $motion-timing-default,
+ $delay: $motion-delay-default
+) {
+
+ // Rotation directions when hinging from back vs. front
+ $rotationAmount: 90deg;
+ $rotationsBack: (
+ top: rotateX($rotationAmount * -1),
+ right: rotateY($rotationAmount * -1),
+ bottom: rotateX($rotationAmount),
+ left: rotateY($rotationAmount),
+ );
+ $rotationsFrom: (
+ top: rotateX($rotationAmount),
+ right: rotateY($rotationAmount),
+ bottom: rotateX($rotationAmount * -1),
+ left: rotateY($rotationAmount * -1),
+ );
+
+ // Rotation origin
+ $rotation: '';
+ @if $turn-origin == from-front {
+ $rotation: map-get($rotationsFrom, $from);
+ }
+ @else if $turn-origin == from-back {
+ $rotation: map-get($rotationsBack, $from);
+ }
+ @else {
+ @warn "`$turn-origin` must be either `from-back` or `from-front`";
+ }
+
+ // Start and end state
+ $start: '';
+ $end: '';
+ @if $dir == in {
+ $start: perspective($perspective) $rotation;
+ $end: rotate(0deg);
+ }
+ @else {
+ $start: rotate(0deg);
+ $end: perspective($perspective) $rotation;
+ }
+
+ // Turn axis
+ $origin: '';
+ @if $axis == edge {
+ $origin: $from;
+ }
+ @else {
+ $origin: center;
+ }
+
+ @include transition-start($dir) {
+ @include transition-basics($duration, $timing, $delay);
+ transition-property: transform, opacity;
+ transform: $start;
+ transform-origin: $origin;
+ @if $fade { opacity: if($dir == in, 0, 1); }
+ }
+ @include transition-end($dir) {
+ transform: $end;
+ @if $fade { opacity: if($dir == in, 1, 0); }
+ }
+}
+
+// SCALE
+@mixin scale(
+ $dir: in,
+ $from: 1.5,
+ $to: 1,
+ $fade: $motion-scale-and-fade,
+ $duration: $motion-duration-default,
+ $timing: $motion-timing-default,
+ $delay: $motion-delay-default
+) {
+ @include transition-start($dir) {
+ @include transition-basics($duration, $timing, $delay);
+ transition-property: transform, property;
+ transform: scale($from);
+ @if $fade { opacity: if($dir == in, 0, 1) }
+ }
+ @include transition-end($dir) {
+ transform: scale($to);
+ @if $fade { opacity: if($dir == in, 1, 0) }
+ }
+}
+
+// SPIN
+@mixin spin(
+ $dir: in,
+ $amount: 0.75turn,
+ $ccw: false,
+ $fade: $motion-spin-and-fade,
+ $duration: $motion-duration-default,
+ $timing: $motion-timing-default,
+ $delay: $motion-delay-default
+) {
+ $amount: turn-to-deg($amount);
+ $start: 0;
+ $end: 0;
+
+ @if $dir == in {
+ $start: if($ccw, $amount, $amount * -1);
+ $end: 0;
+ }
+ @else {
+ $start: 0;
+ $end: if($ccw, $amount * -1, $amount);
+ }
+
+ @include transition-start($dir) {
+ transition-property: transform, opacity;
+ transform: rotate($start);
+ @if $fade { opacity: if($dir == in, 0, 1); }
+ }
+ @include transition-end($dir) {
+ transform: rotate($end);
+ @if $fade { opacity: if($dir == in, 1, 0); }
+ }
+}
+
+
+// 2. Base Animations
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+// SHAKE
+@keyframes shake {
+ 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90% {
+ transform: translateX(7%);
+ }
+ 5%, 15%, 25%, 35%, 45%, 55%, 65%, 75%, 85%, 95% {
+ transform: translateX(-7%);
+ }
+ 100% { transform: translateX(0); }
+}
+
+// SPINNERS
+@keyframes spin-cw {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
+@keyframes spin-ccw {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(-360deg); }
+}
+
+// WIGGLE
+@keyframes wiggle {
+ 40%, 50%, 60% {
+ transform: rotate(7deg);
+ }
+ 35%, 45%, 55%, 65% {
+ transform: rotate(-7deg);
+ }
+ 0%, 30%, 70%, 100% { transform: rotate(0); }
+}
+
+@mixin animation(
+ $animation,
+ $duration: $motion-duration-default,
+ $timing: $motion-timing-default,
+ $delay: $motion-delay-default,
+ $iterations: null
+) {
+
+ animation-name: $animation;
+ animation-duration: $duration;
+ animation-timing-function: $timing;
+
+ backface-visibility: hidden;
+ transform: translate3d(0,0,0);
+
+ @if $delay != null {
+ animation-delay: $delay;
+ }
+ @if $iterations != null {
+ animation-iteration-count: $iterations;
+ }
+
+ @if $animation == null {
+ @warn "Please include an animation name";
+ }
+}
+
+// 3. HTML Exports
+// - - - - - - - - - - - - - - - - - - - - - - - - -
+
+@include exports(motion) {
+ /*
+ Transitions
+ */
+
+ // Slide
+ .slideInDown { @include slide($from: top); }
+ .slideInLeft { @include slide($from: right); }
+ .slideInUp { @include slide($from: bottom); }
+ .slideInRight { @include slide($from: left); }
+ .slideOutBottom { @include slide($dir: out, $from: bottom); }
+ .slideOutRight { @include slide($dir: out, $from: right); }
+ .slideOutUp { @include slide($dir: out, $from: top); }
+ .slideOutLeft { @include slide($dir: out, $from: left); }
+
+ // Fade
+ .fadeIn { @include fade(in, 0, 1); }
+ .fadeOut { @include fade(out, 1, 0); }
+
+ // Hinge
+ .hingeInFromTop { @include hinge($dir: in, $from: top); }
+ .hingeInFromRight { @include hinge($dir: in, $from: right); }
+ .hingeInFromBottom { @include hinge($dir: in, $from: bottom); }
+ .hingeInFromLeft { @include hinge($dir: in, $from: left); }
+ .hingeInFromMiddleX { @include hinge($dir: in, $from: top, $axis: center); }
+ .hingeInFromMiddleY { @include hinge($dir: in, $from: right, $axis: center); }
+ .hingeOutFromTop { @include hinge($dir: out, $from: top); }
+ .hingeOutFromRight { @include hinge($dir: out, $from: right); }
+ .hingeOutFromBottom { @include hinge($dir: out, $from: bottom); }
+ .hingeOutFromLeft { @include hinge($dir: out, $from: left); }
+ .hingeOutFromMiddleX { @include hinge($dir: out, $from: top, $axis: center); }
+ .hingeOutFromMiddleY { @include hinge($dir: out, $from: right, $axis: center); }
+
+ // Scale
+ .zoomIn { @include scale(in, 1.5, 1); }
+ .zoomOut { @include scale(out, 0.5, 1); }
+
+ // Spin
+ .spinIn { @include spin(in, 0.75turn); }
+ .spinOut { @include spin(out, 0.75turn); }
+ .spinInCCW { @include spin(in, 0.75turn, true); }
+ .spinOutCCW { @include spin(out, 0.75turn, true); }
+
+ /*
+ Transition modifiers
+ */
+
+ // Duration
+ .slow { transition-duration: $motion-duration-slow !important; }
+ .fast { transition-duration: $motion-duration-fast !important; }
+
+ // Easing
+ @each $easing in map-keys($motion-timings) {
+ .#{$easing} {
+ transition-timing-function: map-get($motion-timings, $easing) !important;
+ }
+ }
+
+ // Delay
+ .delay { transition-delay: $motion-delay-short !important; }
+ .long-delay { transition-delay: $motion-delay-long !important; }
+
+ /*
+ Animations
+ */
+
+ .shake { @include animation(shake); }
+ .spin-cw { @include animation(spin-cw); }
+ .spin-ccw { @include animation(spin-ccw); }
+ .wiggle { @include animation(wiggle); }
+
+ /*
+ Animation modifiers
+ */
+
+ .shake,
+ .spin-cw,
+ .spin-ccw,
+ .wiggle {
+ // Repeat
+ &.infinite { animation-iteration-count: infinite; }
+
+ // Easing
+ @each $timing in map-keys($motion-timings) {
+ &.#{$timing} {
+ animation-timing-function: map-get($motion-timings, $timing) !important;
+ }
+ }
+
+ // Duration
+ &.slow { animation-duration: $motion-duration-slow !important; }
+ &.fast { animation-duration: $motion-duration-fast !important; }
+
+ // Delay
+ &.delay { animation-delay: $motion-delay-short !important; }
+ &.long-delay { animation-delay: $motion-delay-long !important; }
+ }
+ .stagger { @include stagger($motion-stagger-duration-default); }
+ .stort-stagger { @include stagger($motion-stagger-duration-default); }
+ .long-stagger { @include stagger($motion-stagger-duration-default); }
+}
+
+// View animation classes
+// - - - - - - - - - - - - - - - - - - - -
+
+// Applied to the immediate parent of the animating views
+.position-absolute {
+ overflow: hidden;
+ position: relative;
+}
+
+// Applied to the animating views
+.ui-animation {
+ &.ng-enter-active, &.ng-leave-active {
+ position: absolute !important;
+ backface-visibility: hidden;
+ -webkit-transform-style: preserve-3d;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_notification.scss b/afb-client/bower_components/foundation-apps/scss/components/_notification.scss
new file mode 100644
index 0000000..0386510
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_notification.scss
@@ -0,0 +1,207 @@
+/*
+ NOTIFICATION
+ ------------
+
+ An alert that pins to the corner of the screen when triggered by JavaScript. It can be set to disappear after a certain period of time, or to stay put until the user clicks on it. A custom action can be asigned to a notification as well.
+
+ Optionally, the notifications directive can also tap into the browser's native notification support, if it exists.
+*/
+
+/// @Foundation.settings
+// Notification
+$notification-default-position: right top !default;
+$notification-width: rem-calc(400) !default;
+$notification-offset: $global-padding !default;
+
+$notification-background: $primary-color !default;
+$notification-color: white !default;
+$notification-padding: $global-padding !default;
+$notification-radius: 4px !default;
+
+$notification-icon-size: 60px !default;
+$notification-icon-margin: $global-padding !default;
+$notification-icon-align: top !default;
+
+///
+
+%notification {
+ z-index: 1000;
+ display: flex;
+ position: relative;
+ margin-top: .5rem;
+ margin-bottom: .5rem;
+ display: none;
+
+ h1 {
+ font-size: 1.25em;
+ margin: 0;
+ }
+ p {
+ margin: 0;
+ }
+
+ // Placeholder animation
+ // transition: opacity 1s ease-out;
+
+ &.is-active {
+ display: flex;
+ }
+
+ .close-button {
+ color: white;
+ }
+}
+
+%notification-container {
+ z-index: 3000;
+ position: fixed;
+
+ display: flex;
+ flex-direction: column;
+}
+
+@mixin notification-layout(
+ $x: nth($notification-default-position, 1),
+ $y: nth($notification-default-position, 2),
+ $size: $notification-width,
+ $offset: $notification-offset
+) {
+ width: $size;
+
+ @if $x == right {
+ right: $offset;
+ }
+ @else if $x == left {
+ left: $offset;
+ }
+ @else if $x == middle {
+ left: 50%;
+ margin-left: -($size / 2);
+ }
+
+ @if $y == top {
+ top: $offset;
+ }
+ @else if $y == bottom {
+ top: auto;
+ bottom: $offset;
+ }
+
+ // On small screens, notifications are full width but maintain their vertical orientation
+ @include breakpoint(small only) {
+ width: auto;
+ left: $offset;
+ right: $offset;
+ margin-left: 0;
+ }
+}
+@mixin notification-style(
+ $background: $notification-background,
+ $color: $notification-color,
+ $padding: $notification-padding,
+ $radius: $notification-radius
+) {
+ background: $background;
+ padding: $padding;
+ border-radius: $radius;
+
+ &, h1, h2, h3, h4, h5, h6 {
+ color: $color;
+ }
+}
+
+@mixin notification(
+ $background: $notification-background,
+ $color: $notification-color,
+ $padding: $notification-padding,
+ $radius: $notification-radius
+) {
+ @extend %notification;
+ @include notification-style($background, $color, $padding, $radius);
+}
+
+@mixin notification-container(
+ $x: nth($notification-default-position, 1),
+ $y: nth($notification-default-position, 2),
+ $size: $notification-width,
+ $offset: $notification-offset
+) {
+ @extend %notification-container;
+ @include notification-layout($x, $y, $size, $offset);
+}
+
+@mixin notification-icon(
+ $size: $notification-icon-size,
+ $margin: $notification-icon-margin,
+ $align: $notification-icon-align
+) {
+ $alignments: (
+ top: flex-start,
+ middle: middle,
+ bottom: flex-end,
+ );
+ flex: 0 0 $size;
+ margin-right: $global-padding;
+ align-self: map-get($alignments, $align);
+
+ img {
+ width: 100%;
+ height: auto;
+ }
+}
+
+/*
+ CSS Output
+*/
+
+@include exports(notification) {
+ .notification {
+ @include notification;
+
+ &.success { @include notification-style($success-color) }
+ &.warning { @include notification-style($warning-color) }
+ &.alert { @include notification-style($alert-color) }
+ &.dark { @include notification-style($dark-color, #fff) }
+
+
+ }
+
+ .static-notification {
+ @include notification;
+
+ position: fixed !important;
+
+ &.top-right { @include notification-layout(right, top); }
+ &.top-left { @include notification-layout(left, top); }
+ &.top-middle { @include notification-layout(middle, top); }
+
+ &.bottom-right { @include notification-layout(right, bottom); }
+ &.bottom-left { @include notification-layout(left, bottom); }
+ &.bottom-middle { @include notification-layout(middle, bottom); }
+
+ &.success { @include notification-style($success-color) }
+ &.warning { @include notification-style($warning-color) }
+ &.alert { @include notification-style($alert-color) }
+ &.dark { @include notification-style($dark-color, #fff) }
+ }
+
+ .notification-container {
+ @include notification-container;
+
+ &.top-right { @include notification-layout(right, top); }
+ &.top-left { @include notification-layout(left, top); }
+ &.top-middle { @include notification-layout(middle, top); }
+
+ &.bottom-right { @include notification-layout(right, bottom); }
+ &.bottom-left { @include notification-layout(left, bottom); }
+ &.bottom-middle { @include notification-layout(middle, bottom); }
+ }
+
+ .notification-icon {
+ @include notification-icon;
+ }
+ .notification-content {
+ flex: 1;
+ }
+
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_off-canvas.scss b/afb-client/bower_components/foundation-apps/scss/components/_off-canvas.scss
new file mode 100644
index 0000000..d93e74c
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_off-canvas.scss
@@ -0,0 +1,169 @@
+/*
+ Off-canvas menu
+ ---------------
+
+ A generic container that stays fixed to the left, top, right, or bottom of the screen, and is summoned when needed. When an off-canvas panel is open, the app frame shifts over to reveal the menu.
+*/
+
+/// @Foundation.settings
+// Off-canvas
+$offcanvas-size-horizontal: 250px !default;
+$offcanvas-size-vertical: 250px !default;
+
+$offcanvas-background: #fff !default;
+$offcanvas-color: isitlight($offcanvas-background) !default;
+$offcanvas-padding: 0 !default;
+$offcanvas-shadow: 3px 0 10px rgba(black, 0.25) !default;
+$offcanvas-animation-speed: 0.25s !default;
+
+$offcanvas-frame-selector: '.grid-frame' !default;
+///
+
+%off-canvas {
+ position: fixed;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ transition: transform $offcanvas-animation-speed ease-out;
+ z-index: 2;
+
+ // Active state
+ &.is-active {
+ transform: translate(0,0) !important;
+ }
+
+ // Frame styles
+ & ~ #{$offcanvas-frame-selector} {
+ transform: translate(0,0,0);
+ transition: transform 0.25s ease-out;
+ backface-visibility: hidden;
+ background: white;
+ }
+}
+@mixin off-canvas-detached {
+ z-index: 0;
+ box-shadow: none;
+
+ &, &.is-active {
+ transform: none;
+ }
+
+ & ~ #{$offcanvas-frame-selector} {
+ z-index: 1;
+ box-shadow: 0 0 15px rgba(0,0,0,0.5);
+ }
+}
+
+@mixin off-canvas-layout(
+ $position: left,
+ $size: default,
+ $shadow: $offcanvas-shadow
+) {
+ /*
+ Get shadow values for later use
+ */
+ $shadow-length: '';
+ $shadow-size: '';
+ $shadow-color: '';
+ @if hasvalue($shadow) {
+ $shadow-length: get-shadow-value($shadow, x);
+ $shadow-size: get-shadow-value($shadow, size);
+ $shadow-color: get-shadow-value($shadow, color);
+ }
+
+ /*
+ Sizing
+ */
+ @if $position == left or $position == right {
+ @if $size == default {
+ $size: $offcanvas-size-horizontal;
+ }
+ width: $size;
+ height: 100%;
+ }
+ @else {
+ @if $size == default {
+ $size: $offcanvas-size-vertical;
+ }
+ height: $size;
+ width: 100%;
+ }
+
+ /*
+ Positioning
+ */
+ @if $position == left {
+ top: 0;
+ left: 0;
+ @if hasvalue($shadow) { box-shadow: inset (-$shadow-length) 0 $shadow-size $shadow-color; }
+ transform: translateX(-100%);
+ &.is-active {
+ & ~ #{$offcanvas-frame-selector} { transform: translateX($size) !important; }
+ }
+ }
+ @else if $position == right {
+ left: auto;
+ top: 0;
+ right: 0;
+ @if hasvalue($shadow) { box-shadow: inset $shadow-length 0 $shadow-size $shadow-color; }
+ transform: translateX(100%);
+ &.is-active {
+ & ~ #{$offcanvas-frame-selector} { transform: translateX(-$size) !important; }
+ }
+ }
+ @else if $position == top {
+ top: 0;
+ left: 0;
+ transform: translateY(-100%);
+ @if hasvalue($shadow) { box-shadow: inset 0 (-$shadow-length) $shadow-size $shadow-color; }
+ &.is-active {
+ & ~ #{$offcanvas-frame-selector} { transform: translateY($size) !important; }
+ }
+ }
+ @else if $position == bottom {
+ top: auto;
+ bottom: 0;
+ left: 0;
+ transform: translateY(100%);
+ @if hasvalue($shadow) { box-shadow: inset 0 $shadow-length $shadow-size $shadow-color; }
+ &.is-active {
+ & ~ #{$offcanvas-frame-selector} { transform: translateY(-$size) !important; }
+ }
+ }
+}
+
+@mixin off-canvas-style(
+ $background: $offcanvas-background,
+ $color: $offcanvas-color,
+ $padding: $offcanvas-padding
+) {
+ background: $background;
+
+ @if $color == auto {
+ color: isitlight($background, #000, #fff);
+ }
+ @else {
+ color: $color;
+ }
+
+ @if hasvalue($padding) {
+ padding: $padding;
+ }
+}
+
+@include exports(off-canvas) {
+ .off-canvas {
+ @extend %off-canvas;
+ @include off-canvas-layout;
+ @include off-canvas-style;
+
+ &.top { @include off-canvas-layout(top); }
+ &.right { @include off-canvas-layout(right); }
+ &.bottom { @include off-canvas-layout(bottom); }
+ &.left { @include off-canvas-layout(left); }
+
+ &.detached { @include off-canvas-detached; }
+
+ &.primary { @include off-canvas-style($primary-color, auto); }
+ &.dark { @include off-canvas-style($dark-color, auto); }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_panel.scss b/afb-client/bower_components/foundation-apps/scss/components/_panel.scss
new file mode 100644
index 0000000..5855419
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_panel.scss
@@ -0,0 +1,134 @@
+/*
+ PANEL
+ -----
+
+ The friendly panel is an all-purpose container for hiding content off-screen.
+
+ Features:
+ - Position at top, right, bottom, or left
+ - Anchor to grid block or window
+ - Define max width or height
+ - Transform into grid block depending on screen size
+*/
+
+/// @Foundation.settings
+// Panel
+$panel-size-horizontal: 300px !default;
+$panel-size-vertical: 300px !default;
+$panel-padding: 0 !default;
+
+$panel-background: #fff !default;
+$panel-shadow: 3px 0 10px rgba(black, 0.25) !default;
+
+// DEPRECATED: these variables will be removed in a future version.
+$panel-animation-speed: 0.25s !default;
+///
+
+%panel-base {
+ display: block;
+ position: absolute;
+ z-index: 100;
+ overflow-y: auto;
+ display: none;
+
+ &.is-active {
+ display: block;
+ }
+}
+
+@mixin panel-layout(
+ $position: left,
+ $size: default,
+ $shadow: $panel-shadow
+) {
+ @if $size == default {
+ @if $position == left or $position == right {
+ $size: $panel-size-horizontal;
+ }
+ @if $position == top or $position == bottom {
+ $size: $panel-size-vertical;
+ }
+ }
+
+ /*
+ Direction
+ */
+ @if $position == top {
+ top: 0;
+ left: 0;
+ width: 100%;
+ }
+ @else if $position == right {
+ top: 0;
+ right: 0;
+ height: 100%;
+ }
+ @else if $position == bottom {
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ }
+ @else if $position == left {
+ top: 0;
+ left: 0;
+ height: 100%;
+ }
+
+ /*
+ Sizing
+ */
+ // Horizontal panels are always all the way tall and have a set width
+ @if $position == left or $position == right {
+ @if unit($size) == '%' {
+ width: $size;
+ }
+ @else {
+ width: 100%;
+ @include breakpoint($size) {
+ width: $size;
+ }
+ }
+ }
+ // (For now) vertical panels don't change size
+ @if $position == top or $position == bottom {
+ height: $size;
+ }
+
+ /*
+ Shadows
+ */
+ $shadow-distance: get-shadow-value($shadow, x);
+ $shadow-size: get-shadow-value($shadow, size);
+ $shadow-color: get-shadow-value($shadow, color);
+ &.is-active {
+ @if $position == left { box-shadow: $shadow-distance 0 $shadow-size $shadow-color; }
+ @else if $position == right { box-shadow: (-$shadow-distance) 0 $shadow-size $shadow-color; }
+ @else if $position == top { box-shadow: 0 $shadow-distance $shadow-size $shadow-color; }
+ @else if $position == bottom { box-shadow: 2px (-$shadow-distance) $shadow-size $shadow-color; }
+ }
+}
+
+@mixin panel-style(
+ $padding: $panel-padding,
+ $background: $panel-background
+) {
+ /*
+ Basic styles
+ */
+ padding: $padding;
+ background: $background;
+}
+
+@include exports(panel) {
+ .panel {
+ @extend %panel-base;
+ @include panel-style;
+ }
+
+ .panel-top { @include panel-layout(top); }
+ .panel-right { @include panel-layout(right); }
+ .panel-bottom { @include panel-layout(bottom); }
+ .panel-left { @include panel-layout(left); }
+
+ .panel-fixed { position: fixed; }
+} \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_popup.scss b/afb-client/bower_components/foundation-apps/scss/components/_popup.scss
new file mode 100644
index 0000000..03403d6
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_popup.scss
@@ -0,0 +1,68 @@
+/*
+ POPUP
+ -----
+
+ A floating container that can anchor to any other on-screen element, and contain any content, including grid blocks or panels.
+*/
+
+/// @Foundation.settings
+// Popup
+$popup-width: rem-calc(300) !default;
+$popup-background: #fff !default;
+$popup-border: 0 !default;
+$popup-radius: 0 !default;
+$popup-shadow: 0 0 10px rgba(#000, 0.25) !default;
+///
+
+%popup {
+ position: absolute;
+ z-index: 1000;
+ opacity: 0;
+ overflow: hidden;
+ transition: opacity 0.25s ease-out;
+ pointer-events: none;
+
+ &.tether-enabled {
+ opacity: 1;
+ pointer-events: auto;
+ }
+}
+
+@mixin popup-layout(
+ $width: $popup-width
+) {
+ width: $popup-width;
+}
+@mixin popup-style(
+ $background: $popup-background,
+ $color: #000,
+ $radius: $popup-radius,
+ $shadow: $popup-shadow,
+ $border: $popup-border
+) {
+ background: $background;
+ border-radius: $radius;
+ box-shadow: $shadow;
+ border: $border;
+}
+
+@mixin popup(
+ $width: $popup-width,
+ $background: $popup-background,
+ $radius: $popup-radius,
+ $shadow: $popup-shadow,
+ $border: $popup-border
+) {
+ @extend %popup;
+ @include popup-layout($width);
+ @include popup-style($background, isitlight($background), $radius, $shadow, $border);
+}
+
+@include exports(popup) {
+ .popup {
+ @include popup;
+
+ &.dark { @include popup-style($dark-color, #fff); }
+ &.primary { @include popup-style($primary-color, isitlight($primary-color)); }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_switch.scss b/afb-client/bower_components/foundation-apps/scss/components/_switch.scss
new file mode 100644
index 0000000..7710ad4
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_switch.scss
@@ -0,0 +1,130 @@
+/*
+ SWITCH
+ ------
+*/
+
+/// @Foundation.settings
+// Switch
+$switch-width: rem-calc(50) !default;
+$switch-height: rem-calc(32) !default;
+$switch-background: #ccc !default;
+$switch-background-active: $primary-color !default;
+$switch-border: 0 !default;
+$switch-radius: 9999px !default;
+$switch-animation-speed: 0.15s !default;
+
+$switch-paddle-color: white !default;
+$switch-paddle-offset: 4px !default;
+///
+
+%switch {
+ position: relative;
+ overflow: hidden;
+ display: inline-block;
+
+ > input {
+ position: absolute;
+ left: -9999px;
+ outline: none;
+ }
+
+ > label {
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+ display: block;
+ width: 100%;
+ height: 100%;
+ cursor: pointer;
+ margin: 0;
+
+ // Paddle
+ &::after {
+ content: '';
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ }
+ }
+}
+
+/*
+ Defines the dimmensions of the switch.
+
+ $width - width of the switch.
+ $height - height of the switch.
+*/
+@mixin switch-layout(
+ $width: $switch-width,
+ $height: $switch-height
+) {
+ width: $width;
+ height: $height;
+
+ > label {
+ &::after {
+ width: $height;
+ height: $height;
+ }
+ }
+ input:checked + label {
+ &::after {
+ left: $width - $height;
+ }
+ }
+}
+
+@mixin switch-style(
+ $background: $switch-background,
+ $background-active: $switch-background-active,
+ $border: $switch-border,
+ $radius: $switch-radius,
+ $paddle-color: $switch-paddle-color,
+ $paddle-offset: $switch-paddle-offset,
+ $animation-speed: $switch-animation-speed
+) {
+ @if hasvalue($border) {
+ border: $border;
+ }
+ border-radius: $radius;
+
+ > label {
+ background: $background;
+
+ &::after {
+ background: $paddle-color;
+ border-radius: $radius;
+ transition: left $animation-speed ease-out;
+
+ @if hasvalue($paddle-offset) {
+ border: $paddle-offset solid $background
+ }
+ }
+ }
+
+ input:checked + label {
+ background: $background-active;
+ margin: 0;
+
+ &::after {
+ @if hasvalue($paddle-offset) {
+ border-color: $background-active;
+ }
+ }
+ }
+}
+
+@mixin switch() {
+ @extend %switch;
+ @include switch-layout;
+ @include switch-style;
+}
+
+@include exports(switch) {
+ .switch {
+ @include switch;
+
+ &.small { @include switch-layout(rem-calc(40), rem-calc(26)); }
+ &.large { @include switch-layout(rem-calc(60), rem-calc(38)); }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_tabs.scss b/afb-client/bower_components/foundation-apps/scss/components/_tabs.scss
new file mode 100644
index 0000000..7e4293e
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_tabs.scss
@@ -0,0 +1,100 @@
+/*
+ TABS
+ ----
+*/
+
+/// @Foundation.settings
+// Tabs
+$tabstrip-background: transparent !default;
+
+$tab-title-background: $gray-light !default;
+$tab-title-background-hover: smartscale($tab-title-background, 5%) !default;
+$tab-title-background-active: smartscale($tab-title-background, 3%) !default;
+$tab-title-color: isitlight($tab-title-background) !default;
+$tab-title-color-active: $tab-title-color !default;
+
+$tab-title-padding: $global-padding !default;
+$tab-content-padding: $global-padding !default;
+///
+
+@mixin tabstrip(
+ $orientation: horizontal,
+ $background: $tabstrip-background
+) {
+ /*
+ Container styles
+ */
+ display: flex;
+ background: $background;
+
+ @if $orientation == vertical {
+ flex-flow: column nowrap;
+ }
+ @else {
+ flex-flow: row wrap;
+ }
+}
+
+@mixin tabstrip-item(
+ $background: $tab-title-background,
+ $background-hover: $tab-title-background-hover,
+ $background-active: $tab-title-background-active,
+ $color: $tab-title-color,
+ $color-active: $tab-title-color-active,
+ $padding: $tab-title-padding
+) {
+ background: $background;
+ padding: $padding;
+ line-height: 1;
+ margin: 0;
+ flex: 0 1 auto;
+ cursor: pointer;
+ color: $color;
+
+ &.is-active {
+ background: $background-active;
+ color: $color-active;
+
+ &:hover {
+ background: $background-hover;
+ }
+ }
+ &:hover {
+ background: $background-hover;
+ }
+}
+
+@mixin tab-content(
+ $padding: $tab-content-padding
+) {
+ padding: $padding;
+}
+
+@mixin tab-content-item {
+ display: none;
+ &.is-active {
+ display: block;
+ }
+}
+
+@include exports(tabs) {
+ .tabs {
+ @include tabstrip(horizontal);
+
+ &.vertical {
+ @include tabstrip(vertical);
+ }
+
+ .tab-item {
+ @include tabstrip-item;
+ }
+ }
+
+ .tab-contents {
+ @include tab-content;
+
+ .tab-content {
+ @include tab-content-item;
+ }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_title-bar.scss b/afb-client/bower_components/foundation-apps/scss/components/_title-bar.scss
new file mode 100644
index 0000000..e73bb4e
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_title-bar.scss
@@ -0,0 +1,135 @@
+/*
+ TITLE BAR
+ ---------
+
+ A navigational component which can display the current screen the user is on, along with additional controls or menu items.
+
+ The title bar includes classes to create center, left, and right sections, which can be used in any combination. However, in the markup, the sections must come in this order:
+ - Center
+ - Left
+ - Right
+*/
+
+/// @Foundation.settings
+// Title Bar
+$titlebar-center-width: 50% !default;
+$titlebar-side-width: (100% - $titlebar-center-width) / 2 !default;
+$titlebar-background: #eee !default;
+$titlebar-color: #000 !default;
+$titlebar-border: 1px solid #ccc !default;
+$titlebar-padding: $global-padding !default;
+$titlebar-item-classes: (
+ center: 'center',
+ left: 'left',
+ right: 'right',
+ title: 'title',
+) !default;
+///
+
+%title-bar {
+ $center: map-get($titlebar-item-classes, center);
+ $left: map-get($titlebar-item-classes, left);
+ $right: map-get($titlebar-item-classes, right);
+ $title: map-get($titlebar-item-classes, title);
+
+ display: flex;
+ flex: 0 0 auto;
+ align-items: center;
+ justify-content: flex-start;
+ overflow: visible;
+
+ // Denotes the title of the bar
+ .#{$title} {
+ font-weight: bold;
+ }
+
+ // Denotes left, right, and center sections of the bar
+ .#{$left}, .#{$center}, .#{$right} {
+ display: block;
+ white-space: nowrap;
+ overflow: visible;
+
+ // If only one section is in use, stretch it all the way out
+ &:first-child:last-child {
+ flex: 1;
+ margin: 0;
+ }
+ }
+
+ // Left always comes first, then center, then right
+ // The left and right sections have the same width
+ .#{$left} {
+ order: 1;
+ flex: 0 0 $titlebar-side-width;
+ }
+ .#{$center} {
+ order: 2;
+ flex: 0 0 $titlebar-center-width;
+ text-align: center;
+ }
+ .#{$right} {
+ order: 3;
+ flex: 0 0 $titlebar-side-width;
+ text-align: right;
+ }
+
+ // If only left and right are in use, stretch them both out equally
+ .#{$left}:first-child {
+ flex: 1 1 auto;
+ }
+ .#{$left}:first-child + .#{$right}:last-child {
+ flex: 1 1 auto;
+ }
+
+ // If only center and right are in use, shift the center section into the right position
+ .#{$center}:first-child:not(:last-child) {
+ margin-left: $titlebar-side-width;
+ }
+ // If only center and left are in use, override the above style
+ .#{$center} + .#{$left} {
+ margin-right: -($titlebar-side-width);
+ }
+}
+
+@mixin title-bar-style(
+ $background: $titlebar-background,
+ $color: $titlebar-color,
+ $border: $titlebar-border,
+ $padding: $titlebar-padding
+) {
+ background: $background;
+ color: $color;
+ padding: $padding;
+ border-bottom: $border;
+}
+
+@mixin title-bar(
+ $background: $titlebar-background,
+ $color: $titlebar-color,
+ $border: $titlebar-border,
+ $padding: $titlebar-padding
+) {
+ @extend %title-bar;
+ @include title-bar-style($background, $color, $border, $padding);
+}
+
+@include exports(title-bar) {
+ .title-bar {
+ @include title-bar;
+
+ &.primary {
+ @include title-bar-style($primary-color, isitlight($primary-color));
+ a, a:hover { color: isitlight($primary-color); }
+ @if using(iconic) { .iconic { @include color-icon(isitlight($primary-color)); } }
+ }
+ &.dark {
+ @include title-bar-style($dark-color, #fff);
+ a, a:hover { color: #fff; }
+ @if using(iconic) { .iconic { @include color-icon(#fff); } }
+ }
+ }
+ .title-bar-bottom {
+ border-bottom: 0;
+ border-top: $titlebar-border;
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_typography.scss b/afb-client/bower_components/foundation-apps/scss/components/_typography.scss
new file mode 100755
index 0000000..8e64a89
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_typography.scss
@@ -0,0 +1,345 @@
+/*
+ TYPOGRAPHY
+ ----------
+
+ Includes typographic resets for many common elements, and a few helper classes.
+ - Headers
+ - Subheaders
+ - Lead paragraphs
+ - Ordered/unordered lists
+ - Code samples
+ - Anchors
+ - Dividers
+ - Blockquotes
+ - Acronyms
+*/
+
+/// @Foundation.settings
+// Typography
+// We use these to control header font styles
+$header-font-family: $body-font-family !default;
+$header-font-weight: $font-weight-normal !default;
+$header-font-style: $font-weight-normal !default;
+$header-font-color: #222 !default;
+$header-line-height: 1.4 !default;
+$header-top-margin: .2rem !default;
+$header-bottom-margin: .5rem !default;
+$header-text-rendering: optimizeLegibility !default;
+
+// We use these to control header font sizes
+$h1-font-size: rem-calc(44) !default;
+$h2-font-size: rem-calc(37) !default;
+$h3-font-size: rem-calc(27) !default;
+$h4-font-size: rem-calc(23) !default;
+$h5-font-size: rem-calc(18) !default;
+$h6-font-size: 1rem !default;
+
+// We use these to control header size reduction on small screens
+$h1-font-reduction: rem-calc(10) !default;
+$h2-font-reduction: rem-calc(10) !default;
+$h3-font-reduction: rem-calc(5) !default;
+$h4-font-reduction: rem-calc(5) !default;
+$h5-font-reduction: 0 !default;
+$h6-font-reduction: 0 !default;
+
+// These control how subheaders are styled.
+$subheader-line-height: 1.4 !default;
+$subheader-font-color: scale-color($header-font-color, $lightness: 35%) !default;
+$subheader-font-weight: $font-weight-normal !default;
+$subheader-top-margin: .2rem !default;
+$subheader-bottom-margin: .5rem !default;
+
+// A general <small> styling
+$small-font-size: 60% !default;
+$small-font-color: scale-color($header-font-color, $lightness: 35%) !default;
+
+// We use these to style paragraphs
+$paragraph-font-family: inherit !default;
+$paragraph-font-weight: $font-weight-normal !default;
+$paragraph-font-size: 1rem !default;
+$paragraph-line-height: 1.6 !default;
+$paragraph-margin-bottom: rem-calc(20) !default;
+$paragraph-aside-font-size: rem-calc(14) !default;
+$paragraph-aside-line-height: 1.35 !default;
+$paragraph-aside-font-style: italic !default;
+$paragraph-text-rendering: optimizeLegibility !default;
+
+// We use these to style <code> tags
+$code-color: grayscale($primary-color) !default;
+$code-font-family: Consolas, 'Liberation Mono', Courier, monospace !default;
+$code-font-weight: $font-weight-normal !default;
+$code-background-color: scale-color($secondary-color, $lightness: 70%) !default;
+$code-border-size: 1px !default;
+$code-border-style: solid !default;
+$code-border-color: scale-color($code-background-color, $lightness: -10%) !default;
+$code-padding: rem-calc(2) rem-calc(5) rem-calc(1) !default;
+
+// We use these to style anchors
+$anchor-text-decoration: none !default;
+$anchor-text-decoration-hover: none !default;
+$anchor-font-color: $primary-color !default;
+$anchor-font-color-hover: scale-color($anchor-font-color, $lightness: -14%) !default;
+
+// We use these to style the <hr> element
+$hr-border-width: 1px !default;
+$hr-border-style: solid !default;
+$hr-border-color: #ddd !default;
+$hr-margin: rem-calc(20) !default;
+
+// We use these to style lists
+$list-font-family: $paragraph-font-family !default;
+$list-font-size: $paragraph-font-size !default;
+$list-line-height: $paragraph-line-height !default;
+$list-margin-bottom: $paragraph-margin-bottom !default;
+$list-style-position: outside !default;
+$list-side-margin: 1.1rem !default;
+$list-ordered-side-margin: 1.4rem !default;
+$list-side-margin-no-bullet: 0 !default;
+$list-nested-margin: rem-calc(20) !default;
+$definition-list-header-weight: $font-weight-bold !default;
+$definition-list-header-margin-bottom: .3rem !default;
+$definition-list-margin-bottom: rem-calc(12) !default;
+
+// We use these to style blockquotes
+$blockquote-font-color: scale-color($header-font-color, $lightness: 35%) !default;
+$blockquote-padding: rem-calc(9 20 0 19) !default;
+$blockquote-border: 1px solid #ddd !default;
+$blockquote-cite-font-size: rem-calc(13) !default;
+$blockquote-cite-font-color: scale-color($header-font-color, $lightness: 23%) !default;
+$blockquote-cite-link-color: $blockquote-cite-font-color !default;
+
+// Acronym styles
+$acronym-underline: 1px dotted #ddd !default;
+///
+
+@mixin lead {
+ font-size: $paragraph-font-size + rem-calc(3.5);
+ line-height: 1.6;
+}
+
+@mixin subheader {
+ line-height: $subheader-line-height;
+ color: $subheader-font-color;
+ font-weight: $subheader-font-weight;
+ margin-top: $subheader-top-margin;
+ margin-bottom: $subheader-bottom-margin;
+}
+
+@include exports(typography) {
+ /* Typography resets */
+ div,
+ dl,
+ dt,
+ dd,
+ ul,
+ ol,
+ li,
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6,
+ pre,
+ form,
+ p,
+ blockquote,
+ th,
+ td {
+ margin:0;
+ padding:0;
+ }
+
+ /* Default Link Styles */
+ a {
+ color: $anchor-font-color;
+ text-decoration: $anchor-text-decoration;
+ line-height: inherit;
+
+ &[ui-sref] {
+ cursor: pointer;
+ }
+
+ &:hover,
+ &:focus {
+ color: $anchor-font-color-hover;
+ @if $anchor-text-decoration-hover != $anchor-text-decoration {
+ text-decoration: $anchor-text-decoration-hover;
+ }
+ }
+
+ img { border:none; }
+ }
+
+ /* Default paragraph styles */
+ p {
+ font-family: $paragraph-font-family;
+ font-weight: $paragraph-font-weight;
+ font-size: $paragraph-font-size;
+ line-height: $paragraph-line-height;
+ margin-bottom: $paragraph-margin-bottom;
+ text-rendering: $paragraph-text-rendering;
+
+ &.lead { @include lead; }
+
+ & aside {
+ font-size: $paragraph-aside-font-size;
+ line-height: $paragraph-aside-line-height;
+ font-style: $paragraph-aside-font-style;
+ }
+ }
+
+ /* Default header styles */
+ h1, h2, h3, h4, h5, h6 {
+ font-family: $header-font-family;
+ font-weight: $header-font-weight;
+ font-style: $header-font-style;
+ color: $header-font-color;
+ text-rendering: $header-text-rendering;
+ margin-top: $header-top-margin;
+ margin-bottom: $header-bottom-margin;
+ line-height: $header-line-height;
+
+ small {
+ font-size: $small-font-size;
+ color: $small-font-color;
+ line-height: 0;
+ }
+ }
+
+ h1 { font-size: $h1-font-size - $h1-font-reduction; }
+ h2 { font-size: $h2-font-size - $h2-font-reduction; }
+ h3 { font-size: $h3-font-size - $h3-font-reduction; }
+ h4 { font-size: $h4-font-size - $h4-font-reduction; }
+ h5 { font-size: $h5-font-size - $h5-font-reduction; }
+ h6 { font-size: $h6-font-size - $h6-font-reduction; }
+
+ .subheader { @include subheader; }
+
+ hr {
+ border: $hr-border-style $hr-border-color;
+ border-width: $hr-border-width 0 0;
+ clear: both;
+ margin: $hr-margin 0 ($hr-margin - rem-calc($hr-border-width));
+ height: 0;
+ }
+
+ /* Helpful Typography Defaults */
+ em,
+ i {
+ font-style: italic;
+ line-height: inherit;
+ }
+
+ strong,
+ b {
+ font-weight: $font-weight-bold;
+ line-height: inherit;
+ }
+
+ small {
+ font-size: $small-font-size;
+ color: $small-font-color;
+ line-height: inherit;
+ }
+
+ code {
+ font-family: $code-font-family;
+ font-weight: $code-font-weight;
+ color: $code-color;
+ background-color: $code-background-color;
+ border-width: $code-border-size;
+ border-style: $code-border-style;
+ border-color: $code-border-color;
+ padding: $code-padding;
+ }
+
+ /* Lists */
+ ul,
+ ol,
+ dl {
+ font-size: $list-font-size;
+ line-height: $list-line-height;
+ margin-bottom: $list-margin-bottom;
+ list-style-position: $list-style-position;
+ font-family: $list-font-family;
+ }
+
+ /* Lists */
+ ul, ol {
+ margin-left: $list-side-margin;
+ li {
+ ul,
+ ol {
+ margin-left: $list-nested-margin;
+ margin-bottom: 0;
+ }
+ }
+ }
+
+ /* Lists without bullets */
+ ul.no-bullet {
+ &, li ul, li ol {
+ list-style-type: none;
+ }
+ margin-left: $list-side-margin-no-bullet;
+ }
+
+ /* Definition Lists */
+ dl {
+ dt {
+ margin-bottom: $definition-list-header-margin-bottom;
+ font-weight: $definition-list-header-weight;
+ }
+ dd { margin-bottom: $definition-list-margin-bottom; }
+ }
+
+ /* Abbreviations */
+ abbr,
+ acronym {
+ text-transform: uppercase;
+ font-size: 90%;
+ color: $body-font-color;
+ border-bottom: $acronym-underline;
+ cursor: help;
+ }
+ abbr {
+ text-transform: none;
+ }
+
+ /* Blockquotes */
+ blockquote {
+ margin: 0 0 $paragraph-margin-bottom;
+ padding: $blockquote-padding;
+ border-left: $blockquote-border;
+
+ cite {
+ display: block;
+ font-size: $blockquote-cite-font-size;
+ color: $blockquote-cite-font-color;
+ &:before {
+ content: "\2014 \0020";
+ }
+
+ a,
+ a:visited {
+ color: $blockquote-cite-link-color;
+ }
+ }
+ }
+ blockquote,
+ blockquote p {
+ line-height: $paragraph-line-height;
+ color: $blockquote-font-color;
+ }
+
+ @include breakpoint(medium) {
+ h1,h2,h3,h4,h5,h6 { line-height: $header-line-height; }
+ h1 { font-size: $h1-font-size; }
+ h2 { font-size: $h2-font-size; }
+ h3 { font-size: $h3-font-size; }
+ h4 { font-size: $h4-font-size; }
+ h5 { font-size: $h5-font-size; }
+ h6 { font-size: $h6-font-size; }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/components/_utilities.scss b/afb-client/bower_components/foundation-apps/scss/components/_utilities.scss
new file mode 100755
index 0000000..dabe22f
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/components/_utilities.scss
@@ -0,0 +1,160 @@
+/*
+ UTILITIES
+ ---------
+
+ Responsive helper classes to assist you in quickly doing basic formatting and layout.
+
+ Features:
+ - Vertical alignment
+ - Visibility
+ - Text alignment
+ - Floating
+*/
+
+$block-selector: '[class*="grid-block"]';
+
+@mixin show-for($size, $prop: block) {
+ &:not(.ng-hide) {
+ display: none !important;
+ @include breakpoint($size) {
+ display: $prop !important;
+ }
+ }
+}
+
+@mixin show-for-only($size, $prop: block) {
+ &:not(.ng-hide) {
+ display: none !important;
+ @include breakpoint($size only) {
+ display: $prop !important;
+ }
+ }
+}
+
+@mixin hide-for($size, $prop: block) {
+ &:not(.ng-hide) {
+ display: $prop !important;
+ @include breakpoint($size) {
+ display: none !important;
+ }
+ }
+}
+
+@mixin hide-for-only($size, $prop: block) {
+ &:not(.ng-hide) {
+ display: $prop !important;
+ @include breakpoint($size only) {
+ display: none !important;
+ }
+ }
+}
+
+@include exports(utilities) {
+ // Vertical alignment
+ .v-align {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ $align-values: (
+ 'top': flex-start,
+ 'center': center,
+ 'bottom': flex-end,
+ );
+
+ @each $orient in (top, center, bottom) {
+ .align-#{$orient} {
+ align-self: map-get($align-values, $orient);
+ }
+ }
+
+ @each $size in $breakpoint-classes {
+ @each $orient in (top, center, bottom) {
+ @include breakpoint($size) {
+ .#{$size}-align-#{$orient} {
+ align-self: map-get($align-values, $orient);
+ }
+ }
+ }
+ }
+ }
+
+ // Visibility
+ .hide { display: none !important; }
+
+ .invisible { visibility: hidden; }
+
+ @each $size in $breakpoint-classes {
+ .hide-for-#{$size} {
+ @include hide-for($size);
+ &#{$block-selector} { @include hide-for($size, flex); }
+ }
+
+ .show-for-#{$size} {
+ @include show-for($size);
+ &#{$block-selector} { @include show-for($size, flex); }
+ }
+
+ .hide-for-#{$size}-only {
+ @include hide-for-only($size);
+ &#{$block-selector} { @include hide-for-only($size, flex); }
+ }
+
+ .show-for-#{$size}-only {
+ @include show-for-only($size);
+ &#{$block-selector} { @include show-for-only($size, flex); }
+ }
+ }
+
+ @each $orientation in (portrait, landscape) {
+ .hide-for-#{$orientation} {
+ @include breakpoint($orientation) {
+ display: none !important;
+ &#{$block-selector} { display: flex !important; }
+ }
+ }
+
+ .show-for-#{$orientation} {
+ display: none !important;
+
+ @include breakpoint($orientation) {
+ display: block !important;
+ &#{$block-selector} { display: flex !important; }
+ }
+ }
+ }
+
+ /*
+ Text alignment
+ */
+ @each $align in (left, right, center, justify) {
+ .text-#{$align} {
+ text-align: $align;
+ }
+
+ @each $size in $breakpoint-classes {
+ @include breakpoint($size) {
+ .#{$size}-text-#{$align} {
+ text-align: $align;
+ }
+ }
+
+ @include breakpoint($size only) {
+ .#{$size}-only-text-#{$align} {
+ text-align: $align;
+ }
+ }
+ }
+ }
+
+ /*
+ Floating
+ */
+ .clearfix { @include clearfix; }
+
+ @each $float in (left, right, none) {
+ .float-#{$float} {
+ float: #{$float};
+ }
+ }
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/foundation.scss b/afb-client/bower_components/foundation-apps/scss/foundation.scss
new file mode 100755
index 0000000..42ff302
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/foundation.scss
@@ -0,0 +1,50 @@
+// Foundation for Apps
+// by ZURB
+// foundation.zurb.com
+// Licensed under MIT Open Source
+
+$foundation-version: '1.1.0';
+
+// Make sure the charset is set appropriately
+@charset "UTF-8";
+
+// Libraries (let's make Normalize an external dependency eventually)
+@import
+ "vendor/normalize";
+
+// Helpers
+@import
+ "helpers/functions",
+ "helpers/mixins",
+ "helpers/breakpoints",
+ "helpers/images";
+
+// Global styles
+@import
+ "global";
+
+// Components
+@import
+ "components/iconic",
+ "components/action-sheet",
+ "components/block-list",
+ "components/button",
+ "components/button-group",
+ "components/card",
+ "components/extras",
+ "components/forms",
+ "components/grid",
+ "components/title-bar",
+ "components/label",
+ "components/list",
+ "components/menu-bar",
+ "components/modal",
+ "components/motion",
+ "components/notification",
+ "components/off-canvas",
+ "components/popup",
+ "components/switch",
+ "components/tabs",
+ "components/accordion",
+ "components/typography",
+ "components/utilities";
diff --git a/afb-client/bower_components/foundation-apps/scss/helpers/_breakpoints.scss b/afb-client/bower_components/foundation-apps/scss/helpers/_breakpoints.scss
new file mode 100644
index 0000000..36300d7
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/helpers/_breakpoints.scss
@@ -0,0 +1,154 @@
+// Foundation for Apps
+//
+// BREAKPOINTS
+// -----------
+// Foundation for Apps has three core breakpoints: small (> 0), medium (>= 640), and large (>= 1024).
+// There are two additional breakpoints, xlarge, and xxlarge, which (by default) do not output as sizing classes.
+// Access named breakpoints using the mixin breakpoint($size), where $size is a breakpoint value.
+// You can also pass an em, rem, or pixel value into this mixin to generate an em-based media query.
+// Create new named breakpoints using the $breakpoints map. Change which named breakpoints get their own classes by modifying the $breakpoint-classes map.
+// NOTE: If you change the $breakpoints map, know that all values must be ordered by width, smallest width first. So 0 is always your first value.
+
+// 1. Variables
+// - - - - - - - - - - - - - - -
+
+/// @Foundation.settings
+// Breakpoints
+// These are our named breakpoints. You can use them in our breakpoint function like this: @include breakpoint(medium) { // Medium and larger styles }
+$breakpoints: (
+ small: rem-calc(0),
+ medium: rem-calc(640),
+ large: rem-calc(1200),
+ xlarge: rem-calc(1440),
+ xxlarge: rem-calc(1920),
+) !default;
+
+// All of the names in this list will be output as classes in your CSS, like small-12, medium-6, and so on.
+$breakpoint-classes: (small medium large) !default;
+///
+
+// 2. Mixins
+// - - - - - - - - - - - - - - -
+
+/// Wraps a media query around the content you put inside the mixin. This mixin accepts a number of values:
+/// - If a string is passed, the mixin will look for it in the $breakpoints map, and use a media query there.
+/// - If a pixel value is passed, it will be converted to an em value using $rem-base.
+/// - If a rem value is passed, the unit will be changed to em.
+/// - If an em value is passed, the value will be used as-is.
+///
+/// @param {mixed} $val - Breakpoint name or px/em/rem value to process.
+///
+/// @output If the breakpoint is "0px and larger", outputs the content. Otherwise, outputs the content wrapped in a media query.
+@mixin breakpoint($val: small) {
+ // Size or keyword
+ $bp: nth($val, 1);
+ // Value for max-width media queries
+ $bpMax: 0;
+ // Direction of media query (up, down, or only)
+ $dir: if(length($val) > 1, nth($val, 2), up);
+ // Eventual output
+ $str: 'only screen';
+ // Is it a named media query?
+ $named: false;
+
+ // Orientation media queries have a unique syntax
+ @if $bp == 'landscape' or $bp == 'portrait' {
+ $str: $str + ' and (orientation: #{$bp})';
+ }
+
+ @else {
+ // Try to pull a named breakpoint out of the $breakpoints map
+ @if type-of($bp) == 'string' {
+ @if map-has-key($breakpoints, $bp) {
+ @if $dir == 'only' {
+ $next-bp: map-next($breakpoints, $bp);
+ @if $next-bp == null {
+ $bpMax: null;
+ }
+ @else {
+ $bpMax: $next-bp - (1/16);
+ }
+ }
+ $bp: map-get($breakpoints, $bp);
+ $named: true;
+ }
+ @else {
+ $bp: 0;
+ }
+ }
+
+ // Pixel and unitless values are converted to rems
+ @if unit($bp) == 'px' or unit($bp) == '' {
+ $bp: rem-calc($bp);
+ }
+ // Finally, the rem value is turned into an em value
+ $bp: strip-unit($bp) * 1em;
+
+ // Skip media query creation if the input is "0 up" or "0 down"
+ @if $bp > 0 or $dir == 'only' {
+ // And lo, a media query was born
+ @if $dir == 'only' {
+ @if $named == true {
+ $str: $str + ' and (min-width: #{$bp})';
+ @if $bpMax != null {
+ $str: $str + ' and (max-width: #{$bpMax})';
+ }
+ }
+ @else {
+ @debug 'ERROR: Only named media queries can have an "only" range.';
+ }
+ }
+ @else if $dir == 'down' {
+ $max: $bp - (1/16);
+ $str: $str + ' and (max-width: #{$max})';
+ }
+ @else {
+ $str: $str + ' and (min-width: #{$bp})';
+ }
+ }
+ }
+
+ // Output
+ @if $bp == 0em and $dir != 'only' {
+ @content;
+ }
+ @else {
+ @media #{$str} {
+ @content;
+ }
+ }
+}
+
+/// Prefixes selector $class with breakpoint keywords, allowing you to create a batch of breakpoint classes with one chunk of code. If you want to skip a breakpoint (like small, because mobile first and all that), add values to the $omit parameter.
+///
+/// @param {string} $class - Class to prefix with the breakpoint name and a hyphen.
+/// @param {list} $omit - Named breakpoints to skip. No class will be added with breakpoints in this list.
+@mixin each-breakpoint($class, $omit: ()) {
+ // Iterate through breakpoint classes
+ @each $size in $breakpoint-classes {
+ // Only do something if the breakpoint is not in $omit
+ @if index($omit, $size) == null {
+ $val: map-get($breakpoints, $size);
+ // Prefix $class with $size and a hyphen
+ .#{$size + '-' + $class} {
+ @include breakpoint($size) {
+ @content;
+ }
+ }
+ }
+ }
+}
+
+// 3. CSS Output
+// - - - - - - - - - - - - - - -
+
+// Meta styles are included in all builds, as they are a dependancy of the Javascript.
+// Used to provide media query values for javascript components.
+// Forward slash placed around everything to convince PhantomJS to read the value.
+
+meta.foundation-version {
+ font-family: "#{$foundation-version}";
+}
+meta.foundation-mq {
+ font-family: "#{map-serialize($breakpoints)}";
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/helpers/_functions.scss b/afb-client/bower_components/foundation-apps/scss/helpers/_functions.scss
new file mode 100755
index 0000000..cb2ab37
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/helpers/_functions.scss
@@ -0,0 +1,343 @@
+// Foundation for Apps ALPHA
+// by ZURB
+// foundation.zurb.com
+// Licensed under MIT Open Source
+
+$include-css: () !default;
+$modules: () !default;
+$rem-base: 16px !default;
+
+/// Checks if a module is in use.
+@function using($name) {
+ // Import from global scope
+ $include-css: $include-css !global;
+ $module-key: map-get($include-css, $name);
+
+ @if $module-key == true or $module-key == null {
+ @return true;
+ }
+ @else {
+ @return false;
+ }
+}
+
+/// Checks if a module's CSS has already been exported.
+@function imported($name) {
+ // Import from global scope
+ $modules: $modules !global;
+ // Check if the module is already on the imported list
+ @if type-of(index($modules, $name)) == 'number' {
+ @return true;
+ }
+ @else {
+ @return false;
+ }
+}
+
+/// Outputs the chunk of content passed if component $name hasn't yet been output.
+/// This prevents code duplication by keeping track of which components have already been output.
+///
+/// @param {string} $name - Name of component to output
+///
+/// @output The content passed, if the component has not yet been exported.
+@mixin exports($name) {
+ // Check if the module has already been imported
+ @if not(imported($name)) {
+ // Check if the module should be used
+ @if using($name) {
+ $modules: append($modules, $name) !global;
+ @content;
+ }
+ }
+}
+
+/// Map Serialize
+/// Converts a Sass map to a URL-encoded string, like this: `key1=value1&key2=value2`. We use this function to encode the media queries in the `$breakpoints` variable, so it can be transferred to our JavaScript for use there.
+///
+/// @param {map} $map - Map to convert.
+///
+/// @return A string with a map converted to a string.
+@function map-serialize($map) {
+ $str: '';
+ @each $key, $value in $map {
+ $str: $str + $key + '=' + $value + '&';
+ }
+ $str: str-slice($str, 1, -2);
+
+ @return $str;
+}
+
+/// Map Next
+/// Find the next key in a map.
+///
+/// @param {map} $map - Map to traverse.
+/// @param {mixed} $key - Key to use as a starting point.
+///
+/// @return The value for the key after `$key` if `$key` was found. If `$key` was not found, or `$key` was the last value in the map, returns null.
+@function map-next($map, $key) {
+ // Store the values of the map as a list, so we can access them with nth
+ $values: map-values($map);
+
+ // Ghetto for loop
+ $i: 1;
+ $found: false;
+ @each $val in map-keys($map) {
+ @if $found == false {
+ @if ($key == $val) {
+ $found: true;
+ }
+ $i: $i + 1;
+ }
+ }
+
+ // If the key doesn't exist, or it's the last key in the map, return null
+ @if $i > length($map) {
+ @return null;
+ }
+ // Otherwise return the value
+ @else {
+ @return nth($values, $i);
+ }
+}
+
+/// Is It Light?
+/// Checks the lightness of $color, and if it passes the $threshold of lightness, it returns the `$yes` color. Otherwise, it returns the `$no` color. Use this function to dynamically output a foreground color based on a given background color.
+///
+/// @param {color} $color - Color to check the lightness of.
+/// @param {color} $yes - Color to return if $color is light.
+/// @param {color} $no - Color to return if $color is dark.
+/// @param {percentage} $threshold - Threshold of lightness to check against.
+///
+/// @return The $yes color or $no color.
+@function isitlight($color, $yes: #000, $no: #fff, $threshold: 60%) {
+ @if (lightness($color) > $threshold) {
+ @return $yes;
+ }
+ @else {
+ @return $no;
+ }
+}
+
+/// Smart Scale
+/// Scales a color to be lighter if it's light, or darker if it's dark. Use this function to "fade" a color appropriate to its lightness.
+///
+/// @param {color} $color - Color to scale.
+/// @param {percentage} $scale - Amount to scale up or down.
+/// @param {percentage} $threshold - Threshold of lightness to check against.
+///
+/// @return A scaled color.
+@function smartscale($color, $scale: 5%, $threshold: 60%) {
+ @if lightness($color) > $threshold {
+ $scale: -$scale;
+ }
+ @return scale-color($color, $lightness: $scale);
+}
+
+/// Has Value
+/// Returns true if a value is not 0, null, or none. Use this function to check for values like `border: 0` or `box-shadow: none`.
+///
+/// @param $val - Value to check.
+///
+/// @return True if `$val` is not 0, null, or none.
+@function hasvalue($val) {
+ @if $val == null or $val == none {
+ @return false;
+ }
+ @if type-of($val) == 'number' and strip-unit($val) == 0 {
+ @return false;
+ }
+ @return true;
+}
+
+/// Get Side
+/// Determine a top/right/bottom/right value on a padding, margin, etc. property, no matter how many values were passed in. Use this function if you need to know the specific side of a value, but don't know if the value is using shorthand.
+///
+/// @param {list|number} $val - Value to analyze. Should be a shorthand sizing property, e.g. "1em 2em 1em"
+/// @param {keyword} $side - Side to return. Should be top, right, bottom, or left.
+///
+/// @return A single value based on `$val` and `$side`.
+@function get-side($val, $side) {
+ $length: length($val);
+
+ @if $length == 1 {
+ @return $val;
+ }
+ @if $length == 2 {
+ @return map-get((
+ top: nth($val, 1),
+ bottom: nth($val, 1),
+ left: nth($val, 2),
+ right: nth($val, 2),
+ ), $side);
+ }
+ @if $length == 3 {
+ @return map-get((
+ top: nth($val, 1),
+ left: nth($val, 2),
+ right: nth($val, 2),
+ bottom: nth($val, 3),
+ ), $side);
+ }
+ @if $length == 4 {
+ @return map-get((
+ top: nth($val, 1),
+ right: nth($val, 2),
+ bottom: nth($val, 3),
+ left: nth($val, 4),
+ ), $side);
+ }
+}
+
+/// Get Border Value
+/// Given border $val, find a specific element of the border, which is $elem. The possible values for $elem are width, style, and color.
+///
+/// @param {list} $val - Border value to find a value in.
+/// @param {keyword} $elem - Border component to extract.
+///
+/// @param If the value exists, returns the value. If the value is not in the border definition, the function will return a 0px width, solid style, or black border.
+ @function get-border-value($val, $elem) {
+ // Find the width, style, or color and return it
+ @each $v in $val {
+ $type: type-of($v);
+ @if $elem == width and $type == 'number' {
+ @return $v;
+ }
+ @if $elem == style and $type == 'string' {
+ @return $v;
+ }
+ @if $elem == color and $type == 'color' {
+ @return $v;
+ }
+ }
+
+ // Defaults
+ $defaults: (
+ width: 0,
+ style: solid,
+ color: black,
+ );
+ @return map-get($defaults, $elem);
+ }
+
+/// Get Shadow Value
+/// Given shadow value $val, find a specific element of the shadow, which is $elem. The possible values for $elem are x, y, size, spread, color, and inset.
+///
+/// @param {list} $val - Shadow value to find a value in.
+/// @param {keyword} $elem - Shadow component to extract.
+///
+/// @return If the value exists, returns the value. If the value is not set, returns false. If `$elem` is "inset", returns true, otherwise false.
+@function get-shadow-value($val, $elem) {
+ // Return "none" if there's no shadow
+ @if $val == none {
+ @return none;
+ }
+
+ // Inset and color are always at the beginning and end
+ @if $elem == inset {
+ @return nth($val, 1) == inset;
+ }
+ @if $elem == color {
+ @if type-of(nth($val, -1)) == color {
+ @return nth($val, -1);
+ }
+ @else {
+ @return black;
+ }
+ }
+
+ // The rest of the values are located perilously in the middle
+ $values: ();
+ @each $v in $val {
+ @if type-of($v) == 'number' {
+ $values: append($values, $v);
+ }
+ }
+ @if $elem == x {
+ @if length($values) >= 1 {
+ @return nth($values, 1);
+ }
+ @else {
+ @return 0;
+ }
+ }
+ @else if $elem == y {
+ @if length($values) >= 2 {
+ @return nth($values, 2);
+ }
+ @else {
+ @return 0;
+ }
+ }
+ @else if $elem == size {
+ @if length($values) >= 3 {
+ @return nth($values, 3);
+ }
+ @else {
+ @return 0;
+ }
+ }
+ @else if $elem == spread {
+ @if length($values) >= 4 {
+ @return nth($values, 4);
+ }
+ @else {
+ @return 0;
+ }
+ }
+ @else {
+ @return false;
+ }
+}
+
+/// Strip Unit
+/// Removes the unit (e.g. px, em, rem) from a value, returning the number only.
+///
+/// @param {number} $num - Number to strip unit from.
+///
+/// @return The same number, sans unit.
+@function strip-unit($num) {
+ @return $num / ($num * 0 + 1);
+}
+
+/// Turn to Degrees
+/// Converts a turn unit to the equivalent unit in degrees. 1turn is equal to 360 degrees. Not all browsers support turn, so this function allows us to use turns while outputting a value that all browsers understand.
+///
+/// @param {number} $value - Turn value to convert.
+///
+/// @return The same value, but in degrees.
+@function turn-to-deg($value) {
+ @return strip-unit($value) * 360deg;
+}
+
+/// Convert to Rem
+/// Converts a pixel value to matching rem value. *Any* value passed, regardless of unit, is assumed to be a pixel value. By default, the base pixel value used to calculate the rem value is taken from the `$rem-base` variable.
+///
+/// @param {number} $value - Pixel value to convert.
+///
+/// @return A number in rems, calculated based on the given value and the base pixel value.
+@function convert-to-rem($value, $base-value: $rem-base) {
+ $value: strip-unit($value) / strip-unit($base-value) * 1rem;
+ @if ($value == 0rem) { $value: 0; } // Turn 0rem into 0
+ @return $value;
+}
+
+/// Rem Calculator
+/// Converts one or more pixel values into matching rem values. This function works a lot like `convert-to-rem`, except it can convert more than one value at once, which is useful when setting multiple values on a `margin` or `padding` property.
+///
+/// @param {number|list} $values - One or more values to convert. Be sure to separate them with spaces and not commas. If you need to convert a comma-separated list, wrap the list in parentheses.
+///
+/// @return A list of converted values.
+@function rem-calc($values, $base-value: null) {
+ @if $base-value == null {
+ $base-value: $rem-base;
+ }
+ $max: length($values);
+
+ @if $max == 1 { @return convert-to-rem(nth($values, 1), $base-value); }
+
+ $remValues: ();
+ @for $i from 1 through $max {
+ $remValues: append($remValues, convert-to-rem(nth($values, $i), $base-value));
+ }
+ @return $remValues;
+}
diff --git a/afb-client/bower_components/foundation-apps/scss/helpers/_images.scss b/afb-client/bower_components/foundation-apps/scss/helpers/_images.scss
new file mode 100644
index 0000000..c91052e
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/helpers/_images.scss
@@ -0,0 +1,19 @@
+@function image-triangle($color: #000) {
+ $color: rgb(red($color), green($color), blue($color));
+ @return 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="32" height="24" viewBox="0 0 32 24"><polygon points="0,0 32,0 16,24" style="fill: #{$color}"></polygon></svg>';
+}
+
+@mixin image-checkmark($color: #000) {
+ $color: rgb(red($color), green($color), blue($color));
+ background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="32" height="32" viewBox="0 0 32 32"><path fill="#{$color}" d="M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zm6.906 8.875l2.219 2.031-12.063 13.281-6.188-6.188 2.125-2.125 3.938 3.938 9.969-10.938z"/></svg>');
+
+ // IE10 fallback, since it doesn't support SVG data URLs
+ @media screen and (min-width:0\0) {
+ @if lightness($color) < 60% {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdlJREFUeNrMl0FugzAQRY3TRZeoFyhVL0BOkGTXJezaHZwguUnECaCrdFd6gqQnCN11Uyk5QekNOlONJWMVGMCgfGlkEIY3HnsG2xFM3d96PjQB2AJsWdPtAPYOln+dTwXnuw4DHEGzBvNFN6EDCTiS9XIAwB40acNoucKoxODIie0AwAOCu8KOSnIiNx/MakK+A7sW9oTferxx3fP3T1nURoBG/irGVahHwjHm/Ggx7E3TMVdrQmoP0gngghhpZQ3QvG/EdPLUelARWI8Aycjq9Md0qMIdbcNhjmOKLoY7quk3l1Rebeqg4AwFkmq7LWGOh1pmNY0etZAWSq0OX8HoS4JvWuCopbSY26EGR/CW86K0BF+pwkLwlPuyHJhOCl5oe4ZtF++vOqST+GdOYwO+71pN2VNAjmQGPCe42weuHDg0PI8olUwnYrXTGQJH9gxq8l1LKvrQx4O6/YY32Kp/ugb3ey7gZ4xAzuhYiYTxB/UHZFAuaREVXZ2g6yFlvEC2yoKEmbsRZYNgVLk2JeaOaG+xLHN+WCszDWMqLGOrJFa1DlApjSdwoHJGqGzLIb0+cas0wh5Bh780ngswx8GJD7h8sHg2wLA/mfDLPZpdxOF0quP5rwADAAFIzSRvu1m5AAAAAElFTkSuQmCC');
+ }
+ @else {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT9JREFUeNrMV4sRgyAMDU7gCI6AE7QjMILdoCO4Cd2g3aB2Ah2hG7Qb0ODRO2r98Anqu8txKvISII/AwBFKKY6NQDugHSe6NWgPtBtjrAMKIHGF1ip/6H+qGOIC7a7ioccofMkF2kvRQY8lfKY8FSqXyFPjZyaYvebYtGg5pMUbrcQseeqHzPogVyAHwyHXXPfZ/cCMA3rqOXGkF9NObbwOl6HsFS5BdNKaXTnTj2dGXinRYGQnx74CiNTOlt/cMfpeJSEh+dnlJyCU2iIkq4CInIemtIsDcmYth+Tc9xCDyHQSMeReDow4UVnv89Dj2yUNx5wYkreB+6dPw9pH2QbOxJBr1D5SLEccuEZmEP8O1Po64aByi8IVehxLAvL/8oz4TFjefHspyTYvSvdVlu/iYrKLq9mal1O29fX8I8AANpIQzC0hTdEAAAAASUVORK5CYII=');
+ }
+ }
+} \ No newline at end of file
diff --git a/afb-client/bower_components/foundation-apps/scss/helpers/_mixins.scss b/afb-client/bower_components/foundation-apps/scss/helpers/_mixins.scss
new file mode 100644
index 0000000..403fe61
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/helpers/_mixins.scss
@@ -0,0 +1,123 @@
+// Foundation for Apps
+//
+// Mixins
+// ------
+// The framework comes with a number of mixins that help you easily create common small components,
+// like triangles and menu icons.
+
+/// CSS Triangle
+/// Creates a CSS triangle, which can be used for dropdown arrows, popup tails, and more. Use this mixin inside a `&::before` or `&::after` selector, to attach the triangle to an existing element.
+///
+/// @param {number} $triangle-size - Width of the triangle.
+/// @param {color} $triangle-color - Color of the triangle.
+/// @param {keyword} $triangle-direction - Direction the triangle points. Can be `top`, `right`, `bottom`, or `left`.
+@mixin css-triangle($triangle-size, $triangle-color, $triangle-direction) {
+ content: "";
+ display: block;
+ width: 0;
+ height: 0;
+ border: inset $triangle-size;
+ @if ($triangle-direction == top) {
+ border-color: $triangle-color transparent transparent transparent;
+ border-top-style: solid;
+ }
+ @if ($triangle-direction == bottom) {
+ border-color: transparent transparent $triangle-color transparent;
+ border-bottom-style: solid;
+ }
+ @if ($triangle-direction == left) {
+ border-color: transparent transparent transparent $triangle-color;
+ border-left-style: solid;
+ }
+ @if ($triangle-direction == right) {
+ border-color: transparent $triangle-color transparent transparent;
+ border-right-style: solid;
+ }
+}
+
+// @mixins
+//
+/// Hamburger
+/// Creates a three-line menu icon, affectionately referred to as the "hamburger icon".
+///
+/// @param {number} $width - Width of the icon, in rem units.
+/// @param {number|boolean} $left - Left offset of the icon. Set to `false` to center the icon horizontally.
+/// @param {number|boolean} $top - Top offset of the icon. Set to `false` to center the icon vertically.
+/// @param {number} $thickness - Height of each line in the icon.
+/// @param {number} $gap - Amount of space between each line.
+/// @param {color} $color - Color of the lines.
+/// @param {color} $hover-color - Color of the lines on hover.
+@mixin hamburger($width, $left, $top, $thickness, $gap, $color, $hover-color, $offcanvas) {
+ span::after {
+ content: "";
+ position: absolute;
+ display: block;
+ height: 0;
+
+ @if $offcanvas {
+ @if $top {
+ top: $top;
+ }
+ @else {
+ top: 50%;
+ margin-top: -$width/2;
+ }
+ @if $left {
+ left: $left;
+ }
+ @else {
+ left: ($tabbar-menu-icon-width - $width)/2;
+ }
+ }
+ @else {
+ top: 50%;
+ margin-top: -$width/2;
+ #{$opposite-direction}: $topbar-link-padding;
+ }
+
+ box-shadow:
+ 0 0px 0 $thickness $color,
+ 0 $gap + $thickness 0 $thickness $color,
+ 0 (2 * $gap + 2*$thickness) 0 $thickness $color;
+ width: $width;
+ }
+ span:hover:after {
+ box-shadow:
+ 0 0px 0 $thickness $hover-color,
+ 0 $gap + $thickness 0 $thickness $hover-color,
+ 0 (2 * $gap + 2*$thickness) 0 $thickness $hover-color;
+ }
+}
+
+/// Clearfix
+/// Uses the micro clearfix hack popularized by Nicolas Gallagher. Include this mixin on a container if its children are all floated, to give the container a proper height.
+///
+/// @see http://nicolasgallagher.com/micro-clearfix-hack/
+@mixin clearfix {
+ &:before, &:after { content: " "; display: table; }
+ &:after { clear: both; }
+}
+
+/// Invisible Element
+/// Makes an element visually hidden, but accessible.
+///
+/// @see http://snook.ca/archives/html_and_css/hiding-content-for-accessibility
+@mixin element-invisible {
+ position: absolute !important;
+ height: 1px;
+ width: 1px;
+ overflow: hidden;
+ clip: rect(1px, 1px, 1px, 1px);
+}
+
+/// Invisible Element Off
+/// Reverses the CSS output by the `element-invisible()` mixin.
+@mixin element-invisible-off {
+ position: static !important;
+ height: auto;
+ width: auto;
+ overflow: visible;
+ clip: auto;
+}
+
+$text-input-selectors: 'input[type="text"], input[type="password"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="week"], input[type="email"], input[type="number"], input[type="search"], input[type="tel"], input[type="time"], input[type="url"], input[type="color"], textarea';
diff --git a/afb-client/bower_components/foundation-apps/scss/vendor/_normalize.scss b/afb-client/bower_components/foundation-apps/scss/vendor/_normalize.scss
new file mode 100644
index 0000000..ae8bc83
--- /dev/null
+++ b/afb-client/bower_components/foundation-apps/scss/vendor/_normalize.scss
@@ -0,0 +1,425 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+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
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; /* 2 */
+ box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+} \ No newline at end of file