ionic-rails-engine 0.9.9.11 → 0.9.17

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,18 +1,18 @@
1
- /*!
2
- * Copyright 2014 Drifty Co.
1
+ @charset "UTF-8";/*!
2
+ * Copyright 2013 Drifty Co.
3
3
  * http://drifty.com/
4
4
  *
5
- * Ionic, v1.0.0-beta.11
5
+ * Ionic, v0.9.17
6
6
  * A powerful HTML5 mobile app framework.
7
7
  * http://ionicframework.com/
8
8
  *
9
- * By @maxlynch, @benjsperry, @adamdbradley <3
9
+ * By @maxlynch, @helloimben, @adamdbradley <3
10
10
  *
11
11
  * Licensed under the MIT license. Please see LICENSE for more information.
12
12
  *
13
13
  *//*!
14
- Ionicons, v1.5.2
14
+ Ionicons, v1.4.0
15
15
  Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
16
- https://twitter.com/benjsperry https://twitter.com/ionicframework
16
+ https://twitter.com/helloimben https://twitter.com/ionicframework
17
17
  MIT License: https://github.com/driftyco/ionicons
18
- */@font-face{font-family:Ionicons;src:url("<%= font_path('ionic/ionicons.eot') %>?v=1.5.2");src:url("<%= font_path('ionic/ionicons.eot') %>?v=1.5.2#iefix") format("embedded-opentype"),url("<%= font_path('ionic/ionicons.ttf') %>?v=1.5.2") format("truetype"),url("<%= font_path('ionic/ionicons.woff') %>?v=1.5.2") format("woff"),url("<%= font_path('ionic/ionicons.svg') %>?v=1.5.2#Ionicons") format("svg");font-weight:400;font-style:normal}.ion,.ion-alert-circled:before,.ion-alert:before,.ion-android-add-contact:before,.ion-android-add:before,.ion-android-alarm:before,.ion-android-archive:before,.ion-android-arrow-back:before,.ion-android-arrow-down-left:before,.ion-android-arrow-down-right:before,.ion-android-arrow-forward:before,.ion-android-arrow-up-left:before,.ion-android-arrow-up-right:before,.ion-android-battery:before,.ion-android-book:before,.ion-android-calendar:before,.ion-android-call:before,.ion-android-camera:before,.ion-android-chat:before,.ion-android-checkmark:before,.ion-android-clock:before,.ion-android-close:before,.ion-android-contact:before,.ion-android-contacts:before,.ion-android-data:before,.ion-android-developer:before,.ion-android-display:before,.ion-android-download:before,.ion-android-drawer:before,.ion-android-dropdown:before,.ion-android-earth:before,.ion-android-folder:before,.ion-android-forums:before,.ion-android-friends:before,.ion-android-hand:before,.ion-android-image:before,.ion-android-inbox:before,.ion-android-information:before,.ion-android-keypad:before,.ion-android-lightbulb:before,.ion-android-locate:before,.ion-android-location:before,.ion-android-mail:before,.ion-android-microphone:before,.ion-android-mixer:before,.ion-android-more:before,.ion-android-note:before,.ion-android-playstore:before,.ion-android-printer:before,.ion-android-promotion:before,.ion-android-reminder:before,.ion-android-remove:before,.ion-android-search:before,.ion-android-send:before,.ion-android-settings:before,.ion-android-share:before,.ion-android-social-user:before,.ion-android-social:before,.ion-android-sort:before,.ion-android-stair-drawer:before,.ion-android-star:before,.ion-android-stopwatch:before,.ion-android-storage:before,.ion-android-system-back:before,.ion-android-system-home:before,.ion-android-system-windows:before,.ion-android-timer:before,.ion-android-trash:before,.ion-android-user-menu:before,.ion-android-volume:before,.ion-android-wifi:before,.ion-aperture:before,.ion-archive:before,.ion-arrow-down-a:before,.ion-arrow-down-b:before,.ion-arrow-down-c:before,.ion-arrow-expand:before,.ion-arrow-graph-down-left:before,.ion-arrow-graph-down-right:before,.ion-arrow-graph-up-left:before,.ion-arrow-graph-up-right:before,.ion-arrow-left-a:before,.ion-arrow-left-b:before,.ion-arrow-left-c:before,.ion-arrow-move:before,.ion-arrow-resize:before,.ion-arrow-return-left:before,.ion-arrow-return-right:before,.ion-arrow-right-a:before,.ion-arrow-right-b:before,.ion-arrow-right-c:before,.ion-arrow-shrink:before,.ion-arrow-swap:before,.ion-arrow-up-a:before,.ion-arrow-up-b:before,.ion-arrow-up-c:before,.ion-asterisk:before,.ion-at:before,.ion-bag:before,.ion-battery-charging:before,.ion-battery-empty:before,.ion-battery-full:before,.ion-battery-half:before,.ion-battery-low:before,.ion-beaker:before,.ion-beer:before,.ion-bluetooth:before,.ion-bonfire:before,.ion-bookmark:before,.ion-briefcase:before,.ion-bug:before,.ion-calculator:before,.ion-calendar:before,.ion-camera:before,.ion-card:before,.ion-cash:before,.ion-chatbox-working:before,.ion-chatbox:before,.ion-chatboxes:before,.ion-chatbubble-working:before,.ion-chatbubble:before,.ion-chatbubbles:before,.ion-checkmark-circled:before,.ion-checkmark-round:before,.ion-checkmark:before,.ion-chevron-down:before,.ion-chevron-left:before,.ion-chevron-right:before,.ion-chevron-up:before,.ion-clipboard:before,.ion-clock:before,.ion-close-circled:before,.ion-close-round:before,.ion-close:before,.ion-closed-captioning:before,.ion-cloud:before,.ion-code-download:before,.ion-code-working:before,.ion-code:before,.ion-coffee:before,.ion-compass:before,.ion-compose:before,.ion-connection-bars:before,.ion-contrast:before,.ion-cube:before,.ion-disc:before,.ion-document-text:before,.ion-document:before,.ion-drag:before,.ion-earth:before,.ion-edit:before,.ion-egg:before,.ion-eject:before,.ion-email:before,.ion-eye-disabled:before,.ion-eye:before,.ion-female:before,.ion-filing:before,.ion-film-marker:before,.ion-fireball:before,.ion-flag:before,.ion-flame:before,.ion-flash-off:before,.ion-flash:before,.ion-flask:before,.ion-folder:before,.ion-fork-repo:before,.ion-fork:before,.ion-forward:before,.ion-funnel:before,.ion-game-controller-a:before,.ion-game-controller-b:before,.ion-gear-a:before,.ion-gear-b:before,.ion-grid:before,.ion-hammer:before,.ion-happy:before,.ion-headphone:before,.ion-heart-broken:before,.ion-heart:before,.ion-help-buoy:before,.ion-help-circled:before,.ion-help:before,.ion-home:before,.ion-icecream:before,.ion-icon-social-google-plus-outline:before,.ion-icon-social-google-plus:before,.ion-image:before,.ion-images:before,.ion-information-circled:before,.ion-information:before,.ion-ionic:before,.ion-ios7-alarm-outline:before,.ion-ios7-alarm:before,.ion-ios7-albums-outline:before,.ion-ios7-albums:before,.ion-ios7-americanfootball-outline:before,.ion-ios7-americanfootball:before,.ion-ios7-analytics-outline:before,.ion-ios7-analytics:before,.ion-ios7-arrow-back:before,.ion-ios7-arrow-down:before,.ion-ios7-arrow-forward:before,.ion-ios7-arrow-left:before,.ion-ios7-arrow-right:before,.ion-ios7-arrow-thin-down:before,.ion-ios7-arrow-thin-left:before,.ion-ios7-arrow-thin-right:before,.ion-ios7-arrow-thin-up:before,.ion-ios7-arrow-up:before,.ion-ios7-at-outline:before,.ion-ios7-at:before,.ion-ios7-barcode-outline:before,.ion-ios7-barcode:before,.ion-ios7-baseball-outline:before,.ion-ios7-baseball:before,.ion-ios7-basketball-outline:before,.ion-ios7-basketball:before,.ion-ios7-bell-outline:before,.ion-ios7-bell:before,.ion-ios7-bolt-outline:before,.ion-ios7-bolt:before,.ion-ios7-bookmarks-outline:before,.ion-ios7-bookmarks:before,.ion-ios7-box-outline:before,.ion-ios7-box:before,.ion-ios7-briefcase-outline:before,.ion-ios7-briefcase:before,.ion-ios7-browsers-outline:before,.ion-ios7-browsers:before,.ion-ios7-calculator-outline:before,.ion-ios7-calculator:before,.ion-ios7-calendar-outline:before,.ion-ios7-calendar:before,.ion-ios7-camera-outline:before,.ion-ios7-camera:before,.ion-ios7-cart-outline:before,.ion-ios7-cart:before,.ion-ios7-chatboxes-outline:before,.ion-ios7-chatboxes:before,.ion-ios7-chatbubble-outline:before,.ion-ios7-chatbubble:before,.ion-ios7-checkmark-empty:before,.ion-ios7-checkmark-outline:before,.ion-ios7-checkmark:before,.ion-ios7-circle-filled:before,.ion-ios7-circle-outline:before,.ion-ios7-clock-outline:before,.ion-ios7-clock:before,.ion-ios7-close-empty:before,.ion-ios7-close-outline:before,.ion-ios7-close:before,.ion-ios7-cloud-download-outline:before,.ion-ios7-cloud-download:before,.ion-ios7-cloud-outline:before,.ion-ios7-cloud-upload-outline:before,.ion-ios7-cloud-upload:before,.ion-ios7-cloud:before,.ion-ios7-cloudy-night-outline:before,.ion-ios7-cloudy-night:before,.ion-ios7-cloudy-outline:before,.ion-ios7-cloudy:before,.ion-ios7-cog-outline:before,.ion-ios7-cog:before,.ion-ios7-compose-outline:before,.ion-ios7-compose:before,.ion-ios7-contact-outline:before,.ion-ios7-contact:before,.ion-ios7-copy-outline:before,.ion-ios7-copy:before,.ion-ios7-download-outline:before,.ion-ios7-download:before,.ion-ios7-drag:before,.ion-ios7-email-outline:before,.ion-ios7-email:before,.ion-ios7-expand:before,.ion-ios7-eye-outline:before,.ion-ios7-eye:before,.ion-ios7-fastforward-outline:before,.ion-ios7-fastforward:before,.ion-ios7-filing-outline:before,.ion-ios7-filing:before,.ion-ios7-film-outline:before,.ion-ios7-film:before,.ion-ios7-flag-outline:before,.ion-ios7-flag:before,.ion-ios7-folder-outline:before,.ion-ios7-folder:before,.ion-ios7-football-outline:before,.ion-ios7-football:before,.ion-ios7-gear-outline:before,.ion-ios7-gear:before,.ion-ios7-glasses-outline:before,.ion-ios7-glasses:before,.ion-ios7-heart-outline:before,.ion-ios7-heart:before,.ion-ios7-help-empty:before,.ion-ios7-help-outline:before,.ion-ios7-help:before,.ion-ios7-home-outline:before,.ion-ios7-home:before,.ion-ios7-infinite-outline:before,.ion-ios7-infinite:before,.ion-ios7-information-empty:before,.ion-ios7-information-outline:before,.ion-ios7-information:before,.ion-ios7-ionic-outline:before,.ion-ios7-keypad-outline:before,.ion-ios7-keypad:before,.ion-ios7-lightbulb-outline:before,.ion-ios7-lightbulb:before,.ion-ios7-location-outline:before,.ion-ios7-location:before,.ion-ios7-locked-outline:before,.ion-ios7-locked:before,.ion-ios7-loop-strong:before,.ion-ios7-loop:before,.ion-ios7-medkit-outline:before,.ion-ios7-medkit:before,.ion-ios7-mic-off:before,.ion-ios7-mic-outline:before,.ion-ios7-mic:before,.ion-ios7-minus-empty:before,.ion-ios7-minus-outline:before,.ion-ios7-minus:before,.ion-ios7-monitor-outline:before,.ion-ios7-monitor:before,.ion-ios7-moon-outline:before,.ion-ios7-moon:before,.ion-ios7-more-outline:before,.ion-ios7-more:before,.ion-ios7-musical-note:before,.ion-ios7-musical-notes:before,.ion-ios7-navigate-outline:before,.ion-ios7-navigate:before,.ion-ios7-paper-outline:before,.ion-ios7-paper:before,.ion-ios7-paperplane-outline:before,.ion-ios7-paperplane:before,.ion-ios7-partlysunny-outline:before,.ion-ios7-partlysunny:before,.ion-ios7-pause-outline:before,.ion-ios7-pause:before,.ion-ios7-paw-outline:before,.ion-ios7-paw:before,.ion-ios7-people-outline:before,.ion-ios7-people:before,.ion-ios7-person-outline:before,.ion-ios7-person:before,.ion-ios7-personadd-outline:before,.ion-ios7-personadd:before,.ion-ios7-photos-outline:before,.ion-ios7-photos:before,.ion-ios7-pie-outline:before,.ion-ios7-pie:before,.ion-ios7-play-outline:before,.ion-ios7-play:before,.ion-ios7-plus-empty:before,.ion-ios7-plus-outline:before,.ion-ios7-plus:before,.ion-ios7-pricetag-outline:before,.ion-ios7-pricetag:before,.ion-ios7-pricetags-outline:before,.ion-ios7-pricetags:before,.ion-ios7-printer-outline:before,.ion-ios7-printer:before,.ion-ios7-pulse-strong:before,.ion-ios7-pulse:before,.ion-ios7-rainy-outline:before,.ion-ios7-rainy:before,.ion-ios7-recording-outline:before,.ion-ios7-recording:before,.ion-ios7-redo-outline:before,.ion-ios7-redo:before,.ion-ios7-refresh-empty:before,.ion-ios7-refresh-outline:before,.ion-ios7-refresh:before,.ion-ios7-reload:before,.ion-ios7-reloading,.ion-ios7-reloading:before,.ion-ios7-reverse-camera-outline:before,.ion-ios7-reverse-camera:before,.ion-ios7-rewind-outline:before,.ion-ios7-rewind:before,.ion-ios7-search-strong:before,.ion-ios7-search:before,.ion-ios7-settings-strong:before,.ion-ios7-settings:before,.ion-ios7-shrink:before,.ion-ios7-skipbackward-outline:before,.ion-ios7-skipbackward:before,.ion-ios7-skipforward-outline:before,.ion-ios7-skipforward:before,.ion-ios7-snowy:before,.ion-ios7-speedometer-outline:before,.ion-ios7-speedometer:before,.ion-ios7-star-half:before,.ion-ios7-star-outline:before,.ion-ios7-star:before,.ion-ios7-stopwatch-outline:before,.ion-ios7-stopwatch:before,.ion-ios7-sunny-outline:before,.ion-ios7-sunny:before,.ion-ios7-telephone-outline:before,.ion-ios7-telephone:before,.ion-ios7-tennisball-outline:before,.ion-ios7-tennisball:before,.ion-ios7-thunderstorm-outline:before,.ion-ios7-thunderstorm:before,.ion-ios7-time-outline:before,.ion-ios7-time:before,.ion-ios7-timer-outline:before,.ion-ios7-timer:before,.ion-ios7-toggle-outline:before,.ion-ios7-toggle:before,.ion-ios7-trash-outline:before,.ion-ios7-trash:before,.ion-ios7-undo-outline:before,.ion-ios7-undo:before,.ion-ios7-unlocked-outline:before,.ion-ios7-unlocked:before,.ion-ios7-upload-outline:before,.ion-ios7-upload:before,.ion-ios7-videocam-outline:before,.ion-ios7-videocam:before,.ion-ios7-volume-high:before,.ion-ios7-volume-low:before,.ion-ios7-wineglass-outline:before,.ion-ios7-wineglass:before,.ion-ios7-world-outline:before,.ion-ios7-world:before,.ion-ipad:before,.ion-iphone:before,.ion-ipod:before,.ion-jet:before,.ion-key:before,.ion-knife:before,.ion-laptop:before,.ion-leaf:before,.ion-levels:before,.ion-lightbulb:before,.ion-link:before,.ion-load-a:before,.ion-load-b:before,.ion-load-c:before,.ion-load-d:before,.ion-loading-a,.ion-loading-a:before,.ion-loading-b,.ion-loading-b:before,.ion-loading-c,.ion-loading-c:before,.ion-loading-d,.ion-loading-d:before,.ion-location:before,.ion-locked:before,.ion-log-in:before,.ion-log-out:before,.ion-loop:before,.ion-looping,.ion-looping:before,.ion-magnet:before,.ion-male:before,.ion-man:before,.ion-map:before,.ion-medkit:before,.ion-merge:before,.ion-mic-a:before,.ion-mic-b:before,.ion-mic-c:before,.ion-minus-circled:before,.ion-minus-round:before,.ion-minus:before,.ion-model-s:before,.ion-monitor:before,.ion-more:before,.ion-mouse:before,.ion-music-note:before,.ion-navicon-round:before,.ion-navicon:before,.ion-navigate:before,.ion-network:before,.ion-no-smoking:before,.ion-nuclear:before,.ion-outlet:before,.ion-paper-airplane:before,.ion-paperclip:before,.ion-pause:before,.ion-person-add:before,.ion-person-stalker:before,.ion-person:before,.ion-pie-graph:before,.ion-pin:before,.ion-pinpoint:before,.ion-pizza:before,.ion-plane:before,.ion-planet:before,.ion-play:before,.ion-playstation:before,.ion-plus-circled:before,.ion-plus-round:before,.ion-plus:before,.ion-podium:before,.ion-pound:before,.ion-power:before,.ion-pricetag:before,.ion-pricetags:before,.ion-printer:before,.ion-pull-request:before,.ion-qr-scanner:before,.ion-quote:before,.ion-radio-waves:before,.ion-record:before,.ion-refresh:before,.ion-refreshing,.ion-refreshing:before,.ion-reply-all:before,.ion-reply:before,.ion-ribbon-a:before,.ion-ribbon-b:before,.ion-sad:before,.ion-scissors:before,.ion-search:before,.ion-settings:before,.ion-share:before,.ion-shuffle:before,.ion-skip-backward:before,.ion-skip-forward:before,.ion-social-android-outline:before,.ion-social-android:before,.ion-social-apple-outline:before,.ion-social-apple:before,.ion-social-bitcoin-outline:before,.ion-social-bitcoin:before,.ion-social-buffer-outline:before,.ion-social-buffer:before,.ion-social-designernews-outline:before,.ion-social-designernews:before,.ion-social-dribbble-outline:before,.ion-social-dribbble:before,.ion-social-dropbox-outline:before,.ion-social-dropbox:before,.ion-social-facebook-outline:before,.ion-social-facebook:before,.ion-social-foursquare-outline:before,.ion-social-foursquare:before,.ion-social-freebsd-devil:before,.ion-social-github-outline:before,.ion-social-github:before,.ion-social-google-outline:before,.ion-social-google:before,.ion-social-googleplus-outline:before,.ion-social-googleplus:before,.ion-social-hackernews-outline:before,.ion-social-hackernews:before,.ion-social-instagram-outline:before,.ion-social-instagram:before,.ion-social-linkedin-outline:before,.ion-social-linkedin:before,.ion-social-pinterest-outline:before,.ion-social-pinterest:before,.ion-social-reddit-outline:before,.ion-social-reddit:before,.ion-social-rss-outline:before,.ion-social-rss:before,.ion-social-skype-outline:before,.ion-social-skype:before,.ion-social-tumblr-outline:before,.ion-social-tumblr:before,.ion-social-tux:before,.ion-social-twitter-outline:before,.ion-social-twitter:before,.ion-social-usd-outline:before,.ion-social-usd:before,.ion-social-vimeo-outline:before,.ion-social-vimeo:before,.ion-social-windows-outline:before,.ion-social-windows:before,.ion-social-wordpress-outline:before,.ion-social-wordpress:before,.ion-social-yahoo-outline:before,.ion-social-yahoo:before,.ion-social-youtube-outline:before,.ion-social-youtube:before,.ion-speakerphone:before,.ion-speedometer:before,.ion-spoon:before,.ion-star:before,.ion-stats-bars:before,.ion-steam:before,.ion-stop:before,.ion-thermometer:before,.ion-thumbsdown:before,.ion-thumbsup:before,.ion-toggle-filled:before,.ion-toggle:before,.ion-trash-a:before,.ion-trash-b:before,.ion-trophy:before,.ion-umbrella:before,.ion-university:before,.ion-unlocked:before,.ion-upload:before,.ion-usb:before,.ion-videocamera:before,.ion-volume-high:before,.ion-volume-low:before,.ion-volume-medium:before,.ion-volume-mute:before,.ion-wand:before,.ion-waterdrop:before,.ion-wifi:before,.ion-wineglass:before,.ion-woman:before,.ion-wrench:before,.ion-xbox:before,.ionicons{display:inline-block;font-family:Ionicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-ios7-reloading,.ion-loading-a,.ion-loading-b,.ion-loading-c,.ion-loading-d,.ion-looping,.ion-refreshing,.ion-spin{-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;-o-animation:spin 1s infinite linear;animation:spin 1s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.ion-loading-a{-webkit-animation-timing-function:steps(8,start);-moz-animation-timing-function:steps(8,start);animation-timing-function:steps(8,start)}.ion-alert:before{content:"\f101"}.ion-alert-circled:before{content:"\f100"}.ion-android-add:before{content:"\f2c7"}.ion-android-add-contact:before{content:"\f2c6"}.ion-android-alarm:before{content:"\f2c8"}.ion-android-archive:before{content:"\f2c9"}.ion-android-arrow-back:before{content:"\f2ca"}.ion-android-arrow-down-left:before{content:"\f2cb"}.ion-android-arrow-down-right:before{content:"\f2cc"}.ion-android-arrow-forward:before{content:"\f30f"}.ion-android-arrow-up-left:before{content:"\f2cd"}.ion-android-arrow-up-right:before{content:"\f2ce"}.ion-android-battery:before{content:"\f2cf"}.ion-android-book:before{content:"\f2d0"}.ion-android-calendar:before{content:"\f2d1"}.ion-android-call:before{content:"\f2d2"}.ion-android-camera:before{content:"\f2d3"}.ion-android-chat:before{content:"\f2d4"}.ion-android-checkmark:before{content:"\f2d5"}.ion-android-clock:before{content:"\f2d6"}.ion-android-close:before{content:"\f2d7"}.ion-android-contact:before{content:"\f2d8"}.ion-android-contacts:before{content:"\f2d9"}.ion-android-data:before{content:"\f2da"}.ion-android-developer:before{content:"\f2db"}.ion-android-display:before{content:"\f2dc"}.ion-android-download:before{content:"\f2dd"}.ion-android-drawer:before{content:"\f310"}.ion-android-dropdown:before{content:"\f2de"}.ion-android-earth:before{content:"\f2df"}.ion-android-folder:before{content:"\f2e0"}.ion-android-forums:before{content:"\f2e1"}.ion-android-friends:before{content:"\f2e2"}.ion-android-hand:before{content:"\f2e3"}.ion-android-image:before{content:"\f2e4"}.ion-android-inbox:before{content:"\f2e5"}.ion-android-information:before{content:"\f2e6"}.ion-android-keypad:before{content:"\f2e7"}.ion-android-lightbulb:before{content:"\f2e8"}.ion-android-locate:before{content:"\f2e9"}.ion-android-location:before{content:"\f2ea"}.ion-android-mail:before{content:"\f2eb"}.ion-android-microphone:before{content:"\f2ec"}.ion-android-mixer:before{content:"\f2ed"}.ion-android-more:before{content:"\f2ee"}.ion-android-note:before{content:"\f2ef"}.ion-android-playstore:before{content:"\f2f0"}.ion-android-printer:before{content:"\f2f1"}.ion-android-promotion:before{content:"\f2f2"}.ion-android-reminder:before{content:"\f2f3"}.ion-android-remove:before{content:"\f2f4"}.ion-android-search:before{content:"\f2f5"}.ion-android-send:before{content:"\f2f6"}.ion-android-settings:before{content:"\f2f7"}.ion-android-share:before{content:"\f2f8"}.ion-android-social:before{content:"\f2fa"}.ion-android-social-user:before{content:"\f2f9"}.ion-android-sort:before{content:"\f2fb"}.ion-android-stair-drawer:before{content:"\f311"}.ion-android-star:before{content:"\f2fc"}.ion-android-stopwatch:before{content:"\f2fd"}.ion-android-storage:before{content:"\f2fe"}.ion-android-system-back:before{content:"\f2ff"}.ion-android-system-home:before{content:"\f300"}.ion-android-system-windows:before{content:"\f301"}.ion-android-timer:before{content:"\f302"}.ion-android-trash:before{content:"\f303"}.ion-android-user-menu:before{content:"\f312"}.ion-android-volume:before{content:"\f304"}.ion-android-wifi:before{content:"\f305"}.ion-aperture:before{content:"\f313"}.ion-archive:before{content:"\f102"}.ion-arrow-down-a:before{content:"\f103"}.ion-arrow-down-b:before{content:"\f104"}.ion-arrow-down-c:before{content:"\f105"}.ion-arrow-expand:before{content:"\f25e"}.ion-arrow-graph-down-left:before{content:"\f25f"}.ion-arrow-graph-down-right:before{content:"\f260"}.ion-arrow-graph-up-left:before{content:"\f261"}.ion-arrow-graph-up-right:before{content:"\f262"}.ion-arrow-left-a:before{content:"\f106"}.ion-arrow-left-b:before{content:"\f107"}.ion-arrow-left-c:before{content:"\f108"}.ion-arrow-move:before{content:"\f263"}.ion-arrow-resize:before{content:"\f264"}.ion-arrow-return-left:before{content:"\f265"}.ion-arrow-return-right:before{content:"\f266"}.ion-arrow-right-a:before{content:"\f109"}.ion-arrow-right-b:before{content:"\f10a"}.ion-arrow-right-c:before{content:"\f10b"}.ion-arrow-shrink:before{content:"\f267"}.ion-arrow-swap:before{content:"\f268"}.ion-arrow-up-a:before{content:"\f10c"}.ion-arrow-up-b:before{content:"\f10d"}.ion-arrow-up-c:before{content:"\f10e"}.ion-asterisk:before{content:"\f314"}.ion-at:before{content:"\f10f"}.ion-bag:before{content:"\f110"}.ion-battery-charging:before{content:"\f111"}.ion-battery-empty:before{content:"\f112"}.ion-battery-full:before{content:"\f113"}.ion-battery-half:before{content:"\f114"}.ion-battery-low:before{content:"\f115"}.ion-beaker:before{content:"\f269"}.ion-beer:before{content:"\f26a"}.ion-bluetooth:before{content:"\f116"}.ion-bonfire:before{content:"\f315"}.ion-bookmark:before{content:"\f26b"}.ion-briefcase:before{content:"\f26c"}.ion-bug:before{content:"\f2be"}.ion-calculator:before{content:"\f26d"}.ion-calendar:before{content:"\f117"}.ion-camera:before{content:"\f118"}.ion-card:before{content:"\f119"}.ion-cash:before{content:"\f316"}.ion-chatbox:before{content:"\f11b"}.ion-chatbox-working:before{content:"\f11a"}.ion-chatboxes:before{content:"\f11c"}.ion-chatbubble:before{content:"\f11e"}.ion-chatbubble-working:before{content:"\f11d"}.ion-chatbubbles:before{content:"\f11f"}.ion-checkmark:before{content:"\f122"}.ion-checkmark-circled:before{content:"\f120"}.ion-checkmark-round:before{content:"\f121"}.ion-chevron-down:before{content:"\f123"}.ion-chevron-left:before{content:"\f124"}.ion-chevron-right:before{content:"\f125"}.ion-chevron-up:before{content:"\f126"}.ion-clipboard:before{content:"\f127"}.ion-clock:before{content:"\f26e"}.ion-close:before{content:"\f12a"}.ion-close-circled:before{content:"\f128"}.ion-close-round:before{content:"\f129"}.ion-closed-captioning:before{content:"\f317"}.ion-cloud:before{content:"\f12b"}.ion-code:before{content:"\f271"}.ion-code-download:before{content:"\f26f"}.ion-code-working:before{content:"\f270"}.ion-coffee:before{content:"\f272"}.ion-compass:before{content:"\f273"}.ion-compose:before{content:"\f12c"}.ion-connection-bars:before{content:"\f274"}.ion-contrast:before{content:"\f275"}.ion-cube:before{content:"\f318"}.ion-disc:before{content:"\f12d"}.ion-document:before{content:"\f12f"}.ion-document-text:before{content:"\f12e"}.ion-drag:before{content:"\f130"}.ion-earth:before{content:"\f276"}.ion-edit:before{content:"\f2bf"}.ion-egg:before{content:"\f277"}.ion-eject:before{content:"\f131"}.ion-email:before{content:"\f132"}.ion-eye:before{content:"\f133"}.ion-eye-disabled:before{content:"\f306"}.ion-female:before{content:"\f278"}.ion-filing:before{content:"\f134"}.ion-film-marker:before{content:"\f135"}.ion-fireball:before{content:"\f319"}.ion-flag:before{content:"\f279"}.ion-flame:before{content:"\f31a"}.ion-flash:before{content:"\f137"}.ion-flash-off:before{content:"\f136"}.ion-flask:before{content:"\f138"}.ion-folder:before{content:"\f139"}.ion-fork:before{content:"\f27a"}.ion-fork-repo:before{content:"\f2c0"}.ion-forward:before{content:"\f13a"}.ion-funnel:before{content:"\f31b"}.ion-game-controller-a:before{content:"\f13b"}.ion-game-controller-b:before{content:"\f13c"}.ion-gear-a:before{content:"\f13d"}.ion-gear-b:before{content:"\f13e"}.ion-grid:before{content:"\f13f"}.ion-hammer:before{content:"\f27b"}.ion-happy:before{content:"\f31c"}.ion-headphone:before{content:"\f140"}.ion-heart:before{content:"\f141"}.ion-heart-broken:before{content:"\f31d"}.ion-help:before{content:"\f143"}.ion-help-buoy:before{content:"\f27c"}.ion-help-circled:before{content:"\f142"}.ion-home:before{content:"\f144"}.ion-icecream:before{content:"\f27d"}.ion-icon-social-google-plus:before{content:"\f146"}.ion-icon-social-google-plus-outline:before{content:"\f145"}.ion-image:before{content:"\f147"}.ion-images:before{content:"\f148"}.ion-information:before{content:"\f14a"}.ion-information-circled:before{content:"\f149"}.ion-ionic:before{content:"\f14b"}.ion-ios7-alarm:before{content:"\f14d"}.ion-ios7-alarm-outline:before{content:"\f14c"}.ion-ios7-albums:before{content:"\f14f"}.ion-ios7-albums-outline:before{content:"\f14e"}.ion-ios7-americanfootball:before{content:"\f31f"}.ion-ios7-americanfootball-outline:before{content:"\f31e"}.ion-ios7-analytics:before{content:"\f321"}.ion-ios7-analytics-outline:before{content:"\f320"}.ion-ios7-arrow-back:before{content:"\f150"}.ion-ios7-arrow-down:before{content:"\f151"}.ion-ios7-arrow-forward:before{content:"\f152"}.ion-ios7-arrow-left:before{content:"\f153"}.ion-ios7-arrow-right:before{content:"\f154"}.ion-ios7-arrow-thin-down:before{content:"\f27e"}.ion-ios7-arrow-thin-left:before{content:"\f27f"}.ion-ios7-arrow-thin-right:before{content:"\f280"}.ion-ios7-arrow-thin-up:before{content:"\f281"}.ion-ios7-arrow-up:before{content:"\f155"}.ion-ios7-at:before{content:"\f157"}.ion-ios7-at-outline:before{content:"\f156"}.ion-ios7-barcode:before{content:"\f323"}.ion-ios7-barcode-outline:before{content:"\f322"}.ion-ios7-baseball:before{content:"\f325"}.ion-ios7-baseball-outline:before{content:"\f324"}.ion-ios7-basketball:before{content:"\f327"}.ion-ios7-basketball-outline:before{content:"\f326"}.ion-ios7-bell:before{content:"\f159"}.ion-ios7-bell-outline:before{content:"\f158"}.ion-ios7-bolt:before{content:"\f15b"}.ion-ios7-bolt-outline:before{content:"\f15a"}.ion-ios7-bookmarks:before{content:"\f15d"}.ion-ios7-bookmarks-outline:before{content:"\f15c"}.ion-ios7-box:before{content:"\f15f"}.ion-ios7-box-outline:before{content:"\f15e"}.ion-ios7-briefcase:before{content:"\f283"}.ion-ios7-briefcase-outline:before{content:"\f282"}.ion-ios7-browsers:before{content:"\f161"}.ion-ios7-browsers-outline:before{content:"\f160"}.ion-ios7-calculator:before{content:"\f285"}.ion-ios7-calculator-outline:before{content:"\f284"}.ion-ios7-calendar:before{content:"\f163"}.ion-ios7-calendar-outline:before{content:"\f162"}.ion-ios7-camera:before{content:"\f165"}.ion-ios7-camera-outline:before{content:"\f164"}.ion-ios7-cart:before{content:"\f167"}.ion-ios7-cart-outline:before{content:"\f166"}.ion-ios7-chatboxes:before{content:"\f169"}.ion-ios7-chatboxes-outline:before{content:"\f168"}.ion-ios7-chatbubble:before{content:"\f16b"}.ion-ios7-chatbubble-outline:before{content:"\f16a"}.ion-ios7-checkmark:before{content:"\f16e"}.ion-ios7-checkmark-empty:before{content:"\f16c"}.ion-ios7-checkmark-outline:before{content:"\f16d"}.ion-ios7-circle-filled:before{content:"\f16f"}.ion-ios7-circle-outline:before{content:"\f170"}.ion-ios7-clock:before{content:"\f172"}.ion-ios7-clock-outline:before{content:"\f171"}.ion-ios7-close:before{content:"\f2bc"}.ion-ios7-close-empty:before{content:"\f2bd"}.ion-ios7-close-outline:before{content:"\f2bb"}.ion-ios7-cloud:before{content:"\f178"}.ion-ios7-cloud-download:before{content:"\f174"}.ion-ios7-cloud-download-outline:before{content:"\f173"}.ion-ios7-cloud-outline:before{content:"\f175"}.ion-ios7-cloud-upload:before{content:"\f177"}.ion-ios7-cloud-upload-outline:before{content:"\f176"}.ion-ios7-cloudy:before{content:"\f17a"}.ion-ios7-cloudy-night:before{content:"\f308"}.ion-ios7-cloudy-night-outline:before{content:"\f307"}.ion-ios7-cloudy-outline:before{content:"\f179"}.ion-ios7-cog:before{content:"\f17c"}.ion-ios7-cog-outline:before{content:"\f17b"}.ion-ios7-compose:before{content:"\f17e"}.ion-ios7-compose-outline:before{content:"\f17d"}.ion-ios7-contact:before{content:"\f180"}.ion-ios7-contact-outline:before{content:"\f17f"}.ion-ios7-copy:before{content:"\f182"}.ion-ios7-copy-outline:before{content:"\f181"}.ion-ios7-download:before{content:"\f184"}.ion-ios7-download-outline:before{content:"\f183"}.ion-ios7-drag:before{content:"\f185"}.ion-ios7-email:before{content:"\f187"}.ion-ios7-email-outline:before{content:"\f186"}.ion-ios7-expand:before{content:"\f30d"}.ion-ios7-eye:before{content:"\f189"}.ion-ios7-eye-outline:before{content:"\f188"}.ion-ios7-fastforward:before{content:"\f18b"}.ion-ios7-fastforward-outline:before{content:"\f18a"}.ion-ios7-filing:before{content:"\f18d"}.ion-ios7-filing-outline:before{content:"\f18c"}.ion-ios7-film:before{content:"\f18f"}.ion-ios7-film-outline:before{content:"\f18e"}.ion-ios7-flag:before{content:"\f191"}.ion-ios7-flag-outline:before{content:"\f190"}.ion-ios7-folder:before{content:"\f193"}.ion-ios7-folder-outline:before{content:"\f192"}.ion-ios7-football:before{content:"\f329"}.ion-ios7-football-outline:before{content:"\f328"}.ion-ios7-gear:before{content:"\f195"}.ion-ios7-gear-outline:before{content:"\f194"}.ion-ios7-glasses:before{content:"\f197"}.ion-ios7-glasses-outline:before{content:"\f196"}.ion-ios7-heart:before{content:"\f199"}.ion-ios7-heart-outline:before{content:"\f198"}.ion-ios7-help:before{content:"\f19c"}.ion-ios7-help-empty:before{content:"\f19a"}.ion-ios7-help-outline:before{content:"\f19b"}.ion-ios7-home:before{content:"\f32b"}.ion-ios7-home-outline:before{content:"\f32a"}.ion-ios7-infinite:before{content:"\f19e"}.ion-ios7-infinite-outline:before{content:"\f19d"}.ion-ios7-information:before{content:"\f1a1"}.ion-ios7-information-empty:before{content:"\f19f"}.ion-ios7-information-outline:before{content:"\f1a0"}.ion-ios7-ionic-outline:before{content:"\f1a2"}.ion-ios7-keypad:before{content:"\f1a4"}.ion-ios7-keypad-outline:before{content:"\f1a3"}.ion-ios7-lightbulb:before{content:"\f287"}.ion-ios7-lightbulb-outline:before{content:"\f286"}.ion-ios7-location:before{content:"\f1a6"}.ion-ios7-location-outline:before{content:"\f1a5"}.ion-ios7-locked:before{content:"\f1a8"}.ion-ios7-locked-outline:before{content:"\f1a7"}.ion-ios7-loop:before{content:"\f32d"}.ion-ios7-loop-strong:before{content:"\f32c"}.ion-ios7-medkit:before{content:"\f289"}.ion-ios7-medkit-outline:before{content:"\f288"}.ion-ios7-mic:before{content:"\f1ab"}.ion-ios7-mic-off:before{content:"\f1a9"}.ion-ios7-mic-outline:before{content:"\f1aa"}.ion-ios7-minus:before{content:"\f1ae"}.ion-ios7-minus-empty:before{content:"\f1ac"}.ion-ios7-minus-outline:before{content:"\f1ad"}.ion-ios7-monitor:before{content:"\f1b0"}.ion-ios7-monitor-outline:before{content:"\f1af"}.ion-ios7-moon:before{content:"\f1b2"}.ion-ios7-moon-outline:before{content:"\f1b1"}.ion-ios7-more:before{content:"\f1b4"}.ion-ios7-more-outline:before{content:"\f1b3"}.ion-ios7-musical-note:before{content:"\f1b5"}.ion-ios7-musical-notes:before{content:"\f1b6"}.ion-ios7-navigate:before{content:"\f1b8"}.ion-ios7-navigate-outline:before{content:"\f1b7"}.ion-ios7-paper:before{content:"\f32f"}.ion-ios7-paper-outline:before{content:"\f32e"}.ion-ios7-paperplane:before{content:"\f1ba"}.ion-ios7-paperplane-outline:before{content:"\f1b9"}.ion-ios7-partlysunny:before{content:"\f1bc"}.ion-ios7-partlysunny-outline:before{content:"\f1bb"}.ion-ios7-pause:before{content:"\f1be"}.ion-ios7-pause-outline:before{content:"\f1bd"}.ion-ios7-paw:before{content:"\f331"}.ion-ios7-paw-outline:before{content:"\f330"}.ion-ios7-people:before{content:"\f1c0"}.ion-ios7-people-outline:before{content:"\f1bf"}.ion-ios7-person:before{content:"\f1c2"}.ion-ios7-person-outline:before{content:"\f1c1"}.ion-ios7-personadd:before{content:"\f1c4"}.ion-ios7-personadd-outline:before{content:"\f1c3"}.ion-ios7-photos:before{content:"\f1c6"}.ion-ios7-photos-outline:before{content:"\f1c5"}.ion-ios7-pie:before{content:"\f28b"}.ion-ios7-pie-outline:before{content:"\f28a"}.ion-ios7-play:before{content:"\f1c8"}.ion-ios7-play-outline:before{content:"\f1c7"}.ion-ios7-plus:before{content:"\f1cb"}.ion-ios7-plus-empty:before{content:"\f1c9"}.ion-ios7-plus-outline:before{content:"\f1ca"}.ion-ios7-pricetag:before{content:"\f28d"}.ion-ios7-pricetag-outline:before{content:"\f28c"}.ion-ios7-pricetags:before{content:"\f333"}.ion-ios7-pricetags-outline:before{content:"\f332"}.ion-ios7-printer:before{content:"\f1cd"}.ion-ios7-printer-outline:before{content:"\f1cc"}.ion-ios7-pulse:before{content:"\f335"}.ion-ios7-pulse-strong:before{content:"\f334"}.ion-ios7-rainy:before{content:"\f1cf"}.ion-ios7-rainy-outline:before{content:"\f1ce"}.ion-ios7-recording:before{content:"\f1d1"}.ion-ios7-recording-outline:before{content:"\f1d0"}.ion-ios7-redo:before{content:"\f1d3"}.ion-ios7-redo-outline:before{content:"\f1d2"}.ion-ios7-refresh:before{content:"\f1d6"}.ion-ios7-refresh-empty:before{content:"\f1d4"}.ion-ios7-refresh-outline:before{content:"\f1d5"}.ion-ios7-reload:before,.ion-ios7-reloading:before{content:"\f28e"}.ion-ios7-reverse-camera:before{content:"\f337"}.ion-ios7-reverse-camera-outline:before{content:"\f336"}.ion-ios7-rewind:before{content:"\f1d8"}.ion-ios7-rewind-outline:before{content:"\f1d7"}.ion-ios7-search:before{content:"\f1da"}.ion-ios7-search-strong:before{content:"\f1d9"}.ion-ios7-settings:before{content:"\f339"}.ion-ios7-settings-strong:before{content:"\f338"}.ion-ios7-shrink:before{content:"\f30e"}.ion-ios7-skipbackward:before{content:"\f1dc"}.ion-ios7-skipbackward-outline:before{content:"\f1db"}.ion-ios7-skipforward:before{content:"\f1de"}.ion-ios7-skipforward-outline:before{content:"\f1dd"}.ion-ios7-snowy:before{content:"\f309"}.ion-ios7-speedometer:before{content:"\f290"}.ion-ios7-speedometer-outline:before{content:"\f28f"}.ion-ios7-star:before{content:"\f1e0"}.ion-ios7-star-half:before{content:"\f33a"}.ion-ios7-star-outline:before{content:"\f1df"}.ion-ios7-stopwatch:before{content:"\f1e2"}.ion-ios7-stopwatch-outline:before{content:"\f1e1"}.ion-ios7-sunny:before{content:"\f1e4"}.ion-ios7-sunny-outline:before{content:"\f1e3"}.ion-ios7-telephone:before{content:"\f1e6"}.ion-ios7-telephone-outline:before{content:"\f1e5"}.ion-ios7-tennisball:before{content:"\f33c"}.ion-ios7-tennisball-outline:before{content:"\f33b"}.ion-ios7-thunderstorm:before{content:"\f1e8"}.ion-ios7-thunderstorm-outline:before{content:"\f1e7"}.ion-ios7-time:before{content:"\f292"}.ion-ios7-time-outline:before{content:"\f291"}.ion-ios7-timer:before{content:"\f1ea"}.ion-ios7-timer-outline:before{content:"\f1e9"}.ion-ios7-toggle:before{content:"\f33e"}.ion-ios7-toggle-outline:before{content:"\f33d"}.ion-ios7-trash:before{content:"\f1ec"}.ion-ios7-trash-outline:before{content:"\f1eb"}.ion-ios7-undo:before{content:"\f1ee"}.ion-ios7-undo-outline:before{content:"\f1ed"}.ion-ios7-unlocked:before{content:"\f1f0"}.ion-ios7-unlocked-outline:before{content:"\f1ef"}.ion-ios7-upload:before{content:"\f1f2"}.ion-ios7-upload-outline:before{content:"\f1f1"}.ion-ios7-videocam:before{content:"\f1f4"}.ion-ios7-videocam-outline:before{content:"\f1f3"}.ion-ios7-volume-high:before{content:"\f1f5"}.ion-ios7-volume-low:before{content:"\f1f6"}.ion-ios7-wineglass:before{content:"\f294"}.ion-ios7-wineglass-outline:before{content:"\f293"}.ion-ios7-world:before{content:"\f1f8"}.ion-ios7-world-outline:before{content:"\f1f7"}.ion-ipad:before{content:"\f1f9"}.ion-iphone:before{content:"\f1fa"}.ion-ipod:before{content:"\f1fb"}.ion-jet:before{content:"\f295"}.ion-key:before{content:"\f296"}.ion-knife:before{content:"\f297"}.ion-laptop:before{content:"\f1fc"}.ion-leaf:before{content:"\f1fd"}.ion-levels:before{content:"\f298"}.ion-lightbulb:before{content:"\f299"}.ion-link:before{content:"\f1fe"}.ion-load-a:before,.ion-loading-a:before{content:"\f29a"}.ion-load-b:before,.ion-loading-b:before{content:"\f29b"}.ion-load-c:before,.ion-loading-c:before{content:"\f29c"}.ion-load-d:before,.ion-loading-d:before{content:"\f29d"}.ion-location:before{content:"\f1ff"}.ion-locked:before{content:"\f200"}.ion-log-in:before{content:"\f29e"}.ion-log-out:before{content:"\f29f"}.ion-loop:before,.ion-looping:before{content:"\f201"}.ion-magnet:before{content:"\f2a0"}.ion-male:before{content:"\f2a1"}.ion-man:before{content:"\f202"}.ion-map:before{content:"\f203"}.ion-medkit:before{content:"\f2a2"}.ion-merge:before{content:"\f33f"}.ion-mic-a:before{content:"\f204"}.ion-mic-b:before{content:"\f205"}.ion-mic-c:before{content:"\f206"}.ion-minus:before{content:"\f209"}.ion-minus-circled:before{content:"\f207"}.ion-minus-round:before{content:"\f208"}.ion-model-s:before{content:"\f2c1"}.ion-monitor:before{content:"\f20a"}.ion-more:before{content:"\f20b"}.ion-mouse:before{content:"\f340"}.ion-music-note:before{content:"\f20c"}.ion-navicon:before{content:"\f20e"}.ion-navicon-round:before{content:"\f20d"}.ion-navigate:before{content:"\f2a3"}.ion-network:before{content:"\f341"}.ion-no-smoking:before{content:"\f2c2"}.ion-nuclear:before{content:"\f2a4"}.ion-outlet:before{content:"\f342"}.ion-paper-airplane:before{content:"\f2c3"}.ion-paperclip:before{content:"\f20f"}.ion-pause:before{content:"\f210"}.ion-person:before{content:"\f213"}.ion-person-add:before{content:"\f211"}.ion-person-stalker:before{content:"\f212"}.ion-pie-graph:before{content:"\f2a5"}.ion-pin:before{content:"\f2a6"}.ion-pinpoint:before{content:"\f2a7"}.ion-pizza:before{content:"\f2a8"}.ion-plane:before{content:"\f214"}.ion-planet:before{content:"\f343"}.ion-play:before{content:"\f215"}.ion-playstation:before{content:"\f30a"}.ion-plus:before{content:"\f218"}.ion-plus-circled:before{content:"\f216"}.ion-plus-round:before{content:"\f217"}.ion-podium:before{content:"\f344"}.ion-pound:before{content:"\f219"}.ion-power:before{content:"\f2a9"}.ion-pricetag:before{content:"\f2aa"}.ion-pricetags:before{content:"\f2ab"}.ion-printer:before{content:"\f21a"}.ion-pull-request:before{content:"\f345"}.ion-qr-scanner:before{content:"\f346"}.ion-quote:before{content:"\f347"}.ion-radio-waves:before{content:"\f2ac"}.ion-record:before{content:"\f21b"}.ion-refresh:before,.ion-refreshing:before{content:"\f21c"}.ion-reply:before{content:"\f21e"}.ion-reply-all:before{content:"\f21d"}.ion-ribbon-a:before{content:"\f348"}.ion-ribbon-b:before{content:"\f349"}.ion-sad:before{content:"\f34a"}.ion-scissors:before{content:"\f34b"}.ion-search:before{content:"\f21f"}.ion-settings:before{content:"\f2ad"}.ion-share:before{content:"\f220"}.ion-shuffle:before{content:"\f221"}.ion-skip-backward:before{content:"\f222"}.ion-skip-forward:before{content:"\f223"}.ion-social-android:before{content:"\f225"}.ion-social-android-outline:before{content:"\f224"}.ion-social-apple:before{content:"\f227"}.ion-social-apple-outline:before{content:"\f226"}.ion-social-bitcoin:before{content:"\f2af"}.ion-social-bitcoin-outline:before{content:"\f2ae"}.ion-social-buffer:before{content:"\f229"}.ion-social-buffer-outline:before{content:"\f228"}.ion-social-designernews:before{content:"\f22b"}.ion-social-designernews-outline:before{content:"\f22a"}.ion-social-dribbble:before{content:"\f22d"}.ion-social-dribbble-outline:before{content:"\f22c"}.ion-social-dropbox:before{content:"\f22f"}.ion-social-dropbox-outline:before{content:"\f22e"}.ion-social-facebook:before{content:"\f231"}.ion-social-facebook-outline:before{content:"\f230"}.ion-social-foursquare:before{content:"\f34d"}.ion-social-foursquare-outline:before{content:"\f34c"}.ion-social-freebsd-devil:before{content:"\f2c4"}.ion-social-github:before{content:"\f233"}.ion-social-github-outline:before{content:"\f232"}.ion-social-google:before{content:"\f34f"}.ion-social-google-outline:before{content:"\f34e"}.ion-social-googleplus:before{content:"\f235"}.ion-social-googleplus-outline:before{content:"\f234"}.ion-social-hackernews:before{content:"\f237"}.ion-social-hackernews-outline:before{content:"\f236"}.ion-social-instagram:before{content:"\f351"}.ion-social-instagram-outline:before{content:"\f350"}.ion-social-linkedin:before{content:"\f239"}.ion-social-linkedin-outline:before{content:"\f238"}.ion-social-pinterest:before{content:"\f2b1"}.ion-social-pinterest-outline:before{content:"\f2b0"}.ion-social-reddit:before{content:"\f23b"}.ion-social-reddit-outline:before{content:"\f23a"}.ion-social-rss:before{content:"\f23d"}.ion-social-rss-outline:before{content:"\f23c"}.ion-social-skype:before{content:"\f23f"}.ion-social-skype-outline:before{content:"\f23e"}.ion-social-tumblr:before{content:"\f241"}.ion-social-tumblr-outline:before{content:"\f240"}.ion-social-tux:before{content:"\f2c5"}.ion-social-twitter:before{content:"\f243"}.ion-social-twitter-outline:before{content:"\f242"}.ion-social-usd:before{content:"\f353"}.ion-social-usd-outline:before{content:"\f352"}.ion-social-vimeo:before{content:"\f245"}.ion-social-vimeo-outline:before{content:"\f244"}.ion-social-windows:before{content:"\f247"}.ion-social-windows-outline:before{content:"\f246"}.ion-social-wordpress:before{content:"\f249"}.ion-social-wordpress-outline:before{content:"\f248"}.ion-social-yahoo:before{content:"\f24b"}.ion-social-yahoo-outline:before{content:"\f24a"}.ion-social-youtube:before{content:"\f24d"}.ion-social-youtube-outline:before{content:"\f24c"}.ion-speakerphone:before{content:"\f2b2"}.ion-speedometer:before{content:"\f2b3"}.ion-spoon:before{content:"\f2b4"}.ion-star:before{content:"\f24e"}.ion-stats-bars:before{content:"\f2b5"}.ion-steam:before{content:"\f30b"}.ion-stop:before{content:"\f24f"}.ion-thermometer:before{content:"\f2b6"}.ion-thumbsdown:before{content:"\f250"}.ion-thumbsup:before{content:"\f251"}.ion-toggle:before{content:"\f355"}.ion-toggle-filled:before{content:"\f354"}.ion-trash-a:before{content:"\f252"}.ion-trash-b:before{content:"\f253"}.ion-trophy:before{content:"\f356"}.ion-umbrella:before{content:"\f2b7"}.ion-university:before{content:"\f357"}.ion-unlocked:before{content:"\f254"}.ion-upload:before{content:"\f255"}.ion-usb:before{content:"\f2b8"}.ion-videocamera:before{content:"\f256"}.ion-volume-high:before{content:"\f257"}.ion-volume-low:before{content:"\f258"}.ion-volume-medium:before{content:"\f259"}.ion-volume-mute:before{content:"\f25a"}.ion-wand:before{content:"\f358"}.ion-waterdrop:before{content:"\f25b"}.ion-wifi:before{content:"\f25c"}.ion-wineglass:before{content:"\f2b9"}.ion-woman:before{content:"\f25d"}.ion-wrench:before{content:"\f2ba"}.ion-xbox:before{content:"\f30c"}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;vertical-align:baseline;font:inherit;font-size:100%}ol,ul{list-style:none}blockquote,q{quotes:none}audio:not([controls]){display:none;height:0}[hidden],template{display:none}script{display:none!important}html{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}:focus,a,a:active,a:focus,a:hover,button,button:focus{outline:0}a{-webkit-user-drag:none;-webkit-tap-highlight-color:transparent}a[href]:hover{cursor:pointer}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}code,kbd,pre,samp{font-size:1em;font-family:monospace,serif}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{position:relative;vertical-align:baseline;font-size:75%;line-height:0}sup{top:-.5em}sub{bottom:-.25em}fieldset{margin:0 2px;padding:.35em .625em .75em;border:1px solid silver}button,input,select,textarea{margin:0;outline-offset:0;outline-style:none;outline-width:0;-webkit-font-smoothing:inherit;background-image:none}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto}img{-webkit-user-drag:none}table{border-spacing:0;border-collapse:collapse}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{overflow:hidden;-ms-touch-action:pan-y;touch-action:pan-y}.ionic-body,body{-webkit-touch-callout:none;-webkit-font-smoothing:antialiased;font-smoothing:antialiased;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0;padding:0;color:#000;word-wrap:break-word;font-size:14px;font-family:"Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;line-height:20px;text-rendering:optimizeLegibility;-webkit-backface-visibility:hidden;-webkit-user-drag:none}body.grade-b,body.grade-c{text-rendering:auto}.content{position:relative}.scroll-content{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;margin-top:-1px;width:auto;height:auto}.menu .scroll-content.scroll-content-false,.scroll-content-false{z-index:11}.scroll-view{position:relative;display:block;overflow:hidden;margin-top:-1px}.scroll{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;-webkit-transform-origin:left top;-moz-transform-origin:left top;transform-origin:left top}::-webkit-scrollbar{display:none}.scroll-bar{position:absolute;z-index:9999}.ng-animate .scroll-bar{visibility:hidden}.scroll-bar-h{right:2px;bottom:3px;left:2px;height:3px}.scroll-bar-h .scroll-bar-indicator{height:100%}.scroll-bar-v{top:2px;right:3px;bottom:2px;width:3px}.scroll-bar-v .scroll-bar-indicator{width:100%}.scroll-bar-indicator{position:absolute;border-radius:4px;background:rgba(0,0,0,.3);opacity:1}.scroll-bar-indicator.scroll-bar-fade-out{-webkit-transition:opacity .3s linear;-moz-transition:opacity .3s linear;transition:opacity .3s linear;opacity:0}.grade-b .scroll-bar-indicator,.grade-c .scroll-bar-indicator{border-radius:0;background:#aaa}.grade-b .scroll-bar-indicator.scroll-bar-fade-out,.grade-c .scroll-bar-indicator.scroll-bar-fade-out{-webkit-transition:none;-moz-transition:none;transition:none}@keyframes refresh-spin{0%{transform:translate3d(0,0,0) rotate(0)}100%{transform:translate3d(0,0,0) rotate(-180deg)}}@-webkit-keyframes refresh-spin{0%{-webkit-transform:translate3d(0,0,0) rotate(0)}100%{-webkit-transform:translate3d(0,0,0) rotate(-180deg)}}@keyframes refresh-spin-back{0%{transform:translate3d(0,0,0) rotate(-180deg)}100%{transform:translate3d(0,0,0) rotate(0)}}@-webkit-keyframes refresh-spin-back{0%{-webkit-transform:translate3d(0,0,0) rotate(-180deg)}100%{-webkit-transform:translate3d(0,0,0) rotate(0)}}.scroll-refresher{position:absolute;top:-60px;right:0;left:0;overflow:hidden;margin:auto;height:60px}.scroll-refresher .ionic-refresher-content{position:absolute;bottom:15px;left:0;width:100%;color:#666;text-align:center;font-size:30px}.scroll-refresher .ionic-refresher-content .text-pulling,.scroll-refresher .ionic-refresher-content .text-refreshing{font-size:16px;line-height:16px}.scroll-refresher .ionic-refresher-content.ionic-refresher-with-text{bottom:10px}.scroll-refresher .icon-pulling,.scroll-refresher .icon-refreshing{width:100%;-webkit-backface-visibility:hidden;-webkit-transform-style:preserve-3d;backface-visibility:hidden;transform-style:preserve-3d}.scroll-refresher .icon-pulling{-webkit-animation-name:refresh-spin-back;-moz-animation-name:refresh-spin-back;animation-name:refresh-spin-back;-webkit-animation-duration:200ms;-moz-animation-duration:200ms;animation-duration:200ms;-webkit-animation-timing-function:linear;-moz-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:none;-moz-animation-fill-mode:none;animation-fill-mode:none;-webkit-transform:translate3d(0,0,0) rotate(0deg);transform:translate3d(0,0,0) rotate(0deg)}.scroll-refresher .icon-refreshing,.scroll-refresher .text-refreshing{display:none}.scroll-refresher .icon-refreshing{-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;animation-duration:1.5s}.scroll-refresher.active .icon-pulling{-webkit-animation-name:refresh-spin;-moz-animation-name:refresh-spin;animation-name:refresh-spin;-webkit-transform:translate3d(0,0,0) rotate(-180deg);transform:translate3d(0,0,0) rotate(-180deg)}.scroll-refresher.active.refreshing .icon-pulling,.scroll-refresher.active.refreshing .text-pulling{display:none}.scroll-refresher.active.refreshing .icon-refreshing,.scroll-refresher.active.refreshing .text-refreshing{display:block}ion-infinite-scroll{height:60px;width:100%;opacity:0;-webkit-transition:opacity .25s;-moz-transition:opacity .25s;transition:opacity .25s;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-flex-direction:row;-moz-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}ion-infinite-scroll .icon{font-size:30px;color:#666}ion-infinite-scroll.active{opacity:1}.overflow-scroll{overflow-x:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch}.overflow-scroll .scroll{position:static;height:100%;-webkit-transform:translate3d(0,0,0)}.has-header{top:44px}.no-header{top:0}.has-subheader{top:88px}.has-tabs-top{top:93px}.has-header.has-subheader.has-tabs-top{top:137px}.has-footer{bottom:44px}.has-subfooter{bottom:88px}.bar-footer.has-tabs,.has-tabs{bottom:49px}.has-footer.has-tabs{bottom:93px}.pane{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:1}.view{z-index:1}.pane,.view{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:#fff;overflow:hidden}p{margin:0 0 10px}small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:#000;font-weight:500;font-family:"Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;line-height:1.2}.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1:first-child,.h2:first-child,.h3:first-child,h1:first-child,h2:first-child,h3:first-child{margin-top:0}.h1+.h1,.h1+.h2,.h1+.h3,.h1+h1,.h1+h2,.h1+h3,.h2+.h1,.h2+.h2,.h2+.h3,.h2+h1,.h2+h2,.h2+h3,.h3+.h1,.h3+.h2,.h3+.h3,.h3+h1,.h3+h2,.h3+h3,h1+.h1,h1+.h2,h1+.h3,h1+h1,h1+h2,h1+h3,h2+.h1,h2+.h2,h2+.h3,h2+h1,h2+h2,h2+h3,h3+.h1,h3+.h2,h3+.h3,h3+h1,h3+h2,h3+h3{margin-top:10px}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}.h1 small,h1 small{font-size:24px}.h2 small,h2 small{font-size:18px}.h3 small,.h4 small,h3 small,h4 small{font-size:14px}dl{margin-bottom:20px}dd,dt{line-height:1.42857}dt{font-weight:700}blockquote{margin:0 0 20px;padding:10px 20px;border-left:5px solid gray}blockquote p{font-weight:300;font-size:17.5px;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.42857}blockquote small:before{content:'\2014 \00A0'}blockquote:after,blockquote:before,q:after,q:before{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.42857}a.subdued{padding-right:10px;color:#888;text-decoration:none}a.subdued:hover{text-decoration:none}a.subdued:last-child{padding-right:0}.action-sheet-backdrop{-webkit-transition:background-color 300ms ease-in-out;-moz-transition:background-color 300ms ease-in-out;transition:background-color 300ms ease-in-out;position:fixed;top:0;left:0;z-index:11;width:100%;height:100%;background-color:transparent}.action-sheet-backdrop.active{background-color:rgba(0,0,0,.5)}.action-sheet-wrapper{-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:all ease-in-out 300ms;-moz-transition:all ease-in-out 300ms;transition:all ease-in-out 300ms;position:absolute;bottom:0;width:100%}.action-sheet-up{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.action-sheet{margin-left:15px;margin-right:15px;width:auto;z-index:11;overflow:hidden}.action-sheet .button{display:block;padding:1px;width:100%;border-radius:0;background-color:transparent;color:#4a87ee;font-size:18px}.action-sheet .button.destructive{color:#ef4e3a}.action-sheet-title{padding:10px;color:#666;text-align:center;font-size:12px}.action-sheet-group{margin-bottom:5px;border-radius:3px;background-color:#fff}.action-sheet-group .button{border-width:1px 0 0;border-radius:0}.action-sheet-group .button.active{background-color:transparent;color:inherit}.action-sheet-group .button:first-child:last-child{border-width:0}.action-sheet-open,.action-sheet-open.modal-open .modal{pointer-events:none}.action-sheet-open .action-sheet-backdrop{pointer-events:auto}.backdrop{position:fixed;top:0;left:0;z-index:11;width:100%;height:100%;background-color:rgba(0,0,0,.4);visibility:hidden;opacity:0;-webkit-transition:.1s opacity linear;-moz-transition:.1s opacity linear;transition:.1s opacity linear}.backdrop.visible{visibility:visible}.backdrop.active{opacity:1}.bar{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;right:0;left:0;z-index:10;box-sizing:border-box;padding:5px;width:100%;height:44px;border-width:0;border-style:solid;border-top:1px solid transparent;border-bottom:1px solid #ddd;background-color:#fff;background-size:0}@media (min--moz-device-pixel-ratio:1.5),(-webkit-min-device-pixel-ratio:1.5),(min-device-pixel-ratio:1.5),(min-resolution:144dpi),(min-resolution:1.5dppx){.bar{border:none;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);background-position:bottom;background-size:100% 1px;background-repeat:no-repeat}}.bar.bar-clear{border:none;background:0 0;color:#fff}.bar.bar-clear .button,.bar.bar-clear .title{color:#fff}.bar.item-input-inset .item-input-wrapper{margin-top:-1px}.bar.item-input-inset .item-input-wrapper input{padding-left:8px;width:94%;height:28px;background:0 0}.bar.bar-light{border-color:#ddd;background-color:#fff;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);color:#444}.bar.bar-light .title{color:#444}.bar.bar-light.bar-footer{background-image:linear-gradient(180deg,#ddd,#ddd 50%,transparent 50%)}.bar.bar-stable{border-color:#b2b2b2;background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);color:#444}.bar.bar-stable .title{color:#444}.bar.bar-stable.bar-footer{background-image:linear-gradient(180deg,#b2b2b2,#b2b2b2 50%,transparent 50%)}.bar.bar-positive{border-color:#145fd7;background-color:#4a87ee;background-image:linear-gradient(0deg,#145fd7,#145fd7 50%,transparent 50%);color:#fff}.bar.bar-positive .title{color:#fff}.bar.bar-positive.bar-footer{background-image:linear-gradient(180deg,#145fd7,#145fd7 50%,transparent 50%)}.bar.bar-calm{border-color:#1aacc3;background-color:#43cee6;background-image:linear-gradient(0deg,#1aacc3,#1aacc3 50%,transparent 50%);color:#fff}.bar.bar-calm .title{color:#fff}.bar.bar-calm.bar-footer{background-image:linear-gradient(180deg,#1aacc3,#1aacc3 50%,transparent 50%)}.bar.bar-assertive{border-color:#cc2311;background-color:#ef4e3a;background-image:linear-gradient(0deg,#cc2311,#cc2311 50%,transparent 50%);color:#fff}.bar.bar-assertive .title{color:#fff}.bar.bar-assertive.bar-footer{background-image:linear-gradient(180deg,#cc2311,#cc2311 50%,transparent 50%)}.bar.bar-balanced{border-color:#498f24;background-color:#6c3;background-image:linear-gradient(0deg,#498f24,#498f24 50%,transparent 50%);color:#fff}.bar.bar-balanced .title{color:#fff}.bar.bar-balanced.bar-footer{background-image:linear-gradient(180deg,#498f24,#145fd7 50%,transparent 50%)}.bar.bar-energized{border-color:#d39211;background-color:#f0b840;background-image:linear-gradient(0deg,#d39211,#d39211 50%,transparent 50%);color:#fff}.bar.bar-energized .title{color:#fff}.bar.bar-energized.bar-footer{background-image:linear-gradient(180deg,#d39211,#d39211 50%,transparent 50%)}.bar.bar-royal{border-color:#552bdf;background-color:#8a6de9;background-image:linear-gradient(0deg,#552bdf,#552bdf 50%,transparent 50%);color:#fff}.bar.bar-royal .title{color:#fff}.bar.bar-royal.bar-footer{background-image:linear-gradient(180deg,#552bdf,#552bdf 50%,transparent 50%)}.bar.bar-dark{border-color:#111;background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%);color:#fff}.bar.bar-dark .title{color:#fff}.bar.bar-dark.bar-footer{background-image:linear-gradient(180deg,#111,#111 50%,transparent 50%)}.bar .title{position:absolute;top:0;right:0;left:0;z-index:0;overflow:hidden;margin:0 10px;min-width:30px;height:43px;text-align:center;text-overflow:ellipsis;white-space:nowrap;font-size:17px;line-height:44px}.bar .title.title-left{text-align:left}.bar .title.title-right{text-align:right}.bar .title a{color:inherit}.bar .button{z-index:1;padding:0 8px;min-width:initial;min-height:31px;font-weight:400;font-size:13px;line-height:32px}.bar .button .icon:before,.bar .button.button-icon:before,.bar .button.icon-left:before,.bar .button.icon-right:before,.bar .button.icon:before{padding-right:2px;padding-left:2px;font-size:20px;line-height:32px}.bar .button.button-icon{font-size:17px}.bar .button.button-icon .icon:before,.bar .button.button-icon.icon-left:before,.bar .button.button-icon.icon-right:before,.bar .button.button-icon:before{vertical-align:top;font-size:32px;line-height:32px}.bar .button.button-clear{padding-right:2px;padding-left:2px;font-weight:300;font-size:17px}.bar .button.button-clear .icon:before,.bar .button.button-clear.icon-left:before,.bar .button.button-clear.icon-right:before,.bar .button.button-clear.icon:before{font-size:32px;line-height:32px}.bar .button.back-button{padding:0;opacity:.8}.bar .button.back-button .back-button-title{display:inline-block;vertical-align:middle;margin-left:4px}.bar .button.back-button.activated,.bar .button.back-button.active{opacity:1}.bar .button-bar>.button,.bar .buttons>.button{min-height:31px;line-height:32px}.bar .button+.button-bar,.bar .button-bar+.button{margin-left:5px}.bar .buttons,.bar .buttons.left-buttons,.bar .buttons.right-buttons{display:inherit}.bar .buttons span{display:inline-flex}.bar .buttons.pull-right,.bar .title+.button:last-child,.bar .title+.buttons,.bar>.button+.button:last-child,.bar>.button.pull-right{position:absolute;top:5px;right:5px;bottom:5px}.bar-light .button{border-color:#ddd;background-color:#fff;color:#444}.bar-light .button:hover{color:#444;text-decoration:none}.bar-light .button.activated,.bar-light .button.active{border-color:#ccc;background-color:#fafafa;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.bar-light .button.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#444;font-size:17px}.bar-light .button.button-icon{border-color:transparent;background:0 0}.bar-stable .button{border-color:#b2b2b2;background-color:#f8f8f8;color:#444}.bar-stable .button:hover{color:#444;text-decoration:none}.bar-stable .button.activated,.bar-stable .button.active{border-color:#a2a2a2;background-color:#e5e5e5;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.bar-stable .button.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#444;font-size:17px}.bar-stable .button.button-icon{border-color:transparent;background:0 0}.bar-positive .button{border-color:#145fd7;background-color:#4a87ee;color:#fff}.bar-positive .button:hover{color:#fff;text-decoration:none}.bar-positive .button.activated,.bar-positive .button.active{border-color:#145fd7;background-color:#145fd7;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.bar-positive .button.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-positive .button.button-icon{border-color:transparent;background:0 0}.bar-calm .button{border-color:#1aacc3;background-color:#43cee6;color:#fff}.bar-calm .button:hover{color:#fff;text-decoration:none}.bar-calm .button.activated,.bar-calm .button.active{border-color:#1aacc3;background-color:#1aacc3;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.bar-calm .button.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-calm .button.button-icon{border-color:transparent;background:0 0}.bar-assertive .button{border-color:#cc2311;background-color:#ef4e3a;color:#fff}.bar-assertive .button:hover{color:#fff;text-decoration:none}.bar-assertive .button.activated,.bar-assertive .button.active{border-color:#cc2311;background-color:#cc2311;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.bar-assertive .button.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-assertive .button.button-icon{border-color:transparent;background:0 0}.bar-balanced .button{border-color:#498f24;background-color:#6c3;color:#fff}.bar-balanced .button:hover{color:#fff;text-decoration:none}.bar-balanced .button.activated,.bar-balanced .button.active{border-color:#498f24;background-color:#498f24;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.bar-balanced .button.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-balanced .button.button-icon{border-color:transparent;background:0 0}.bar-energized .button{border-color:#d39211;background-color:#f0b840;color:#fff}.bar-energized .button:hover{color:#fff;text-decoration:none}.bar-energized .button.activated,.bar-energized .button.active{border-color:#d39211;background-color:#d39211;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.bar-energized .button.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-energized .button.button-icon{border-color:transparent;background:0 0}.bar-royal .button{border-color:#552bdf;background-color:#8a6de9;color:#fff}.bar-royal .button:hover{color:#fff;text-decoration:none}.bar-royal .button.activated,.bar-royal .button.active{border-color:#552bdf;background-color:#552bdf;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.bar-royal .button.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-royal .button.button-icon{border-color:transparent;background:0 0}.bar-dark .button{border-color:#111;background-color:#444;color:#fff}.bar-dark .button:hover{color:#fff;text-decoration:none}.bar-dark .button.activated,.bar-dark .button.active{border-color:#000;background-color:#262626;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.bar-dark .button.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-dark .button.button-icon{border-color:transparent;background:0 0}.bar-header{top:0;border-top-width:0;border-bottom-width:1px}.bar-header.has-tabs-top{border-bottom-width:0}.bar-footer{bottom:0;border-top-width:1px;border-bottom-width:0;background-position:top}.bar-footer.item-input-inset{position:absolute}.bar-tabs{padding:0}.bar-subheader{top:44px;display:block}.bar-subfooter{bottom:44px;display:block}.tabs{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-flex-direction:horizontal;-moz-flex-direction:horizontal;-ms-flex-direction:horizontal;flex-direction:horizontal;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);border-color:#b2b2b2;background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);color:#444;position:absolute;bottom:0;z-index:5;width:100%;height:49px;border-style:solid;border-top-width:1px;background-size:0;line-height:49px}.tabs .tab-item .badge{background-color:#444;color:#f8f8f8}@media (min--moz-device-pixel-ratio:1.5),(-webkit-min-device-pixel-ratio:1.5),(min-device-pixel-ratio:1.5),(min-resolution:144dpi),(min-resolution:1.5dppx){.tabs{padding-top:2px;border-top:none!important;border-bottom:none;background-position:top;background-size:100% 1px;background-repeat:no-repeat}}.tabs-light>.tabs,.tabs.tabs-light{border-color:#ddd;background-color:#fff;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);color:#444}.tabs-light>.tabs .tab-item .badge,.tabs.tabs-light .tab-item .badge{background-color:#444;color:#fff}.tabs-stable>.tabs,.tabs.tabs-stable{border-color:#b2b2b2;background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);color:#444}.tabs-stable>.tabs .tab-item .badge,.tabs.tabs-stable .tab-item .badge{background-color:#444;color:#f8f8f8}.tabs-positive>.tabs,.tabs.tabs-positive{border-color:#145fd7;background-color:#4a87ee;background-image:linear-gradient(0deg,#145fd7,#145fd7 50%,transparent 50%);color:#fff}.tabs-positive>.tabs .tab-item .badge,.tabs.tabs-positive .tab-item .badge{background-color:#fff;color:#4a87ee}.tabs-calm>.tabs,.tabs.tabs-calm{border-color:#1aacc3;background-color:#43cee6;background-image:linear-gradient(0deg,#1aacc3,#1aacc3 50%,transparent 50%);color:#fff}.tabs-calm>.tabs .tab-item .badge,.tabs.tabs-calm .tab-item .badge{background-color:#fff;color:#43cee6}.tabs-assertive>.tabs,.tabs.tabs-assertive{border-color:#cc2311;background-color:#ef4e3a;background-image:linear-gradient(0deg,#cc2311,#cc2311 50%,transparent 50%);color:#fff}.tabs-assertive>.tabs .tab-item .badge,.tabs.tabs-assertive .tab-item .badge{background-color:#fff;color:#ef4e3a}.tabs-balanced>.tabs,.tabs.tabs-balanced{border-color:#498f24;background-color:#6c3;background-image:linear-gradient(0deg,#498f24,#498f24 50%,transparent 50%);color:#fff}.tabs-balanced>.tabs .tab-item .badge,.tabs.tabs-balanced .tab-item .badge{background-color:#fff;color:#6c3}.tabs-energized>.tabs,.tabs.tabs-energized{border-color:#d39211;background-color:#f0b840;background-image:linear-gradient(0deg,#d39211,#d39211 50%,transparent 50%);color:#fff}.tabs-energized>.tabs .tab-item .badge,.tabs.tabs-energized .tab-item .badge{background-color:#fff;color:#f0b840}.tabs-royal>.tabs,.tabs.tabs-royal{border-color:#552bdf;background-color:#8a6de9;background-image:linear-gradient(0deg,#552bdf,#552bdf 50%,transparent 50%);color:#fff}.tabs-royal>.tabs .tab-item .badge,.tabs.tabs-royal .tab-item .badge{background-color:#fff;color:#8a6de9}.tabs-dark>.tabs,.tabs.tabs-dark{border-color:#111;background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%);color:#fff}.tabs-dark>.tabs .tab-item .badge,.tabs.tabs-dark .tab-item .badge{background-color:#fff;color:#444}.tabs-striped .tabs{background-color:#fff;background-image:none;border:none;box-shadow:0 2px 3px rgba(0,0,0,.15);padding-top:2px}.tabs-striped.tabs-light .tabs{background-color:#444}.tabs-striped.tabs-light .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-light .tab-item .badge{opacity:.4}.tabs-striped.tabs-light .tab-item.activated,.tabs-striped.tabs-light .tab-item.active,.tabs-striped.tabs-light .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0;border-color:#fff}.tabs-striped.tabs-light .tab-item.activated .badge,.tabs-striped.tabs-light .tab-item.active .badge,.tabs-striped.tabs-light .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-stable .tabs{background-color:#444}.tabs-striped.tabs-stable .tab-item{color:rgba(248,248,248,.4);opacity:1}.tabs-striped.tabs-stable .tab-item .badge{opacity:.4}.tabs-striped.tabs-stable .tab-item.activated,.tabs-striped.tabs-stable .tab-item.active,.tabs-striped.tabs-stable .tab-item.tab-item-active{margin-top:-2px;color:#f8f8f8;border-style:solid;border-width:2px 0 0;border-color:#f8f8f8}.tabs-striped.tabs-stable .tab-item.activated .badge,.tabs-striped.tabs-stable .tab-item.active .badge,.tabs-striped.tabs-stable .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-positive .tabs{background-color:#fff}.tabs-striped.tabs-positive .tab-item{color:rgba(74,135,238,.4);opacity:1}.tabs-striped.tabs-positive .tab-item .badge{opacity:.4}.tabs-striped.tabs-positive .tab-item.activated,.tabs-striped.tabs-positive .tab-item.active,.tabs-striped.tabs-positive .tab-item.tab-item-active{margin-top:-2px;color:#4a87ee;border-style:solid;border-width:2px 0 0;border-color:#4a87ee}.tabs-striped.tabs-positive .tab-item.activated .badge,.tabs-striped.tabs-positive .tab-item.active .badge,.tabs-striped.tabs-positive .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-calm .tabs{background-color:#fff}.tabs-striped.tabs-calm .tab-item{color:rgba(67,206,230,.4);opacity:1}.tabs-striped.tabs-calm .tab-item .badge{opacity:.4}.tabs-striped.tabs-calm .tab-item.activated,.tabs-striped.tabs-calm .tab-item.active,.tabs-striped.tabs-calm .tab-item.tab-item-active{margin-top:-2px;color:#43cee6;border-style:solid;border-width:2px 0 0;border-color:#43cee6}.tabs-striped.tabs-calm .tab-item.activated .badge,.tabs-striped.tabs-calm .tab-item.active .badge,.tabs-striped.tabs-calm .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-assertive .tabs{background-color:#fff}.tabs-striped.tabs-assertive .tab-item{color:rgba(239,78,58,.4);opacity:1}.tabs-striped.tabs-assertive .tab-item .badge{opacity:.4}.tabs-striped.tabs-assertive .tab-item.activated,.tabs-striped.tabs-assertive .tab-item.active,.tabs-striped.tabs-assertive .tab-item.tab-item-active{margin-top:-2px;color:#ef4e3a;border-style:solid;border-width:2px 0 0;border-color:#ef4e3a}.tabs-striped.tabs-assertive .tab-item.activated .badge,.tabs-striped.tabs-assertive .tab-item.active .badge,.tabs-striped.tabs-assertive .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-balanced .tabs{background-color:#fff}.tabs-striped.tabs-balanced .tab-item{color:rgba(102,204,51,.4);opacity:1}.tabs-striped.tabs-balanced .tab-item .badge{opacity:.4}.tabs-striped.tabs-balanced .tab-item.activated,.tabs-striped.tabs-balanced .tab-item.active,.tabs-striped.tabs-balanced .tab-item.tab-item-active{margin-top:-2px;color:#6c3;border-style:solid;border-width:2px 0 0;border-color:#6c3}.tabs-striped.tabs-balanced .tab-item.activated .badge,.tabs-striped.tabs-balanced .tab-item.active .badge,.tabs-striped.tabs-balanced .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-energized .tabs{background-color:#fff}.tabs-striped.tabs-energized .tab-item{color:rgba(240,184,64,.4);opacity:1}.tabs-striped.tabs-energized .tab-item .badge{opacity:.4}.tabs-striped.tabs-energized .tab-item.activated,.tabs-striped.tabs-energized .tab-item.active,.tabs-striped.tabs-energized .tab-item.tab-item-active{margin-top:-2px;color:#f0b840;border-style:solid;border-width:2px 0 0;border-color:#f0b840}.tabs-striped.tabs-energized .tab-item.activated .badge,.tabs-striped.tabs-energized .tab-item.active .badge,.tabs-striped.tabs-energized .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-royal .tabs{background-color:#fff}.tabs-striped.tabs-royal .tab-item{color:rgba(138,109,233,.4);opacity:1}.tabs-striped.tabs-royal .tab-item .badge{opacity:.4}.tabs-striped.tabs-royal .tab-item.activated,.tabs-striped.tabs-royal .tab-item.active,.tabs-striped.tabs-royal .tab-item.tab-item-active{margin-top:-2px;color:#8a6de9;border-style:solid;border-width:2px 0 0;border-color:#8a6de9}.tabs-striped.tabs-royal .tab-item.activated .badge,.tabs-striped.tabs-royal .tab-item.active .badge,.tabs-striped.tabs-royal .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-dark .tabs{background-color:#fff}.tabs-striped.tabs-dark .tab-item{color:rgba(68,68,68,.4);opacity:1}.tabs-striped.tabs-dark .tab-item .badge{opacity:.4}.tabs-striped.tabs-dark .tab-item.activated,.tabs-striped.tabs-dark .tab-item.active,.tabs-striped.tabs-dark .tab-item.tab-item-active{margin-top:-2px;color:#444;border-style:solid;border-width:2px 0 0;border-color:#444}.tabs-striped.tabs-dark .tab-item.activated .badge,.tabs-striped.tabs-dark .tab-item.active .badge,.tabs-striped.tabs-dark .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-background-light .tabs{background-color:#fff}.tabs-striped.tabs-background-stable .tabs{background-color:#f8f8f8}.tabs-striped.tabs-background-positive .tabs{background-color:#4a87ee}.tabs-striped.tabs-background-calm .tabs{background-color:#43cee6}.tabs-striped.tabs-background-assertive .tabs{background-color:#ef4e3a}.tabs-striped.tabs-background-balanced .tabs{background-color:#6c3}.tabs-striped.tabs-background-energized .tabs{background-color:#f0b840}.tabs-striped.tabs-background-royal .tabs{background-color:#8a6de9}.tabs-striped.tabs-background-dark .tabs{background-color:#444}.tabs-striped.tabs-color-light .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-color-light .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-light .tab-item.activated,.tabs-striped.tabs-color-light .tab-item.active,.tabs-striped.tabs-color-light .tab-item.tab-item-active{margin-top:-2px;color:#fff;border:0 solid #fff;border-top-width:2px}.tabs-striped.tabs-color-light .tab-item.activated .badge,.tabs-striped.tabs-color-light .tab-item.active .badge,.tabs-striped.tabs-color-light .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-stable .tab-item{color:rgba(248,248,248,.4);opacity:1}.tabs-striped.tabs-color-stable .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-stable .tab-item.activated,.tabs-striped.tabs-color-stable .tab-item.active,.tabs-striped.tabs-color-stable .tab-item.tab-item-active{margin-top:-2px;color:#f8f8f8;border:0 solid #f8f8f8;border-top-width:2px}.tabs-striped.tabs-color-stable .tab-item.activated .badge,.tabs-striped.tabs-color-stable .tab-item.active .badge,.tabs-striped.tabs-color-stable .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-positive .tab-item{color:rgba(74,135,238,.4);opacity:1}.tabs-striped.tabs-color-positive .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-positive .tab-item.activated,.tabs-striped.tabs-color-positive .tab-item.active,.tabs-striped.tabs-color-positive .tab-item.tab-item-active{margin-top:-2px;color:#4a87ee;border:0 solid #4a87ee;border-top-width:2px}.tabs-striped.tabs-color-positive .tab-item.activated .badge,.tabs-striped.tabs-color-positive .tab-item.active .badge,.tabs-striped.tabs-color-positive .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-calm .tab-item{color:rgba(67,206,230,.4);opacity:1}.tabs-striped.tabs-color-calm .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-calm .tab-item.activated,.tabs-striped.tabs-color-calm .tab-item.active,.tabs-striped.tabs-color-calm .tab-item.tab-item-active{margin-top:-2px;color:#43cee6;border:0 solid #43cee6;border-top-width:2px}.tabs-striped.tabs-color-calm .tab-item.activated .badge,.tabs-striped.tabs-color-calm .tab-item.active .badge,.tabs-striped.tabs-color-calm .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-assertive .tab-item{color:rgba(239,78,58,.4);opacity:1}.tabs-striped.tabs-color-assertive .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-assertive .tab-item.activated,.tabs-striped.tabs-color-assertive .tab-item.active,.tabs-striped.tabs-color-assertive .tab-item.tab-item-active{margin-top:-2px;color:#ef4e3a;border:0 solid #ef4e3a;border-top-width:2px}.tabs-striped.tabs-color-assertive .tab-item.activated .badge,.tabs-striped.tabs-color-assertive .tab-item.active .badge,.tabs-striped.tabs-color-assertive .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-balanced .tab-item{color:rgba(102,204,51,.4);opacity:1}.tabs-striped.tabs-color-balanced .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-balanced .tab-item.activated,.tabs-striped.tabs-color-balanced .tab-item.active,.tabs-striped.tabs-color-balanced .tab-item.tab-item-active{margin-top:-2px;color:#6c3;border:0 solid #6c3;border-top-width:2px}.tabs-striped.tabs-color-balanced .tab-item.activated .badge,.tabs-striped.tabs-color-balanced .tab-item.active .badge,.tabs-striped.tabs-color-balanced .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-energized .tab-item{color:rgba(240,184,64,.4);opacity:1}.tabs-striped.tabs-color-energized .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-energized .tab-item.activated,.tabs-striped.tabs-color-energized .tab-item.active,.tabs-striped.tabs-color-energized .tab-item.tab-item-active{margin-top:-2px;color:#f0b840;border:0 solid #f0b840;border-top-width:2px}.tabs-striped.tabs-color-energized .tab-item.activated .badge,.tabs-striped.tabs-color-energized .tab-item.active .badge,.tabs-striped.tabs-color-energized .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-royal .tab-item{color:rgba(138,109,233,.4);opacity:1}.tabs-striped.tabs-color-royal .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-royal .tab-item.activated,.tabs-striped.tabs-color-royal .tab-item.active,.tabs-striped.tabs-color-royal .tab-item.tab-item-active{margin-top:-2px;color:#8a6de9;border:0 solid #8a6de9;border-top-width:2px}.tabs-striped.tabs-color-royal .tab-item.activated .badge,.tabs-striped.tabs-color-royal .tab-item.active .badge,.tabs-striped.tabs-color-royal .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-dark .tab-item{color:rgba(68,68,68,.4);opacity:1}.tabs-striped.tabs-color-dark .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-dark .tab-item.activated,.tabs-striped.tabs-color-dark .tab-item.active,.tabs-striped.tabs-color-dark .tab-item.tab-item-active{margin-top:-2px;color:#444;border:0 solid #444;border-top-width:2px}.tabs-striped.tabs-color-dark .tab-item.activated .badge,.tabs-striped.tabs-color-dark .tab-item.active .badge,.tabs-striped.tabs-color-dark .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-top.tabs-striped{padding-bottom:0}.tabs-top.tabs-striped .tab-item{background:0 0;-webkit-transition:all .1s ease;-moz-transition:all .1s ease;-ms-transition:all .1s ease;-o-transition:all .1s ease;transition:all .1s ease}.tabs-top.tabs-striped .tab-item.activated,.tabs-top.tabs-striped .tab-item.active,.tabs-top.tabs-striped .tab-item.tab-item-active{margin-top:0;margin-bottom:-2px;border-width:0 0 2px!important;border-style:solid}.tabs-top.tabs-striped .tab-item .badge{-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.tabs-top>.tabs,.tabs.tabs-top{top:44px;padding-top:0;background-position:bottom}.tabs-top>.tabs .tab-item.activated .badge,.tabs-top>.tabs .tab-item.active .badge,.tabs-top>.tabs .tab-item.tab-item-active .badge,.tabs.tabs-top .tab-item.activated .badge,.tabs.tabs-top .tab-item.active .badge,.tabs.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-top~.bar-header{border-bottom-width:0}.tab-item{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;overflow:hidden;max-width:150px;height:100%;color:inherit;text-align:center;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;font-weight:400;font-size:14px;font-family:"Helvetica Neue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;opacity:.7}.tab-item:hover{cursor:pointer}.tab-item.tab-hidden,.tabs-item-hide>.tabs,.tabs.tabs-item-hide{display:none}.tabs-icon-bottom.tabs .tab-item,.tabs-icon-bottom>.tabs .tab-item,.tabs-icon-top.tabs .tab-item,.tabs-icon-top>.tabs .tab-item{font-size:12px;line-height:14px}.tab-item .icon{display:block;margin:0 auto;height:32px;font-size:32px}.tabs-icon-left.tabs .tab-item,.tabs-icon-left>.tabs .tab-item,.tabs-icon-right.tabs .tab-item,.tabs-icon-right>.tabs .tab-item{font-size:12px}.tabs-icon-left.tabs .tab-item .icon,.tabs-icon-left>.tabs .tab-item .icon,.tabs-icon-right.tabs .tab-item .icon,.tabs-icon-right>.tabs .tab-item .icon{display:inline-block;vertical-align:top;margin-top:-.1em}.tabs-icon-left.tabs .tab-item .icon:before,.tabs-icon-left>.tabs .tab-item .icon:before,.tabs-icon-right.tabs .tab-item .icon:before,.tabs-icon-right>.tabs .tab-item .icon:before{font-size:24px;line-height:49px}.tabs-icon-left.tabs .tab-item .icon,.tabs-icon-left>.tabs .tab-item .icon{padding-right:3px}.tabs-icon-right.tabs .tab-item .icon,.tabs-icon-right>.tabs .tab-item .icon{padding-left:3px}.tabs-icon-only.tabs .icon,.tabs-icon-only>.tabs .icon{line-height:inherit}.tab-item.has-badge{position:relative}.tab-item .badge{position:absolute;top:4%;right:33%;right:calc(50% - 26px);padding:1px 6px;height:auto;font-size:12px;line-height:16px}.tab-item.activated,.tab-item.active,.tab-item.tab-item-active{opacity:1}.tab-item.activated.tab-item-light,.tab-item.active.tab-item-light,.tab-item.tab-item-active.tab-item-light{color:#fff}.tab-item.activated.tab-item-stable,.tab-item.active.tab-item-stable,.tab-item.tab-item-active.tab-item-stable{color:#f8f8f8}.tab-item.activated.tab-item-positive,.tab-item.active.tab-item-positive,.tab-item.tab-item-active.tab-item-positive{color:#4a87ee}.tab-item.activated.tab-item-calm,.tab-item.active.tab-item-calm,.tab-item.tab-item-active.tab-item-calm{color:#43cee6}.tab-item.activated.tab-item-assertive,.tab-item.active.tab-item-assertive,.tab-item.tab-item-active.tab-item-assertive{color:#ef4e3a}.tab-item.activated.tab-item-balanced,.tab-item.active.tab-item-balanced,.tab-item.tab-item-active.tab-item-balanced{color:#6c3}.tab-item.activated.tab-item-energized,.tab-item.active.tab-item-energized,.tab-item.tab-item-active.tab-item-energized{color:#f0b840}.tab-item.activated.tab-item-royal,.tab-item.active.tab-item-royal,.tab-item.tab-item-active.tab-item-royal{color:#8a6de9}.tab-item.activated.tab-item-dark,.tab-item.active.tab-item-dark,.tab-item.tab-item-active.tab-item-dark{color:#444}.item.tabs{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;padding:0}.item.tabs .icon:before{position:relative}.tab-item.disabled,.tab-item[disabled]{opacity:.4;cursor:default;pointer-events:none}.tab-item.tab-item-android{border-top:2px solid inherit}.menu{position:absolute;top:0;bottom:0;z-index:0;overflow:hidden;min-height:100%;max-height:100%;width:275px;background-color:#fff}.menu .scroll-content{z-index:10}.menu .bar-header{z-index:11}.menu-content{-webkit-transform:none;-moz-transform:none;transform:none;box-shadow:-1px 0 2px rgba(0,0,0,.2),1px 0 2px rgba(0,0,0,.2)}.menu-open .menu-content .pane,.menu-open .menu-content .scroll-content{pointer-events:none}.grade-b .menu-content,.grade-c .menu-content{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;right:-1px;left:-1px;border-right:1px solid #ccc;border-left:1px solid #ccc;box-shadow:none}.menu-left{left:0}.menu-right{right:0}.menu-animated{-webkit-transition:-webkit-transform 200ms ease;-moz-transition:-moz-transform 200ms ease;transition:transform 200ms ease}.modal-backdrop{-webkit-transition:background-color 300ms ease-in-out;-moz-transition:background-color 300ms ease-in-out;transition:background-color 300ms ease-in-out;position:fixed;top:0;left:0;z-index:10;width:100%;height:100%;background-color:transparent}.modal-backdrop.active{background-color:rgba(0,0,0,.5)}.modal{display:block;position:absolute;top:0;z-index:10;overflow:hidden;min-height:100%;width:100%;background-color:#fff}@media (min-width:680px){.modal{top:20%;right:20%;bottom:20%;left:20%;overflow:visible;min-height:240px;width:60%}.modal.ng-leave-active{bottom:0}.platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader){height:44px}.platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader)>*{margin-top:0}.platform-ios.platform-cordova .modal-wrapper .modal .bar-subheader,.platform-ios.platform-cordova .modal-wrapper .modal .has-header,.platform-ios.platform-cordova .modal-wrapper .modal .tabs-top>.tabs,.platform-ios.platform-cordova .modal-wrapper .modal .tabs.tabs-top{top:44px}.platform-ios.platform-cordova .modal-wrapper .modal .has-subheader{top:88px}.platform-ios.platform-cordova .modal-wrapper .modal .has-tabs-top{top:93px}.platform-ios.platform-cordova .modal-wrapper .modal .has-header.has-subheader.has-tabs-top{top:137px}}.modal-open{pointer-events:none}.modal-open .modal,.modal-open .modal-backdrop{pointer-events:auto}.modal-open.loading-active .modal,.modal-open.loading-active .modal-backdrop{pointer-events:none}.popover-backdrop{position:fixed;top:0;left:0;z-index:10;width:100%;height:100%;background-color:transparent}.popover-backdrop.active{background-color:rgba(0,0,0,.1)}.popover{position:absolute;top:25%;left:50%;z-index:10;display:block;margin-left:-110px;margin-top:12px;height:280px;width:220px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4);opacity:0}.popover .item:first-child{border-top:0}.popover .item:last-child{border-bottom:0}.popover,.popover .bar-header{border-radius:2px}.popover .scroll-content{z-index:1;margin:2px 0}.popover .bar-header{border-bottom-right-radius:0;border-bottom-left-radius:0}.popover .has-header{border-top-right-radius:0;border-top-left-radius:0}.popover-arrow{display:none}.platform-ios .popover{box-shadow:0 0 40px rgba(0,0,0,.08)}.platform-ios .popover,.platform-ios .popover .bar-header{border-radius:10px}.platform-ios .popover .scroll-content{margin:8px 0;border-radius:10px}.platform-ios .popover .scroll-content.has-header{margin-top:0}.platform-ios .popover-arrow{position:absolute;top:-17px;left:43%;display:block;width:30px;height:19px;overflow:hidden}.platform-ios .popover-arrow:after{position:absolute;top:12px;left:5px;width:20px;height:20px;background-color:#fff;border-radius:3px;content:'';-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)}.platform-android .popover{background-color:#fafafa;box-shadow:0 2px 6px rgba(0,0,0,.35);margin-top:-32px}.platform-android .popover .item{border-color:#fafafa;background-color:#fafafa;color:#4d4d4d}.platform-android .popover-backdrop,.platform-android .popover-backdrop.active{background-color:transparent}.popover-open{pointer-events:none}.popover-open .popover,.popover-open .popover-backdrop{pointer-events:auto}.popover-open.loading-active .popover,.popover-open.loading-active .popover-backdrop{pointer-events:none}@media (min-width:680px){.popover{width:360px}}.popup{position:fixed;top:50%;left:50%;z-index:12;visibility:hidden;width:250px;max-width:100%;border-radius:0;background-color:rgba(255,255,255,.9)}.popup.popup-hidden{-webkit-animation-name:scaleOut;-moz-animation-name:scaleOut;animation-name:scaleOut;-webkit-animation-duration:.1s;-moz-animation-duration:.1s;animation-duration:.1s;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.popup.popup-showing{visibility:visible}.popup.active{-webkit-animation-name:superScaleIn;-moz-animation-name:superScaleIn;animation-name:superScaleIn;-webkit-animation-duration:.2s;-moz-animation-duration:.2s;animation-duration:.2s;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.popup.popup-tall{overflow:hidden}.popup.popup-tall .popup-body{overflow:auto}.popup-head{padding:15px 0;border-bottom:1px solid #eee;text-align:center}.popup-title{margin:0;padding:0;font-size:15px}.popup-sub-title{margin:5px 0 0;padding:0;font-weight:400;font-size:11px}.popup-body,.popup-buttons.row{padding:10px}.popup-buttons .button{margin:0 5px;min-height:45px;border-radius:2px;line-height:20px}.popup-buttons .button:first-child{margin-left:0}.popup-buttons .button:last-child{margin-right:0}.popup-open,.popup-open.modal-open .modal{pointer-events:none}.popup-open .popup,.popup-open .popup-backdrop{pointer-events:auto}.loading-container{position:absolute;left:0;top:0;right:0;bottom:0;z-index:13;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;-webkit-transition:.2s opacity linear;-moz-transition:.2s opacity linear;transition:.2s opacity linear;visibility:hidden;opacity:0}.loading-container.visible{visibility:visible}.loading-container.active{opacity:1}.loading-container .loading{padding:20px;border-radius:5px;background-color:rgba(0,0,0,.7);color:#fff;text-align:center;text-overflow:ellipsis;font-size:15px}.loading-container .loading h1,.loading-container .loading h2,.loading-container .loading h3,.loading-container .loading h4,.loading-container .loading h5,.loading-container .loading h6{color:#fff}.item{border-color:#ddd;background-color:#fff;color:#444;position:relative;z-index:2;display:block;margin:-1px;padding:16px;border-width:1px;border-style:solid;font-size:16px}.item h2{margin:0 0 4px;font-size:16px}.item h3{margin:0 0 4px;font-size:14px}.item h4{margin:0 0 4px;font-size:12px}.item h5,.item h6{margin:0 0 3px;font-size:10px}.item p{color:#666;font-size:14px}.item h1:last-child,.item h2:last-child,.item h3:last-child,.item h4:last-child,.item h5:last-child,.item h6:last-child,.item p:last-child{margin-bottom:0}.item .badge{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;position:absolute;top:16px;right:32px}.item.item-button-right .badge{right:67px}.item.item-divider .badge{top:8px}.item .badge+.badge{margin-right:5px}.item.item-light{border-color:#ddd;background-color:#fff;color:#444}.item.item-stable{border-color:#b2b2b2;background-color:#f8f8f8;color:#444}.item.item-positive{border-color:#145fd7;background-color:#4a87ee;color:#fff}.item.item-calm{border-color:#1aacc3;background-color:#43cee6;color:#fff}.item.item-assertive{border-color:#cc2311;background-color:#ef4e3a;color:#fff}.item.item-balanced{border-color:#498f24;background-color:#6c3;color:#fff}.item.item-energized{border-color:#d39211;background-color:#f0b840;color:#fff}.item.item-royal{border-color:#552bdf;background-color:#8a6de9;color:#fff}.item.item-dark{border-color:#111;background-color:#444;color:#fff}.item[ng-click]:hover{cursor:pointer}.item .item-content.activated,.item .item-content.active,.item-complex.activated .item-content,.item-complex.active .item-content,.item.activated,.item.active{border-color:#ccc;background-color:#D9D9D9}.item .item-content.activated.item-light,.item .item-content.active.item-light,.item-complex.activated .item-content.item-light,.item-complex.active .item-content.item-light,.item.activated.item-light,.item.active.item-light{border-color:#ccc;background-color:#fafafa}.item .item-content.activated.item-stable,.item .item-content.active.item-stable,.item-complex.activated .item-content.item-stable,.item-complex.active .item-content.item-stable,.item.activated.item-stable,.item.active.item-stable{border-color:#a2a2a2;background-color:#e5e5e5}.item .item-content.activated.item-positive,.item .item-content.active.item-positive,.item-complex.activated .item-content.item-positive,.item-complex.active .item-content.item-positive,.item.activated.item-positive,.item.active.item-positive{border-color:#145fd7;background-color:#145fd7}.item .item-content.activated.item-calm,.item .item-content.active.item-calm,.item-complex.activated .item-content.item-calm,.item-complex.active .item-content.item-calm,.item.activated.item-calm,.item.active.item-calm{border-color:#1aacc3;background-color:#1aacc3}.item .item-content.activated.item-assertive,.item .item-content.active.item-assertive,.item-complex.activated .item-content.item-assertive,.item-complex.active .item-content.item-assertive,.item.activated.item-assertive,.item.active.item-assertive{border-color:#cc2311;background-color:#cc2311}.item .item-content.activated.item-balanced,.item .item-content.active.item-balanced,.item-complex.activated .item-content.item-balanced,.item-complex.active .item-content.item-balanced,.item.activated.item-balanced,.item.active.item-balanced{border-color:#498f24;background-color:#498f24}.item .item-content.activated.item-energized,.item .item-content.active.item-energized,.item-complex.activated .item-content.item-energized,.item-complex.active .item-content.item-energized,.item.activated.item-energized,.item.active.item-energized{border-color:#d39211;background-color:#d39211}.item .item-content.activated.item-royal,.item .item-content.active.item-royal,.item-complex.activated .item-content.item-royal,.item-complex.active .item-content.item-royal,.item.activated.item-royal,.item.active.item-royal{border-color:#552bdf;background-color:#552bdf}.item .item-content.activated.item-dark,.item .item-content.active.item-dark,.item-complex.activated .item-content.item-dark,.item-complex.active .item-content.item-dark,.item.activated.item-dark,.item.active.item-dark{border-color:#000;background-color:#262626}.item,.item h1,.item h2,.item h3,.item h4,.item h5,.item h6,.item p,.item-content,.item-content h1,.item-content h2,.item-content h3,.item-content h4,.item-content h5,.item-content h6,.item-content p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a.item{color:inherit;text-decoration:none}a.item:focus,a.item:hover{text-decoration:none}.item-complex,a.item.item-complex,button.item.item-complex{padding:0}.item-complex .item-content,.item-radio .item-content{position:relative;z-index:2;padding:16px 49px 16px 16px;border:none;background-color:#fff}a.item-content{display:block;color:inherit;text-decoration:none}.item-body h1,.item-body h2,.item-body h3,.item-body h4,.item-body h5,.item-body h6,.item-body p,.item-complex.item-text-wrap,.item-complex.item-text-wrap .item-content,.item-complex.item-text-wrap h1,.item-complex.item-text-wrap h2,.item-complex.item-text-wrap h3,.item-complex.item-text-wrap h4,.item-complex.item-text-wrap h5,.item-complex.item-text-wrap h6,.item-complex.item-text-wrap p,.item-text-wrap,.item-text-wrap .item,.item-text-wrap .item-content,.item-text-wrap h1,.item-text-wrap h2,.item-text-wrap h3,.item-text-wrap h4,.item-text-wrap h5,.item-text-wrap h6,.item-text-wrap p{overflow:visible;white-space:normal}.item-complex.item-light>.item-content{border-color:#ddd;background-color:#fff;color:#444}.item-complex.item-light>.item-content.active,.item-complex.item-light>.item-content:active{border-color:#ccc;background-color:#fafafa}.item-complex.item-stable>.item-content{border-color:#b2b2b2;background-color:#f8f8f8;color:#444}.item-complex.item-stable>.item-content.active,.item-complex.item-stable>.item-content:active{border-color:#a2a2a2;background-color:#e5e5e5}.item-complex.item-positive>.item-content{border-color:#145fd7;background-color:#4a87ee;color:#fff}.item-complex.item-positive>.item-content.active,.item-complex.item-positive>.item-content:active{border-color:#145fd7;background-color:#145fd7}.item-complex.item-calm>.item-content{border-color:#1aacc3;background-color:#43cee6;color:#fff}.item-complex.item-calm>.item-content.active,.item-complex.item-calm>.item-content:active{border-color:#1aacc3;background-color:#1aacc3}.item-complex.item-assertive>.item-content{border-color:#cc2311;background-color:#ef4e3a;color:#fff}.item-complex.item-assertive>.item-content.active,.item-complex.item-assertive>.item-content:active{border-color:#cc2311;background-color:#cc2311}.item-complex.item-balanced>.item-content{border-color:#498f24;background-color:#6c3;color:#fff}.item-complex.item-balanced>.item-content.active,.item-complex.item-balanced>.item-content:active{border-color:#498f24;background-color:#498f24}.item-complex.item-energized>.item-content{border-color:#d39211;background-color:#f0b840;color:#fff}.item-complex.item-energized>.item-content.active,.item-complex.item-energized>.item-content:active{border-color:#d39211;background-color:#d39211}.item-complex.item-royal>.item-content{border-color:#552bdf;background-color:#8a6de9;color:#fff}.item-complex.item-royal>.item-content.active,.item-complex.item-royal>.item-content:active{border-color:#552bdf;background-color:#552bdf}.item-complex.item-dark>.item-content{border-color:#111;background-color:#444;color:#fff}.item-complex.item-dark>.item-content.active,.item-complex.item-dark>.item-content:active{border-color:#000;background-color:#262626}.item-icon-left .icon,.item-icon-right .icon{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%;font-size:32px}.item-icon-left .icon:before,.item-icon-right .icon:before{display:block;width:32px;text-align:center}.item .fill-icon{min-width:30px;min-height:30px;font-size:28px}.item-icon-left{padding-left:54px}.item-icon-left .icon{left:11px}.item-complex.item-icon-left{padding-left:0}.item-complex.item-icon-left .item-content{padding-left:54px}.item-icon-right{padding-right:54px}.item-icon-right .icon{right:11px}.item-complex.item-icon-right{padding-right:0}.item-complex.item-icon-right .item-content{padding-right:54px}.item-icon-left.item-icon-right .icon:first-child{right:auto}.item-icon-left .item-delete .icon,.item-icon-left.item-icon-right .icon:last-child{left:auto}.item-icon-left .icon-accessory,.item-icon-right .icon-accessory{color:#ccc;font-size:16px}.item-icon-left .icon-accessory{left:3px}.item-icon-right .icon-accessory{right:3px}.item-button-left{padding-left:72px}.item-button-left .item-content>.button,.item-button-left>.button{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:8px;left:11px;min-width:34px;min-height:34px;font-size:18px;line-height:32px}.item-button-left .item-content>.button .icon:before,.item-button-left>.button .icon:before{position:relative;left:auto;width:auto;line-height:31px}.item-button-left .item-content>.button>.button,.item-button-left>.button>.button{margin:0 2px;min-height:34px;font-size:18px;line-height:32px}.item-button-right,a.item.item-button-right,button.item.item-button-right{padding-right:80px}.item-button-right .item-content>.button,.item-button-right .item-content>.buttons,.item-button-right>.button,.item-button-right>.buttons{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:8px;right:16px;min-width:34px;min-height:34px;font-size:18px;line-height:32px}.item-button-right .item-content>.button .icon:before,.item-button-right .item-content>.buttons .icon:before,.item-button-right>.button .icon:before,.item-button-right>.buttons .icon:before{position:relative;left:auto;width:auto;line-height:31px}.item-button-right .item-content>.button>.button,.item-button-right .item-content>.buttons>.button,.item-button-right>.button>.button,.item-button-right>.buttons>.button{margin:0 2px;min-width:34px;min-height:34px;font-size:18px;line-height:32px}.item-avatar,.item-avatar .item-content,.item-avatar-left,.item-avatar-left .item-content{padding-left:72px;min-height:72px}.item-avatar .item-content .item-image,.item-avatar .item-content>img:first-child,.item-avatar .item-image,.item-avatar-left .item-content .item-image,.item-avatar-left .item-content>img:first-child,.item-avatar-left .item-image,.item-avatar-left>img:first-child,.item-avatar>img:first-child{position:absolute;top:16px;left:16px;max-width:40px;max-height:40px;width:100%;border-radius:4px}.item-avatar-right,.item-avatar-right .item-content{padding-right:72px;min-height:72px}.item-avatar-right .item-content .item-image,.item-avatar-right .item-content>img:first-child,.item-avatar-right .item-image,.item-avatar-right>img:first-child{position:absolute;top:16px;right:16px;max-width:40px;max-height:40px;width:100%;border-radius:4px}.item-thumbnail-left,.item-thumbnail-left .item-content{padding-left:106px;min-height:100px}.item-thumbnail-left .item-content .item-image,.item-thumbnail-left .item-content>img:first-child,.item-thumbnail-left .item-image,.item-thumbnail-left>img:first-child{position:absolute;top:10px;left:10px;max-width:80px;max-height:80px;width:100%}.item-avatar-left.item-complex,.item-avatar.item-complex,.item-thumbnail-left.item-complex{padding-left:0}.item-thumbnail-right,.item-thumbnail-right .item-content{padding-right:106px;min-height:100px}.item-thumbnail-right .item-content .item-image,.item-thumbnail-right .item-content>img:first-child,.item-thumbnail-right .item-image,.item-thumbnail-right>img:first-child{position:absolute;top:10px;right:10px;max-width:80px;max-height:80px;width:100%}.item-avatar-right.item-complex,.item-thumbnail-right.item-complex{padding-right:0}.item-image{padding:0;text-align:center}.item-image .list-img,.item-image img:first-child{width:100%;vertical-align:middle}.item-body{overflow:auto;padding:16px;text-overflow:inherit;white-space:normal}.item-body h1,.item-body h2,.item-body h3,.item-body h4,.item-body h5,.item-body h6,.item-body p{margin-top:16px;margin-bottom:16px}.item-divider{padding-top:8px;padding-bottom:8px;min-height:30px;background-color:#f5f5f5;color:#222;font-weight:700}.item-note{float:right;color:#aaa;font-size:14px}.item-left-editable .item-content,.item-right-editable .item-content{-webkit-transition-duration:250ms;-moz-transition-duration:250ms;transition-duration:250ms;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;transition-property:transform}.item-left-editing.item-left-editable .item-content,.list-left-editing .item-left-editable .item-content{-webkit-transform:translate3d(50px,0,0);-moz-transform:translate3d(50px,0,0);transform:translate3d(50px,0,0)}.item-right-editing.item-right-editable .item-content,.list-right-editing .item-right-editable .item-content{-webkit-transform:translate3d(-50px,0,0);-moz-transform:translate3d(-50px,0,0);transform:translate3d(-50px,0,0)}.item-left-edit{-webkit-transition:all ease-in-out 125ms;-moz-transition:all ease-in-out 125ms;transition:all ease-in-out 125ms;position:absolute;top:0;left:0;z-index:0;width:50px;height:100%;line-height:100%;display:none;opacity:0;-webkit-transform:translate3d(-21px,0,0);-moz-transform:translate3d(-21px,0,0);transform:translate3d(-21px,0,0)}.item-left-edit .button{height:100%}.item-left-edit .button.icon{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%}.item-left-edit.visible{display:block}.item-left-edit.visible.active{opacity:1;-webkit-transform:translate3d(8px,0,0);-moz-transform:translate3d(8px,0,0);transform:translate3d(8px,0,0)}.list-left-editing .item-left-edit{-webkit-transition-delay:125ms;-moz-transition-delay:125ms;transition-delay:125ms}.item-delete .button.icon{color:#ef4e3a;font-size:24px}.item-delete .button.icon:hover{opacity:.7}.item-right-edit{-webkit-transition:all ease-in-out 125ms;-moz-transition:all ease-in-out 125ms;transition:all ease-in-out 125ms;position:absolute;top:0;right:0;z-index:0;width:75px;height:100%;background:inherit;padding-left:20px;display:none;opacity:0;-webkit-transform:translate3d(25px,0,0);-moz-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}.item-right-edit .button{min-width:50px;height:100%}.item-right-edit .button.icon{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%;font-size:32px}.item-right-edit.visible{display:block;z-index:3}.item-right-edit.visible.active{opacity:1;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.list-right-editing .item-right-edit{-webkit-transition-delay:125ms;-moz-transition-delay:125ms;transition-delay:125ms}.item-reorder .button.icon{color:#444;font-size:32px}.item-reordering{position:absolute;left:0;top:0;z-index:9;width:100%;box-shadow:0 0 10px 0 #aaa}.item-reordering .item-reorder{z-index:1}.item-placeholder{opacity:.7}.item-options{position:absolute;top:0;right:0;z-index:1;height:100%}.item-options .button{height:100%;border:none;border-radius:0}.list{position:relative;padding-top:1px;padding-bottom:1px;padding-left:0;margin-bottom:20px}.list:last-child{margin-bottom:0}.list:last-child.card{margin-bottom:40px}.list-header{margin-top:20px;padding:5px 15px;background-color:transparent;color:#222;font-weight:700}.card.list .list-item{padding-right:1px;padding-left:1px}.card,.list-inset{overflow:hidden;margin:20px 10px;border-radius:2px;background-color:#fff}.card{padding-top:1px;padding-bottom:1px;box-shadow:0 1px 4px rgba(0,0,0,.25)}.padding .card,.padding .list-inset{margin-left:0;margin-right:0}.card .item:first-child,.card .item:first-child .item-content,.list-inset .item:first-child,.list-inset .item:first-child .item-content,.padding>.list .item:first-child,.padding>.list .item:first-child .item-content{border-top-left-radius:2px;border-top-right-radius:2px}.card .item:last-child,.card .item:last-child .item-content,.list-inset .item:last-child,.list-inset .item:last-child .item-content,.padding>.list .item:last-child,.padding>.list .item:last-child .item-content{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.card .item:last-child,.list-inset .item:last-child{margin-bottom:-1px}.card .item,.list-inset .item,.padding-horizontal>.list .item,.padding>.list .item{margin-right:0;margin-left:0}.card .item.item-input input,.list-inset .item.item-input input,.padding-horizontal>.list .item.item-input input,.padding>.list .item.item-input input{padding-right:44px}.padding-left>.list .item{margin-left:0}.padding-right>.list .item{margin-right:0}.badge{background-color:transparent;color:#AAA;z-index:1;display:inline-block;padding:3px 8px;min-width:10px;border-radius:10px;vertical-align:baseline;text-align:center;white-space:nowrap;font-weight:700;font-size:14px;line-height:16px}.badge:empty{display:none}.badge.badge-light,.tabs .tab-item .badge.badge-light{background-color:#fff;color:#444}.badge.badge-stable,.tabs .tab-item .badge.badge-stable{background-color:#f8f8f8;color:#444}.badge.badge-positive,.tabs .tab-item .badge.badge-positive{background-color:#4a87ee;color:#fff}.badge.badge-calm,.tabs .tab-item .badge.badge-calm{background-color:#43cee6;color:#fff}.badge.badge-assertive,.tabs .tab-item .badge.badge-assertive{background-color:#ef4e3a;color:#fff}.badge.badge-balanced,.tabs .tab-item .badge.badge-balanced{background-color:#6c3;color:#fff}.badge.badge-energized,.tabs .tab-item .badge.badge-energized{background-color:#f0b840;color:#fff}.badge.badge-royal,.tabs .tab-item .badge.badge-royal{background-color:#8a6de9;color:#fff}.badge.badge-dark,.tabs .tab-item .badge.badge-dark{background-color:#444;color:#fff}.button .badge{position:relative;top:-1px}.slider{position:relative;visibility:hidden;overflow:hidden}.slider-slides{position:relative;height:100%}.slider-slide{position:relative;display:block;float:left;width:100%;height:100%;vertical-align:top}.slider-slide-image>img{width:100%}.slider-pager{position:absolute;bottom:20px;z-index:1;width:100%;height:15px;text-align:center}.slider-pager .slider-pager-page{display:inline-block;margin:0 3px;width:15px;color:#000;text-decoration:none;opacity:.3}.slider-pager .slider-pager-page.active{-webkit-transition:opacity .4s ease-in;-moz-transition:opacity .4s ease-in;transition:opacity .4s ease-in;opacity:1}.split-pane{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;-webkit-align-items:stretch;-moz-align-items:stretch;align-items:stretch;width:100%;height:100%}.split-pane-menu{-webkit-box-flex:0;-webkit-flex:0 0 320px;-moz-box-flex:0;-moz-flex:0 0 320px;-ms-flex:0 0 320px;flex:0 0 320px;overflow-y:auto;width:320px;height:100%;border-right:1px solid #eee}@media all and (max-width:568px){.split-pane-menu{border-right:none}}.split-pane-content{-webkit-box-flex:1;-webkit-flex:1 0 auto;-moz-box-flex:1;-moz-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}form{margin:0 0 1.42857}legend{display:block;margin-bottom:1.42857;padding:0;width:100%;border:1px solid #ddd;color:#444;font-size:21px;line-height:2.85714}legend small{color:#f8f8f8;font-size:1.07143}button,input,label,select,textarea{font-weight:400;font-size:14px;line-height:1.42857}button,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif}.item-input{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:relative;overflow:hidden;padding:6px 0 5px 16px}.item-input input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-flex:1;-webkit-flex:1 0 220px;-moz-box-flex:1;-moz-flex:1 0 220px;-ms-flex:1 0 220px;flex:1 0 220px;-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0;padding-right:24px;background-color:transparent}.item-input .button .icon{-webkit-box-flex:0;-webkit-flex:0 0 24px;-moz-box-flex:0;-moz-flex:0 0 24px;-ms-flex:0 0 24px;flex:0 0 24px;position:static;display:inline-block;height:auto;text-align:center;font-size:16px}.item-input .button-bar{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-flex:1;-webkit-flex:1 0 220px;-moz-box-flex:1;-moz-flex:1 0 220px;-ms-flex:1 0 220px;flex:1 0 220px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.item-input .icon{min-width:14px}.item-input-inset{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:relative;overflow:hidden;padding:10.67px}.item-input-wrapper{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1 0;-moz-box-flex:1;-moz-flex:1 0;-ms-flex:1 0;flex:1 0;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding-right:8px;padding-left:8px;background:#eee}.item-input-inset .item-input-wrapper input{padding-left:4px;height:29px;background:0 0;line-height:18px}.item-input-wrapper~.button{margin-left:10.67px}.input-label{-webkit-box-flex:1;-webkit-flex:1 0 100px;-moz-box-flex:1;-moz-flex:1 0 100px;-ms-flex:1 0 100px;flex:1 0 100px;display:table;padding:7px 10px 7px 0;max-width:200px;width:35%;color:#444;font-size:16px}.placeholder-icon{color:#aaa}.placeholder-icon:first-child{padding-right:6px}.placeholder-icon:last-child{padding-left:6px}.item-stacked-label{display:block;background-color:transparent;box-shadow:none}.item-stacked-label .icon,.item-stacked-label .input-label{display:inline-block;padding:4px 0 0;vertical-align:middle}.item-stacked-label input,.item-stacked-label textarea{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;padding:4px 8px 3px 0;border:none;background-color:#fff}.item-stacked-label input{overflow:hidden;height:46px}.item-floating-label{display:block;background-color:transparent;box-shadow:none}.item-floating-label .input-label{position:relative;padding:5px 0 0;opacity:0;top:10px;-webkit-transition:opacity .15s ease-in,top .2s linear;-moz-transition:opacity .15s ease-in,top .2s linear;transition:opacity .15s ease-in,top .2s linear}.item-floating-label .input-label.has-input{opacity:1;top:0;-webkit-transition:opacity .15s ease-in,top .2s linear;-moz-transition:opacity .15s ease-in,top .2s linear;transition:opacity .15s ease-in,top .2s linear}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],textarea{display:block;padding-top:2px;padding-left:0;height:34px;color:#111;vertical-align:middle;font-size:14px;line-height:16px}.platform-android input[type=date],.platform-android input[type=datetime-local],.platform-android input[type=month],.platform-android input[type=time],.platform-android input[type=week],.platform-ios input[type=date],.platform-ios input[type=datetime-local],.platform-ios input[type=month],.platform-ios input[type=time],.platform-ios input[type=week]{padding-top:8px}input,textarea{width:100%}textarea{padding-left:0}textarea::-moz-placeholder{color:#aaa}textarea:-ms-input-placeholder{color:#aaa}textarea::-webkit-input-placeholder{color:#aaa;text-indent:-3px}textarea{height:auto}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],textarea{border:0}input[type=checkbox],input[type=radio]{margin:0;line-height:normal}input[type=button],input[type=checkbox],input[type=file],input[type=image],input[type=radio],input[type=reset],input[type=submit]{width:auto}input[type=file]{line-height:34px}.cloned-text-input+input,.cloned-text-input+textarea,.previous-input-focus{position:absolute!important;left:-9999px;width:200px}input::-moz-placeholder,textarea::-moz-placeholder{color:#aaa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#aaa}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#aaa;text-indent:0}input[disabled],input[readonly]:not(.cloned-text-input),select[disabled],select[readonly],textarea[disabled],textarea[readonly]:not(.cloned-text-input){background-color:#f8f8f8;cursor:not-allowed}input[type=checkbox][disabled],input[type=checkbox][readonly],input[type=radio][disabled],input[type=radio][readonly]{background-color:transparent}.checkbox{position:relative;display:inline-block;padding:7px;cursor:pointer}.checkbox .checkbox-icon:before,.checkbox input:before{border-color:#4a87ee}.checkbox input:checked+.checkbox-icon:before,.checkbox input:checked:before{background:#4a87ee}.checkbox-light .checkbox-icon:before,.checkbox-light input:before{border-color:#ddd}.checkbox-light input:checked+.checkbox-icon:before,.checkbox-light input:checked:before{background:#ddd}.checkbox-stable .checkbox-icon:before,.checkbox-stable input:before{border-color:#b2b2b2}.checkbox-stable input:checked+.checkbox-icon:before,.checkbox-stable input:checked:before{background:#b2b2b2}.checkbox-positive .checkbox-icon:before,.checkbox-positive input:before{border-color:#4a87ee}.checkbox-positive input:checked+.checkbox-icon:before,.checkbox-positive input:checked:before{background:#4a87ee}.checkbox-calm .checkbox-icon:before,.checkbox-calm input:before{border-color:#43cee6}.checkbox-calm input:checked+.checkbox-icon:before,.checkbox-calm input:checked:before{background:#43cee6}.checkbox-assertive .checkbox-icon:before,.checkbox-assertive input:before{border-color:#ef4e3a}.checkbox-assertive input:checked+.checkbox-icon:before,.checkbox-assertive input:checked:before{background:#ef4e3a}.checkbox-balanced .checkbox-icon:before,.checkbox-balanced input:before{border-color:#6c3}.checkbox-balanced input:checked+.checkbox-icon:before,.checkbox-balanced input:checked:before{background:#6c3}.checkbox-energized .checkbox-icon:before,.checkbox-energized input:before{border-color:#f0b840}.checkbox-energized input:checked+.checkbox-icon:before,.checkbox-energized input:checked:before{background:#f0b840}.checkbox-royal .checkbox-icon:before,.checkbox-royal input:before{border-color:#8a6de9}.checkbox-royal input:checked+.checkbox-icon:before,.checkbox-royal input:checked:before{background:#8a6de9}.checkbox-dark .checkbox-icon:before,.checkbox-dark input:before{border-color:#444}.checkbox-dark input:checked+.checkbox-icon:before,.checkbox-dark input:checked:before{background:#444}.checkbox input:disabled+.checkbox-icon:before,.checkbox input:disabled:before{border-color:#ddd}.checkbox input:disabled:checked+.checkbox-icon:before,.checkbox input:disabled:checked:before{background:#ddd}.checkbox.checkbox-input-hidden input{display:none!important}.checkbox input,.checkbox-icon{position:relative;width:28px;height:28px;display:block;border:0;background:0 0;cursor:pointer;-webkit-appearance:none}.checkbox input:before,.checkbox-icon:before{display:table;width:100%;height:100%;border-width:1px;border-style:solid;border-radius:28px;background:#fff;content:' ';transition:background-color 20ms ease-in-out}.checkbox input:checked:before,input:checked+.checkbox-icon:before{border-width:2px}.checkbox input:after,.checkbox-icon:after{-webkit-transition:opacity .05s ease-in-out;-moz-transition:opacity .05s ease-in-out;transition:opacity .05s ease-in-out;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg);position:absolute;top:30%;left:26%;display:table;width:15px;height:10.33px;border:3px solid #fff;border-top:0;border-right:0;content:' ';opacity:0}.grade-c .checkbox input:after,.grade-c .checkbox-icon:after{-webkit-transform:rotate(0);-moz-transform:rotate(0);transform:rotate(0);top:3px;left:4px;border:none;color:#fff;content:'\2713';font-weight:700;font-size:20px}.checkbox input:checked:after,input:checked+.checkbox-icon:after{opacity:1}.item-checkbox{padding-left:60px}.item-checkbox.active{box-shadow:none}.item-checkbox .checkbox{position:absolute;top:50%;right:8px;left:8px;z-index:3;margin-top:-21px}.item-checkbox.item-checkbox-right{padding-right:60px;padding-left:16px}.item-checkbox-right .checkbox input,.item-checkbox-right .checkbox-icon{float:right}.item-toggle{pointer-events:none}.toggle{position:relative;display:inline-block;pointer-events:auto;margin:-5px;padding:5px}.toggle input:checked+.track{border-color:#4a87ee;background-color:#4a87ee}.toggle.dragging .handle{background-color:#f2f2f2!important}.toggle.toggle-light input:checked+.track{border-color:#ddd;background-color:#ddd}.toggle.toggle-stable input:checked+.track{border-color:#b2b2b2;background-color:#b2b2b2}.toggle.toggle-positive input:checked+.track{border-color:#4a87ee;background-color:#4a87ee}.toggle.toggle-calm input:checked+.track{border-color:#43cee6;background-color:#43cee6}.toggle.toggle-assertive input:checked+.track{border-color:#ef4e3a;background-color:#ef4e3a}.toggle.toggle-balanced input:checked+.track{border-color:#6c3;background-color:#6c3}.toggle.toggle-energized input:checked+.track{border-color:#f0b840;background-color:#f0b840}.toggle.toggle-royal input:checked+.track{border-color:#8a6de9;background-color:#8a6de9}.toggle.toggle-dark input:checked+.track{border-color:#444;background-color:#444}.toggle input{display:none}.toggle .track{-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:background-color,border;-moz-transition-property:background-color,border;transition-property:background-color,border;display:inline-block;box-sizing:border-box;width:54px;height:32px;border:2px solid #E5E5E5;border-radius:20px;background-color:#E5E5E5;content:' ';cursor:pointer;pointer-events:none}.platform-android4_2 .toggle .track{-webkit-background-clip:padding-box}.toggle .handle{-webkit-transition:.2s ease-in-out;-moz-transition:.2s ease-in-out;transition:.2s ease-in-out;position:absolute;display:block;width:28px;height:28px;border-radius:28px;background-color:#fff;top:7px;left:7px}.toggle .handle:before{position:absolute;top:-4px;left:-22px;padding:19px 35px;content:" "}.toggle input:checked+.track .handle{-webkit-transform:translate3d(22px,0,0);-moz-transform:translate3d(22px,0,0);transform:translate3d(22px,0,0);background-color:#fff}.item-toggle.active{box-shadow:none}.item-toggle,.item-toggle.item-complex .item-content{padding-right:102px}.item-toggle.item-complex{padding-right:0}.item-toggle .toggle{position:absolute;top:8px;right:16px;z-index:3}.toggle input:disabled+.track{opacity:.6}.item-radio{padding:0}.item-radio:hover{cursor:pointer}.item-radio .item-content{padding-right:64px}.item-radio .radio-icon{position:absolute;top:0;right:0;z-index:3;visibility:hidden;padding:14px;height:100%;font-size:24px}.item-radio input{position:absolute;left:-9999px}.item-radio input:checked~.item-content{background:#f7f7f7}.item-radio input:checked~.radio-icon{visibility:visible}.platform-android.grade-b .item-radio,.platform-android.grade-c .item-radio{-webkit-animation:androidCheckedbugfix infinite 1s}@-webkit-keyframes androidCheckedbugfix{from,to{padding:0}}input[type=range]{display:inline-block;overflow:hidden;margin-top:5px;margin-bottom:5px;padding-right:2px;padding-left:1px;width:auto;height:35px;outline:0;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ccc),color-stop(100%,#ccc)) center/99% 4px no-repeat;background:linear-gradient(to right,#ccc 0,#ccc 100%) center/99% 4px no-repeat;-webkit-appearance:none}input[type=range]::-webkit-slider-thumb{position:relative;width:20px;height:20px;border-radius:10px;background-color:#fff;box-shadow:0 0 2px rgba(0,0,0,.5),1px 3px 5px rgba(0,0,0,.25);cursor:pointer;-webkit-appearance:none}input[type=range]::-webkit-slider-thumb:before{position:absolute;top:8px;left:-2001px;width:2000px;height:4px;background:#444;content:' '}input[type=range]::-webkit-slider-thumb:after{position:absolute;top:-20px;left:-20px;padding:30px;content:' '}.range{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;padding:2px 11px}.range.range-light input::-webkit-slider-thumb:before{background:#ddd}.range.range-stable input::-webkit-slider-thumb:before{background:#b2b2b2}.range.range-positive input::-webkit-slider-thumb:before{background:#4a87ee}.range.range-calm input::-webkit-slider-thumb:before{background:#43cee6}.range.range-balanced input::-webkit-slider-thumb:before{background:#6c3}.range.range-assertive input::-webkit-slider-thumb:before{background:#ef4e3a}.range.range-energized input::-webkit-slider-thumb:before{background:#f0b840}.range.range-royal input::-webkit-slider-thumb:before{background:#8a6de9}.range.range-dark input::-webkit-slider-thumb:before{background:#444}.range .icon{-webkit-box-flex:0;-webkit-flex:0;-moz-box-flex:0;-moz-flex:0;-ms-flex:0;flex:0;display:block;min-width:24px;text-align:center;font-size:24px}.range input{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;margin-right:10px;margin-left:10px}.range-label{-webkit-box-flex:0;-webkit-flex:0 0 auto;-moz-box-flex:0;-moz-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;display:block;white-space:nowrap}.range-label:first-child{padding-left:5px}.range input+.range-label{padding-right:5px;padding-left:0}.item-select{position:relative}.item-select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:absolute;top:0;right:0;padding:14px 48px 16px 16px;max-width:65%;border:none;background:#fff;color:#333;text-indent:.01px;text-overflow:'';white-space:nowrap;font-size:14px;cursor:pointer;direction:rtl}.item-select select::-ms-expand{display:none}.item-select option{direction:ltr}.item-select:after{position:absolute;top:50%;right:16px;margin-top:-3px;width:0;height:0;border-top:5px solid;border-right:5px solid transparent;border-left:5px solid transparent;color:#999;content:"";pointer-events:none}.item-select.item-light select{background:#fff;color:#444}.item-select.item-stable select{background:#f8f8f8;color:#444}.item-select.item-stable .input-label,.item-select.item-stable:after{color:#656565}.item-select.item-positive select{background:#4a87ee;color:#fff}.item-select.item-positive .input-label,.item-select.item-positive:after{color:#fff}.item-select.item-calm select{background:#43cee6;color:#fff}.item-select.item-calm .input-label,.item-select.item-calm:after{color:#fff}.item-select.item-assertive select{background:#ef4e3a;color:#fff}.item-select.item-assertive .input-label,.item-select.item-assertive:after{color:#fff}.item-select.item-balanced select{background:#6c3;color:#fff}.item-select.item-balanced .input-label,.item-select.item-balanced:after{color:#fff}.item-select.item-energized select{background:#f0b840;color:#fff}.item-select.item-energized .input-label,.item-select.item-energized:after{color:#fff}.item-select.item-royal select{background:#8a6de9;color:#fff}.item-select.item-royal .input-label,.item-select.item-royal:after{color:#fff}.item-select.item-dark select{background:#444;color:#fff}.item-select.item-dark .input-label,.item-select.item-dark:after{color:#fff}select[multiple],select[size]{height:auto}progress{display:block;margin:15px auto;width:100%}.button{border-color:#b2b2b2;background-color:#f8f8f8;color:#444;position:relative;display:inline-block;margin:0;padding:0 12px;min-width:52px;min-height:47px;border-width:1px;border-style:solid;border-radius:2px;vertical-align:top;text-align:center;text-overflow:ellipsis;font-size:16px;line-height:42px;cursor:pointer}.button:hover{color:#444;text-decoration:none}.button.activated,.button.active{border-color:#a2a2a2;background-color:#e5e5e5;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.button:after{position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;content:' '}.button .icon{vertical-align:top;pointer-events:none}.button .icon:before,.button.icon-left:before,.button.icon-right:before,.button.icon:before{display:inline-block;padding:0 0 1px;vertical-align:inherit;font-size:24px;line-height:41px;pointer-events:none}.button.icon-left:before{float:left;padding-right:.2em;padding-left:0}.button.icon-right:before{float:right;padding-right:0;padding-left:.2em}.button.button-block,.button.button-full{margin-top:10px;margin-bottom:10px}.button.button-light{border-color:#ddd;background-color:#fff;color:#444}.button.button-light:hover{color:#444;text-decoration:none}.button.button-light.activated,.button.button-light.active{border-color:#ccc;background-color:#fafafa;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.button.button-light.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#ddd}.button.button-light.button-icon{border-color:transparent;background:0 0}.button.button-light.button-outline{border-color:#ddd;background:0 0;color:#ddd}.button.button-light.button-outline.activated,.button.button-light.button-outline.active{background-color:#ddd;box-shadow:none;color:#fff}.button.button-stable{border-color:#b2b2b2;background-color:#f8f8f8;color:#444}.button.button-stable:hover{color:#444;text-decoration:none}.button.button-stable.activated,.button.button-stable.active{border-color:#a2a2a2;background-color:#e5e5e5;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.button.button-stable.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#b2b2b2}.button.button-stable.button-icon{border-color:transparent;background:0 0}.button.button-stable.button-outline{border-color:#b2b2b2;background:0 0;color:#b2b2b2}.button.button-stable.button-outline.activated,.button.button-stable.button-outline.active{background-color:#b2b2b2;box-shadow:none;color:#fff}.button.button-positive{border-color:#145fd7;background-color:#4a87ee;color:#fff}.button.button-positive:hover{color:#fff;text-decoration:none}.button.button-positive.activated,.button.button-positive.active{border-color:#145fd7;background-color:#145fd7;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.button.button-positive.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#4a87ee}.button.button-positive.button-icon{border-color:transparent;background:0 0}.button.button-positive.button-outline{border-color:#4a87ee;background:0 0;color:#4a87ee}.button.button-positive.button-outline.activated,.button.button-positive.button-outline.active{background-color:#4a87ee;box-shadow:none;color:#fff}.button.button-calm{border-color:#1aacc3;background-color:#43cee6;color:#fff}.button.button-calm:hover{color:#fff;text-decoration:none}.button.button-calm.activated,.button.button-calm.active{border-color:#1aacc3;background-color:#1aacc3;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.button.button-calm.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#43cee6}.button.button-calm.button-icon{border-color:transparent;background:0 0}.button.button-calm.button-outline{border-color:#43cee6;background:0 0;color:#43cee6}.button.button-calm.button-outline.activated,.button.button-calm.button-outline.active{background-color:#43cee6;box-shadow:none;color:#fff}.button.button-assertive{border-color:#cc2311;background-color:#ef4e3a;color:#fff}.button.button-assertive:hover{color:#fff;text-decoration:none}.button.button-assertive.activated,.button.button-assertive.active{border-color:#cc2311;background-color:#cc2311;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.button.button-assertive.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#ef4e3a}.button.button-assertive.button-icon{border-color:transparent;background:0 0}.button.button-assertive.button-outline{border-color:#ef4e3a;background:0 0;color:#ef4e3a}.button.button-assertive.button-outline.activated,.button.button-assertive.button-outline.active{background-color:#ef4e3a;box-shadow:none;color:#fff}.button.button-balanced{border-color:#498f24;background-color:#6c3;color:#fff}.button.button-balanced:hover{color:#fff;text-decoration:none}.button.button-balanced.activated,.button.button-balanced.active{border-color:#498f24;background-color:#498f24;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.button.button-balanced.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#6c3}.button.button-balanced.button-icon{border-color:transparent;background:0 0}.button.button-balanced.button-outline{border-color:#6c3;background:0 0;color:#6c3}.button.button-balanced.button-outline.activated,.button.button-balanced.button-outline.active{background-color:#6c3;box-shadow:none;color:#fff}.button.button-energized{border-color:#d39211;background-color:#f0b840;color:#fff}.button.button-energized:hover{color:#fff;text-decoration:none}.button.button-energized.activated,.button.button-energized.active{border-color:#d39211;background-color:#d39211;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.button.button-energized.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#f0b840}.button.button-energized.button-icon{border-color:transparent;background:0 0}.button.button-energized.button-outline{border-color:#f0b840;background:0 0;color:#f0b840}.button.button-energized.button-outline.activated,.button.button-energized.button-outline.active{background-color:#f0b840;box-shadow:none;color:#fff}.button.button-royal{border-color:#552bdf;background-color:#8a6de9;color:#fff}.button.button-royal:hover{color:#fff;text-decoration:none}.button.button-royal.activated,.button.button-royal.active{border-color:#552bdf;background-color:#552bdf;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.button.button-royal.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#8a6de9}.button.button-royal.button-icon{border-color:transparent;background:0 0}.button.button-royal.button-outline{border-color:#8a6de9;background:0 0;color:#8a6de9}.button.button-royal.button-outline.activated,.button.button-royal.button-outline.active{background-color:#8a6de9;box-shadow:none;color:#fff}.button.button-dark{border-color:#111;background-color:#444;color:#fff}.button.button-dark:hover{color:#fff;text-decoration:none}.button.button-dark.activated,.button.button-dark.active{border-color:#000;background-color:#262626;box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}.button.button-dark.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#444}.button.button-dark.button-icon{border-color:transparent;background:0 0}.button.button-dark.button-outline{border-color:#444;background:0 0;color:#444}.button.button-dark.button-outline.activated,.button.button-dark.button-outline.active{background-color:#444;box-shadow:none;color:#fff}.button-small{padding:2px 4px 1px;min-width:28px;min-height:30px;font-size:12px;line-height:26px}.button-small .icon:before,.button-small.icon-left:before,.button-small.icon-right:before,.button-small.icon:before{font-size:16px;line-height:19px;margin-top:3px}.button-large{padding:0 16px;min-width:68px;min-height:59px;font-size:20px;line-height:53px}.button-large .icon:before,.button-large.icon-left:before,.button-large.icon-right:before,.button-large.icon:before{padding-bottom:2px;font-size:32px;line-height:51px}.button-icon{-webkit-transition:opacity .1s;-moz-transition:opacity .1s;transition:opacity .1s;padding:0 6px;min-width:initial;border-color:transparent;background:0 0}.button-icon.button.activated,.button-icon.button.active{border-color:transparent;background:0 0;box-shadow:none;opacity:.3}.button-icon .icon:before,.button-icon.icon:before{font-size:32px}.button-clear{-webkit-transition:opacity .1s;-moz-transition:opacity .1s;transition:opacity .1s;padding:0 6px;max-height:42px;border-color:transparent;background:0 0;box-shadow:none}.button-clear.button-clear{border-color:transparent;background:0 0;box-shadow:none;color:#b2b2b2}.button-clear.button-icon{border-color:transparent;background:0 0}.button-clear.activated,.button-clear.active{opacity:.3}.button-outline{-webkit-transition:opacity .1s;-moz-transition:opacity .1s;transition:opacity .1s;background:0 0;box-shadow:none}.button-outline.button-outline{border-color:#b2b2b2;background:0 0;color:#b2b2b2}.button-outline.button-outline.activated,.button-outline.button-outline.active{background-color:#b2b2b2;box-shadow:none;color:#fff}.padding>.button.button-block:first-child{margin-top:0}.button-block{display:block;clear:both}.button-block:after{clear:both}.button-full,.button-full>.button{display:block;margin-right:0;margin-left:0;border-right-width:0;border-left-width:0;border-radius:0}.button-full>button.button,button.button-block,button.button-full,input.button.button-block{width:100%}a.button{text-decoration:none}.button.disabled,.button[disabled]{opacity:.4;cursor:default!important;pointer-events:none}.button-bar{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;width:100%}.button-bar.button-bar-inline{display:block;width:auto}.button-bar.button-bar-inline:after,.button-bar.button-bar-inline:before{display:table;content:"";line-height:0}.button-bar.button-bar-inline:after{clear:both}.button-bar.button-bar-inline>.button{width:auto;display:inline-block;float:left}.button-bar>.button{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;overflow:hidden;padding:0 16px;width:0;border-width:1px 0 1px 1px;border-radius:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.button-bar>.button .icon:before,.button-bar>.button:before{line-height:44px}.button-bar>.button:first-child{border-radius:2px 0 0 2px}.button-bar>.button:last-child{border-right-width:1px;border-radius:0 2px 2px 0}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0)}100%{-webkit-transform:translate3d(0,0,0)}}@-moz-keyframes slideInUp{0%{-moz-transform:translate3d(0,100%,0)}100%{-moz-transform:translate3d(0,0,0)}}@keyframes slideInUp{0%{transform:translate3d(0,100%,0)}100%{transform:translate3d(0,0,0)}}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translate3d(0,0,0)}100%{-webkit-transform:translate3d(0,100%,0)}}@-moz-keyframes slideOutUp{0%{-moz-transform:translate3d(0,0,0)}100%{-moz-transform:translate3d(0,100%,0)}}@keyframes slideOutUp{0%{transform:translate3d(0,0,0)}100%{transform:translate3d(0,100%,0)}}@-webkit-keyframes slideInFromLeft{from{-webkit-transform:translate3d(-100%,0,0)}to{-webkit-transform:translate3d(0,0,0)}}@-moz-keyframes slideInFromLeft{from{-moz-transform:translateX(-100%)}to{-moz-transform:translateX(0)}}@keyframes slideInFromLeft{from{transform:translateX(-100%)}to{transform:translateX(0)}}@-webkit-keyframes slideInFromRight{from{-webkit-transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0)}}@-moz-keyframes slideInFromRight{from{-moz-transform:translateX(100%)}to{-moz-transform:translateX(0)}}@keyframes slideInFromRight{from{transform:translateX(100%)}to{transform:translateX(0)}}@-webkit-keyframes slideOutToLeft{from{-webkit-transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-100%,0,0)}}@-moz-keyframes slideOutToLeft{from{-moz-transform:translateX(0)}to{-moz-transform:translateX(-100%)}}@keyframes slideOutToLeft{from{transform:translateX(0)}to{transform:translateX(-100%)}}@-webkit-keyframes slideOutToRight{from{-webkit-transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(100%,0,0)}}@-moz-keyframes slideOutToRight{from{-moz-transform:translateX(0)}to{-moz-transform:translateX(100%)}}@keyframes slideOutToRight{from{transform:translateX(0)}to{transform:translateX(100%)}}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@-moz-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@-moz-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeInHalf{from{background-color:rgba(0,0,0,0)}to{background-color:rgba(0,0,0,.5)}}@-moz-keyframes fadeInHalf{from{background-color:rgba(0,0,0,0)}to{background-color:rgba(0,0,0,.5)}}@keyframes fadeInHalf{from{background-color:rgba(0,0,0,0)}to{background-color:rgba(0,0,0,.5)}}@-webkit-keyframes fadeOutHalf{from{background-color:rgba(0,0,0,.5)}to{background-color:rgba(0,0,0,0)}}@-moz-keyframes fadeOutHalf{from{background-color:rgba(0,0,0,.5)}to{background-color:rgba(0,0,0,0)}}@keyframes fadeOutHalf{from{background-color:rgba(0,0,0,.5)}to{background-color:transparent}}@-webkit-keyframes scaleOut{from{-webkit-transform:scale(1);opacity:1}to{-webkit-transform:scale(0.8);opacity:0}}@-moz-keyframes scaleOut{from{-moz-transform:scale(1);opacity:1}to{-moz-transform:scale(0.8);opacity:0}}@keyframes scaleOut{from{transform:scale(1);opacity:1}to{transform:scale(0.8);opacity:0}}@-webkit-keyframes scaleIn{from{-webkit-transform:scale(0)}to{-webkit-transform:scale(1)}}@-moz-keyframes scaleIn{from{-moz-transform:scale(0)}to{-moz-transform:scale(1)}}@keyframes scaleIn{from{transform:scale(0)}to{transform:scale(1)}}@-webkit-keyframes superScaleIn{from{-webkit-transform:scale(1.2);opacity:0}to{-webkit-transform:scale(1);opacity:1}}@-moz-keyframes superScaleIn{from{-moz-transform:scale(1.2);opacity:0}to{-moz-transform:scale(1);opacity:1}}@keyframes superScaleIn{from{transform:scale(1.2);opacity:0}to{transform:scale(1);opacity:1}}@-webkit-keyframes spin{100%{-webkit-transform:rotate(360deg)}}@-moz-keyframes spin{100%{-moz-transform:rotate(360deg)}}@keyframes spin{100%{transform:rotate(360deg)}}.no-animation.ng-enter,.no-animation.ng-leave,.no-animation>.ng-enter,.no-animation>.ng-leave{-webkit-transition:none;-moz-transition:none;transition:none}.noop-animation.ng-enter,.noop-animation.ng-leave,.noop-animation>.ng-enter,.noop-animation>.ng-leave{-webkit-transition:all cubic-bezier(0.25,.46,.45,.94) 250ms;-moz-transition:all cubic-bezier(0.25,.46,.45,.94) 250ms;transition:all cubic-bezier(0.25,.46,.45,.94) 250ms;position:absolute;top:0;right:0;bottom:0;left:0}.ng-animate .pane{position:absolute}.slide-left-right.ng-enter,.slide-left-right.ng-leave,.slide-left-right>.ng-enter,.slide-left-right>.ng-leave,.slide-right-left.reverse.ng-enter,.slide-right-left.reverse.ng-leave,.slide-right-left.reverse>.ng-enter,.slide-right-left.reverse>.ng-leave{-webkit-transition:all ease-in-out 250ms;-moz-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms;position:absolute;top:0;right:0;bottom:0;left:0}.slide-left-right.ng-enter,.slide-left-right>.ng-enter,.slide-right-left.reverse.ng-enter,.slide-right-left.reverse>.ng-enter{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.slide-left-right.ng-enter.ng-enter-active,.slide-left-right>.ng-enter.ng-enter-active,.slide-right-left.reverse.ng-enter.ng-enter-active,.slide-right-left.reverse>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-left-right.ng-leave.ng-leave-active,.slide-left-right>.ng-leave.ng-leave-active,.slide-right-left.reverse.ng-leave.ng-leave-active,.slide-right-left.reverse>.ng-leave.ng-leave-active{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.slide-left-right.reverse.ng-enter,.slide-left-right.reverse.ng-leave,.slide-left-right.reverse>.ng-enter,.slide-left-right.reverse>.ng-leave,.slide-right-left.ng-enter,.slide-right-left.ng-leave,.slide-right-left>.ng-enter,.slide-right-left>.ng-leave{-webkit-transition:all ease-in-out 250ms;-moz-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms;position:absolute;top:0;right:0;bottom:0;left:0}.slide-left-right.reverse.ng-enter,.slide-left-right.reverse>.ng-enter,.slide-right-left.ng-enter,.slide-right-left>.ng-enter{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.slide-left-right.reverse.ng-enter.ng-enter-active,.slide-left-right.reverse>.ng-enter.ng-enter-active,.slide-right-left.ng-enter.ng-enter-active,.slide-right-left>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-left-right.reverse.ng-leave.ng-leave-active,.slide-left-right.reverse>.ng-leave.ng-leave-active,.slide-right-left.ng-leave.ng-leave-active,.slide-right-left>.ng-leave.ng-leave-active{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.slide-left-right-ios7.ng-enter,.slide-left-right-ios7.ng-leave,.slide-left-right-ios7>.ng-enter,.slide-left-right-ios7>.ng-leave,.slide-right-left-ios7.reverse.ng-enter,.slide-right-left-ios7.reverse.ng-leave,.slide-right-left-ios7.reverse>.ng-enter,.slide-right-left-ios7.reverse>.ng-leave{-webkit-transition:all cubic-bezier(0.4,.6,.2,1) 340ms;-moz-transition:all cubic-bezier(0.4,.6,.2,1) 340ms;transition:all cubic-bezier(0.4,.6,.2,1) 340ms;position:absolute;top:0;right:-1px;bottom:0;left:-1px;width:auto;border-right:none;border-left:none}.slide-left-right-ios7.ng-enter:not(.bar),.slide-left-right-ios7.ng-leave:not(.bar),.slide-left-right-ios7>.ng-enter:not(.bar),.slide-left-right-ios7>.ng-leave:not(.bar),.slide-right-left-ios7.reverse.ng-enter:not(.bar),.slide-right-left-ios7.reverse.ng-leave:not(.bar),.slide-right-left-ios7.reverse>.ng-enter:not(.bar),.slide-right-left-ios7.reverse>.ng-leave:not(.bar){border-right:none;border-left:none}.slide-left-right-ios7.ng-enter,.slide-left-right-ios7>.ng-enter,.slide-right-left-ios7.reverse.ng-enter,.slide-right-left-ios7.reverse>.ng-enter{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.slide-left-right-ios7.ng-leave,.slide-left-right-ios7>.ng-leave,.slide-right-left-ios7.reverse.ng-leave,.slide-right-left-ios7.reverse>.ng-leave{z-index:1}.slide-left-right-ios7.ng-enter.ng-enter-active,.slide-left-right-ios7>.ng-enter.ng-enter-active,.slide-right-left-ios7.reverse.ng-enter.ng-enter-active,.slide-right-left-ios7.reverse>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-left-right-ios7.ng-leave.ng-leave-active,.slide-left-right-ios7>.ng-leave.ng-leave-active,.slide-right-left-ios7.reverse.ng-leave.ng-leave-active,.slide-right-left-ios7.reverse>.ng-leave.ng-leave-active{-webkit-transform:translate3d(-15%,0,0);-moz-transform:translate3d(-15%,0,0);transform:translate3d(-15%,0,0)}.slide-left-right-ios7.reverse.ng-enter,.slide-left-right-ios7.reverse.ng-leave,.slide-left-right-ios7.reverse>.ng-enter,.slide-left-right-ios7.reverse>.ng-leave,.slide-right-left-ios7.ng-enter,.slide-right-left-ios7.ng-leave,.slide-right-left-ios7>.ng-enter,.slide-right-left-ios7>.ng-leave{-webkit-transition:all cubic-bezier(0.4,.6,.2,1) 340ms;-moz-transition:all cubic-bezier(0.4,.6,.2,1) 340ms;transition:all cubic-bezier(0.4,.6,.2,1) 340ms;position:absolute;top:0;right:-1px;bottom:0;left:-1px;width:auto;border-right:none;border-left:none}.slide-left-right-ios7.reverse.ng-enter,.slide-left-right-ios7.reverse>.ng-enter,.slide-right-left-ios7.ng-enter,.slide-right-left-ios7>.ng-enter{-webkit-transform:translate3d(-15%,0,0);-moz-transform:translate3d(-15%,0,0);transform:translate3d(-15%,0,0)}.slide-left-right-ios7.reverse.ng-leave,.slide-left-right-ios7.reverse>.ng-leave,.slide-right-left-ios7.ng-leave,.slide-right-left-ios7>.ng-leave{z-index:2}.slide-left-right-ios7.reverse.ng-enter.ng-enter-active,.slide-left-right-ios7.reverse>.ng-enter.ng-enter-active,.slide-right-left-ios7.ng-enter.ng-enter-active,.slide-right-left-ios7>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-left-right-ios7.reverse.ng-leave.ng-leave-active,.slide-left-right-ios7.reverse>.ng-leave.ng-leave-active,.slide-right-left-ios7.ng-leave.ng-leave-active,.slide-right-left-ios7>.ng-leave.ng-leave-active{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.grade-a.platform-ipad .slide-left-right-ios7.ng-enter,.grade-a.platform-ipad .slide-left-right-ios7.reverse.ng-leave,.grade-a.platform-ipad .slide-left-right-ios7.reverse>.ng-leave,.grade-a.platform-ipad .slide-left-right-ios7>.ng-enter,.grade-a.platform-ipad .slide-right-left-ios7.ng-leave,.grade-a.platform-ipad .slide-right-left-ios7.reverse.ng-enter,.grade-a.platform-ipad .slide-right-left-ios7.reverse>.ng-enter,.grade-a.platform-ipad .slide-right-left-ios7>.ng-leave{border-left:1px solid #ddd}.fade-explode.ng-enter,.fade-explode.ng-leave,.fade-explode>.ng-enter,.fade-explode>.ng-leave{-webkit-transition:all ease-out 300ms;-moz-transition:all ease-out 300ms;transition:all ease-out 300ms;position:absolute;top:0;right:-1px;bottom:0;left:-1px;width:auto}.fade-explode.ng-enter:not(.bar),.fade-explode.ng-leave:not(.bar),.fade-explode>.ng-enter:not(.bar),.fade-explode>.ng-leave:not(.bar){border-right:1px solid #ddd;border-left:1px solid #ddd}.fade-explode.ng-enter,.fade-explode>.ng-enter{-webkit-transform:scale(1.6);-moz-transform:scale(1.6);transform:scale(1.6);opacity:0;z-index:2}.fade-explode.ng-leave,.fade-explode>.ng-leave{z-index:1}.fade-explode.ng-enter.ng-enter-active,.fade-explode>.ng-enter.ng-enter-active{-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1);opacity:1}.fade-explode.ng-leave.ng-leave-active,.fade-explode>.ng-leave.ng-leave-active{-webkit-transform:scale(0.95);-moz-transform:scale(0.95);transform:scale(0.95)}.fade-explode.reverse.ng-enter,.fade-explode.reverse.ng-leave,.fade-explode.reverse>.ng-enter,.fade-explode.reverse>.ng-leave{-webkit-transition:all ease-out 300ms;-moz-transition:all ease-out 300ms;transition:all ease-out 300ms;position:absolute;top:0;right:-1px;bottom:0;left:-1px;width:auto}.fade-explode.reverse.ng-enter:not(.bar),.fade-explode.reverse.ng-leave:not(.bar),.fade-explode.reverse>.ng-enter:not(.bar),.fade-explode.reverse>.ng-leave:not(.bar){border-right:1px solid #ddd;border-left:1px solid #ddd}.fade-explode.reverse.ng-enter,.fade-explode.reverse>.ng-enter{-webkit-transform:scale(0.95);-moz-transform:scale(0.95);transform:scale(0.95);opacity:0;z-index:1}.fade-explode.reverse.ng-leave,.fade-explode.reverse>.ng-leave{-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1);opacity:1;z-index:2}.fade-explode.reverse.ng-enter.ng-enter-active,.fade-explode.reverse>.ng-enter.ng-enter-active{-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1);opacity:1}.fade-explode.reverse.ng-leave.ng-leave-active,.fade-explode.reverse>.ng-leave.ng-leave-active{-webkit-transform:scale(1.6);-moz-transform:scale(1.6);transform:scale(1.6);opacity:0}.fade-implode.ng-enter,.fade-implode.ng-leave,.fade-implode>.ng-enter,.fade-implode>.ng-leave{-webkit-transition:all ease-out 200ms;-moz-transition:all ease-out 200ms;transition:all ease-out 200ms;position:absolute;top:0;right:-1px;bottom:0;left:-1px;width:auto}.fade-implode.ng-enter:not(.bar),.fade-implode.ng-leave:not(.bar),.fade-implode>.ng-enter:not(.bar),.fade-implode>.ng-leave:not(.bar){border-right:1px solid #ddd;border-left:1px solid #ddd}.fade-implode.ng-enter,.fade-implode>.ng-enter{-webkit-transform:scale(0.8);-moz-transform:scale(0.8);transform:scale(0.8);opacity:0;z-index:2}.fade-implode.ng-leave,.fade-implode>.ng-leave{z-index:1}.fade-implode.ng-enter.ng-enter-active,.fade-implode>.ng-enter.ng-enter-active{-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1);opacity:1}.fade-implode.reverse.ng-enter,.fade-implode.reverse.ng-leave,.fade-implode.reverse>.ng-enter,.fade-implode.reverse>.ng-leave{-webkit-transition:all ease-out 200ms;-moz-transition:all ease-out 200ms;transition:all ease-out 200ms;position:absolute;top:0;right:-1px;bottom:0;left:-1px;width:auto;border-right:1px solid #ddd;border-left:1px solid #ddd}.fade-implode.reverse.ng-enter,.fade-implode.reverse>.ng-enter{-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1);opacity:1;z-index:1}.fade-implode.reverse.ng-leave,.fade-implode.reverse>.ng-leave{-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1);opacity:1;z-index:2}.fade-implode.reverse.ng-enter.ng-enter-active,.fade-implode.reverse>.ng-enter.ng-enter-active{opacity:1}.fade-implode.reverse.ng-leave.ng-leave-active,.fade-implode.reverse>.ng-leave.ng-leave-active{-webkit-transform:scale(0.8);-moz-transform:scale(0.8);transform:scale(0.8);opacity:0}.slide-in-left{-webkit-transform:translate3d(0%,0,0);-moz-transform:translate3d(0%,0,0);transform:translate3d(0%,0,0)}.slide-in-left.ng-enter,.slide-in-left>.ng-enter{-webkit-animation-name:slideInFromLeft;-moz-animation-name:slideInFromLeft;animation-name:slideInFromLeft;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-left.ng-leave,.slide-in-left>.ng-leave{-webkit-animation-name:slideOutToLeft;-moz-animation-name:slideOutToLeft;animation-name:slideOutToLeft;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-left-add{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-left-add-active{-webkit-animation-name:slideInFromLeft;-moz-animation-name:slideInFromLeft;animation-name:slideInFromLeft}.slide-out-left{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.slide-out-left.ng-enter,.slide-out-left.ng-leave,.slide-out-left>.ng-enter,.slide-out-left>.ng-leave{-webkit-animation-name:slideOutToLeft;-moz-animation-name:slideOutToLeft;animation-name:slideOutToLeft;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-out-left-add{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-out-left-add-active{-webkit-animation-name:slideOutToLeft;-moz-animation-name:slideOutToLeft;animation-name:slideOutToLeft}.slide-in-right{-webkit-transform:translate3d(0%,0,0);-moz-transform:translate3d(0%,0,0);transform:translate3d(0%,0,0)}.slide-in-right.ng-enter,.slide-in-right>.ng-enter{-webkit-animation-name:slideInFromRight;-moz-animation-name:slideInFromRight;animation-name:slideInFromRight;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-right.ng-leave,.slide-in-right>.ng-leave{-webkit-animation-name:slideOutToRight;-moz-animation-name:slideOutToRight;animation-name:slideOutToRight;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-right-add{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-right-add-active{-webkit-animation-name:slideInFromRight;-moz-animation-name:slideInFromRight;animation-name:slideInFromRight}.slide-out-right{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.slide-out-right.ng-enter,.slide-out-right.ng-leave,.slide-out-right>.ng-enter,.slide-out-right>.ng-leave{-webkit-animation-name:slideOutToRight;-moz-animation-name:slideOutToRight;animation-name:slideOutToRight;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-out-right-add{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-out-right-add-active{-webkit-animation-name:slideOutToRight;-moz-animation-name:slideOutToRight;animation-name:slideOutToRight}.slide-in-up{-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.slide-in-up.ng-enter,.slide-in-up>.ng-enter{-webkit-transition:all cubic-bezier(0.1,.7,.1,1) 400ms;-moz-transition:all cubic-bezier(0.1,.7,.1,1) 400ms;transition:all cubic-bezier(0.1,.7,.1,1) 400ms}.slide-in-up.ng-enter-active,.slide-in-up>.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-in-up.ng-leave,.slide-in-up>.ng-leave{-webkit-transition:all ease-in-out 250ms;-moz-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms}.fade-in{-webkit-animation:fadeOut .3s;-moz-animation:fadeOut .3s;animation:fadeOut .3s}.fade-in.active{-webkit-animation:fadeIn .3s;-moz-animation:fadeIn .3s;animation:fadeIn .3s}.fade-in-not-out .ng-enter,.fade-in-not-out.ng-enter{-webkit-animation:fadeIn .3s;-moz-animation:fadeIn .3s;animation:fadeIn .3s;position:relative}.fade-in-not-out .ng-leave,.fade-in-not-out.ng-leave{display:none}.nav-title-slide-ios7:not(.no-animation) .button.back-button{-webkit-transition:all 340ms;-moz-transition:all 340ms;transition:all 340ms;-webkit-transition-timing-function:cubic-bezier(0.4,.6,.2,1);-moz-transition-timing-function:cubic-bezier(0.4,.6,.2,1);transition-timing-function:cubic-bezier(0.4,.6,.2,1);-webkit-transform:translate3d(0%,0,0);-moz-transform:translate3d(0%,0,0);transform:translate3d(0%,0,0);opacity:1}.nav-title-slide-ios7:not(.no-animation) .button.back-button.activated,.nav-title-slide-ios7:not(.no-animation) .button.back-button.active{opacity:.5}.nav-title-slide-ios7:not(.no-animation) .button.back-button.ng-hide{opacity:0;-webkit-transform:translate3d(30%,0,0);-moz-transform:translate3d(30%,0,0);transform:translate3d(30%,0,0)}.nav-title-slide-ios7:not(.no-animation) .button.back-button.ng-hide-add,.nav-title-slide-ios7:not(.no-animation) .button.back-button.ng-hide-remove{display:block!important}.nav-title-slide-ios7:not(.no-animation) .button.back-button.ng-hide-add{position:absolute}.nav-title-slide-ios7.ng-enter,.nav-title-slide-ios7.ng-leave,.nav-title-slide-ios7>.ng-enter,.nav-title-slide-ios7>.ng-leave{-webkit-transition:all 340ms;-moz-transition:all 340ms;transition:all 340ms;-webkit-transition-timing-function:cubic-bezier(0.4,.6,.2,1);-moz-transition-timing-function:cubic-bezier(0.4,.6,.2,1);transition-timing-function:cubic-bezier(0.4,.6,.2,1);opacity:1}.nav-title-slide-ios7.ng-enter,.nav-title-slide-ios7>.ng-enter{-webkit-transform:translate3d(30%,0,0);-moz-transform:translate3d(30%,0,0);transform:translate3d(30%,0,0);opacity:0}.nav-title-slide-ios7.ng-enter.title,.nav-title-slide-ios7>.ng-enter.title{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.nav-title-slide-ios7.ng-enter.ng-enter-active,.nav-title-slide-ios7>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.nav-title-slide-ios7.ng-leave.ng-leave-active,.nav-title-slide-ios7>.ng-leave.ng-leave-active{-webkit-transform:translate3d(-30%,0,0);-moz-transform:translate3d(-30%,0,0);transform:translate3d(-30%,0,0);opacity:0}.nav-title-slide-ios7.reverse.ng-enter,.nav-title-slide-ios7.reverse.ng-leave,.nav-title-slide-ios7.reverse>.ng-enter,.nav-title-slide-ios7.reverse>.ng-leave{-webkit-transition:all 340ms;-moz-transition:all 340ms;transition:all 340ms;-webkit-transition-timing-function:cubic-bezier(0.4,.6,.2,1);-moz-transition-timing-function:cubic-bezier(0.4,.6,.2,1);transition-timing-function:cubic-bezier(0.4,.6,.2,1);opacity:1}.nav-title-slide-ios7.reverse.ng-enter,.nav-title-slide-ios7.reverse>.ng-enter{-webkit-transform:translate3d(-30%,0,0);-moz-transform:translate3d(-30%,0,0);transform:translate3d(-30%,0,0);opacity:0}.nav-title-slide-ios7.reverse.ng-enter.ng-enter-active,.nav-title-slide-ios7.reverse>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.nav-title-slide-ios7.reverse.ng-leave.ng-leave-active,.nav-title-slide-ios7.reverse>.ng-leave.ng-leave-active{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);opacity:0}.nav-title-android:not(.no-animation) .button.back-button{-webkit-transition:all 200ms;-moz-transition:all 200ms;transition:all 200ms;-webkit-transition-timing-function:linear;-moz-transition-timing-function:linear;transition-timing-function:linear;opacity:1}.nav-title-android:not(.no-animation) .button.back-button.ng-hide{opacity:0}.nav-title-android:not(.no-animation) .button.back-button.ng-hide-add,.nav-title-android:not(.no-animation) .button.back-button.ng-hide-remove{display:block!important}.nav-title-android:not(.no-animation) .button.back-button.ng-hide-add{position:absolute}.nav-title-android.ng-enter,.nav-title-android.ng-leave,.nav-title-android>.ng-enter,.nav-title-android>.ng-leave{-webkit-transition:all 200ms;-moz-transition:all 200ms;transition:all 200ms;-webkit-transition-timing-function:linear;-moz-transition-timing-function:linear;transition-timing-function:linear}.nav-title-android.ng-enter,.nav-title-android>.ng-enter{opacity:0}.nav-title-android.ng-enter.ng-enter-active,.nav-title-android>.ng-enter.ng-enter-active{opacity:1}.nav-title-android.ng-leave.ng-leave-active,.nav-title-android>.ng-leave.ng-leave-active{opacity:0}.row{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;padding:5px;width:100%}.row+.row{margin-top:-5px;padding-top:0}.col{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;padding:5px;width:100%}.row-top{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;-moz-align-items:flex-start;align-items:flex-start}.row-bottom{-webkit-box-align:end;-ms-flex-align:end;-webkit-align-items:flex-end;-moz-align-items:flex-end;align-items:flex-end}.row-center{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}.row-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;-webkit-align-items:stretch;-moz-align-items:stretch;align-items:stretch}.row-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;-webkit-align-items:baseline;-moz-align-items:baseline;align-items:baseline}.col-top{-webkit-align-self:flex-start;-moz-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.col-bottom{-webkit-align-self:flex-end;-moz-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.col-center{-webkit-align-self:center;-moz-align-self:center;-ms-flex-item-align:center;align-self:center}.col-offset-10{margin-left:10%}.col-offset-20{margin-left:20%}.col-offset-25{margin-left:25%}.col-offset-33,.col-offset-34{margin-left:33.3333%}.col-offset-50{margin-left:50%}.col-offset-66,.col-offset-67{margin-left:66.6666%}.col-offset-75{margin-left:75%}.col-offset-80{margin-left:80%}.col-offset-90{margin-left:90%}.col-10{-webkit-box-flex:0;-webkit-flex:0 0 10%;-moz-box-flex:0;-moz-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%;max-width:10%}.col-20{-webkit-box-flex:0;-webkit-flex:0 0 20%;-moz-box-flex:0;-moz-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.col-25{-webkit-box-flex:0;-webkit-flex:0 0 25%;-moz-box-flex:0;-moz-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-33,.col-34{-webkit-box-flex:0;-webkit-flex:0 0 33.3333%;-moz-box-flex:0;-moz-flex:0 0 33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%;max-width:33.3333%}.col-50{-webkit-box-flex:0;-webkit-flex:0 0 50%;-moz-box-flex:0;-moz-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-66,.col-67{-webkit-box-flex:0;-webkit-flex:0 0 66.6666%;-moz-box-flex:0;-moz-flex:0 0 66.6666%;-ms-flex:0 0 66.6666%;flex:0 0 66.6666%;max-width:66.6666%}.col-75{-webkit-box-flex:0;-webkit-flex:0 0 75%;-moz-box-flex:0;-moz-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-80{-webkit-box-flex:0;-webkit-flex:0 0 80%;-moz-box-flex:0;-moz-flex:0 0 80%;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}.col-90{-webkit-box-flex:0;-webkit-flex:0 0 90%;-moz-box-flex:0;-moz-flex:0 0 90%;-ms-flex:0 0 90%;flex:0 0 90%;max-width:90%}@media (max-width:567px){.responsive-sm{-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.responsive-sm .col,.responsive-sm .col-10,.responsive-sm .col-20,.responsive-sm .col-25,.responsive-sm .col-33,.responsive-sm .col-34,.responsive-sm .col-50,.responsive-sm .col-66,.responsive-sm .col-67,.responsive-sm .col-75,.responsive-sm .col-80,.responsive-sm .col-90{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;margin-bottom:15px;margin-left:0;max-width:100%;width:100%}}@media (max-width:767px){.responsive-md{-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.responsive-md .col,.responsive-md .col-10,.responsive-md .col-20,.responsive-md .col-25,.responsive-md .col-33,.responsive-md .col-34,.responsive-md .col-50,.responsive-md .col-66,.responsive-md .col-67,.responsive-md .col-75,.responsive-md .col-80,.responsive-md .col-90{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;margin-bottom:15px;margin-left:0;max-width:100%;width:100%}}@media (max-width:1023px){.responsive-lg{-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.responsive-lg .col,.responsive-lg .col-10,.responsive-lg .col-20,.responsive-lg .col-25,.responsive-lg .col-33,.responsive-lg .col-34,.responsive-lg .col-50,.responsive-lg .col-66,.responsive-lg .col-67,.responsive-lg .col-75,.responsive-lg .col-80,.responsive-lg .col-90{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;margin-bottom:15px;margin-left:0;max-width:100%;width:100%}}.hide{display:none}.opacity-hide{opacity:0}.grade-b .opacity-hide,.grade-c .opacity-hide{opacity:1;display:none}.show{display:block}.opacity-show{opacity:1}.invisible{visibility:hidden}.keyboard-open .hide-on-keyboard-open{display:none}.keyboard-open .bar-footer.hide-on-keyboard-open+.pane .has-footer,.keyboard-open .tabs.hide-on-keyboard-open+.pane .has-tabs{bottom:0}.inline{display:inline-block}.disable-pointer-events{pointer-events:none}.enable-pointer-events{pointer-events:auto}.disable-user-behavior{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-ms-touch-action:none;-ms-content-zooming:none}.no-resize{resize:none}.block{display:block;clear:both}.block:after{display:block;visibility:hidden;clear:both;height:0;content:"."}.full-image{width:100%}.clearfix:after,.clearfix:before{display:table;content:"";line-height:0}.clearfix:after{clear:both}.padding{padding:10px}.padding-top,.padding-vertical{padding-top:10px}.padding-horizontal,.padding-right{padding-right:10px}.padding-bottom,.padding-vertical{padding-bottom:10px}.padding-horizontal,.padding-left{padding-left:10px}.rounded{border-radius:4px}.light,a.light{color:#fff}.light-bg{background-color:#fff}.light-border{border-color:#ddd}.stable,a.stable{color:#f8f8f8}.stable-bg{background-color:#f8f8f8}.stable-border{border-color:#b2b2b2}.positive,a.positive{color:#4a87ee}.positive-bg{background-color:#4a87ee}.positive-border{border-color:#145fd7}.calm,a.calm{color:#43cee6}.calm-bg{background-color:#43cee6}.calm-border{border-color:#1aacc3}.assertive,a.assertive{color:#ef4e3a}.assertive-bg{background-color:#ef4e3a}.assertive-border{border-color:#cc2311}.balanced,a.balanced{color:#6c3}.balanced-bg{background-color:#6c3}.balanced-border{border-color:#498f24}.energized,a.energized{color:#f0b840}.energized-bg{background-color:#f0b840}.energized-border{border-color:#d39211}.royal,a.royal{color:#8a6de9}.royal-bg{background-color:#8a6de9}.royal-border{border-color:#552bdf}.dark,a.dark{color:#444}.dark-bg{background-color:#444}.dark-border{border-color:#111}.roboto,.roboto input{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif}.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader){height:64px}.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader).item-input-inset .item-input-wrapper{margin-top:19px!important}.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader)>*{margin-top:20px}.platform-ios.platform-cordova:not(.fullscreen) .bar-subheader,.platform-ios.platform-cordova:not(.fullscreen) .has-header,.platform-ios.platform-cordova:not(.fullscreen) .tabs-top>.tabs,.platform-ios.platform-cordova:not(.fullscreen) .tabs.tabs-top{top:64px}.platform-ios.platform-cordova:not(.fullscreen) .has-subheader{top:108px}.platform-ios.platform-cordova:not(.fullscreen) .has-tabs-top{top:113px}.platform-ios.platform-cordova:not(.fullscreen) .has-header.has-subheader.has-tabs-top{top:157px}.platform-ios.platform-cordova.status-bar-hide{margin-bottom:20px}@media (orientation:landscape){.platform-ios.platform-browser.platform-ipad{position:fixed}}.platform-c:not(.enable-transitions) *{-webkit-transition:none!important;transition:none!important}
18
+ */@font-face{font-family:Ionicons;src:url("<%= font_path('ionic/ionicons.eot') %>?v=1.4.0");src:url("<%= font_path('ionic/ionicons.eot') %>?v=1.4.0#iefix") format("embedded-opentype"),url("<%= font_path('ionic/ionicons.ttf') %>?v=1.4.0") format("truetype"),url("<%= font_path('ionic/ionicons.woff') %>?v=1.4.0") format("woff"),url("<%= font_path('ionic/ionicons.svg') %>?v=1.4.0#Ionicons") format("svg");font-weight:400;font-style:normal}.ion,.ion-alert,.ion-alert-circled,.ion-android-add,.ion-android-add-contact,.ion-android-alarm,.ion-android-archive,.ion-android-arrow-back,.ion-android-arrow-down-left,.ion-android-arrow-down-right,.ion-android-arrow-up-left,.ion-android-arrow-up-right,.ion-android-battery,.ion-android-book,.ion-android-calendar,.ion-android-call,.ion-android-camera,.ion-android-chat,.ion-android-checkmark,.ion-android-clock,.ion-android-close,.ion-android-contact,.ion-android-contacts,.ion-android-data,.ion-android-developer,.ion-android-display,.ion-android-download,.ion-android-dropdown,.ion-android-earth,.ion-android-folder,.ion-android-forums,.ion-android-friends,.ion-android-hand,.ion-android-image,.ion-android-inbox,.ion-android-information,.ion-android-keypad,.ion-android-lightbulb,.ion-android-locate,.ion-android-location,.ion-android-mail,.ion-android-microphone,.ion-android-mixer,.ion-android-more,.ion-android-note,.ion-android-playstore,.ion-android-printer,.ion-android-promotion,.ion-android-reminder,.ion-android-remove,.ion-android-search,.ion-android-send,.ion-android-settings,.ion-android-share,.ion-android-social,.ion-android-social-user,.ion-android-sort,.ion-android-star,.ion-android-stopwatch,.ion-android-storage,.ion-android-system-back,.ion-android-system-home,.ion-android-system-windows,.ion-android-timer,.ion-android-trash,.ion-android-volume,.ion-android-wifi,.ion-archive,.ion-arrow-down-a,.ion-arrow-down-b,.ion-arrow-down-c,.ion-arrow-expand,.ion-arrow-graph-down-left,.ion-arrow-graph-down-right,.ion-arrow-graph-up-left,.ion-arrow-graph-up-right,.ion-arrow-left-a,.ion-arrow-left-b,.ion-arrow-left-c,.ion-arrow-move,.ion-arrow-resize,.ion-arrow-return-left,.ion-arrow-return-right,.ion-arrow-right-a,.ion-arrow-right-b,.ion-arrow-right-c,.ion-arrow-shrink,.ion-arrow-swap,.ion-arrow-up-a,.ion-arrow-up-b,.ion-arrow-up-c,.ion-at,.ion-bag,.ion-battery-charging,.ion-battery-empty,.ion-battery-full,.ion-battery-half,.ion-battery-low,.ion-beaker,.ion-beer,.ion-bluetooth,.ion-bookmark,.ion-briefcase,.ion-bug,.ion-calculator,.ion-calendar,.ion-camera,.ion-card,.ion-chatbox,.ion-chatbox-working,.ion-chatboxes,.ion-chatbubble,.ion-chatbubble-working,.ion-chatbubbles,.ion-checkmark,.ion-checkmark-circled,.ion-checkmark-round,.ion-chevron-down,.ion-chevron-left,.ion-chevron-right,.ion-chevron-up,.ion-clipboard,.ion-clock,.ion-close,.ion-close-circled,.ion-close-round,.ion-cloud,.ion-code,.ion-code-download,.ion-code-working,.ion-coffee,.ion-compass,.ion-compose,.ion-connection-bars,.ion-contrast,.ion-disc,.ion-document,.ion-document-text,.ion-drag,.ion-earth,.ion-edit,.ion-egg,.ion-eject,.ion-email,.ion-eye,.ion-eye-disabled,.ion-female,.ion-filing,.ion-film-marker,.ion-flag,.ion-flash,.ion-flash-off,.ion-flask,.ion-folder,.ion-fork,.ion-fork-repo,.ion-forward,.ion-game-controller-a,.ion-game-controller-b,.ion-gear-a,.ion-gear-b,.ion-grid,.ion-hammer,.ion-headphone,.ion-heart,.ion-help,.ion-help-buoy,.ion-help-circled,.ion-home,.ion-icecream,.ion-icon-social-google-plus,.ion-icon-social-google-plus-outline,.ion-image,.ion-images,.ion-information,.ion-information-circled,.ion-ionic,.ion-ios7-alarm,.ion-ios7-alarm-outline,.ion-ios7-albums,.ion-ios7-albums-outline,.ion-ios7-arrow-back,.ion-ios7-arrow-down,.ion-ios7-arrow-forward,.ion-ios7-arrow-left,.ion-ios7-arrow-right,.ion-ios7-arrow-thin-down,.ion-ios7-arrow-thin-left,.ion-ios7-arrow-thin-right,.ion-ios7-arrow-thin-up,.ion-ios7-arrow-up,.ion-ios7-at,.ion-ios7-at-outline,.ion-ios7-bell,.ion-ios7-bell-outline,.ion-ios7-bolt,.ion-ios7-bolt-outline,.ion-ios7-bookmarks,.ion-ios7-bookmarks-outline,.ion-ios7-box,.ion-ios7-box-outline,.ion-ios7-briefcase,.ion-ios7-briefcase-outline,.ion-ios7-browsers,.ion-ios7-browsers-outline,.ion-ios7-calculator,.ion-ios7-calculator-outline,.ion-ios7-calendar,.ion-ios7-calendar-outline,.ion-ios7-camera,.ion-ios7-camera-outline,.ion-ios7-cart,.ion-ios7-cart-outline,.ion-ios7-chatboxes,.ion-ios7-chatboxes-outline,.ion-ios7-chatbubble,.ion-ios7-chatbubble-outline,.ion-ios7-checkmark,.ion-ios7-checkmark-empty,.ion-ios7-checkmark-outline,.ion-ios7-circle-filled,.ion-ios7-circle-outline,.ion-ios7-clock,.ion-ios7-clock-outline,.ion-ios7-close,.ion-ios7-close-empty,.ion-ios7-close-outline,.ion-ios7-cloud,.ion-ios7-cloud-download,.ion-ios7-cloud-download-outline,.ion-ios7-cloud-outline,.ion-ios7-cloud-upload,.ion-ios7-cloud-upload-outline,.ion-ios7-cloudy,.ion-ios7-cloudy-night,.ion-ios7-cloudy-night-outline,.ion-ios7-cloudy-outline,.ion-ios7-cog,.ion-ios7-cog-outline,.ion-ios7-compose,.ion-ios7-compose-outline,.ion-ios7-contact,.ion-ios7-contact-outline,.ion-ios7-copy,.ion-ios7-copy-outline,.ion-ios7-download,.ion-ios7-download-outline,.ion-ios7-drag,.ion-ios7-email,.ion-ios7-email-outline,.ion-ios7-eye,.ion-ios7-eye-outline,.ion-ios7-fastforward,.ion-ios7-fastforward-outline,.ion-ios7-filing,.ion-ios7-filing-outline,.ion-ios7-film,.ion-ios7-film-outline,.ion-ios7-flag,.ion-ios7-flag-outline,.ion-ios7-folder,.ion-ios7-folder-outline,.ion-ios7-gear,.ion-ios7-gear-outline,.ion-ios7-glasses,.ion-ios7-glasses-outline,.ion-ios7-heart,.ion-ios7-heart-outline,.ion-ios7-help,.ion-ios7-help-empty,.ion-ios7-help-outline,.ion-ios7-infinite,.ion-ios7-infinite-outline,.ion-ios7-information,.ion-ios7-information-empty,.ion-ios7-information-outline,.ion-ios7-ionic-outline,.ion-ios7-keypad,.ion-ios7-keypad-outline,.ion-ios7-lightbulb,.ion-ios7-lightbulb-outline,.ion-ios7-location,.ion-ios7-location-outline,.ion-ios7-locked,.ion-ios7-locked-outline,.ion-ios7-medkit,.ion-ios7-medkit-outline,.ion-ios7-mic,.ion-ios7-mic-off,.ion-ios7-mic-outline,.ion-ios7-minus,.ion-ios7-minus-empty,.ion-ios7-minus-outline,.ion-ios7-monitor,.ion-ios7-monitor-outline,.ion-ios7-moon,.ion-ios7-moon-outline,.ion-ios7-more,.ion-ios7-more-outline,.ion-ios7-musical-note,.ion-ios7-musical-notes,.ion-ios7-navigate,.ion-ios7-navigate-outline,.ion-ios7-paperplane,.ion-ios7-paperplane-outline,.ion-ios7-partlysunny,.ion-ios7-partlysunny-outline,.ion-ios7-pause,.ion-ios7-pause-outline,.ion-ios7-people,.ion-ios7-people-outline,.ion-ios7-person,.ion-ios7-person-outline,.ion-ios7-personadd,.ion-ios7-personadd-outline,.ion-ios7-photos,.ion-ios7-photos-outline,.ion-ios7-pie,.ion-ios7-pie-outline,.ion-ios7-play,.ion-ios7-play-outline,.ion-ios7-plus,.ion-ios7-plus-empty,.ion-ios7-plus-outline,.ion-ios7-pricetag,.ion-ios7-pricetag-outline,.ion-ios7-printer,.ion-ios7-printer-outline,.ion-ios7-rainy,.ion-ios7-rainy-outline,.ion-ios7-recording,.ion-ios7-recording-outline,.ion-ios7-redo,.ion-ios7-redo-outline,.ion-ios7-refresh,.ion-ios7-refresh-empty,.ion-ios7-refresh-outline,.ion-ios7-reload,.ion-ios7-reloading,.ion-ios7-rewind,.ion-ios7-rewind-outline,.ion-ios7-search,.ion-ios7-search-strong,.ion-ios7-skipbackward,.ion-ios7-skipbackward-outline,.ion-ios7-skipforward,.ion-ios7-skipforward-outline,.ion-ios7-snowy,.ion-ios7-speedometer,.ion-ios7-speedometer-outline,.ion-ios7-star,.ion-ios7-star-outline,.ion-ios7-stopwatch,.ion-ios7-stopwatch-outline,.ion-ios7-sunny,.ion-ios7-sunny-outline,.ion-ios7-telephone,.ion-ios7-telephone-outline,.ion-ios7-thunderstorm,.ion-ios7-thunderstorm-outline,.ion-ios7-time,.ion-ios7-time-outline,.ion-ios7-timer,.ion-ios7-timer-outline,.ion-ios7-trash,.ion-ios7-trash-outline,.ion-ios7-undo,.ion-ios7-undo-outline,.ion-ios7-unlocked,.ion-ios7-unlocked-outline,.ion-ios7-upload,.ion-ios7-upload-outline,.ion-ios7-videocam,.ion-ios7-videocam-outline,.ion-ios7-volume-high,.ion-ios7-volume-low,.ion-ios7-wineglass,.ion-ios7-wineglass-outline,.ion-ios7-world,.ion-ios7-world-outline,.ion-ipad,.ion-iphone,.ion-ipod,.ion-jet,.ion-key,.ion-knife,.ion-laptop,.ion-leaf,.ion-levels,.ion-lightbulb,.ion-link,.ion-load-a,.ion-load-b,.ion-load-c,.ion-load-d,.ion-loading-a,.ion-loading-b,.ion-loading-c,.ion-loading-d,.ion-location,.ion-locked,.ion-log-in,.ion-log-out,.ion-loop,.ion-looping,.ion-magnet,.ion-male,.ion-man,.ion-map,.ion-medkit,.ion-mic-a,.ion-mic-b,.ion-mic-c,.ion-minus,.ion-minus-circled,.ion-minus-round,.ion-model-s,.ion-monitor,.ion-more,.ion-music-note,.ion-navicon,.ion-navicon-round,.ion-navigate,.ion-no-smoking,.ion-nuclear,.ion-paper-airplane,.ion-paperclip,.ion-pause,.ion-person,.ion-person-add,.ion-person-stalker,.ion-pie-graph,.ion-pin,.ion-pinpoint,.ion-pizza,.ion-plane,.ion-play,.ion-playstation,.ion-plus,.ion-plus-circled,.ion-plus-round,.ion-pound,.ion-power,.ion-pricetag,.ion-pricetags,.ion-printer,.ion-radio-waves,.ion-record,.ion-refresh,.ion-refreshing,.ion-reply,.ion-reply-all,.ion-search,.ion-settings,.ion-share,.ion-shuffle,.ion-skip-backward,.ion-skip-forward,.ion-social-android,.ion-social-android-outline,.ion-social-apple,.ion-social-apple-outline,.ion-social-bitcoin,.ion-social-bitcoin-outline,.ion-social-buffer,.ion-social-buffer-outline,.ion-social-designernews,.ion-social-designernews-outline,.ion-social-dribbble,.ion-social-dribbble-outline,.ion-social-dropbox,.ion-social-dropbox-outline,.ion-social-facebook,.ion-social-facebook-outline,.ion-social-freebsd-devil,.ion-social-github,.ion-social-github-outline,.ion-social-googleplus,.ion-social-googleplus-outline,.ion-social-hackernews,.ion-social-hackernews-outline,.ion-social-linkedin,.ion-social-linkedin-outline,.ion-social-pinterest,.ion-social-pinterest-outline,.ion-social-reddit,.ion-social-reddit-outline,.ion-social-rss,.ion-social-rss-outline,.ion-social-skype,.ion-social-skype-outline,.ion-social-tumblr,.ion-social-tumblr-outline,.ion-social-tux,.ion-social-twitter,.ion-social-twitter-outline,.ion-social-vimeo,.ion-social-vimeo-outline,.ion-social-windows,.ion-social-windows-outline,.ion-social-wordpress,.ion-social-wordpress-outline,.ion-social-yahoo,.ion-social-yahoo-outline,.ion-social-youtube,.ion-social-youtube-outline,.ion-speakerphone,.ion-speedometer,.ion-spoon,.ion-star,.ion-stats-bars,.ion-steam,.ion-stop,.ion-thermometer,.ion-thumbsdown,.ion-thumbsup,.ion-trash-a,.ion-trash-b,.ion-umbrella,.ion-unlocked,.ion-upload,.ion-usb,.ion-videocamera,.ion-volume-high,.ion-volume-low,.ion-volume-medium,.ion-volume-mute,.ion-waterdrop,.ion-wifi,.ion-wineglass,.ion-woman,.ion-wrench,.ion-xbox,.ionicons{display:inline-block;font-family:Ionicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-ios7-reloading,.ion-loading-a,.ion-loading-b,.ion-loading-c,.ion-loading-d,.ion-looping,.ion-refreshing,.ion-spin{-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;-o-animation:spin 1s infinite linear;animation:spin 1s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.ion-loading-a{-webkit-animation-timing-function:steps(8,start);-moz-animation-timing-function:steps(8,start);animation-timing-function:steps(8,start)}.ion-alert:before{content:"\f101"}.ion-alert-circled:before{content:"\f100"}.ion-android-add:before{content:"\f2c7"}.ion-android-add-contact:before{content:"\f2c6"}.ion-android-alarm:before{content:"\f2c8"}.ion-android-archive:before{content:"\f2c9"}.ion-android-arrow-back:before{content:"\f2ca"}.ion-android-arrow-down-left:before{content:"\f2cb"}.ion-android-arrow-down-right:before{content:"\f2cc"}.ion-android-arrow-up-left:before{content:"\f2cd"}.ion-android-arrow-up-right:before{content:"\f2ce"}.ion-android-battery:before{content:"\f2cf"}.ion-android-book:before{content:"\f2d0"}.ion-android-calendar:before{content:"\f2d1"}.ion-android-call:before{content:"\f2d2"}.ion-android-camera:before{content:"\f2d3"}.ion-android-chat:before{content:"\f2d4"}.ion-android-checkmark:before{content:"\f2d5"}.ion-android-clock:before{content:"\f2d6"}.ion-android-close:before{content:"\f2d7"}.ion-android-contact:before{content:"\f2d8"}.ion-android-contacts:before{content:"\f2d9"}.ion-android-data:before{content:"\f2da"}.ion-android-developer:before{content:"\f2db"}.ion-android-display:before{content:"\f2dc"}.ion-android-download:before{content:"\f2dd"}.ion-android-dropdown:before{content:"\f2de"}.ion-android-earth:before{content:"\f2df"}.ion-android-folder:before{content:"\f2e0"}.ion-android-forums:before{content:"\f2e1"}.ion-android-friends:before{content:"\f2e2"}.ion-android-hand:before{content:"\f2e3"}.ion-android-image:before{content:"\f2e4"}.ion-android-inbox:before{content:"\f2e5"}.ion-android-information:before{content:"\f2e6"}.ion-android-keypad:before{content:"\f2e7"}.ion-android-lightbulb:before{content:"\f2e8"}.ion-android-locate:before{content:"\f2e9"}.ion-android-location:before{content:"\f2ea"}.ion-android-mail:before{content:"\f2eb"}.ion-android-microphone:before{content:"\f2ec"}.ion-android-mixer:before{content:"\f2ed"}.ion-android-more:before{content:"\f2ee"}.ion-android-note:before{content:"\f2ef"}.ion-android-playstore:before{content:"\f2f0"}.ion-android-printer:before{content:"\f2f1"}.ion-android-promotion:before{content:"\f2f2"}.ion-android-reminder:before{content:"\f2f3"}.ion-android-remove:before{content:"\f2f4"}.ion-android-search:before{content:"\f2f5"}.ion-android-send:before{content:"\f2f6"}.ion-android-settings:before{content:"\f2f7"}.ion-android-share:before{content:"\f2f8"}.ion-android-social:before{content:"\f2fa"}.ion-android-social-user:before{content:"\f2f9"}.ion-android-sort:before{content:"\f2fb"}.ion-android-star:before{content:"\f2fc"}.ion-android-stopwatch:before{content:"\f2fd"}.ion-android-storage:before{content:"\f2fe"}.ion-android-system-back:before{content:"\f2ff"}.ion-android-system-home:before{content:"\f300"}.ion-android-system-windows:before{content:"\f301"}.ion-android-timer:before{content:"\f302"}.ion-android-trash:before{content:"\f303"}.ion-android-volume:before{content:"\f304"}.ion-android-wifi:before{content:"\f305"}.ion-archive:before{content:"\f102"}.ion-arrow-down-a:before{content:"\f103"}.ion-arrow-down-b:before{content:"\f104"}.ion-arrow-down-c:before{content:"\f105"}.ion-arrow-expand:before{content:"\f25e"}.ion-arrow-graph-down-left:before{content:"\f25f"}.ion-arrow-graph-down-right:before{content:"\f260"}.ion-arrow-graph-up-left:before{content:"\f261"}.ion-arrow-graph-up-right:before{content:"\f262"}.ion-arrow-left-a:before{content:"\f106"}.ion-arrow-left-b:before{content:"\f107"}.ion-arrow-left-c:before{content:"\f108"}.ion-arrow-move:before{content:"\f263"}.ion-arrow-resize:before{content:"\f264"}.ion-arrow-return-left:before{content:"\f265"}.ion-arrow-return-right:before{content:"\f266"}.ion-arrow-right-a:before{content:"\f109"}.ion-arrow-right-b:before{content:"\f10a"}.ion-arrow-right-c:before{content:"\f10b"}.ion-arrow-shrink:before{content:"\f267"}.ion-arrow-swap:before{content:"\f268"}.ion-arrow-up-a:before{content:"\f10c"}.ion-arrow-up-b:before{content:"\f10d"}.ion-arrow-up-c:before{content:"\f10e"}.ion-at:before{content:"\f10f"}.ion-bag:before{content:"\f110"}.ion-battery-charging:before{content:"\f111"}.ion-battery-empty:before{content:"\f112"}.ion-battery-full:before{content:"\f113"}.ion-battery-half:before{content:"\f114"}.ion-battery-low:before{content:"\f115"}.ion-beaker:before{content:"\f269"}.ion-beer:before{content:"\f26a"}.ion-bluetooth:before{content:"\f116"}.ion-bookmark:before{content:"\f26b"}.ion-briefcase:before{content:"\f26c"}.ion-bug:before{content:"\f2be"}.ion-calculator:before{content:"\f26d"}.ion-calendar:before{content:"\f117"}.ion-camera:before{content:"\f118"}.ion-card:before{content:"\f119"}.ion-chatbox:before{content:"\f11b"}.ion-chatbox-working:before{content:"\f11a"}.ion-chatboxes:before{content:"\f11c"}.ion-chatbubble:before{content:"\f11e"}.ion-chatbubble-working:before{content:"\f11d"}.ion-chatbubbles:before{content:"\f11f"}.ion-checkmark:before{content:"\f122"}.ion-checkmark-circled:before{content:"\f120"}.ion-checkmark-round:before{content:"\f121"}.ion-chevron-down:before{content:"\f123"}.ion-chevron-left:before{content:"\f124"}.ion-chevron-right:before{content:"\f125"}.ion-chevron-up:before{content:"\f126"}.ion-clipboard:before{content:"\f127"}.ion-clock:before{content:"\f26e"}.ion-close:before{content:"\f12a"}.ion-close-circled:before{content:"\f128"}.ion-close-round:before{content:"\f129"}.ion-cloud:before{content:"\f12b"}.ion-code:before{content:"\f271"}.ion-code-download:before{content:"\f26f"}.ion-code-working:before{content:"\f270"}.ion-coffee:before{content:"\f272"}.ion-compass:before{content:"\f273"}.ion-compose:before{content:"\f12c"}.ion-connection-bars:before{content:"\f274"}.ion-contrast:before{content:"\f275"}.ion-disc:before{content:"\f12d"}.ion-document:before{content:"\f12f"}.ion-document-text:before{content:"\f12e"}.ion-drag:before{content:"\f130"}.ion-earth:before{content:"\f276"}.ion-edit:before{content:"\f2bf"}.ion-egg:before{content:"\f277"}.ion-eject:before{content:"\f131"}.ion-email:before{content:"\f132"}.ion-eye:before{content:"\f133"}.ion-eye-disabled:before{content:"\f306"}.ion-female:before{content:"\f278"}.ion-filing:before{content:"\f134"}.ion-film-marker:before{content:"\f135"}.ion-flag:before{content:"\f279"}.ion-flash:before{content:"\f137"}.ion-flash-off:before{content:"\f136"}.ion-flask:before{content:"\f138"}.ion-folder:before{content:"\f139"}.ion-fork:before{content:"\f27a"}.ion-fork-repo:before{content:"\f2c0"}.ion-forward:before{content:"\f13a"}.ion-game-controller-a:before{content:"\f13b"}.ion-game-controller-b:before{content:"\f13c"}.ion-gear-a:before{content:"\f13d"}.ion-gear-b:before{content:"\f13e"}.ion-grid:before{content:"\f13f"}.ion-hammer:before{content:"\f27b"}.ion-headphone:before{content:"\f140"}.ion-heart:before{content:"\f141"}.ion-help:before{content:"\f143"}.ion-help-buoy:before{content:"\f27c"}.ion-help-circled:before{content:"\f142"}.ion-home:before{content:"\f144"}.ion-icecream:before{content:"\f27d"}.ion-icon-social-google-plus:before{content:"\f146"}.ion-icon-social-google-plus-outline:before{content:"\f145"}.ion-image:before{content:"\f147"}.ion-images:before{content:"\f148"}.ion-information:before{content:"\f14a"}.ion-information-circled:before{content:"\f149"}.ion-ionic:before{content:"\f14b"}.ion-ios7-alarm:before{content:"\f14d"}.ion-ios7-alarm-outline:before{content:"\f14c"}.ion-ios7-albums:before{content:"\f14f"}.ion-ios7-albums-outline:before{content:"\f14e"}.ion-ios7-arrow-back:before{content:"\f150"}.ion-ios7-arrow-down:before{content:"\f151"}.ion-ios7-arrow-forward:before{content:"\f152"}.ion-ios7-arrow-left:before{content:"\f153"}.ion-ios7-arrow-right:before{content:"\f154"}.ion-ios7-arrow-thin-down:before{content:"\f27e"}.ion-ios7-arrow-thin-left:before{content:"\f27f"}.ion-ios7-arrow-thin-right:before{content:"\f280"}.ion-ios7-arrow-thin-up:before{content:"\f281"}.ion-ios7-arrow-up:before{content:"\f155"}.ion-ios7-at:before{content:"\f157"}.ion-ios7-at-outline:before{content:"\f156"}.ion-ios7-bell:before{content:"\f159"}.ion-ios7-bell-outline:before{content:"\f158"}.ion-ios7-bolt:before{content:"\f15b"}.ion-ios7-bolt-outline:before{content:"\f15a"}.ion-ios7-bookmarks:before{content:"\f15d"}.ion-ios7-bookmarks-outline:before{content:"\f15c"}.ion-ios7-box:before{content:"\f15f"}.ion-ios7-box-outline:before{content:"\f15e"}.ion-ios7-briefcase:before{content:"\f283"}.ion-ios7-briefcase-outline:before{content:"\f282"}.ion-ios7-browsers:before{content:"\f161"}.ion-ios7-browsers-outline:before{content:"\f160"}.ion-ios7-calculator:before{content:"\f285"}.ion-ios7-calculator-outline:before{content:"\f284"}.ion-ios7-calendar:before{content:"\f163"}.ion-ios7-calendar-outline:before{content:"\f162"}.ion-ios7-camera:before{content:"\f165"}.ion-ios7-camera-outline:before{content:"\f164"}.ion-ios7-cart:before{content:"\f167"}.ion-ios7-cart-outline:before{content:"\f166"}.ion-ios7-chatboxes:before{content:"\f169"}.ion-ios7-chatboxes-outline:before{content:"\f168"}.ion-ios7-chatbubble:before{content:"\f16b"}.ion-ios7-chatbubble-outline:before{content:"\f16a"}.ion-ios7-checkmark:before{content:"\f16e"}.ion-ios7-checkmark-empty:before{content:"\f16c"}.ion-ios7-checkmark-outline:before{content:"\f16d"}.ion-ios7-circle-filled:before{content:"\f16f"}.ion-ios7-circle-outline:before{content:"\f170"}.ion-ios7-clock:before{content:"\f172"}.ion-ios7-clock-outline:before{content:"\f171"}.ion-ios7-close:before{content:"\f2bc"}.ion-ios7-close-empty:before{content:"\f2bd"}.ion-ios7-close-outline:before{content:"\f2bb"}.ion-ios7-cloud:before{content:"\f178"}.ion-ios7-cloud-download:before{content:"\f174"}.ion-ios7-cloud-download-outline:before{content:"\f173"}.ion-ios7-cloud-outline:before{content:"\f175"}.ion-ios7-cloud-upload:before{content:"\f177"}.ion-ios7-cloud-upload-outline:before{content:"\f176"}.ion-ios7-cloudy:before{content:"\f17a"}.ion-ios7-cloudy-night:before{content:"\f308"}.ion-ios7-cloudy-night-outline:before{content:"\f307"}.ion-ios7-cloudy-outline:before{content:"\f179"}.ion-ios7-cog:before{content:"\f17c"}.ion-ios7-cog-outline:before{content:"\f17b"}.ion-ios7-compose:before{content:"\f17e"}.ion-ios7-compose-outline:before{content:"\f17d"}.ion-ios7-contact:before{content:"\f180"}.ion-ios7-contact-outline:before{content:"\f17f"}.ion-ios7-copy:before{content:"\f182"}.ion-ios7-copy-outline:before{content:"\f181"}.ion-ios7-download:before{content:"\f184"}.ion-ios7-download-outline:before{content:"\f183"}.ion-ios7-drag:before{content:"\f185"}.ion-ios7-email:before{content:"\f187"}.ion-ios7-email-outline:before{content:"\f186"}.ion-ios7-eye:before{content:"\f189"}.ion-ios7-eye-outline:before{content:"\f188"}.ion-ios7-fastforward:before{content:"\f18b"}.ion-ios7-fastforward-outline:before{content:"\f18a"}.ion-ios7-filing:before{content:"\f18d"}.ion-ios7-filing-outline:before{content:"\f18c"}.ion-ios7-film:before{content:"\f18f"}.ion-ios7-film-outline:before{content:"\f18e"}.ion-ios7-flag:before{content:"\f191"}.ion-ios7-flag-outline:before{content:"\f190"}.ion-ios7-folder:before{content:"\f193"}.ion-ios7-folder-outline:before{content:"\f192"}.ion-ios7-gear:before{content:"\f195"}.ion-ios7-gear-outline:before{content:"\f194"}.ion-ios7-glasses:before{content:"\f197"}.ion-ios7-glasses-outline:before{content:"\f196"}.ion-ios7-heart:before{content:"\f199"}.ion-ios7-heart-outline:before{content:"\f198"}.ion-ios7-help:before{content:"\f19c"}.ion-ios7-help-empty:before{content:"\f19a"}.ion-ios7-help-outline:before{content:"\f19b"}.ion-ios7-infinite:before{content:"\f19e"}.ion-ios7-infinite-outline:before{content:"\f19d"}.ion-ios7-information:before{content:"\f1a1"}.ion-ios7-information-empty:before{content:"\f19f"}.ion-ios7-information-outline:before{content:"\f1a0"}.ion-ios7-ionic-outline:before{content:"\f1a2"}.ion-ios7-keypad:before{content:"\f1a4"}.ion-ios7-keypad-outline:before{content:"\f1a3"}.ion-ios7-lightbulb:before{content:"\f287"}.ion-ios7-lightbulb-outline:before{content:"\f286"}.ion-ios7-location:before{content:"\f1a6"}.ion-ios7-location-outline:before{content:"\f1a5"}.ion-ios7-locked:before{content:"\f1a8"}.ion-ios7-locked-outline:before{content:"\f1a7"}.ion-ios7-medkit:before{content:"\f289"}.ion-ios7-medkit-outline:before{content:"\f288"}.ion-ios7-mic:before{content:"\f1ab"}.ion-ios7-mic-off:before{content:"\f1a9"}.ion-ios7-mic-outline:before{content:"\f1aa"}.ion-ios7-minus:before{content:"\f1ae"}.ion-ios7-minus-empty:before{content:"\f1ac"}.ion-ios7-minus-outline:before{content:"\f1ad"}.ion-ios7-monitor:before{content:"\f1b0"}.ion-ios7-monitor-outline:before{content:"\f1af"}.ion-ios7-moon:before{content:"\f1b2"}.ion-ios7-moon-outline:before{content:"\f1b1"}.ion-ios7-more:before{content:"\f1b4"}.ion-ios7-more-outline:before{content:"\f1b3"}.ion-ios7-musical-note:before{content:"\f1b5"}.ion-ios7-musical-notes:before{content:"\f1b6"}.ion-ios7-navigate:before{content:"\f1b8"}.ion-ios7-navigate-outline:before{content:"\f1b7"}.ion-ios7-paperplane:before{content:"\f1ba"}.ion-ios7-paperplane-outline:before{content:"\f1b9"}.ion-ios7-partlysunny:before{content:"\f1bc"}.ion-ios7-partlysunny-outline:before{content:"\f1bb"}.ion-ios7-pause:before{content:"\f1be"}.ion-ios7-pause-outline:before{content:"\f1bd"}.ion-ios7-people:before{content:"\f1c0"}.ion-ios7-people-outline:before{content:"\f1bf"}.ion-ios7-person:before{content:"\f1c2"}.ion-ios7-person-outline:before{content:"\f1c1"}.ion-ios7-personadd:before{content:"\f1c4"}.ion-ios7-personadd-outline:before{content:"\f1c3"}.ion-ios7-photos:before{content:"\f1c6"}.ion-ios7-photos-outline:before{content:"\f1c5"}.ion-ios7-pie:before{content:"\f28b"}.ion-ios7-pie-outline:before{content:"\f28a"}.ion-ios7-play:before{content:"\f1c8"}.ion-ios7-play-outline:before{content:"\f1c7"}.ion-ios7-plus:before{content:"\f1cb"}.ion-ios7-plus-empty:before{content:"\f1c9"}.ion-ios7-plus-outline:before{content:"\f1ca"}.ion-ios7-pricetag:before{content:"\f28d"}.ion-ios7-pricetag-outline:before{content:"\f28c"}.ion-ios7-printer:before{content:"\f1cd"}.ion-ios7-printer-outline:before{content:"\f1cc"}.ion-ios7-rainy:before{content:"\f1cf"}.ion-ios7-rainy-outline:before{content:"\f1ce"}.ion-ios7-recording:before{content:"\f1d1"}.ion-ios7-recording-outline:before{content:"\f1d0"}.ion-ios7-redo:before{content:"\f1d3"}.ion-ios7-redo-outline:before{content:"\f1d2"}.ion-ios7-refresh:before{content:"\f1d6"}.ion-ios7-refresh-empty:before{content:"\f1d4"}.ion-ios7-refresh-outline:before{content:"\f1d5"}.ion-ios7-reload:before,.ion-ios7-reloading:before{content:"\f28e"}.ion-ios7-rewind:before{content:"\f1d8"}.ion-ios7-rewind-outline:before{content:"\f1d7"}.ion-ios7-search:before{content:"\f1da"}.ion-ios7-search-strong:before{content:"\f1d9"}.ion-ios7-skipbackward:before{content:"\f1dc"}.ion-ios7-skipbackward-outline:before{content:"\f1db"}.ion-ios7-skipforward:before{content:"\f1de"}.ion-ios7-skipforward-outline:before{content:"\f1dd"}.ion-ios7-snowy:before{content:"\f309"}.ion-ios7-speedometer:before{content:"\f290"}.ion-ios7-speedometer-outline:before{content:"\f28f"}.ion-ios7-star:before{content:"\f1e0"}.ion-ios7-star-outline:before{content:"\f1df"}.ion-ios7-stopwatch:before{content:"\f1e2"}.ion-ios7-stopwatch-outline:before{content:"\f1e1"}.ion-ios7-sunny:before{content:"\f1e4"}.ion-ios7-sunny-outline:before{content:"\f1e3"}.ion-ios7-telephone:before{content:"\f1e6"}.ion-ios7-telephone-outline:before{content:"\f1e5"}.ion-ios7-thunderstorm:before{content:"\f1e8"}.ion-ios7-thunderstorm-outline:before{content:"\f1e7"}.ion-ios7-time:before{content:"\f292"}.ion-ios7-time-outline:before{content:"\f291"}.ion-ios7-timer:before{content:"\f1ea"}.ion-ios7-timer-outline:before{content:"\f1e9"}.ion-ios7-trash:before{content:"\f1ec"}.ion-ios7-trash-outline:before{content:"\f1eb"}.ion-ios7-undo:before{content:"\f1ee"}.ion-ios7-undo-outline:before{content:"\f1ed"}.ion-ios7-unlocked:before{content:"\f1f0"}.ion-ios7-unlocked-outline:before{content:"\f1ef"}.ion-ios7-upload:before{content:"\f1f2"}.ion-ios7-upload-outline:before{content:"\f1f1"}.ion-ios7-videocam:before{content:"\f1f4"}.ion-ios7-videocam-outline:before{content:"\f1f3"}.ion-ios7-volume-high:before{content:"\f1f5"}.ion-ios7-volume-low:before{content:"\f1f6"}.ion-ios7-wineglass:before{content:"\f294"}.ion-ios7-wineglass-outline:before{content:"\f293"}.ion-ios7-world:before{content:"\f1f8"}.ion-ios7-world-outline:before{content:"\f1f7"}.ion-ipad:before{content:"\f1f9"}.ion-iphone:before{content:"\f1fa"}.ion-ipod:before{content:"\f1fb"}.ion-jet:before{content:"\f295"}.ion-key:before{content:"\f296"}.ion-knife:before{content:"\f297"}.ion-laptop:before{content:"\f1fc"}.ion-leaf:before{content:"\f1fd"}.ion-levels:before{content:"\f298"}.ion-lightbulb:before{content:"\f299"}.ion-link:before{content:"\f1fe"}.ion-load-a:before,.ion-loading-a:before{content:"\f29a"}.ion-load-b:before,.ion-loading-b:before{content:"\f29b"}.ion-load-c:before,.ion-loading-c:before{content:"\f29c"}.ion-load-d:before,.ion-loading-d:before{content:"\f29d"}.ion-location:before{content:"\f1ff"}.ion-locked:before{content:"\f200"}.ion-log-in:before{content:"\f29e"}.ion-log-out:before{content:"\f29f"}.ion-loop:before,.ion-looping:before{content:"\f201"}.ion-magnet:before{content:"\f2a0"}.ion-male:before{content:"\f2a1"}.ion-man:before{content:"\f202"}.ion-map:before{content:"\f203"}.ion-medkit:before{content:"\f2a2"}.ion-mic-a:before{content:"\f204"}.ion-mic-b:before{content:"\f205"}.ion-mic-c:before{content:"\f206"}.ion-minus:before{content:"\f209"}.ion-minus-circled:before{content:"\f207"}.ion-minus-round:before{content:"\f208"}.ion-model-s:before{content:"\f2c1"}.ion-monitor:before{content:"\f20a"}.ion-more:before{content:"\f20b"}.ion-music-note:before{content:"\f20c"}.ion-navicon:before{content:"\f20e"}.ion-navicon-round:before{content:"\f20d"}.ion-navigate:before{content:"\f2a3"}.ion-no-smoking:before{content:"\f2c2"}.ion-nuclear:before{content:"\f2a4"}.ion-paper-airplane:before{content:"\f2c3"}.ion-paperclip:before{content:"\f20f"}.ion-pause:before{content:"\f210"}.ion-person:before{content:"\f213"}.ion-person-add:before{content:"\f211"}.ion-person-stalker:before{content:"\f212"}.ion-pie-graph:before{content:"\f2a5"}.ion-pin:before{content:"\f2a6"}.ion-pinpoint:before{content:"\f2a7"}.ion-pizza:before{content:"\f2a8"}.ion-plane:before{content:"\f214"}.ion-play:before{content:"\f215"}.ion-playstation:before{content:"\f30a"}.ion-plus:before{content:"\f218"}.ion-plus-circled:before{content:"\f216"}.ion-plus-round:before{content:"\f217"}.ion-pound:before{content:"\f219"}.ion-power:before{content:"\f2a9"}.ion-pricetag:before{content:"\f2aa"}.ion-pricetags:before{content:"\f2ab"}.ion-printer:before{content:"\f21a"}.ion-radio-waves:before{content:"\f2ac"}.ion-record:before{content:"\f21b"}.ion-refresh:before,.ion-refreshing:before{content:"\f21c"}.ion-reply:before{content:"\f21e"}.ion-reply-all:before{content:"\f21d"}.ion-search:before{content:"\f21f"}.ion-settings:before{content:"\f2ad"}.ion-share:before{content:"\f220"}.ion-shuffle:before{content:"\f221"}.ion-skip-backward:before{content:"\f222"}.ion-skip-forward:before{content:"\f223"}.ion-social-android:before{content:"\f225"}.ion-social-android-outline:before{content:"\f224"}.ion-social-apple:before{content:"\f227"}.ion-social-apple-outline:before{content:"\f226"}.ion-social-bitcoin:before{content:"\f2af"}.ion-social-bitcoin-outline:before{content:"\f2ae"}.ion-social-buffer:before{content:"\f229"}.ion-social-buffer-outline:before{content:"\f228"}.ion-social-designernews:before{content:"\f22b"}.ion-social-designernews-outline:before{content:"\f22a"}.ion-social-dribbble:before{content:"\f22d"}.ion-social-dribbble-outline:before{content:"\f22c"}.ion-social-dropbox:before{content:"\f22f"}.ion-social-dropbox-outline:before{content:"\f22e"}.ion-social-facebook:before{content:"\f231"}.ion-social-facebook-outline:before{content:"\f230"}.ion-social-freebsd-devil:before{content:"\f2c4"}.ion-social-github:before{content:"\f233"}.ion-social-github-outline:before{content:"\f232"}.ion-social-googleplus:before{content:"\f235"}.ion-social-googleplus-outline:before{content:"\f234"}.ion-social-hackernews:before{content:"\f237"}.ion-social-hackernews-outline:before{content:"\f236"}.ion-social-linkedin:before{content:"\f239"}.ion-social-linkedin-outline:before{content:"\f238"}.ion-social-pinterest:before{content:"\f2b1"}.ion-social-pinterest-outline:before{content:"\f2b0"}.ion-social-reddit:before{content:"\f23b"}.ion-social-reddit-outline:before{content:"\f23a"}.ion-social-rss:before{content:"\f23d"}.ion-social-rss-outline:before{content:"\f23c"}.ion-social-skype:before{content:"\f23f"}.ion-social-skype-outline:before{content:"\f23e"}.ion-social-tumblr:before{content:"\f241"}.ion-social-tumblr-outline:before{content:"\f240"}.ion-social-tux:before{content:"\f2c5"}.ion-social-twitter:before{content:"\f243"}.ion-social-twitter-outline:before{content:"\f242"}.ion-social-vimeo:before{content:"\f245"}.ion-social-vimeo-outline:before{content:"\f244"}.ion-social-windows:before{content:"\f247"}.ion-social-windows-outline:before{content:"\f246"}.ion-social-wordpress:before{content:"\f249"}.ion-social-wordpress-outline:before{content:"\f248"}.ion-social-yahoo:before{content:"\f24b"}.ion-social-yahoo-outline:before{content:"\f24a"}.ion-social-youtube:before{content:"\f24d"}.ion-social-youtube-outline:before{content:"\f24c"}.ion-speakerphone:before{content:"\f2b2"}.ion-speedometer:before{content:"\f2b3"}.ion-spoon:before{content:"\f2b4"}.ion-star:before{content:"\f24e"}.ion-stats-bars:before{content:"\f2b5"}.ion-steam:before{content:"\f30b"}.ion-stop:before{content:"\f24f"}.ion-thermometer:before{content:"\f2b6"}.ion-thumbsdown:before{content:"\f250"}.ion-thumbsup:before{content:"\f251"}.ion-trash-a:before{content:"\f252"}.ion-trash-b:before{content:"\f253"}.ion-umbrella:before{content:"\f2b7"}.ion-unlocked:before{content:"\f254"}.ion-upload:before{content:"\f255"}.ion-usb:before{content:"\f2b8"}.ion-videocamera:before{content:"\f256"}.ion-volume-high:before{content:"\f257"}.ion-volume-low:before{content:"\f258"}.ion-volume-medium:before{content:"\f259"}.ion-volume-mute:before{content:"\f25a"}.ion-waterdrop:before{content:"\f25b"}.ion-wifi:before{content:"\f25c"}.ion-wineglass:before{content:"\f2b9"}.ion-woman:before{content:"\f25d"}.ion-wrench:before{content:"\f2ba"}.ion-xbox:before{content:"\f30c"}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;vertical-align:baseline;font:inherit;font-size:100%}ol,ul{list-style:none}blockquote,q{quotes:none}audio:not([controls]){display:none;height:0}[hidden],template{display:none}script{display:none!important}html{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}:focus,a:active,a:focus,a:hover,button:focus{outline:0}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}code,kbd,pre,samp{font-size:1em;font-family:monospace,serif}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{position:relative;vertical-align:baseline;font-size:75%;line-height:0}sup{top:-.5em}sub{bottom:-.25em}fieldset{margin:0 2px;padding:.35em .625em .75em;border:1px solid silver}button,input,select,textarea{margin:0;outline-offset:0;outline-style:none;outline-width:0;-webkit-font-smoothing:inherit}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto}table{border-spacing:0;border-collapse:collapse}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}a{-webkit-user-drag:none;-webkit-tap-highlight-color:transparent}img{-webkit-user-drag:none}.ionic-body,body{-webkit-font-smoothing:antialiased;font-smoothing:antialiased;-webkit-backface-visibility:hidden;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0;padding:0;color:#000;word-wrap:break-word;font-size:14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:20px;text-rendering:optimizeLegibility;-webkit-user-drag:none}.content:after,.content:before{display:block;overflow:hidden;height:0;content:"\00a0"}.content{position:absolute;width:100%;height:100%}.scroll-content{top:0;right:0;bottom:0;left:0;position:absolute;overflow:hidden;-webkit-backface-visibility:hidden;margin-top:-1px;width:auto;height:auto}.scroll-view{overflow:hidden;position:relative;-webkit-backface-visibility:hidden;margin-top:-1px}.scroll{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);transform:translateZ(0);-webkit-transform-origin:left top;-moz-transform-origin:left top;transform-origin:left top;-webkit-backface-visibility:hidden}.scroll-bar{position:absolute;z-index:9999}.scroll-bar-h{height:3px;left:2px;right:2px;bottom:3px}.scroll-bar-h .scroll-bar-indicator{height:100%}.scroll-bar-v{width:3px;bottom:2px;top:2px;right:3px}.scroll-bar-v .scroll-bar-indicator{width:100%}.scroll-bar-indicator{position:absolute;background:rgba(0,0,0,.3);border-radius:4px;opacity:1}.scroll-bar-indicator.scroll-bar-fade-out{-webkit-transition:opacity .3s linear;-moz-transition:opacity .3s linear;transition:opacity .3s linear;opacity:0}.scroll-refresher{overflow:hidden;margin-top:-60px;height:60px;position:relative}.scroll-refresher .icon-refreshing{display:none;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;animation-duration:1.5s}.ionic-refresher-content,.scroll-refresher-content{position:absolute;left:0;bottom:15px;width:100%;text-align:center;font-size:30px;color:#666}.ionic-refresher-content .icon-pulling{-webkit-animation-duration:200ms;-moz-animation-duration:200ms;animation-duration:200ms;-webkit-animation-timing-function:linear;-moz-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}@keyframes refresh-spin{0%{transform:rotate(0)}100%{transform:rotate(-180deg)}}@-webkit-keyframes refresh-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(-180deg)}}.scroll-refresher.active .icon-pulling{display:block}.scroll-refresher.active .icon-refreshing,.scroll-refresher.active.refreshing .icon-pulling{display:none}.scroll-refresher.active.refreshing .icon-refreshing{display:block}.scroll-refresher.active .ionic-refresher-content .icon-pulling{-webkit-animation-name:refresh-spin;-moz-animation-name:refresh-spin;animation-name:refresh-spin}.overflow-scroll{overflow-x:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch}.overflow-scroll .scroll{position:static;height:100%}.has-header{top:44px}.has-subheader{top:88px}.has-footer{bottom:44px}.has-tabs{bottom:49px}.pane{position:fixed;z-index:1}.view{position:absolute;z-index:1}.pane,.view{top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:#fff}p{margin:0 0 10px}small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:#000;font-weight:500;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.1}.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1:first-child,.h2:first-child,.h3:first-child,h1:first-child,h2:first-child,h3:first-child{margin-top:0}.h1+.h1,.h1+.h2,.h1+.h3,.h1+h1,.h1+h2,.h1+h3,.h2+.h1,.h2+.h2,.h2+.h3,.h2+h1,.h2+h2,.h2+h3,.h3+.h1,.h3+.h2,.h3+.h3,.h3+h1,.h3+h2,.h3+h3,h1+.h1,h1+.h2,h1+.h3,h1+h1,h1+h2,h1+h3,h2+.h1,h2+.h2,h2+.h3,h2+h1,h2+h2,h2+h3,h3+.h1,h3+.h2,h3+.h3,h3+h1,h3+h2,h3+h3{margin-top:10px}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}.h1 small,h1 small{font-size:24px}.h2 small,h2 small{font-size:18px}.h3 small,.h4 small,h3 small,h4 small{font-size:14px}dl{margin-bottom:20px}dd,dt{line-height:1.42857}dt{font-weight:700}blockquote{margin:0 0 20px;padding:10px 20px;border-left:5px solid gray}blockquote p{font-weight:300;font-size:17.5px;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.42857}blockquote small:before{content:'\2014 \00A0'}blockquote:after,blockquote:before,q:after,q:before{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.42857}a.subdued{padding-right:10px;color:#888;text-decoration:none}a.subdued:hover{text-decoration:none}a.subdued:last-child{padding-right:0}@-webkit-keyframes fadeInHalf{from{background-color:rgba(0,0,0,0)}to{background-color:rgba(0,0,0,.5)}}@keyframes fadeInHalf{from{background-color:rgba(0,0,0,0)}to{background-color:rgba(0,0,0,.5)}}@-webkit-keyframes fadeOutHalf{from{background-color:rgba(0,0,0,.5)}to{background-color:rgba(0,0,0,0)}}@keyframes fadeOutHalf{from{background-color:rgba(0,0,0,.5)}to{background-color:rgba(0,0,0,0)}}.action-sheet-backdrop{position:fixed;top:0;left:0;z-index:10;width:100%;height:100%;background-color:rgba(0,0,0,0)}.action-sheet-backdrop.active{-webkit-animation:fadeInHalf .3s;-moz-animation:fadeInHalf .3s;animation:fadeInHalf .3s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.action-sheet-backdrop.active-remove{-webkit-animation:fadeOutHalf .3s;-moz-animation:fadeOutHalf .3s;animation:fadeOutHalf .3s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both;background-color:rgba(0,0,0,.5)}@-webkit-keyframes actionSheetUp{0%{-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes actionSheetOut{0%{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);opacity:0}}.action-sheet-up{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.action-sheet-up .ng-enter,.action-sheet-up.ng-enter{-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-animation-duration:400ms;-moz-animation-duration:400ms;animation-duration:400ms;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:cubic-bezier(0.1,.7,.1,1);-moz-animation-timing-function:cubic-bezier(0.1,.7,.1,1);animation-timing-function:cubic-bezier(0.1,.7,.1,1);opacity:0}.action-sheet-up .ng-enter-active,.action-sheet-up.ng-enter-active{-webkit-animation-name:actionSheetUp;-moz-animation-name:actionSheetUp;animation-name:actionSheetUp}.action-sheet-up .ng-leave,.action-sheet-up.ng-leave{-webkit-animation-duration:400ms;-moz-animation-duration:400ms;animation-duration:400ms;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:cubic-bezier(0.1,.7,.1,1);-moz-animation-timing-function:cubic-bezier(0.1,.7,.1,1);animation-timing-function:cubic-bezier(0.1,.7,.1,1)}.action-sheet-up .ng-leave,.action-sheet-up.ng-leave-active{-webkit-animation-name:actionSheetOut;-moz-animation-name:actionSheetOut;animation-name:actionSheetOut}.action-sheet{position:fixed;bottom:0;left:15px;z-index:10;overflow:hidden;width:calc(100% - 30px)}.action-sheet .button{display:block;padding:1px;width:100%;border-radius:0;background-color:transparent;color:#4a87ee;font-size:18px}.action-sheet .button.destructive{color:#ef4e3a}.action-sheet-title{padding:10px;color:#666;text-align:center;font-size:12px}.action-sheet-group{margin-bottom:5px;border-radius:3px;background-color:#fff}.action-sheet-group .button{border-width:1px 0 0;border-radius:0}.action-sheet-group .button.active,.action-sheet-group .button:active{background-color:transparent;color:inherit}.action-sheet-group .button:first-child:last-child{border-width:0}.bar{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;right:0;left:0;z-index:10;box-sizing:border-box;padding:5px;width:100%;height:44px;border-width:0;border-style:solid;border-top:1px solid transparent;border-bottom:1px solid #ddd;background-color:#fff;background-size:0}@media (min--moz-device-pixel-ratio:1.5),(-webkit-min-device-pixel-ratio:1.5),(min-device-pixel-ratio:1.5),(min-resolution:144dpi),(min-resolution:1.5dppx){.bar{border:0;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);background-position:bottom;background-size:100% 1px;background-repeat:no-repeat}}.bar.bar-clear{border:0;background:0 0;color:#fff}.bar.bar-clear .button,.bar.bar-clear .title{color:#fff}.bar.item-input-inset .item-input-wrapper{margin-top:-1px}.bar.item-input-inset .item-input-wrapper input{padding-left:8px;height:28px}.bar.bar-light{background-color:#fff;border-color:#ddd;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);color:#444}.bar.bar-light .title{color:#444}.bar.bar-stable{background-color:#f8f8f8;border-color:#b2b2b2;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);color:#444}.bar.bar-stable .title{color:#444}.bar.bar-positive{background-color:#4a87ee;border-color:#145dd7;background-image:linear-gradient(0deg,#145dd7,#145dd7 50%,transparent 50%);color:#fff}.bar.bar-positive .title{color:#fff}.bar.bar-calm{background-color:#43cee6;border-color:#1aaac3;background-image:linear-gradient(0deg,#1aaac3,#1aaac3 50%,transparent 50%);color:#fff}.bar.bar-calm .title{color:#fff}.bar.bar-assertive{background-color:#ef4e3a;border-color:#cc2511;background-image:linear-gradient(0deg,#cc2511,#cc2511 50%,transparent 50%);color:#fff}.bar.bar-assertive .title{color:#fff}.bar.bar-balanced{background-color:#6c3;border-color:#478f24;background-image:linear-gradient(0deg,#478f24,#478f24 50%,transparent 50%);color:#fff}.bar.bar-balanced .title{color:#fff}.bar.bar-energized{background-color:#f0b840;border-color:#d39511;background-image:linear-gradient(0deg,#d39511,#d39511 50%,transparent 50%);color:#fff}.bar.bar-energized .title{color:#fff}.bar.bar-royal{background-color:#8a6de9;border-color:#552bdf;background-image:linear-gradient(0deg,#552bdf,#552bdf 50%,transparent 50%);color:#fff}.bar.bar-royal .title{color:#fff}.bar.bar-dark{background-color:#444;border-color:#111;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%);color:#fff}.bar.bar-dark .title{color:#fff}.bar .title{position:absolute;top:0;right:0;left:0;z-index:0;overflow:hidden;margin:0 10px;min-width:30px;text-align:center;text-overflow:ellipsis;white-space:nowrap;font-size:18px;line-height:42px}.bar .title.title-left{text-align:left}.bar .title.title-right{text-align:right}.bar .title a{color:inherit}.bar .button{z-index:1;padding:0 8px;min-width:initial;min-height:31px;font-size:12px;line-height:30px}.bar .button .icon,.bar .button.icon-left:before,.bar .button.icon-right:before,.bar .button.icon:before{padding-right:2px;padding-left:2px;font-size:24px;line-height:30px}.bar .button.button-icon .icon,.bar .button.button-icon.icon-left:before,.bar .button.button-icon.icon-right:before,.bar .button.button-icon.icon:before{line-height:32px}.bar .button.button-clear{font-size:18px;padding-right:2px;padding-left:2px}.bar .button-bar>.button,.bar .buttons>.button{min-height:31px;line-height:30px}.bar .button+.button-bar,.bar .button-bar+.button{margin-left:5px}.bar .title+.button:last-child,.bar .title+.buttons,.bar>.button+.button:last-child,.bar>.button.pull-right{position:absolute;top:5px;right:5px;bottom:5px}.bar-light .button{color:#444;background-color:#fff;border-color:#ddd}.bar-light .button:hover{color:#444;text-decoration:none}.bar-light .button.active,.bar-light .button:active{background-color:#fafafa;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#ccc}.bar-light .button.button-clear{color:#444;background:0 0;border-color:transparent;box-shadow:none;font-size:18px}.bar-light .button.button-icon{background:0 0;border-color:transparent}.bar-stable .button{color:#444;background-color:#f8f8f8;border-color:#b2b2b2}.bar-stable .button:hover{color:#444;text-decoration:none}.bar-stable .button.active,.bar-stable .button:active{background-color:#e5e5e5;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#a2a2a2}.bar-stable .button.button-clear{color:#444;background:0 0;border-color:transparent;box-shadow:none;font-size:18px}.bar-stable .button.button-icon{background:0 0;border-color:transparent}.bar-positive .button{color:#fff;background-color:#4a87ee;border-color:#145dd7}.bar-positive .button:hover{color:#fff;text-decoration:none}.bar-positive .button.active,.bar-positive .button:active{background-color:#145dd7;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#145dd7}.bar-positive .button.button-clear{color:#fff;background:0 0;border-color:transparent;box-shadow:none;font-size:18px}.bar-positive .button.button-icon{background:0 0;border-color:transparent}.bar-calm .button{color:#fff;background-color:#43cee6;border-color:#1aaac3}.bar-calm .button:hover{color:#fff;text-decoration:none}.bar-calm .button.active,.bar-calm .button:active{background-color:#1aaac3;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#1aaac3}.bar-calm .button.button-clear{color:#fff;background:0 0;border-color:transparent;box-shadow:none;font-size:18px}.bar-calm .button.button-icon{background:0 0;border-color:transparent}.bar-assertive .button{color:#fff;background-color:#ef4e3a;border-color:#cc2511}.bar-assertive .button:hover{color:#fff;text-decoration:none}.bar-assertive .button.active,.bar-assertive .button:active{background-color:#cc2511;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#cc2511}.bar-assertive .button.button-clear{color:#fff;background:0 0;border-color:transparent;box-shadow:none;font-size:18px}.bar-assertive .button.button-icon{background:0 0;border-color:transparent}.bar-balanced .button{color:#fff;background-color:#6c3;border-color:#478f24}.bar-balanced .button:hover{color:#fff;text-decoration:none}.bar-balanced .button.active,.bar-balanced .button:active{background-color:#478f24;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#478f24}.bar-balanced .button.button-clear{color:#fff;background:0 0;border-color:transparent;box-shadow:none;font-size:18px}.bar-balanced .button.button-icon{background:0 0;border-color:transparent}.bar-energized .button{color:#fff;background-color:#f0b840;border-color:#d39511}.bar-energized .button:hover{color:#fff;text-decoration:none}.bar-energized .button.active,.bar-energized .button:active{background-color:#d39511;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#d39511}.bar-energized .button.button-clear{color:#fff;background:0 0;border-color:transparent;box-shadow:none;font-size:18px}.bar-energized .button.button-icon{background:0 0;border-color:transparent}.bar-royal .button{color:#fff;background-color:#8a6de9;border-color:#552bdf}.bar-royal .button:hover{color:#fff;text-decoration:none}.bar-royal .button.active,.bar-royal .button:active{background-color:#552bdf;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#552bdf}.bar-royal .button.button-clear{color:#fff;background:0 0;border-color:transparent;box-shadow:none;font-size:18px}.bar-royal .button.button-icon{background:0 0;border-color:transparent}.bar-dark .button{color:#fff;background-color:#444;border-color:#111}.bar-dark .button:hover{color:#fff;text-decoration:none}.bar-dark .button.active,.bar-dark .button:active{background-color:#262626;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#000}.bar-dark .button.button-clear{color:#fff;background:0 0;border-color:transparent;box-shadow:none;font-size:18px}.bar-dark .button.button-icon{background:0 0;border-color:transparent}.bar-header{top:0;border-top-width:0;border-bottom-width:1px}.bar-footer{bottom:0;border-top-width:1px;border-bottom-width:0;background-position:top}.bar-tabs{padding:0}.bar-subheader{top:44px;display:block}.bar-subfooter{bottom:44px;display:block}.tabs{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-flex-direction:horizontal;-moz-flex-direction:horizontal;-ms-flex-direction:horizontal;flex-direction:horizontal;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);border-color:#b2b2b2;color:#444;position:absolute;bottom:0;z-index:5;width:100%;height:49px;border-style:solid;border-top-width:1px;background-size:0;line-height:49px}.tabs.tabs-light{background-color:#fff;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);border-color:#ddd;color:#444}.tabs.tabs-stable{background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);border-color:#b2b2b2;color:#444}.tabs.tabs-positive{background-color:#4a87ee;background-image:linear-gradient(0deg,#145dd7,#145dd7 50%,transparent 50%);border-color:#145dd7;color:#fff}.tabs.tabs-calm{background-color:#43cee6;background-image:linear-gradient(0deg,#1aaac3,#1aaac3 50%,transparent 50%);border-color:#1aaac3;color:#fff}.tabs.tabs-assertive{background-color:#ef4e3a;background-image:linear-gradient(0deg,#cc2511,#cc2511 50%,transparent 50%);border-color:#cc2511;color:#fff}.tabs.tabs-balanced{background-color:#6c3;background-image:linear-gradient(0deg,#478f24,#478f24 50%,transparent 50%);border-color:#478f24;color:#fff}.tabs.tabs-energized{background-color:#f0b840;background-image:linear-gradient(0deg,#d39511,#d39511 50%,transparent 50%);border-color:#d39511;color:#fff}.tabs.tabs-royal{background-color:#8a6de9;background-image:linear-gradient(0deg,#552bdf,#552bdf 50%,transparent 50%);border-color:#552bdf;color:#fff}.tabs.tabs-dark{background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%);border-color:#111;color:#fff}@media (min--moz-device-pixel-ratio:1.5),(-webkit-min-device-pixel-ratio:1.5),(min-device-pixel-ratio:1.5),(min-resolution:144dpi),(min-resolution:1.5dppx){.tabs{padding-top:2px;border-top:0!important;border-bottom:0!important;background-position:top;background-size:100% 1px;background-repeat:no-repeat}}.tabs-top{top:44px}.tab-item{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;overflow:hidden;max-width:150px;height:100%;color:inherit;text-align:center;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;font-weight:400;font-size:14px;font-family:"Helvetica Neue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,sans-serif;opacity:.7}.tabs-icon-bottom .tab-item,.tabs-icon-top .tab-item{font-size:12px;line-height:14px}.tab-item .icon{display:block;margin:0 auto;height:32px;font-size:32px}.tabs-icon-left .tab-item,.tabs-icon-right .tab-item{font-size:12px}.tabs-icon-left .tab-item .icon,.tabs-icon-right .tab-item .icon{display:inline-block;vertical-align:top;font-size:24px;line-height:49px}.tabs-icon-only .icon{line-height:inherit}.tab-item.active,.tab-item:active{opacity:1}.tab-item.active.tab-item-light,.tab-item:active.tab-item-light{color:#fff}.tab-item.active.tab-item-stable,.tab-item:active.tab-item-stable{color:#f8f8f8}.tab-item.active.tab-item-positive,.tab-item:active.tab-item-positive{color:#4a87ee}.tab-item.active.tab-item-calm,.tab-item:active.tab-item-calm{color:#43cee6}.tab-item.active.tab-item-assertive,.tab-item:active.tab-item-assertive{color:#ef4e3a}.tab-item.active.tab-item-balanced,.tab-item:active.tab-item-balanced{color:#6c3}.tab-item.active.tab-item-energized,.tab-item:active.tab-item-energized{color:#f0b840}.tab-item.active.tab-item-royal,.tab-item:active.tab-item-royal{color:#8a6de9}.tab-item.active.tab-item-dark,.tab-item:active.tab-item-dark{color:#444}.item.tabs{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;padding:0}.item.tabs .icon{position:relative}.menu{position:absolute;top:0;bottom:0;z-index:0;overflow:hidden;min-height:100%;max-height:100%;width:275px;background-color:#fff}.menu-content{box-shadow:-1px 0 2px rgba(0,0,0,.2),1px 0 2px rgba(0,0,0,.2)}.menu-left{left:0}.menu-right{right:0}.menu-animated{-webkit-transition:-webkit-transform 200ms ease;-moz-transition:-moz-transform 200ms ease;transition:transform 200ms ease}.modal{-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);position:fixed;top:0;z-index:10;overflow:hidden;min-height:100%;width:100%;background-color:#fff;opacity:0}.modal.active{height:100%}.popup{position:fixed}.popup-content{padding:10px}.loading-backdrop{-webkit-transition:visibility 0s linear .3s;-moz-transition:visibility 0s linear .3s;transition:visibility 0s linear .3s;position:fixed;top:0;left:0;visibility:hidden;width:100%;height:100%}.loading-backdrop.enabled{background-color:rgba(0,0,0,.7)}.loading-backdrop.active{-webkit-transition-delay:0s;-moz-transition-delay:0s;transition-delay:0s;visibility:visible}.loading{position:fixed;top:50%;left:50%;padding:20px;border-radius:5px;background-color:rgba(0,0,0,.7);color:#fff;text-align:center;text-overflow:ellipsis;font-size:15px}.loading h1,.loading h2,.loading h3,.loading h4,.loading h5,.loading h6{color:#fff}.item{color:#444;background-color:#fff;border-color:#ddd;-webkit-transition:margin-left .2s ease-in-out,margin-right .2s ease-in-out,left .2s ease-in-out;-moz-transition:margin-left .2s ease-in-out,margin-right .2s ease-in-out,left .2s ease-in-out;transition:margin-left .2s ease-in-out,margin-right .2s ease-in-out,left .2s ease-in-out;position:relative;z-index:2;display:block;margin:-1px;padding:15px;border-width:1px;border-style:solid;font-size:16px}.item h2{margin:0 0 4px;font-size:16px}.item h3{margin:0 0 4px;font-size:14px}.item h4{margin:0 0 4px;font-size:12px}.item h5,.item h6{margin:0 0 3px;font-size:10px}.item p{color:#666;font-size:14px}.item h1:last-child,.item h2:last-child,.item h3:last-child,.item h4:last-child,.item h5:last-child,.item h6:last-child,.item p:last-child{margin-bottom:0}.item .badge{float:right}.item .badge+.badge{margin-right:5px}.item.item-light{color:#444;background-color:#fff;border-color:#ddd}.item.item-stable{color:#444;background-color:#f8f8f8;border-color:#b2b2b2}.item.item-positive{color:#fff;background-color:#4a87ee;border-color:#145dd7}.item.item-calm{color:#fff;background-color:#43cee6;border-color:#1aaac3}.item.item-assertive{color:#fff;background-color:#ef4e3a;border-color:#cc2511}.item.item-balanced{color:#fff;background-color:#6c3;border-color:#478f24}.item.item-energized{color:#fff;background-color:#f0b840;border-color:#d39511}.item.item-royal{color:#fff;background-color:#8a6de9;border-color:#552bdf}.item.item-dark{color:#fff;background-color:#444;border-color:#111}.ionic-pseudo a.item:active,.ionic-pseudo button.item:active,a.item.active,button.item.active{background-color:#d9d9d9;border-color:#ccc}.ionic-pseudo a.item.item-light:active,.ionic-pseudo button.item.item-light:active,a.item.item-light.active,button.item.item-light.active{background-color:#fafafa;border-color:#ccc}.ionic-pseudo a.item.item-stable:active,.ionic-pseudo button.item.item-stable:active,a.item.item-stable.active,button.item.item-stable.active{background-color:#e5e5e5;border-color:#a2a2a2}.ionic-pseudo a.item.item-positive:active,.ionic-pseudo button.item.item-positive:active,a.item.item-positive.active,button.item.item-positive.active{background-color:#145dd7;border-color:#145dd7}.ionic-pseudo a.item.item-calm:active,.ionic-pseudo button.item.item-calm:active,a.item.item-calm.active,button.item.item-calm.active{background-color:#1aaac3;border-color:#1aaac3}.ionic-pseudo a.item.item-assertive:active,.ionic-pseudo button.item.item-assertive:active,a.item.item-assertive.active,button.item.item-assertive.active{background-color:#cc2511;border-color:#cc2511}.ionic-pseudo a.item.item-balanced:active,.ionic-pseudo button.item.item-balanced:active,a.item.item-balanced.active,button.item.item-balanced.active{background-color:#478f24;border-color:#478f24}.ionic-pseudo a.item.item-energized:active,.ionic-pseudo button.item.item-energized:active,a.item.item-energized.active,button.item.item-energized.active{background-color:#d39511;border-color:#d39511}.ionic-pseudo a.item.item-royal:active,.ionic-pseudo button.item.item-royal:active,a.item.item-royal.active,button.item.item-royal.active{background-color:#552bdf;border-color:#552bdf}.ionic-pseudo a.item.item-dark:active,.ionic-pseudo button.item.item-dark:active,a.item.item-dark.active,button.item.item-dark.active{background-color:#262626;border-color:#000}.item,.item h1,.item h2,.item h3,.item h4,.item h5,.item h6,.item p,.item-content,.item-content h1,.item-content h2,.item-content h3,.item-content h4,.item-content h5,.item-content h6,.item-content p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a.item{color:inherit;text-decoration:none}a.item:focus,a.item:hover{text-decoration:none}.item-complex,a.item.item-complex,button.item.item-complex{padding:0}.item-complex .item-content,.item-radio .item-content{-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;transition:all .1s ease-in-out;position:relative;z-index:2;padding:15px 40px 15px 15px;border:0;background-color:#fff}a.item-content{display:block;color:inherit;text-decoration:none}.item-body h1,.item-body h2,.item-body h3,.item-body h4,.item-body h5,.item-body h6,.item-body p,.item-complex.item-text-wrap .item-content,.item-text-wrap,.item-text-wrap h1,.item-text-wrap h2,.item-text-wrap h3,.item-text-wrap h4,.item-text-wrap h5,.item-text-wrap h6,.item-text-wrap p{overflow:hidden;white-space:normal}.item-complex.item-text-wrap,.item-complex.item-text-wrap h1,.item-complex.item-text-wrap h2,.item-complex.item-text-wrap h3,.item-complex.item-text-wrap h4,.item-complex.item-text-wrap h5,.item-complex.item-text-wrap h6,.item-complex.item-text-wrap p{overflow:hidden;white-space:nowrap}.item-icon-left .icon,.item-icon-right .icon{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%;font-size:32px}.item-icon-left .icon:before,.item-icon-right .icon:before{display:block;width:28px;text-align:center}.item .fill-icon{min-width:30px;min-height:30px;font-size:28px}.item-icon-left{padding-left:45px}.item-icon-left .icon{left:7.5px}.item-complex.item-icon-left{padding-left:0}.item-complex.item-icon-left .item-content{padding-left:45px}.item-icon-right{padding-right:45px}.item-icon-right .icon{right:7.5px}.item-complex.item-icon-right{padding-right:0}.item-complex.item-icon-right .item-content{padding-right:45px}.item-icon-left.item-icon-right .icon:first-child{right:auto}.item-icon-left.item-icon-right .icon:last-child{left:auto}.item-button-left{padding-left:67.5px}.item-button-left .item-content>.button,.item-button-left>.button{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:7.5px;left:7.5px;min-width:initial;min-height:32px;font-size:32px}.item-button-left .item-content>.button .icon,.item-button-left>.button .icon{position:relative;left:auto;width:auto;line-height:31px}.item-button-right,a.item.item-button-right,button.item.item-button-right{padding-right:75px}.item-button-right .item-content>.button,.item-button-right .item-content>.buttons,.item-button-right>.button,.item-button-right>.buttons{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:7.5px;right:15px;min-width:initial;min-height:32px;font-size:32px}.item-button-right .item-content>.button .icon,.item-button-right .item-content>.buttons .icon,.item-button-right>.button .icon,.item-button-right>.buttons .icon{position:relative;left:auto;width:auto;line-height:31px}.item-button-right .item-content>.button>.button,.item-button-right .item-content>.buttons>.button,.item-button-right>.button>.button,.item-button-right>.buttons>.button{margin:0 2px;min-height:32px;font-size:32px}a.item,button.item{padding-right:40px}a.item:after,button.item:after{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;-webkit-font-smoothing:antialiased;font-smoothing:antialiased;position:absolute;top:0;right:11px;height:100%;color:#ccc;content:"\f125";text-transform:none;font-weight:400;font-style:normal;font-variant:normal;font-size:16px;font-family:Ionicons;line-height:1;speak:none}a.item-button-right:after,a.item-icon-right:after,button.item-button-right:after,button.item-icon-right:after{display:none}.item-avatar{padding-left:70px;min-height:70px}.item-avatar .item-img,.item-avatar img:first-child{position:absolute;top:15px;left:15px;max-width:40px;max-height:40px;width:100%;border-radius:4px}.item-thumbnail-left{padding-left:105px;min-height:100px}.item-thumbnail-left>.item-image,.item-thumbnail-left>img:first-child{position:absolute;top:10px;left:10px;max-width:80px;max-height:80px;width:100%}.item-thumbnail-right{padding-right:105px;min-height:100px}.item-thumbnail-right>.item-image,.item-thumbnail-right>img:first-child{position:absolute;top:10px;right:10px;max-width:80px;max-height:80px;width:100%}.item-image{padding:0;text-align:center}.item-image .list-img,.item-image img:first-child{width:100%;vertical-align:middle}.item-body{overflow:auto;padding:15px;text-overflow:inherit;white-space:normal}.item-body h1,.item-body h2,.item-body h3,.item-body h4,.item-body h5,.item-body h6,.item-body p{margin-top:15px;margin-bottom:15px}.item-divider{padding-top:7.5px;padding-bottom:7.5px;min-height:30px;background-color:#f5f5f5;color:#222;font-weight:700}.item-note{float:right;color:#aaa;font-size:14px}.item-reordering{position:absolute;z-index:20;width:100%}.item-placeholder{opacity:.7}.item-edit{-webkit-transition:left .2s ease-in-out,opacity .2s ease-in-out;-moz-transition:left .2s ease-in-out,opacity .2s ease-in-out;transition:left .2s ease-in-out,opacity .2s ease-in-out;position:absolute;top:0;left:8px;z-index:0;width:48px;height:100%;line-height:100%}.item-edit .button{height:100%}.item-edit .button.icon{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;left:0;height:100%;color:#ef4e3a;font-size:24px}.item-edit.ng-enter{-webkit-transition:left .2s ease-in-out,opacity .2s ease-in-out;-moz-transition:left .2s ease-in-out,opacity .2s ease-in-out;transition:left .2s ease-in-out,opacity .2s ease-in-out;left:-48px;opacity:0}.item-edit.ng-enter-active{left:8px;opacity:1}.item-edit.ng-leave{-webkit-transition:left .2s ease-in-out,opacity .2s ease-in-out;-moz-transition:left .2s ease-in-out,opacity .2s ease-in-out;transition:left .2s ease-in-out,opacity .2s ease-in-out;left:0;opacity:1}.item-edit.ng-leave-active{left:-48px;opacity:0}.item-drag{position:absolute;top:0;right:0;z-index:0;width:50px;height:100%;background:inherit}.item-drag .button{min-width:42px;height:100%}.item-drag .button.icon:before{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%;font-size:32px}.item-options{position:absolute;top:0;right:0;z-index:1;height:100%}.item-options .button{height:100%;border:0;border-radius:0}.item-options-hide .item-options{display:none}.list{position:relative;margin-bottom:20px;padding-top:1px;padding-bottom:1px;padding-left:0}.list-editing .item-content{-webkit-transform:translate3d(50px,0,0);-moz-transform:translate3d(50px,0,0);transform:translate3d(50px,0,0)}.list-reordering .item-content{margin-right:50px}.list-reordering .item-drag{z-index:1}.list-header{margin-top:20px;padding:5px 15px;background-color:transparent;color:#222;font-weight:700}.card.list .list-item{padding-right:1px;padding-left:1px}.card,.list-inset{overflow:hidden;margin:20px 10px;border-radius:2px;background-color:#fff}.card{padding-top:1px;padding-bottom:1px;box-shadow:0 1px 1px rgba(0,0,0,.1)}.card .item:first-child,.card .item:first-child .item-content,.list-inset .item:first-child,.list-inset .item:first-child .item-content,.padding>.list .item:first-child,.padding>.list .item:first-child .item-content{border-top-left-radius:2px;border-top-right-radius:2px}.card .item:last-child,.card .item:last-child .item-content,.list-inset .item:last-child,.list-inset .item:last-child .item-content,.padding>.list .item:last-child,.padding>.list .item:last-child .item-content{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.card .item:last-child,.list-inset .item:last-child{margin-bottom:-1px}.card .item,.list-inset .item,.padding-horizontal>.list .item,.padding>.list .item{margin-right:0;margin-left:0}.padding-left>.list .item{margin-left:0}.padding-right>.list .item{margin-right:0}.nav-page{position:absolute;width:100%;height:100%;background-color:#fff}.badge{background-color:transparent;color:#aaa;display:inline-block;padding:3px 8px;min-width:10px;border-radius:10px;vertical-align:baseline;text-align:center;white-space:nowrap;font-weight:700;font-size:14px;line-height:16px}.badge:empty{display:none}.badge.badge-light{background-color:#fff;color:#444}.badge.badge-stable{background-color:#f8f8f8;color:#444}.badge.badge-positive{background-color:#4a87ee;color:#fff}.badge.badge-calm{background-color:#43cee6;color:#fff}.badge.badge-assertive{background-color:#ef4e3a;color:#fff}.badge.badge-balanced{background-color:#6c3;color:#fff}.badge.badge-energized{background-color:#f0b840;color:#fff}.badge.badge-royal{background-color:#8a6de9;color:#fff}.badge.badge-dark{background-color:#444;color:#fff}.button .badge{position:relative;top:-1px}.slider{position:relative;overflow:hidden;visibility:hidden}.slider-slides{position:relative}.slider-slide{display:block;position:relative;width:100%;float:left;vertical-align:top}.slider-slide-image>img{width:100%}.slider-pager{position:absolute;bottom:20px;width:100%;text-align:center;z-index:1}.slider-pager .slider-pager-page{display:inline-block;margin:0 3px;width:15px;color:#fff;text-decoration:none;opacity:.3}.slider-pager .slider-pager-page.active{opacity:1;-webkit-transition:opacity .4s ease-in;-moz-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.split-pane{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;-webkit-align-items:stretch;-moz-align-items:stretch;align-items:stretch;width:100%;height:100%}.split-pane-menu{-webkit-box-flex:0;-webkit-flex:0 0 320px;-moz-box-flex:0;-moz-flex:0 0 320px;-ms-flex:0 0 320px;flex:0 0 320px;overflow-y:auto;width:320px;height:100%;border-right:1px solid #eee}@media all and (max-width:568px){.split-pane-menu{border-right:0}}.split-pane-content{-webkit-box-flex:1;-webkit-flex:1 0 auto;-moz-box-flex:1;-moz-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}form{margin:0 0 1.42857}legend{display:block;margin-bottom:1.42857;padding:0;width:100%;border:1px solid #ddd;color:#444;font-size:21px;line-height:2.85714}legend small{color:#f8f8f8;font-size:1.07143}button,input,label,select,textarea{font-size:14px;font-weight:400;line-height:1.42857}button,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.item-input{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:relative;overflow:hidden;padding:6px 8px 5px}.item-input input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-flex:1;-webkit-flex:1 0 220px;-moz-box-flex:1;-moz-flex:1 0 220px;-ms-flex:1 0 220px;flex:1 0 220px;-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0;background-color:transparent}.item-input .button .icon{-webkit-box-flex:0;-webkit-flex:0 0 24px;-moz-box-flex:0;-moz-flex:0 0 24px;-ms-flex:0 0 24px;flex:0 0 24px;position:static;display:inline-block;height:auto;text-align:center;font-size:16px}.ionic-pseudo .item-input.item:active,.item-input.item.active{border-color:#ddd;background-color:transparent}.item-input .button-bar{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-flex:1;-webkit-flex:1 0 220px;-moz-box-flex:1;-moz-flex:1 0 220px;-ms-flex:1 0 220px;flex:1 0 220px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.item-input-inset{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:relative;overflow:hidden;padding:10px}.item-input-wrapper{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1 0;-moz-box-flex:1;-moz-flex:1 0;-ms-flex:1 0;flex:1 0;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding-right:8px;padding-left:8px;background:#eee}.item-input-inset .item-input-wrapper input{padding-left:4px;height:29px;background:inherit;line-height:18px}.item-input-wrapper~.button{margin-left:10px}.input-label{-webkit-box-flex:1;-webkit-flex:1 0 100px;-moz-box-flex:1;-moz-flex:1 0 100px;-ms-flex:1 0 100px;flex:1 0 100px;padding:7px 10px 7px 3px;max-width:200px;color:#444;font-weight:700}.placeholder-icon{color:#aaa}.item-stacked-label{display:block;background-color:transparent;box-shadow:none}.item-stacked-label .icon,.item-stacked-label .input-label{display:inline-block;padding:4px 0;vertical-align:middle}.item-stacked-label input,.item-stacked-label textarea{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;overflow:hidden;padding:4px 8px 3px;border:0;background-color:#fff}.item-stacked-label input{height:46px}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{display:block;height:34px;color:#111;vertical-align:middle;font-size:14px;line-height:20px}input,textarea{width:100%}textarea{height:auto}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],textarea{border:0}input[type=checkbox],input[type=radio]{margin:0;line-height:normal}input[type=button],input[type=checkbox],input[type=file],input[type=image],input[type=radio],input[type=reset],input[type=submit]{width:auto}select[multiple],select[size]{height:auto}input[type=file],select{line-height:34px}select{border:1px solid #ddd;background-color:#fff}input:-moz-placeholder,textarea:-moz-placeholder{color:#aaa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#aaa}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#aaa}input[disabled],input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{background-color:#f8f8f8;cursor:not-allowed}input[type=checkbox][disabled],input[type=checkbox][readonly],input[type=radio][disabled],input[type=radio][readonly]{background-color:transparent}.checkbox{position:relative;display:inline-block;padding:7px;cursor:pointer}.checkbox input{position:relative;width:28px;height:28px;border:0;background:0 0;cursor:pointer;-webkit-appearance:none}.checkbox input:before{display:table;width:100%;height:100%;border:1px solid #4a87ee;border-radius:50%;background:#fff;content:' ';transition:background-color .1s ease-in-out}.checkbox input:after{-webkit-transition:opacity .05s ease-in-out;-moz-transition:opacity .05s ease-in-out;transition:opacity .05s ease-in-out;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg);position:absolute;top:34%;left:26%;display:table;width:14px;height:10.33333px;border:3px solid #fff;border-top:0;border-right:0;content:' ';opacity:0}.checkbox input:checked:before{border:0;background:#4a87ee}.checkbox input:checked:after{opacity:1}.item-checkbox{padding-left:58px}.item-checkbox.active,.item-checkbox:active{box-shadow:none}.item-checkbox .checkbox{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;left:7.5px;z-index:3;height:100%}.toggle{position:relative;display:inline-block}.toggle input{display:none}.toggle .track{-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.1s;-moz-transition-duration:.1s;transition-duration:.1s;-webkit-transition-property:background-color,border;-moz-transition-property:background-color,border;transition-property:background-color,border;display:inline-block;box-sizing:border-box;width:54px;height:32px;border:solid 2px #e5e5e5;border-radius:20px;background-color:#e5e5e5;content:' ';cursor:pointer}.toggle .handle{-webkit-transition:.1s ease-in-out;-moz-transition:.1s ease-in-out;transition:.1s ease-in-out;position:absolute;top:2px;left:2px;display:block;width:28px;height:28px;border-radius:50%;background-color:#fff}.toggle .handle:before{position:absolute;top:-4px;left:-22px;padding:19px 35px;content:" "}.toggle input:checked+.track{border-color:#4a87ee;background-color:#4a87ee}.toggle input:checked+.track .handle{-webkit-transform:translate3d(22px,0,0);-moz-transform:translate3d(22px,0,0);transform:translate3d(22px,0,0);background-color:#fff}.item-toggle{padding-right:99px}.item-toggle.active,.item-toggle:active{box-shadow:none}.item-toggle .toggle{position:absolute;top:7.5px;right:15px;z-index:3}.item-radio{padding:0}.item-radio:hover{cursor:pointer}.item-radio .item-content{padding-right:60px}.item-radio .radio-icon{position:absolute;top:0;right:0;z-index:3;visibility:hidden;padding:13px;height:100%;font-size:24px}.item-radio input{display:none}.item-radio input:checked~.item-content{background:#f7f7f7}.item-radio input:checked~.radio-icon{visibility:visible}input[type=range]{display:inline-block;overflow:hidden;margin-top:5px;margin-bottom:5px;padding-right:2px;padding-left:1px;width:auto;height:35px;outline:0;background:linear-gradient(to right,#ccc 0,#ccc 100%);background-position:center;background-size:99% 4px;background-repeat:no-repeat;-webkit-appearance:none}input[type=range]::-webkit-slider-thumb{position:relative;width:20px;height:20px;border-radius:10px;background-color:#fff;box-shadow:0 0 2px rgba(0,0,0,.5),1px 3px 5px rgba(0,0,0,.25);cursor:pointer;-webkit-appearance:none}input[type=range]::-webkit-slider-thumb:before{position:absolute;top:8px;left:-2001px;width:2000px;height:4px;background:#444;content:' '}input[type=range]::-webkit-slider-thumb:after{position:absolute;top:-20px;left:-20px;padding:30px;content:' '}.range{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;padding:2px 4px}.range.range-light input::-webkit-slider-thumb:before{background:#ddd}.range.range-stable input::-webkit-slider-thumb:before{background:#b2b2b2}.range.range-positive input::-webkit-slider-thumb:before{background:#4a87ee}.range.range-calm input::-webkit-slider-thumb:before{background:#43cee6}.range.range-balanced input::-webkit-slider-thumb:before{background:#6c3}.range.range-assertive input::-webkit-slider-thumb:before{background:#ef4e3a}.range.range-energized input::-webkit-slider-thumb:before{background:#f0b840}.range.range-royal input::-webkit-slider-thumb:before{background:#8a6de9}.range.range-dark input::-webkit-slider-thumb:before{background:#444}.range .icon{-webkit-box-flex:0;-webkit-flex:0;-moz-box-flex:0;-moz-flex:0;-ms-flex:0;flex:0;display:block;min-width:24px;text-align:center;font-size:24px}.range input{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;margin-right:10px;margin-left:10px;width:100%}.range-label{-webkit-box-flex:0;-webkit-flex:0 0 auto;-moz-box-flex:0;-moz-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;display:block;white-space:nowrap}.range-label:first-child{padding-left:5px}.range input+.range-label{padding-right:5px;padding-left:0}.button{color:#444;background-color:#f8f8f8;border-color:#b2b2b2;position:relative;display:inline-block;margin:0;padding:1px 12px 0;min-width:52px;min-height:42px;border-width:1px;border-style:solid;border-radius:2px;vertical-align:top;text-align:center;text-overflow:ellipsis;font-size:16px;line-height:41px;cursor:pointer}.button:hover{color:#444;text-decoration:none}.button.active,.button:active{background-color:#e5e5e5;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#a2a2a2}.button .icon,.button.icon-left:before,.button.icon-right:before,.button.icon:before{display:inline-block;padding:0 0 1px;vertical-align:inherit;font-size:24px;line-height:40px}.button.icon-left:before{padding-right:.2em;padding-left:0}.button.icon-right:before{float:right;padding-right:0;padding-left:.2em}.button.button-block,.button.button-full{margin-top:10px;margin-bottom:10px}.button.button-light{color:#444;background-color:#fff;border-color:#ddd}.button.button-light:hover{color:#444;text-decoration:none}.button.button-light.active,.button.button-light:active{background-color:#fafafa;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#ccc}.button.button-light.button-clear{color:#ddd;background:0 0;border-color:transparent;box-shadow:none}.button.button-light.button-icon{background:0 0;border-color:transparent}.button.button-light.button-outline{background:0 0;border-color:#ddd;color:#ddd}.button.button-light.button-outline.active,.button.button-light.button-outline:active{background-color:#ddd;color:#fff;box-shadow:none}.button.button-stable{color:#444;background-color:#f8f8f8;border-color:#b2b2b2}.button.button-stable:hover{color:#444;text-decoration:none}.button.button-stable.active,.button.button-stable:active{background-color:#e5e5e5;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#a2a2a2}.button.button-stable.button-clear{color:#b2b2b2;background:0 0;border-color:transparent;box-shadow:none}.button.button-stable.button-icon{background:0 0;border-color:transparent}.button.button-stable.button-outline{background:0 0;border-color:#b2b2b2;color:#b2b2b2}.button.button-stable.button-outline.active,.button.button-stable.button-outline:active{background-color:#b2b2b2;color:#fff;box-shadow:none}.button.button-positive{color:#fff;background-color:#4a87ee;border-color:#145dd7}.button.button-positive:hover{color:#fff;text-decoration:none}.button.button-positive.active,.button.button-positive:active{background-color:#145dd7;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#145dd7}.button.button-positive.button-clear{color:#4a87ee;background:0 0;border-color:transparent;box-shadow:none}.button.button-positive.button-icon{background:0 0;border-color:transparent}.button.button-positive.button-outline{background:0 0;border-color:#4a87ee;color:#4a87ee}.button.button-positive.button-outline.active,.button.button-positive.button-outline:active{background-color:#4a87ee;color:#fff;box-shadow:none}.button.button-calm{color:#fff;background-color:#43cee6;border-color:#1aaac3}.button.button-calm:hover{color:#fff;text-decoration:none}.button.button-calm.active,.button.button-calm:active{background-color:#1aaac3;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#1aaac3}.button.button-calm.button-clear{color:#43cee6;background:0 0;border-color:transparent;box-shadow:none}.button.button-calm.button-icon{background:0 0;border-color:transparent}.button.button-calm.button-outline{background:0 0;border-color:#43cee6;color:#43cee6}.button.button-calm.button-outline.active,.button.button-calm.button-outline:active{background-color:#43cee6;color:#fff;box-shadow:none}.button.button-assertive{color:#fff;background-color:#ef4e3a;border-color:#cc2511}.button.button-assertive:hover{color:#fff;text-decoration:none}.button.button-assertive.active,.button.button-assertive:active{background-color:#cc2511;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#cc2511}.button.button-assertive.button-clear{color:#ef4e3a;background:0 0;border-color:transparent;box-shadow:none}.button.button-assertive.button-icon{background:0 0;border-color:transparent}.button.button-assertive.button-outline{background:0 0;border-color:#ef4e3a;color:#ef4e3a}.button.button-assertive.button-outline.active,.button.button-assertive.button-outline:active{background-color:#ef4e3a;color:#fff;box-shadow:none}.button.button-balanced{color:#fff;background-color:#6c3;border-color:#478f24}.button.button-balanced:hover{color:#fff;text-decoration:none}.button.button-balanced.active,.button.button-balanced:active{background-color:#478f24;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#478f24}.button.button-balanced.button-clear{color:#6c3;background:0 0;border-color:transparent;box-shadow:none}.button.button-balanced.button-icon{background:0 0;border-color:transparent}.button.button-balanced.button-outline{background:0 0;border-color:#6c3;color:#6c3}.button.button-balanced.button-outline.active,.button.button-balanced.button-outline:active{background-color:#6c3;color:#fff;box-shadow:none}.button.button-energized{color:#fff;background-color:#f0b840;border-color:#d39511}.button.button-energized:hover{color:#fff;text-decoration:none}.button.button-energized.active,.button.button-energized:active{background-color:#d39511;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#d39511}.button.button-energized.button-clear{color:#f0b840;background:0 0;border-color:transparent;box-shadow:none}.button.button-energized.button-icon{background:0 0;border-color:transparent}.button.button-energized.button-outline{background:0 0;border-color:#f0b840;color:#f0b840}.button.button-energized.button-outline.active,.button.button-energized.button-outline:active{background-color:#f0b840;color:#fff;box-shadow:none}.button.button-royal{color:#fff;background-color:#8a6de9;border-color:#552bdf}.button.button-royal:hover{color:#fff;text-decoration:none}.button.button-royal.active,.button.button-royal:active{background-color:#552bdf;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#552bdf}.button.button-royal.button-clear{color:#8a6de9;background:0 0;border-color:transparent;box-shadow:none}.button.button-royal.button-icon{background:0 0;border-color:transparent}.button.button-royal.button-outline{background:0 0;border-color:#8a6de9;color:#8a6de9}.button.button-royal.button-outline.active,.button.button-royal.button-outline:active{background-color:#8a6de9;color:#fff;box-shadow:none}.button.button-dark{color:#fff;background-color:#444;border-color:#111}.button.button-dark:hover{color:#fff;text-decoration:none}.button.button-dark.active,.button.button-dark:active{background-color:#262626;box-shadow:inset 0 1px 3px rgba(0,0,0,.15);border-color:#000}.button.button-dark.button-clear{color:#444;background:0 0;border-color:transparent;box-shadow:none}.button.button-dark.button-icon{background:0 0;border-color:transparent}.button.button-dark.button-outline{background:0 0;border-color:#444;color:#444}.button.button-dark.button-outline.active,.button.button-dark.button-outline:active{background-color:#444;color:#fff;box-shadow:none}.button-small{padding:0 4px;min-width:28px;min-height:28px;font-size:12px;line-height:27px}.button-small .icon,.button-small.icon-left:before,.button-small.icon-right:before,.button-small.icon:before{font-size:16px;line-height:26px}.button-large{padding:0 16px;min-width:66px;min-height:54px;font-size:18px;line-height:53px}.button-large .icon,.button-large.icon-left:before,.button-large.icon-right:before,.button-large.icon:before{padding-bottom:2px;font-size:32px;line-height:51px}.button-icon{-webkit-transition:opacity .1s;-moz-transition:opacity .1s;transition:opacity .1s;padding:0 6px;min-width:initial;border-color:transparent;background:0 0}.button-icon.button.active,.button-icon.button:active{border-color:transparent;background:0 0;box-shadow:none;opacity:.3}.button-icon .icon,.button-icon.icon:before{font-size:32px}.button-clear{-webkit-transition:opacity .1s;-moz-transition:opacity .1s;transition:opacity .1s;padding:0 6px;max-height:42px;border-color:transparent;background:0 0;box-shadow:none}.button-clear.button-clear{color:#b2b2b2;background:0 0;border-color:transparent;box-shadow:none}.button-clear.button-icon{background:0 0;border-color:transparent}.button-clear.active,.button-clear:active{opacity:.3}.button-outline{-webkit-transition:opacity .1s;-moz-transition:opacity .1s;transition:opacity .1s;background:0 0;box-shadow:none}.button-outline.button-outline{background:0 0;border-color:#b2b2b2;color:#b2b2b2}.button-outline.button-outline.active,.button-outline.button-outline:active{background-color:#b2b2b2;color:#fff;box-shadow:none}.padding>.button.button-block:first-child{margin-top:0}.button-block{display:block;clear:both}.button-block:after{display:block;visibility:hidden;clear:both;height:0;content:"."}.button-full,.button-full>.button{display:block;margin-right:0;margin-left:0;border-right-width:0;border-left-width:0;border-radius:0}.button-full>button.button,button.button-block,button.button-full{width:100%}a.button{text-decoration:none}.button-bar{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;width:100%}.button-bar.button-bar-inline{display:block;width:auto;*zoom:1}.button-bar.button-bar-inline:after,.button-bar.button-bar-inline:before{display:table;content:"";line-height:0}.button-bar.button-bar-inline:after{clear:both}.button-bar.button-bar-inline>.button{width:auto;display:inline-block;float:left}.button-bar>.button{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;overflow:hidden;padding:0 16px;width:0;border-width:1px 0 1px 1px;border-radius:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.button-bar>.button:first-child{border-radius:2px 0 0 2px}.button-bar>.button:last-child{border-right-width:1px;border-radius:0 2px 2px 0}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);opacity:0}}@-webkit-keyframes slideInFromLeft{from{-webkit-transform:translate3d(-100%,0,0)}to{-webkit-transform:translate3d(0,0,0)}}@-moz-keyframes slideInFromLeft{from{-moz-transform:translateX(-100%)}to{-moz-transform:translateX(0)}}@keyframes slideInFromLeft{from{transform:translateX(-100%)}to{transform:translateX(0)}}@-webkit-keyframes slideInFromRight{from{-webkit-transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0)}}@-moz-keyframes slideInFromRight{from{-moz-transform:translateX(100%)}to{-moz-transform:translateX(0)}}@keyframes slideInFromRight{from{transform:translateX(100%)}to{transform:translateX(0)}}@-webkit-keyframes slideOutToleft{from{-webkit-transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-100%,0,0)}}@-moz-keyframes slideOutToleft{from{-moz-transform:translateX(0)}to{-moz-transform:translateX(-100%)}}@keyframes slideOutToLeft{from{transform:translateX(0)}to{transform:translateX(-100%)}}@-webkit-keyframes slideOutToRight{from{-webkit-transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(100%,0,0)}}@-moz-keyframes slideOutToRight{from{-moz-transform:translateX(0)}to{-moz-transform:translateX(100%)}}@keyframes slideOutToRight{from{transform:translateX(0)}to{transform:translateX(100%)}}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@-moz-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@-moz-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes spin{100%{-webkit-transform:rotate(360deg)}}@-moz-keyframes spin{100%{-moz-transform:rotate(360deg)}}@keyframes spin{100%{transform:rotate(360deg)}}.no-animation.ng-enter,.no-animation.ng-leave,.no-animation>.ng-enter,.no-animation>.ng-leave{-webkit-transition:none;-moz-transition:none;transition:none}.noop-animation.ng-enter,.noop-animation.ng-leave,.noop-animation>.ng-enter,.noop-animation>.ng-leave{-webkit-transition:all cubic-bezier(0.25,.46,.45,.94) 250ms;-moz-transition:all cubic-bezier(0.25,.46,.45,.94) 250ms;transition:all cubic-bezier(0.25,.46,.45,.94) 250ms;position:absolute;top:0;right:0;bottom:0;left:0}.ng-animate .pane{position:absolute}.slide-left-right.ng-enter,.slide-left-right.ng-leave,.slide-left-right>.ng-enter,.slide-left-right>.ng-leave{-webkit-transition:all ease-in-out 250ms;-moz-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms;position:absolute;top:0;right:0;bottom:0;left:0}.slide-left-right.ng-enter,.slide-left-right>.ng-enter{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.slide-left-right.ng-enter.ng-enter-active,.slide-left-right>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-left-right.ng-leave.ng-leave-active,.slide-left-right>.ng-leave.ng-leave-active{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.slide-left-right.reverse.ng-enter,.slide-left-right.reverse.ng-leave,.slide-left-right.reverse>.ng-enter,.slide-left-right.reverse>.ng-leave{-webkit-transition:all ease-in-out 250ms;-moz-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms;position:absolute;top:0;right:0;bottom:0;left:0}.slide-left-right.reverse.ng-enter,.slide-left-right.reverse>.ng-enter{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.slide-left-right.reverse.ng-enter.ng-enter-active,.slide-left-right.reverse>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-left-right.reverse.ng-leave.ng-leave-active,.slide-left-right.reverse>.ng-leave.ng-leave-active{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.slide-left-right-ios7.ng-enter,.slide-left-right-ios7.ng-leave,.slide-left-right-ios7>.ng-enter,.slide-left-right-ios7>.ng-leave{-webkit-transition:all ease-in-out 250ms;-moz-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms;position:absolute;top:0;right:-1px;bottom:0;left:-1px;border-left:1px solid #ddd;border-right:1px solid #ddd}.slide-left-right-ios7.ng-enter,.slide-left-right-ios7>.ng-enter{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.slide-left-right-ios7.ng-enter.ng-enter-active,.slide-left-right-ios7>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-left-right-ios7.ng-leave.ng-leave-active,.slide-left-right-ios7>.ng-leave.ng-leave-active{-webkit-transform:translate3d(-15%,0,0);-moz-transform:translate3d(-15%,0,0);transform:translate3d(-15%,0,0)}.slide-left-right-ios7.reverse.ng-enter,.slide-left-right-ios7.reverse.ng-leave,.slide-left-right-ios7.reverse>.ng-enter,.slide-left-right-ios7.reverse>.ng-leave{-webkit-transition:all ease-in-out 250ms;-moz-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms;position:absolute;top:0;right:-1px;bottom:0;left:-1px;border-left:1px solid #ddd;border-right:1px solid #ddd}.slide-left-right-ios7.reverse.ng-enter,.slide-left-right-ios7.reverse>.ng-enter{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.slide-left-right-ios7.reverse.ng-enter.ng-enter-active,.slide-left-right-ios7.reverse>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-left-right-ios7.reverse.ng-leave.ng-leave-active,.slide-left-right-ios7.reverse>.ng-leave.ng-leave-active{-webkit-transform:translate3d(15%,0,0);-moz-transform:translate3d(15%,0,0);transform:translate3d(15%,0,0)}.slide-in-left{-webkit-transform:translate3d(0%,0,0);-moz-transform:translate3d(0%,0,0);transform:translate3d(0%,0,0)}.slide-in-left.ng-enter,.slide-in-left>.ng-enter{-webkit-animation-name:slideInFromLeft;-moz-animation-name:slideInFromLeft;animation-name:slideInFromLeft;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-left.ng-leave,.slide-in-left>.ng-leave{-webkit-animation-name:slideOutToLeft;-moz-animation-name:slideOutToLeft;animation-name:slideOutToLeft;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-left-add{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-left-add-active{-webkit-animation-name:slideInFromLeft;-moz-animation-name:slideInFromLeft;animation-name:slideInFromLeft}.slide-out-left{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.slide-out-left.ng-enter,.slide-out-left.ng-leave,.slide-out-left>.ng-enter,.slide-out-left>.ng-leave{-webkit-animation-name:slideOutToLeft;-moz-animation-name:slideOutToLeft;animation-name:slideOutToLeft;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-out-left-add{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-out-left-add-active{-webkit-animation-name:slideOutToLeft;-moz-animation-name:slideOutToLeft;animation-name:slideOutToLeft}.slide-in-right{-webkit-transform:translate3d(0%,0,0);-moz-transform:translate3d(0%,0,0);transform:translate3d(0%,0,0)}.slide-in-right.ng-enter,.slide-in-right.ng-leave,.slide-in-right>.ng-enter,.slide-in-right>.ng-leave{-webkit-animation-name:slideInFromRight;-moz-animation-name:slideInFromRight;animation-name:slideInFromRight;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-right-add{-webkit-transform:translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-right-add-active{-webkit-animation-name:slideInFromRight;-moz-animation-name:slideInFromRight;animation-name:slideInFromRight}.slide-out-right{-webkit-transform:translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.slide-out-right.ng-enter,.slide-out-right.ng-leave,.slide-out-right>.ng-enter,.slide-out-right>.ng-leave{-webkit-animation-name:slideOutToRight;-moz-animation-name:slideOutToRight;animation-name:slideOutToRight;-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-out-right-add{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-animation-duration:250ms;-moz-animation-duration:250ms;animation-duration:250ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-out-right-add-active{-webkit-animation-name:slideOutToRight;-moz-animation-name:slideOutToRight;animation-name:slideOutToRight}.slide-in-up{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.slide-in-up .ng-enter,.slide-in-up.ng-enter{-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-animation-duration:400ms;-moz-animation-duration:400ms;animation-duration:400ms;-webkit-animation-timing-function:cubic-bezier(0.1,.7,.1,1);-moz-animation-timing-function:cubic-bezier(0.1,.7,.1,1);animation-timing-function:cubic-bezier(0.1,.7,.1,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both;opacity:0}.slide-in-up .ng-enter-active,.slide-in-up.ng-enter-active{-webkit-animation-name:slideInUp;-moz-animation-name:slideInUp;animation-name:slideInUp}.slide-in-up .ng-leave,.slide-in-up.ng-leave{-webkit-animation-duration:400ms;-moz-animation-duration:400ms;animation-duration:400ms;-webkit-animation-timing-function:cubic-bezier(0.1,.7,.1,1);-moz-animation-timing-function:cubic-bezier(0.1,.7,.1,1);animation-timing-function:cubic-bezier(0.1,.7,.1,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-up .ng-leave,.slide-in-up.ng-leave-active{-webkit-animation-name:slideOutUp;-moz-animation-name:slideOutUp;animation-name:slideOutUp}.slide-in-up-add{-webkit-animation-duration:400ms;-moz-animation-duration:400ms;animation-duration:400ms;-webkit-animation-timing-function:cubic-bezier(0.1,.7,.1,1);-moz-animation-timing-function:cubic-bezier(0.1,.7,.1,1);animation-timing-function:cubic-bezier(0.1,.7,.1,1);-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.slide-in-up-add-active{-webkit-animation-name:slideInUp;-moz-animation-name:slideInUp;animation-name:slideInUp}.slide-in-up-remove{-webkit-animation-duration:400ms;-moz-animation-duration:400ms;animation-duration:400ms;-webkit-animation-timing-function:cubic-bezier(0.1,.7,.1,1);-moz-animation-timing-function:cubic-bezier(0.1,.7,.1,1);animation-timing-function:cubic-bezier(0.1,.7,.1,1);-webkit-animation-fill-mode:forwards;-moz-animation-fill-mode:forwards;animation-fill-mode:forwards}.slide-in-up-remove-active{-webkit-animation-name:slideOutUp;-moz-animation-name:slideOutUp;animation-name:slideOutUp}.fade-in{-webkit-animation:fadeOut .3s;-moz-animation:fadeOut .3s;animation:fadeOut .3s}.fade-in.active{-webkit-animation:fadeIn .3s;-moz-animation:fadeIn .3s;animation:fadeIn .3s}.fade-in-not-out .ng-enter,.fade-in-not-out.ng-enter{-webkit-animation:fadeIn .3s;-moz-animation:fadeIn .3s;animation:fadeIn .3s;position:relative}.fade-in-not-out .ng-leave,.fade-in-not-out.ng-leave{display:none}.nav-title-slide-ios7.ng-enter,.nav-title-slide-ios7.ng-leave,.nav-title-slide-ios7>.ng-enter,.nav-title-slide-ios7>.ng-leave{-webkit-transition:all 350ms;-moz-transition:all 350ms;transition:all 350ms;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;opacity:1}.nav-title-slide-ios7.ng-enter,.nav-title-slide-ios7>.ng-enter{-webkit-transform:translate3d(30%,0,0);-moz-transform:translate3d(30%,0,0);transform:translate3d(30%,0,0);opacity:0}.nav-title-slide-ios7.ng-enter.ng-enter-active,.nav-title-slide-ios7>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.nav-title-slide-ios7.ng-leave.ng-leave-active,.nav-title-slide-ios7>.ng-leave.ng-leave-active{-webkit-transform:translate3d(-30%,0,0);-moz-transform:translate3d(-30%,0,0);transform:translate3d(-30%,0,0);opacity:0}.reverse .nav-title-slide-ios7.ng-enter,.reverse .nav-title-slide-ios7.ng-leave,.reverse .nav-title-slide-ios7>.ng-enter,.reverse .nav-title-slide-ios7>.ng-leave{-webkit-transition:all 350ms;-moz-transition:all 350ms;transition:all 350ms;-webkit-transition-timing-function:ease-in-out;-moz-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;opacity:1}.reverse .nav-title-slide-ios7.ng-enter,.reverse .nav-title-slide-ios7>.ng-enter{-webkit-transform:translate3d(-30%,0,0);-moz-transform:translate3d(-30%,0,0);transform:translate3d(-30%,0,0);opacity:0}.reverse .nav-title-slide-ios7.ng-enter.ng-enter-active,.reverse .nav-title-slide-ios7>.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.reverse .nav-title-slide-ios7.ng-leave.ng-leave-active,.reverse .nav-title-slide-ios7>.ng-leave.ng-leave-active{-webkit-transform:translate3d(30%,0,0);-moz-transform:translate3d(30%,0,0);transform:translate3d(30%,0,0);opacity:0}.row{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;padding:5px;width:100%}.row+.row{margin-top:-5px;padding-top:0}.col{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;padding:5px;width:100%}.row-top{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;-moz-align-items:flex-start;align-items:flex-start}.row-bottom{-webkit-box-align:end;-ms-flex-align:end;-webkit-align-items:flex-end;-moz-align-items:flex-end;align-items:flex-end}.row-center{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}.col-top{-webkit-align-self:flex-start;-moz-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.col-bottom{-webkit-align-self:flex-end;-moz-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.col-center{-webkit-align-self:center;-moz-align-self:center;-ms-flex-item-align:center;align-self:center}.col-offset-10{margin-left:10%}.col-offset-20{margin-left:20%}.col-offset-25{margin-left:25%}.col-offset-33,.col-offset-34{margin-left:33.3333%}.col-offset-50{margin-left:50%}.col-offset-66,.col-offset-67{margin-left:66.6666%}.col-offset-75{margin-left:75%}.col-offset-80{margin-left:80%}.col-offset-90{margin-left:90%}.col-10{-webkit-box-flex:0;-webkit-flex:0 0 10%;-moz-box-flex:0;-moz-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%;max-width:10%}.col-20{-webkit-box-flex:0;-webkit-flex:0 0 20%;-moz-box-flex:0;-moz-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.col-25{-webkit-box-flex:0;-webkit-flex:0 0 25%;-moz-box-flex:0;-moz-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-33,.col-34{-webkit-box-flex:0;-webkit-flex:0 0 33.3333%;-moz-box-flex:0;-moz-flex:0 0 33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%;max-width:33.3333%}.col-50{-webkit-box-flex:0;-webkit-flex:0 0 50%;-moz-box-flex:0;-moz-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-66,.col-67{-webkit-box-flex:0;-webkit-flex:0 0 66.6666%;-moz-box-flex:0;-moz-flex:0 0 66.6666%;-ms-flex:0 0 66.6666%;flex:0 0 66.6666%;max-width:66.6666%}.col-75{-webkit-box-flex:0;-webkit-flex:0 0 75%;-moz-box-flex:0;-moz-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-80{-webkit-box-flex:0;-webkit-flex:0 0 80%;-moz-box-flex:0;-moz-flex:0 0 80%;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}.col-90{-webkit-box-flex:0;-webkit-flex:0 0 90%;-moz-box-flex:0;-moz-flex:0 0 90%;-ms-flex:0 0 90%;flex:0 0 90%;max-width:90%}.hidden,.hide{display:none}.show{display:block}.invisible{visibility:hidden}.inline{display:inline-block}.block{display:block;clear:both}.block:after{display:block;visibility:hidden;clear:both;height:0;content:"."}.full-image{width:100%}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:"";line-height:0}.clearfix:after{clear:both}.padding{padding:10px}.padding-top,.padding-vertical{padding-top:10px}.padding-horizontal,.padding-right{padding-right:10px}.padding-bottom,.padding-vertical{padding-bottom:10px}.padding-horizontal,.padding-left{padding-left:10px}.rounded{border-radius:4px}.light,a.light{color:#fff}.light-bg{background-color:#fff}.light-border{border-color:#ddd}.stable,a.stable{color:#f8f8f8}.stable-bg{background-color:#f8f8f8}.stable-border{border-color:#b2b2b2}.positive,a.positive{color:#4a87ee}.positive-bg{background-color:#4a87ee}.positive-border{border-color:#145dd7}.calm,a.calm{color:#43cee6}.calm-bg{background-color:#43cee6}.calm-border{border-color:#1aaac3}.assertive,a.assertive{color:#ef4e3a}.assertive-bg{background-color:#ef4e3a}.assertive-border{border-color:#cc2511}.balanced,a.balanced{color:#6c3}.balanced-bg{background-color:#6c3}.balanced-border{border-color:#478f24}.energized,a.energized{color:#f0b840}.energized-bg{background-color:#f0b840}.energized-border{border-color:#d39511}.royal,a.royal{color:#8a6de9}.royal-bg{background-color:#8a6de9}.royal-border{border-color:#552bdf}.dark,a.dark{color:#444}.dark-bg{background-color:#444}.dark-border{border-color:#111}.platform-ios7 .bar-header{height:64px}.platform-ios7 .bar-header>*{margin-top:20px}.platform-ios7 .bar-subheader,.platform-ios7 .has-header{top:64px}.platform-ios7 .has-subheader{top:108px}.platform-android .bar-header{height:48px}.platform-android .bar-subheader,.platform-android .has-header{top:48px}.platform-android .has-subheader{top:96px}.platform-android .title{line-height:48px}
@@ -0,0 +1,150 @@
1
+ @charset "UTF-8";
2
+ /*!
3
+ * Copyright 2013 Drifty Co.
4
+ * http://drifty.com/
5
+
6
+ * Ionic - a powerful HTML5 mobile app framework.
7
+ * http://ionicframework.com/
8
+ *
9
+ *
10
+ * By @maxlynch, @helloimben, @adamdbradley <3
11
+ *
12
+ * Licensed under the MIT license. Please see LICENSE for more information.
13
+ *
14
+ */
15
+ /**
16
+ * Nav controllers and header bar animations
17
+ */
18
+ /*
19
+ .content-slide-in {
20
+ &.ng-enter, > .ng-enter {
21
+ -webkit-transition: 0.5s ease-in-out all;
22
+ -webkit-transform:translate3d(100%,0,0) ;
23
+ box-shadow: -1px 0px 10px rgba(0,0,0,0.6);
24
+ }
25
+ &.ng-enter-active, > .ng-enter-active {
26
+ -webkit-transform:translate3d(0,0,0) ;
27
+ }
28
+ &.ng-leave, > .ng-leave {
29
+ -webkit-transition: 0.5s ease-in-out all;
30
+ -webkit-transform:translate3d(0%,0,0);
31
+ }
32
+ &.ng-leave-active, > .ng-leave-active {
33
+ -webkit-transform:translate3d(-10%,0,0);
34
+ opacity: 0.8;
35
+ }
36
+ }
37
+ */
38
+ .content-slide-out.ng-enter, .content-slide-out > .ng-enter {
39
+ z-index: 1;
40
+ -webkit-transition: 0.5s ease-in-out all;
41
+ -webkit-transform: translate3d(-100%, 0, 0);
42
+ box-shadow: -1px 0px 10px rgba(0, 0, 0, 0.6); }
43
+ .content-slide-out.ng-enter-active, .content-slide-out > .ng-enter-active {
44
+ -webkit-transform: translate3d(0, 0, 0); }
45
+ .content-slide-out.ng-leave, .content-slide-out > .ng-leave {
46
+ z-index: 0;
47
+ -webkit-transition: 0.5s ease-in-out all;
48
+ -webkit-transform: translate3d(0%, 0, 0); }
49
+ .content-slide-out.ng-leave-active, .content-slide-out > .ng-leave-active {
50
+ -webkit-transform: translate3d(10%, 0, 0);
51
+ opacity: 0.8; }
52
+
53
+ .bar-title-in-add {
54
+ -webkit-transition: -webkit-transform 0.5s ease-in-out, opacity 0.5s ease-in-out;
55
+ -webkit-transform: translate3d(100%, 0, 0);
56
+ opacity: 0; }
57
+
58
+ .bar-title-in-add-active {
59
+ -webkit-transform: translate3d(0px, 0, 0);
60
+ opacity: 1; }
61
+
62
+ .bar-title-out-add {
63
+ -webkit-transition: -webkit-transform 0.5s ease-in-out, opacity 0.5s ease-in-out; }
64
+
65
+ .bar-title-out-add-active {
66
+ -webkit-transform: translate3d(-100%, 0, 0);
67
+ opacity: 0; }
68
+
69
+ .bar-button-in {
70
+ opacity: 0; }
71
+
72
+ .bar-button-in-add {
73
+ -webkit-transition: -webkit-transform 0.5s ease-in-out, opacity 0.5s ease-in-out;
74
+ -webkit-transform: translate3d(50%, 0, 0);
75
+ opacity: 0; }
76
+
77
+ .bar-button-in-active {
78
+ -webkit-transform: translate3d(0px, 0, 0);
79
+ opacity: 1; }
80
+
81
+ /**
82
+ * Tab controller animations
83
+ */
84
+ .fade-in-out.ng-enter, .fade-in-out > .ng-enter {
85
+ opacity: 0;
86
+ -webkit-transition: opacity 0.3s ease-in-out; }
87
+ .fade-in-out.ng-enter-active, .fade-in-out > .ng-enter-active {
88
+ opacity: 1; }
89
+ .fade-in-out.ng-leave, .fade-in-out > .ng-leave {
90
+ opacity: 1;
91
+ -webkit-transition: opacity 0.3s ease-in-out; }
92
+ .fade-in-out.ng-leave-active, .fade-in-out > .ng-leave-active {
93
+ opacity: 0; }
94
+
95
+ /* the overall container of the toggle */
96
+ .toggle {
97
+ display: inline-block; }
98
+
99
+ /* hide the actual checkbox */
100
+ .toggle input {
101
+ display: none; }
102
+
103
+ .toggle .track {
104
+ /* the background of the toggle's track area */
105
+ /* also the track appearance when the toggle is "off" */
106
+ position: relative;
107
+ display: inline-block;
108
+ box-sizing: border-box;
109
+ width: 54px;
110
+ height: 32px;
111
+ border: solid 2px #dddddd;
112
+ border-radius: 20px;
113
+ background-color: white;
114
+ cursor: pointer;
115
+ transition: 0.4s ease; }
116
+
117
+ .toggle .handle {
118
+ /* the handle (circle) thats inside the toggle's track area */
119
+ /* also the appearance when the handle is "off" */
120
+ position: absolute;
121
+ display: block;
122
+ width: auto;
123
+ /* override defaults */
124
+ height: auto;
125
+ /* override defaults */
126
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.5), 0 4px 5px rgba(0, 0, 0, 0.25);
127
+ border-radius: 20px;
128
+ background-color: white;
129
+ left: 0;
130
+ top: 0;
131
+ bottom: 0;
132
+ right: 20px;
133
+ transition: 0.2s ease;
134
+ transition-property: left, right;
135
+ transition-delay: 0s, .05s; }
136
+
137
+ .toggle :checked + .track {
138
+ /* When the toggle is "on" */
139
+ /* the track when the toggle is "on" */
140
+ border-color: #4bd863;
141
+ background-color: #ccc;
142
+ box-shadow: inset 0 0 0 20px #4bd863;
143
+ transition: 0.2s ease;
144
+ /* the handle when the toggle is "on" */ }
145
+ .toggle :checked + .track .handle {
146
+ background-color: white;
147
+ right: 0;
148
+ left: 20px;
149
+ -webkit-transform: none;
150
+ transition-delay: .05s, 0s; }
@@ -0,0 +1,13 @@
1
+ @charset "UTF-8";/*!
2
+ * Copyright 2013 Drifty Co.
3
+ * http://drifty.com/
4
+
5
+ * Ionic - a powerful HTML5 mobile app framework.
6
+ * http://ionicframework.com/
7
+ *
8
+ *
9
+ * By @maxlynch, @helloimben, @adamdbradley <3
10
+ *
11
+ * Licensed under the MIT license. Please see LICENSE for more information.
12
+ *
13
+ */.content-slide-out.ng-enter,.content-slide-out>.ng-enter{z-index:1;-webkit-transition:.5s ease-in-out all;-webkit-transform:translate3d(-100%,0,0);box-shadow:-1px 0 10px rgba(0,0,0,.6)}.content-slide-out.ng-enter-active,.content-slide-out>.ng-enter-active{-webkit-transform:translate3d(0,0,0)}.content-slide-out.ng-leave,.content-slide-out>.ng-leave{z-index:0;-webkit-transition:.5s ease-in-out all;-webkit-transform:translate3d(0%,0,0)}.content-slide-out.ng-leave-active,.content-slide-out>.ng-leave-active{-webkit-transform:translate3d(10%,0,0);opacity:.8}.bar-title-in-add{-webkit-transition:-webkit-transform .5s ease-in-out,opacity .5s ease-in-out;-webkit-transform:translate3d(100%,0,0);opacity:0}.bar-title-in-add-active{-webkit-transform:translate3d(0px,0,0);opacity:1}.bar-title-out-add{-webkit-transition:-webkit-transform .5s ease-in-out,opacity .5s ease-in-out}.bar-title-out-add-active{-webkit-transform:translate3d(-100%,0,0);opacity:0}.bar-button-in{opacity:0}.bar-button-in-add{-webkit-transition:-webkit-transform .5s ease-in-out,opacity .5s ease-in-out;-webkit-transform:translate3d(50%,0,0);opacity:0}.bar-button-in-active{-webkit-transform:translate3d(0px,0,0);opacity:1}.fade-in-out.ng-enter,.fade-in-out>.ng-enter{opacity:0;-webkit-transition:opacity .3s ease-in-out}.fade-in-out.ng-enter-active,.fade-in-out>.ng-enter-active{opacity:1}.fade-in-out.ng-leave,.fade-in-out>.ng-leave{opacity:1;-webkit-transition:opacity .3s ease-in-out}.fade-in-out.ng-leave-active,.fade-in-out>.ng-leave-active{opacity:0}.toggle{display:inline-block}.toggle input{display:none}.toggle .track{position:relative;display:inline-block;box-sizing:border-box;width:54px;height:32px;border:solid 2px #ddd;border-radius:20px;background-color:#fff;cursor:pointer;transition:.4s ease}.toggle .handle{position:absolute;display:block;width:auto;height:auto;box-shadow:0 0 2px rgba(0,0,0,.5),0 4px 5px rgba(0,0,0,.25);border-radius:20px;background-color:#fff;left:0;top:0;bottom:0;right:20px;transition:.2s ease;transition-property:left,right;transition-delay:0s,.05s}.toggle :checked+.track{border-color:#4bd863;background-color:#ccc;box-shadow:inset 0 0 0 20px #4bd863;transition:.2s ease}.toggle :checked+.track .handle{background-color:#fff;right:0;left:20px;-webkit-transform:none;transition-delay:.05s,0s}
data/gem-public_cert.pem CHANGED
@@ -1,7 +1,7 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIDbDCCAlSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA+MRAwDgYDVQQDDAd5amNo
2
+ MIIDMDCCAhigAwIBAgIBADANBgkqhkiG9w0BAQUFADA+MRAwDgYDVQQDDAd5amNo
3
3
  ZW54MRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20w
4
- HhcNMTQwMjE3MDg1NDEwWhcNMTUwMjE3MDg1NDEwWjA+MRAwDgYDVQQDDAd5amNo
4
+ HhcNMTMwMjA3MDEyODI4WhcNMTQwMjA3MDEyODI4WjA+MRAwDgYDVQQDDAd5amNo
5
5
  ZW54MRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20w
6
6
  ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfzdtQlNyw5y9701pRrdCM
7
7
  jVWGAMJ7Dyat2mjDVGhMsH/be4j8yn97pa6mymIQUzQaU1KQCw8V+FdV0h4p7HOp
@@ -9,13 +9,12 @@ zj3/mXF1UlcBL5EtItydy36vdanDHdfGbzIYMpnJsGA5ZNDWrBXWL9iQfkurMecq
9
9
  v/w5r80KIaZkl2xMW8jnt33MXHEBjCASWd1yBMlzf1AOr75d0k2bYsSU+GExxexY
10
10
  hPFzLMRM/VJxqitFbYnlgH5zyqBOcBmG3Hd0VaRi137XjBF4ferj21iX/RV4NIOZ
11
11
  Hz2YbTVz80NJNHOpZDlSNE4vnIANp5fnmwNkAi3PTMxYZC89jWDABbqE783xWZkP
12
- AgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQFL2Yu
13
- 3xMkpOPR0xK23zAdikuIoDAcBgNVHREEFTATgRF5amNoZW54QGdtYWlsLmNvbTAc
14
- BgNVHRIEFTATgRF5amNoZW54QGdtYWlsLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEA
15
- RRzZcPovg49HDEbFnTXaO+K2qaJwrZ68nPmD+QrH2Eyj9pvZDisyhuxA1soYwP7+
16
- 97fm+/VQXE+hCmWg4SaLq4ORAgOzH5LTrczrx+/c0VYP/5t/9/dHteBrTBdhySr/
17
- ETB/yFvqX9y/CztUq4J6kb8tl7L6SokBJG+IZ6U9G1fUeBHhzqKUJqd+b2gaQXGK
18
- xzRUPfH0t7OIY9islMhix+o+v8DnfqMO6+PsUq9zkkrZTJBQ+2v8TxNWl34yO9k1
19
- DF80dsrSpW23FQCbR137xNWvvbAJQR+iIACWpWoE07JJsLLRkUpD7o/v77FB/tSD
20
- YSYVM5S6Ue7H5LNdQfdeyQ==
12
+ AgMBAAGjOTA3MAkGA1UdEwQCMAAwHQYDVR0OBBYEFAUvZi7fEySk49HTErbfMB2K
13
+ S4igMAsGA1UdDwQEAwIEsDANBgkqhkiG9w0BAQUFAAOCAQEAgUkiFf7KQbGt1lUq
14
+ jQiV8nol30+dWSIQ0/aTNN1lbgaKXq86Jqp9IIWbQ9oQLHuemXq0Fx7abrdIqJAw
15
+ QC7UleZtxRfT8pk3TIFOiinGbWlG/iJS85Pv0DWnAT3cl76M/r4M+QHOu38VAOJy
16
+ 6rUHWia/9IzAJZZ8PtOPi0HkTwZIvpS6jLF6jeq2wr+Q8naQZ6S/JnalBe6n7dLS
17
+ LOEp3WwLafBZ9VtIQk/vgB3QJxor8X4R3IAsVvC2YkGwJ09qFV3WQWWZSSXRJyj5
18
+ 0DwU+KfUta4HWRr+jl+4kYeiUKgamdv2pQ4VaJ83VGC3FIpUk9TULCM3v5iHbDQu
19
+ oZsWCQ==
21
20
  -----END CERTIFICATE-----
@@ -1,5 +1,5 @@
1
1
  module IonicRailsEngine
2
2
  module Rails
3
- VERSION = "0.9.9.11"
3
+ VERSION = "0.9.17"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ionic-rails-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9.11
4
+ version: 0.9.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yen-Ju Chen
@@ -10,9 +10,9 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDbDCCAlSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA+MRAwDgYDVQQDDAd5amNo
13
+ MIIDMDCCAhigAwIBAgIBADANBgkqhkiG9w0BAQUFADA+MRAwDgYDVQQDDAd5amNo
14
14
  ZW54MRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20w
15
- HhcNMTQwMjE3MDg1NDEwWhcNMTUwMjE3MDg1NDEwWjA+MRAwDgYDVQQDDAd5amNo
15
+ HhcNMTMwMjA3MDEyODI4WhcNMTQwMjA3MDEyODI4WjA+MRAwDgYDVQQDDAd5amNo
16
16
  ZW54MRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20w
17
17
  ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfzdtQlNyw5y9701pRrdCM
18
18
  jVWGAMJ7Dyat2mjDVGhMsH/be4j8yn97pa6mymIQUzQaU1KQCw8V+FdV0h4p7HOp
@@ -20,17 +20,16 @@ cert_chain:
20
20
  v/w5r80KIaZkl2xMW8jnt33MXHEBjCASWd1yBMlzf1AOr75d0k2bYsSU+GExxexY
21
21
  hPFzLMRM/VJxqitFbYnlgH5zyqBOcBmG3Hd0VaRi137XjBF4ferj21iX/RV4NIOZ
22
22
  Hz2YbTVz80NJNHOpZDlSNE4vnIANp5fnmwNkAi3PTMxYZC89jWDABbqE783xWZkP
23
- AgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQFL2Yu
24
- 3xMkpOPR0xK23zAdikuIoDAcBgNVHREEFTATgRF5amNoZW54QGdtYWlsLmNvbTAc
25
- BgNVHRIEFTATgRF5amNoZW54QGdtYWlsLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEA
26
- RRzZcPovg49HDEbFnTXaO+K2qaJwrZ68nPmD+QrH2Eyj9pvZDisyhuxA1soYwP7+
27
- 97fm+/VQXE+hCmWg4SaLq4ORAgOzH5LTrczrx+/c0VYP/5t/9/dHteBrTBdhySr/
28
- ETB/yFvqX9y/CztUq4J6kb8tl7L6SokBJG+IZ6U9G1fUeBHhzqKUJqd+b2gaQXGK
29
- xzRUPfH0t7OIY9islMhix+o+v8DnfqMO6+PsUq9zkkrZTJBQ+2v8TxNWl34yO9k1
30
- DF80dsrSpW23FQCbR137xNWvvbAJQR+iIACWpWoE07JJsLLRkUpD7o/v77FB/tSD
31
- YSYVM5S6Ue7H5LNdQfdeyQ==
23
+ AgMBAAGjOTA3MAkGA1UdEwQCMAAwHQYDVR0OBBYEFAUvZi7fEySk49HTErbfMB2K
24
+ S4igMAsGA1UdDwQEAwIEsDANBgkqhkiG9w0BAQUFAAOCAQEAgUkiFf7KQbGt1lUq
25
+ jQiV8nol30+dWSIQ0/aTNN1lbgaKXq86Jqp9IIWbQ9oQLHuemXq0Fx7abrdIqJAw
26
+ QC7UleZtxRfT8pk3TIFOiinGbWlG/iJS85Pv0DWnAT3cl76M/r4M+QHOu38VAOJy
27
+ 6rUHWia/9IzAJZZ8PtOPi0HkTwZIvpS6jLF6jeq2wr+Q8naQZ6S/JnalBe6n7dLS
28
+ LOEp3WwLafBZ9VtIQk/vgB3QJxor8X4R3IAsVvC2YkGwJ09qFV3WQWWZSSXRJyj5
29
+ 0DwU+KfUta4HWRr+jl+4kYeiUKgamdv2pQ4VaJ83VGC3FIpUk9TULCM3v5iHbDQu
30
+ oZsWCQ==
32
31
  -----END CERTIFICATE-----
33
- date: 2014-08-14 00:00:00.000000000 Z
32
+ date: 2013-12-17 00:00:00.000000000 Z
34
33
  dependencies:
35
34
  - !ruby/object:Gem::Dependency
36
35
  name: railties
@@ -62,16 +61,14 @@ files:
62
61
  - app/assets/fonts/ionic/ionicons.svg
63
62
  - app/assets/fonts/ionic/ionicons.ttf
64
63
  - app/assets/fonts/ionic/ionicons.woff
65
- - app/assets/javascripts/angular-ui/angular-ui-router.js
66
- - app/assets/javascripts/angular-ui/angular-ui-router.min.js
67
64
  - app/assets/javascripts/ionic/ionic-angular.js
68
65
  - app/assets/javascripts/ionic/ionic-angular.min.js
69
- - app/assets/javascripts/ionic/ionic.bundle.js
70
- - app/assets/javascripts/ionic/ionic.bundle.min.js
71
66
  - app/assets/javascripts/ionic/ionic.js
72
67
  - app/assets/javascripts/ionic/ionic.min.js
73
68
  - app/assets/stylesheets/ionic/ionic.css.erb
74
69
  - app/assets/stylesheets/ionic/ionic.min.css.erb
70
+ - app/assets/stylesheets/ionic/themes/ionic-ios7.css
71
+ - app/assets/stylesheets/ionic/themes/ionic-ios7.min.css
75
72
  - gem-public_cert.pem
76
73
  - ionic-rails-engine.gemspec
77
74
  - lib/ionic-rails-engine.rb
metadata.gz.sig CHANGED
@@ -1,2 +1,3 @@
1
- g��Y�%S6�=�7(��8�dQE8�%��m�$ �%���hYoz���|�vv$z�Qܽrw{OC#//Mi3dvt�<Zq��{뎏w
2
- ���*z23ؤ<���p��CEE�煳�B$hSB��i<Rw��r86�%��CL��Q@/EG8
1
+ Z��F�z-8����تG6n��\4��Zk?�Pd���]^r��/�<��Mm�^S)�0cB��5I�Dbȇ|���<veܥ�! ���΄37ϙ.�ϐѪ��뚤l�ż��i�i�����Rl�
2
+ g��P!�WHU�D�v�^�Ա�u
3
+ |lY�1�]�z%IS�{׉��if�){d�]0dKԉ����% �x`�%�2��A�)uJ�i4�y����V��/�b+��!���ʕq&}�1<���
@@ -1,3223 +0,0 @@
1
- /**
2
- * State-based routing for AngularJS
3
- * @version v0.2.10
4
- * @link http://angular-ui.github.com/
5
- * @license MIT License, http://www.opensource.org/licenses/MIT
6
- */
7
-
8
- /* commonjs package manager support (eg componentjs) */
9
- if (typeof module !== "undefined" && typeof exports !== "undefined" && module.exports === exports){
10
- module.exports = 'ui.router';
11
- }
12
-
13
- (function (window, angular, undefined) {
14
- /*jshint globalstrict:true*/
15
- /*global angular:false*/
16
- 'use strict';
17
-
18
- var isDefined = angular.isDefined,
19
- isFunction = angular.isFunction,
20
- isString = angular.isString,
21
- isObject = angular.isObject,
22
- isArray = angular.isArray,
23
- forEach = angular.forEach,
24
- extend = angular.extend,
25
- copy = angular.copy;
26
-
27
- function inherit(parent, extra) {
28
- return extend(new (extend(function() {}, { prototype: parent }))(), extra);
29
- }
30
-
31
- function merge(dst) {
32
- forEach(arguments, function(obj) {
33
- if (obj !== dst) {
34
- forEach(obj, function(value, key) {
35
- if (!dst.hasOwnProperty(key)) dst[key] = value;
36
- });
37
- }
38
- });
39
- return dst;
40
- }
41
-
42
- /**
43
- * Finds the common ancestor path between two states.
44
- *
45
- * @param {Object} first The first state.
46
- * @param {Object} second The second state.
47
- * @return {Array} Returns an array of state names in descending order, not including the root.
48
- */
49
- function ancestors(first, second) {
50
- var path = [];
51
-
52
- for (var n in first.path) {
53
- if (first.path[n] !== second.path[n]) break;
54
- path.push(first.path[n]);
55
- }
56
- return path;
57
- }
58
-
59
- /**
60
- * IE8-safe wrapper for `Object.keys()`.
61
- *
62
- * @param {Object} object A JavaScript object.
63
- * @return {Array} Returns the keys of the object as an array.
64
- */
65
- function keys(object) {
66
- if (Object.keys) {
67
- return Object.keys(object);
68
- }
69
- var result = [];
70
-
71
- angular.forEach(object, function(val, key) {
72
- result.push(key);
73
- });
74
- return result;
75
- }
76
-
77
- /**
78
- * IE8-safe wrapper for `Array.prototype.indexOf()`.
79
- *
80
- * @param {Array} array A JavaScript array.
81
- * @param {*} value A value to search the array for.
82
- * @return {Number} Returns the array index value of `value`, or `-1` if not present.
83
- */
84
- function arraySearch(array, value) {
85
- if (Array.prototype.indexOf) {
86
- return array.indexOf(value, Number(arguments[2]) || 0);
87
- }
88
- var len = array.length >>> 0, from = Number(arguments[2]) || 0;
89
- from = (from < 0) ? Math.ceil(from) : Math.floor(from);
90
-
91
- if (from < 0) from += len;
92
-
93
- for (; from < len; from++) {
94
- if (from in array && array[from] === value) return from;
95
- }
96
- return -1;
97
- }
98
-
99
- /**
100
- * Merges a set of parameters with all parameters inherited between the common parents of the
101
- * current state and a given destination state.
102
- *
103
- * @param {Object} currentParams The value of the current state parameters ($stateParams).
104
- * @param {Object} newParams The set of parameters which will be composited with inherited params.
105
- * @param {Object} $current Internal definition of object representing the current state.
106
- * @param {Object} $to Internal definition of object representing state to transition to.
107
- */
108
- function inheritParams(currentParams, newParams, $current, $to) {
109
- var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];
110
-
111
- for (var i in parents) {
112
- if (!parents[i].params || !parents[i].params.length) continue;
113
- parentParams = parents[i].params;
114
-
115
- for (var j in parentParams) {
116
- if (arraySearch(inheritList, parentParams[j]) >= 0) continue;
117
- inheritList.push(parentParams[j]);
118
- inherited[parentParams[j]] = currentParams[parentParams[j]];
119
- }
120
- }
121
- return extend({}, inherited, newParams);
122
- }
123
-
124
- /**
125
- * Normalizes a set of values to string or `null`, filtering them by a list of keys.
126
- *
127
- * @param {Array} keys The list of keys to normalize/return.
128
- * @param {Object} values An object hash of values to normalize.
129
- * @return {Object} Returns an object hash of normalized string values.
130
- */
131
- function normalize(keys, values) {
132
- var normalized = {};
133
-
134
- forEach(keys, function (name) {
135
- var value = values[name];
136
- normalized[name] = (value != null) ? String(value) : null;
137
- });
138
- return normalized;
139
- }
140
-
141
- /**
142
- * Performs a non-strict comparison of the subset of two objects, defined by a list of keys.
143
- *
144
- * @param {Object} a The first object.
145
- * @param {Object} b The second object.
146
- * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified,
147
- * it defaults to the list of keys in `a`.
148
- * @return {Boolean} Returns `true` if the keys match, otherwise `false`.
149
- */
150
- function equalForKeys(a, b, keys) {
151
- if (!keys) {
152
- keys = [];
153
- for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility
154
- }
155
-
156
- for (var i=0; i<keys.length; i++) {
157
- var k = keys[i];
158
- if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized
159
- }
160
- return true;
161
- }
162
-
163
- /**
164
- * Returns the subset of an object, based on a list of keys.
165
- *
166
- * @param {Array} keys
167
- * @param {Object} values
168
- * @return {Boolean} Returns a subset of `values`.
169
- */
170
- function filterByKeys(keys, values) {
171
- var filtered = {};
172
-
173
- forEach(keys, function (name) {
174
- filtered[name] = values[name];
175
- });
176
- return filtered;
177
- }
178
- /**
179
- * @ngdoc overview
180
- * @name ui.router.util
181
- *
182
- * @description
183
- * # ui.router.util sub-module
184
- *
185
- * This module is a dependency of other sub-modules. Do not include this module as a dependency
186
- * in your angular app (use {@link ui.router} module instead).
187
- *
188
- */
189
- angular.module('ui.router.util', ['ng']);
190
-
191
- /**
192
- * @ngdoc overview
193
- * @name ui.router.router
194
- *
195
- * @requires ui.router.util
196
- *
197
- * @description
198
- * # ui.router.router sub-module
199
- *
200
- * This module is a dependency of other sub-modules. Do not include this module as a dependency
201
- * in your angular app (use {@link ui.router} module instead).
202
- */
203
- angular.module('ui.router.router', ['ui.router.util']);
204
-
205
- /**
206
- * @ngdoc overview
207
- * @name ui.router.state
208
- *
209
- * @requires ui.router.router
210
- * @requires ui.router.util
211
- *
212
- * @description
213
- * # ui.router.state sub-module
214
- *
215
- * This module is a dependency of the main ui.router module. Do not include this module as a dependency
216
- * in your angular app (use {@link ui.router} module instead).
217
- *
218
- */
219
- angular.module('ui.router.state', ['ui.router.router', 'ui.router.util']);
220
-
221
- /**
222
- * @ngdoc overview
223
- * @name ui.router
224
- *
225
- * @requires ui.router.state
226
- *
227
- * @description
228
- * # ui.router
229
- *
230
- * ## The main module for ui.router
231
- * There are several sub-modules included with the ui.router module, however only this module is needed
232
- * as a dependency within your angular app. The other modules are for organization purposes.
233
- *
234
- * The modules are:
235
- * * ui.router - the main "umbrella" module
236
- * * ui.router.router -
237
- *
238
- * *You'll need to include **only** this module as the dependency within your angular app.*
239
- *
240
- * <pre>
241
- * <!doctype html>
242
- * <html ng-app="myApp">
243
- * <head>
244
- * <script src="js/angular.js"></script>
245
- * <!-- Include the ui-router script -->
246
- * <script src="js/angular-ui-router.min.js"></script>
247
- * <script>
248
- * // ...and add 'ui.router' as a dependency
249
- * var myApp = angular.module('myApp', ['ui.router']);
250
- * </script>
251
- * </head>
252
- * <body>
253
- * </body>
254
- * </html>
255
- * </pre>
256
- */
257
- angular.module('ui.router', ['ui.router.state']);
258
-
259
- angular.module('ui.router.compat', ['ui.router']);
260
-
261
- /**
262
- * @ngdoc object
263
- * @name ui.router.util.$resolve
264
- *
265
- * @requires $q
266
- * @requires $injector
267
- *
268
- * @description
269
- * Manages resolution of (acyclic) graphs of promises.
270
- */
271
- $Resolve.$inject = ['$q', '$injector'];
272
- function $Resolve( $q, $injector) {
273
-
274
- var VISIT_IN_PROGRESS = 1,
275
- VISIT_DONE = 2,
276
- NOTHING = {},
277
- NO_DEPENDENCIES = [],
278
- NO_LOCALS = NOTHING,
279
- NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING });
280
-
281
-
282
- /**
283
- * @ngdoc function
284
- * @name ui.router.util.$resolve#study
285
- * @methodOf ui.router.util.$resolve
286
- *
287
- * @description
288
- * Studies a set of invocables that are likely to be used multiple times.
289
- * <pre>
290
- * $resolve.study(invocables)(locals, parent, self)
291
- * </pre>
292
- * is equivalent to
293
- * <pre>
294
- * $resolve.resolve(invocables, locals, parent, self)
295
- * </pre>
296
- * but the former is more efficient (in fact `resolve` just calls `study`
297
- * internally).
298
- *
299
- * @param {object} invocables Invocable objects
300
- * @return {function} a function to pass in locals, parent and self
301
- */
302
- this.study = function (invocables) {
303
- if (!isObject(invocables)) throw new Error("'invocables' must be an object");
304
-
305
- // Perform a topological sort of invocables to build an ordered plan
306
- var plan = [], cycle = [], visited = {};
307
- function visit(value, key) {
308
- if (visited[key] === VISIT_DONE) return;
309
-
310
- cycle.push(key);
311
- if (visited[key] === VISIT_IN_PROGRESS) {
312
- cycle.splice(0, cycle.indexOf(key));
313
- throw new Error("Cyclic dependency: " + cycle.join(" -> "));
314
- }
315
- visited[key] = VISIT_IN_PROGRESS;
316
-
317
- if (isString(value)) {
318
- plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES);
319
- } else {
320
- var params = $injector.annotate(value);
321
- forEach(params, function (param) {
322
- if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param);
323
- });
324
- plan.push(key, value, params);
325
- }
326
-
327
- cycle.pop();
328
- visited[key] = VISIT_DONE;
329
- }
330
- forEach(invocables, visit);
331
- invocables = cycle = visited = null; // plan is all that's required
332
-
333
- function isResolve(value) {
334
- return isObject(value) && value.then && value.$$promises;
335
- }
336
-
337
- return function (locals, parent, self) {
338
- if (isResolve(locals) && self === undefined) {
339
- self = parent; parent = locals; locals = null;
340
- }
341
- if (!locals) locals = NO_LOCALS;
342
- else if (!isObject(locals)) {
343
- throw new Error("'locals' must be an object");
344
- }
345
- if (!parent) parent = NO_PARENT;
346
- else if (!isResolve(parent)) {
347
- throw new Error("'parent' must be a promise returned by $resolve.resolve()");
348
- }
349
-
350
- // To complete the overall resolution, we have to wait for the parent
351
- // promise and for the promise for each invokable in our plan.
352
- var resolution = $q.defer(),
353
- result = resolution.promise,
354
- promises = result.$$promises = {},
355
- values = extend({}, locals),
356
- wait = 1 + plan.length/3,
357
- merged = false;
358
-
359
- function done() {
360
- // Merge parent values we haven't got yet and publish our own $$values
361
- if (!--wait) {
362
- if (!merged) merge(values, parent.$$values);
363
- result.$$values = values;
364
- result.$$promises = true; // keep for isResolve()
365
- resolution.resolve(values);
366
- }
367
- }
368
-
369
- function fail(reason) {
370
- result.$$failure = reason;
371
- resolution.reject(reason);
372
- }
373
-
374
- // Short-circuit if parent has already failed
375
- if (isDefined(parent.$$failure)) {
376
- fail(parent.$$failure);
377
- return result;
378
- }
379
-
380
- // Merge parent values if the parent has already resolved, or merge
381
- // parent promises and wait if the parent resolve is still in progress.
382
- if (parent.$$values) {
383
- merged = merge(values, parent.$$values);
384
- done();
385
- } else {
386
- extend(promises, parent.$$promises);
387
- parent.then(done, fail);
388
- }
389
-
390
- // Process each invocable in the plan, but ignore any where a local of the same name exists.
391
- for (var i=0, ii=plan.length; i<ii; i+=3) {
392
- if (locals.hasOwnProperty(plan[i])) done();
393
- else invoke(plan[i], plan[i+1], plan[i+2]);
394
- }
395
-
396
- function invoke(key, invocable, params) {
397
- // Create a deferred for this invocation. Failures will propagate to the resolution as well.
398
- var invocation = $q.defer(), waitParams = 0;
399
- function onfailure(reason) {
400
- invocation.reject(reason);
401
- fail(reason);
402
- }
403
- // Wait for any parameter that we have a promise for (either from parent or from this
404
- // resolve; in that case study() will have made sure it's ordered before us in the plan).
405
- forEach(params, function (dep) {
406
- if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) {
407
- waitParams++;
408
- promises[dep].then(function (result) {
409
- values[dep] = result;
410
- if (!(--waitParams)) proceed();
411
- }, onfailure);
412
- }
413
- });
414
- if (!waitParams) proceed();
415
- function proceed() {
416
- if (isDefined(result.$$failure)) return;
417
- try {
418
- invocation.resolve($injector.invoke(invocable, self, values));
419
- invocation.promise.then(function (result) {
420
- values[key] = result;
421
- done();
422
- }, onfailure);
423
- } catch (e) {
424
- onfailure(e);
425
- }
426
- }
427
- // Publish promise synchronously; invocations further down in the plan may depend on it.
428
- promises[key] = invocation.promise;
429
- }
430
-
431
- return result;
432
- };
433
- };
434
-
435
- /**
436
- * @ngdoc function
437
- * @name ui.router.util.$resolve#resolve
438
- * @methodOf ui.router.util.$resolve
439
- *
440
- * @description
441
- * Resolves a set of invocables. An invocable is a function to be invoked via
442
- * `$injector.invoke()`, and can have an arbitrary number of dependencies.
443
- * An invocable can either return a value directly,
444
- * or a `$q` promise. If a promise is returned it will be resolved and the
445
- * resulting value will be used instead. Dependencies of invocables are resolved
446
- * (in this order of precedence)
447
- *
448
- * - from the specified `locals`
449
- * - from another invocable that is part of this `$resolve` call
450
- * - from an invocable that is inherited from a `parent` call to `$resolve`
451
- * (or recursively
452
- * - from any ancestor `$resolve` of that parent).
453
- *
454
- * The return value of `$resolve` is a promise for an object that contains
455
- * (in this order of precedence)
456
- *
457
- * - any `locals` (if specified)
458
- * - the resolved return values of all injectables
459
- * - any values inherited from a `parent` call to `$resolve` (if specified)
460
- *
461
- * The promise will resolve after the `parent` promise (if any) and all promises
462
- * returned by injectables have been resolved. If any invocable
463
- * (or `$injector.invoke`) throws an exception, or if a promise returned by an
464
- * invocable is rejected, the `$resolve` promise is immediately rejected with the
465
- * same error. A rejection of a `parent` promise (if specified) will likewise be
466
- * propagated immediately. Once the `$resolve` promise has been rejected, no
467
- * further invocables will be called.
468
- *
469
- * Cyclic dependencies between invocables are not permitted and will caues `$resolve`
470
- * to throw an error. As a special case, an injectable can depend on a parameter
471
- * with the same name as the injectable, which will be fulfilled from the `parent`
472
- * injectable of the same name. This allows inherited values to be decorated.
473
- * Note that in this case any other injectable in the same `$resolve` with the same
474
- * dependency would see the decorated value, not the inherited value.
475
- *
476
- * Note that missing dependencies -- unlike cyclic dependencies -- will cause an
477
- * (asynchronous) rejection of the `$resolve` promise rather than a (synchronous)
478
- * exception.
479
- *
480
- * Invocables are invoked eagerly as soon as all dependencies are available.
481
- * This is true even for dependencies inherited from a `parent` call to `$resolve`.
482
- *
483
- * As a special case, an invocable can be a string, in which case it is taken to
484
- * be a service name to be passed to `$injector.get()`. This is supported primarily
485
- * for backwards-compatibility with the `resolve` property of `$routeProvider`
486
- * routes.
487
- *
488
- * @param {object} invocables functions to invoke or
489
- * `$injector` services to fetch.
490
- * @param {object} locals values to make available to the injectables
491
- * @param {object} parent a promise returned by another call to `$resolve`.
492
- * @param {object} self the `this` for the invoked methods
493
- * @return {object} Promise for an object that contains the resolved return value
494
- * of all invocables, as well as any inherited and local values.
495
- */
496
- this.resolve = function (invocables, locals, parent, self) {
497
- return this.study(invocables)(locals, parent, self);
498
- };
499
- }
500
-
501
- angular.module('ui.router.util').service('$resolve', $Resolve);
502
-
503
-
504
- /**
505
- * @ngdoc object
506
- * @name ui.router.util.$templateFactory
507
- *
508
- * @requires $http
509
- * @requires $templateCache
510
- * @requires $injector
511
- *
512
- * @description
513
- * Service. Manages loading of templates.
514
- */
515
- $TemplateFactory.$inject = ['$http', '$templateCache', '$injector'];
516
- function $TemplateFactory( $http, $templateCache, $injector) {
517
-
518
- /**
519
- * @ngdoc function
520
- * @name ui.router.util.$templateFactory#fromConfig
521
- * @methodOf ui.router.util.$templateFactory
522
- *
523
- * @description
524
- * Creates a template from a configuration object.
525
- *
526
- * @param {object} config Configuration object for which to load a template.
527
- * The following properties are search in the specified order, and the first one
528
- * that is defined is used to create the template:
529
- *
530
- * @param {string|object} config.template html string template or function to
531
- * load via {@link ui.router.util.$templateFactory#fromString fromString}.
532
- * @param {string|object} config.templateUrl url to load or a function returning
533
- * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}.
534
- * @param {Function} config.templateProvider function to invoke via
535
- * {@link ui.router.util.$templateFactory#fromProvider fromProvider}.
536
- * @param {object} params Parameters to pass to the template function.
537
- * @param {object} locals Locals to pass to `invoke` if the template is loaded
538
- * via a `templateProvider`. Defaults to `{ params: params }`.
539
- *
540
- * @return {string|object} The template html as a string, or a promise for
541
- * that string,or `null` if no template is configured.
542
- */
543
- this.fromConfig = function (config, params, locals) {
544
- return (
545
- isDefined(config.template) ? this.fromString(config.template, params) :
546
- isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) :
547
- isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) :
548
- null
549
- );
550
- };
551
-
552
- /**
553
- * @ngdoc function
554
- * @name ui.router.util.$templateFactory#fromString
555
- * @methodOf ui.router.util.$templateFactory
556
- *
557
- * @description
558
- * Creates a template from a string or a function returning a string.
559
- *
560
- * @param {string|object} template html template as a string or function that
561
- * returns an html template as a string.
562
- * @param {object} params Parameters to pass to the template function.
563
- *
564
- * @return {string|object} The template html as a string, or a promise for that
565
- * string.
566
- */
567
- this.fromString = function (template, params) {
568
- return isFunction(template) ? template(params) : template;
569
- };
570
-
571
- /**
572
- * @ngdoc function
573
- * @name ui.router.util.$templateFactory#fromUrl
574
- * @methodOf ui.router.util.$templateFactory
575
- *
576
- * @description
577
- * Loads a template from the a URL via `$http` and `$templateCache`.
578
- *
579
- * @param {string|Function} url url of the template to load, or a function
580
- * that returns a url.
581
- * @param {Object} params Parameters to pass to the url function.
582
- * @return {string|Promise.<string>} The template html as a string, or a promise
583
- * for that string.
584
- */
585
- this.fromUrl = function (url, params) {
586
- if (isFunction(url)) url = url(params);
587
- if (url == null) return null;
588
- else return $http
589
- .get(url, { cache: $templateCache })
590
- .then(function(response) { return response.data; });
591
- };
592
-
593
- /**
594
- * @ngdoc function
595
- * @name ui.router.util.$templateFactory#fromUrl
596
- * @methodOf ui.router.util.$templateFactory
597
- *
598
- * @description
599
- * Creates a template by invoking an injectable provider function.
600
- *
601
- * @param {Function} provider Function to invoke via `$injector.invoke`
602
- * @param {Object} params Parameters for the template.
603
- * @param {Object} locals Locals to pass to `invoke`. Defaults to
604
- * `{ params: params }`.
605
- * @return {string|Promise.<string>} The template html as a string, or a promise
606
- * for that string.
607
- */
608
- this.fromProvider = function (provider, params, locals) {
609
- return $injector.invoke(provider, null, locals || { params: params });
610
- };
611
- }
612
-
613
- angular.module('ui.router.util').service('$templateFactory', $TemplateFactory);
614
-
615
- /**
616
- * @ngdoc object
617
- * @name ui.router.util.type:UrlMatcher
618
- *
619
- * @description
620
- * Matches URLs against patterns and extracts named parameters from the path or the search
621
- * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list
622
- * of search parameters. Multiple search parameter names are separated by '&'. Search parameters
623
- * do not influence whether or not a URL is matched, but their values are passed through into
624
- * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}.
625
- *
626
- * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace
627
- * syntax, which optionally allows a regular expression for the parameter to be specified:
628
- *
629
- * * `':'` name - colon placeholder
630
- * * `'*'` name - catch-all placeholder
631
- * * `'{' name '}'` - curly placeholder
632
- * * `'{' name ':' regexp '}'` - curly placeholder with regexp. Should the regexp itself contain
633
- * curly braces, they must be in matched pairs or escaped with a backslash.
634
- *
635
- * Parameter names may contain only word characters (latin letters, digits, and underscore) and
636
- * must be unique within the pattern (across both path and search parameters). For colon
637
- * placeholders or curly placeholders without an explicit regexp, a path parameter matches any
638
- * number of characters other than '/'. For catch-all placeholders the path parameter matches
639
- * any number of characters.
640
- *
641
- * Examples:
642
- *
643
- * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for
644
- * trailing slashes, and patterns have to match the entire path, not just a prefix.
645
- * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or
646
- * '/user/bob/details'. The second path segment will be captured as the parameter 'id'.
647
- * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.
648
- * * `'/user/{id:[^/]*}'` - Same as the previous example.
649
- * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id
650
- * parameter consists of 1 to 8 hex digits.
651
- * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the
652
- * path into the parameter 'path'.
653
- * * `'/files/*path'` - ditto.
654
- *
655
- * @param {string} pattern the pattern to compile into a matcher.
656
- *
657
- * @property {string} prefix A static prefix of this pattern. The matcher guarantees that any
658
- * URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns
659
- * non-null) will start with this prefix.
660
- *
661
- * @property {string} source The pattern that was passed into the contructor
662
- *
663
- * @property {string} sourcePath The path portion of the source property
664
- *
665
- * @property {string} sourceSearch The search portion of the source property
666
- *
667
- * @property {string} regex The constructed regex that will be used to match against the url when
668
- * it is time to determine which url will match.
669
- *
670
- * @returns {Object} New UrlMatcher object
671
- */
672
- function UrlMatcher(pattern) {
673
-
674
- // Find all placeholders and create a compiled pattern, using either classic or curly syntax:
675
- // '*' name
676
- // ':' name
677
- // '{' name '}'
678
- // '{' name ':' regexp '}'
679
- // The regular expression is somewhat complicated due to the need to allow curly braces
680
- // inside the regular expression. The placeholder regexp breaks down as follows:
681
- // ([:*])(\w+) classic placeholder ($1 / $2)
682
- // \{(\w+)(?:\:( ... ))?\} curly brace placeholder ($3) with optional regexp ... ($4)
683
- // (?: ... | ... | ... )+ the regexp consists of any number of atoms, an atom being either
684
- // [^{}\\]+ - anything other than curly braces or backslash
685
- // \\. - a backslash escape
686
- // \{(?:[^{}\\]+|\\.)*\} - a matched set of curly braces containing other atoms
687
- var placeholder = /([:*])(\w+)|\{(\w+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
688
- names = {}, compiled = '^', last = 0, m,
689
- segments = this.segments = [],
690
- params = this.params = [];
691
-
692
- function addParameter(id) {
693
- if (!/^\w+(-+\w+)*$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'");
694
- if (names[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'");
695
- names[id] = true;
696
- params.push(id);
697
- }
698
-
699
- function quoteRegExp(string) {
700
- return string.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&");
701
- }
702
-
703
- this.source = pattern;
704
-
705
- // Split into static segments separated by path parameter placeholders.
706
- // The number of segments is always 1 more than the number of parameters.
707
- var id, regexp, segment;
708
- while ((m = placeholder.exec(pattern))) {
709
- id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null
710
- regexp = m[4] || (m[1] == '*' ? '.*' : '[^/]*');
711
- segment = pattern.substring(last, m.index);
712
- if (segment.indexOf('?') >= 0) break; // we're into the search part
713
- compiled += quoteRegExp(segment) + '(' + regexp + ')';
714
- addParameter(id);
715
- segments.push(segment);
716
- last = placeholder.lastIndex;
717
- }
718
- segment = pattern.substring(last);
719
-
720
- // Find any search parameter names and remove them from the last segment
721
- var i = segment.indexOf('?');
722
- if (i >= 0) {
723
- var search = this.sourceSearch = segment.substring(i);
724
- segment = segment.substring(0, i);
725
- this.sourcePath = pattern.substring(0, last+i);
726
-
727
- // Allow parameters to be separated by '?' as well as '&' to make concat() easier
728
- forEach(search.substring(1).split(/[&?]/), addParameter);
729
- } else {
730
- this.sourcePath = pattern;
731
- this.sourceSearch = '';
732
- }
733
-
734
- compiled += quoteRegExp(segment) + '$';
735
- segments.push(segment);
736
- this.regexp = new RegExp(compiled);
737
- this.prefix = segments[0];
738
- }
739
-
740
- /**
741
- * @ngdoc function
742
- * @name ui.router.util.type:UrlMatcher#concat
743
- * @methodOf ui.router.util.type:UrlMatcher
744
- *
745
- * @description
746
- * Returns a new matcher for a pattern constructed by appending the path part and adding the
747
- * search parameters of the specified pattern to this pattern. The current pattern is not
748
- * modified. This can be understood as creating a pattern for URLs that are relative to (or
749
- * suffixes of) the current pattern.
750
- *
751
- * @example
752
- * The following two matchers are equivalent:
753
- * ```
754
- * new UrlMatcher('/user/{id}?q').concat('/details?date');
755
- * new UrlMatcher('/user/{id}/details?q&date');
756
- * ```
757
- *
758
- * @param {string} pattern The pattern to append.
759
- * @returns {ui.router.util.type:UrlMatcher} A matcher for the concatenated pattern.
760
- */
761
- UrlMatcher.prototype.concat = function (pattern) {
762
- // Because order of search parameters is irrelevant, we can add our own search
763
- // parameters to the end of the new pattern. Parse the new pattern by itself
764
- // and then join the bits together, but it's much easier to do this on a string level.
765
- return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch);
766
- };
767
-
768
- UrlMatcher.prototype.toString = function () {
769
- return this.source;
770
- };
771
-
772
- /**
773
- * @ngdoc function
774
- * @name ui.router.util.type:UrlMatcher#exec
775
- * @methodOf ui.router.util.type:UrlMatcher
776
- *
777
- * @description
778
- * Tests the specified path against this matcher, and returns an object containing the captured
779
- * parameter values, or null if the path does not match. The returned object contains the values
780
- * of any search parameters that are mentioned in the pattern, but their value may be null if
781
- * they are not present in `searchParams`. This means that search parameters are always treated
782
- * as optional.
783
- *
784
- * @example
785
- * ```
786
- * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', { x:'1', q:'hello' });
787
- * // returns { id:'bob', q:'hello', r:null }
788
- * ```
789
- *
790
- * @param {string} path The URL path to match, e.g. `$location.path()`.
791
- * @param {Object} searchParams URL search parameters, e.g. `$location.search()`.
792
- * @returns {Object} The captured parameter values.
793
- */
794
- UrlMatcher.prototype.exec = function (path, searchParams) {
795
- var m = this.regexp.exec(path);
796
- if (!m) return null;
797
-
798
- var params = this.params, nTotal = params.length,
799
- nPath = this.segments.length-1,
800
- values = {}, i;
801
-
802
- if (nPath !== m.length - 1) throw new Error("Unbalanced capture group in route '" + this.source + "'");
803
-
804
- for (i=0; i<nPath; i++) values[params[i]] = m[i+1];
805
- for (/**/; i<nTotal; i++) values[params[i]] = searchParams[params[i]];
806
-
807
- return values;
808
- };
809
-
810
- /**
811
- * @ngdoc function
812
- * @name ui.router.util.type:UrlMatcher#parameters
813
- * @methodOf ui.router.util.type:UrlMatcher
814
- *
815
- * @description
816
- * Returns the names of all path and search parameters of this pattern in an unspecified order.
817
- *
818
- * @returns {Array.<string>} An array of parameter names. Must be treated as read-only. If the
819
- * pattern has no parameters, an empty array is returned.
820
- */
821
- UrlMatcher.prototype.parameters = function () {
822
- return this.params;
823
- };
824
-
825
- /**
826
- * @ngdoc function
827
- * @name ui.router.util.type:UrlMatcher#format
828
- * @methodOf ui.router.util.type:UrlMatcher
829
- *
830
- * @description
831
- * Creates a URL that matches this pattern by substituting the specified values
832
- * for the path and search parameters. Null values for path parameters are
833
- * treated as empty strings.
834
- *
835
- * @example
836
- * ```
837
- * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });
838
- * // returns '/user/bob?q=yes'
839
- * ```
840
- *
841
- * @param {Object} values the values to substitute for the parameters in this pattern.
842
- * @returns {string} the formatted URL (path and optionally search part).
843
- */
844
- UrlMatcher.prototype.format = function (values) {
845
- var segments = this.segments, params = this.params;
846
- if (!values) return segments.join('');
847
-
848
- var nPath = segments.length-1, nTotal = params.length,
849
- result = segments[0], i, search, value;
850
-
851
- for (i=0; i<nPath; i++) {
852
- value = values[params[i]];
853
- // TODO: Maybe we should throw on null here? It's not really good style to use '' and null interchangeabley
854
- if (value != null) result += encodeURIComponent(value);
855
- result += segments[i+1];
856
- }
857
- for (/**/; i<nTotal; i++) {
858
- value = values[params[i]];
859
- if (value != null) {
860
- result += (search ? '&' : '?') + params[i] + '=' + encodeURIComponent(value);
861
- search = true;
862
- }
863
- }
864
-
865
- return result;
866
- };
867
-
868
-
869
-
870
- /**
871
- * @ngdoc object
872
- * @name ui.router.util.$urlMatcherFactory
873
- *
874
- * @description
875
- * Factory for {@link ui.router.util.type:UrlMatcher} instances. The factory is also available to providers
876
- * under the name `$urlMatcherFactoryProvider`.
877
- */
878
- function $UrlMatcherFactory() {
879
-
880
- /**
881
- * @ngdoc function
882
- * @name ui.router.util.$urlMatcherFactory#compile
883
- * @methodOf ui.router.util.$urlMatcherFactory
884
- *
885
- * @description
886
- * Creates a {@link ui.router.util.type:UrlMatcher} for the specified pattern.
887
- *
888
- * @param {string} pattern The URL pattern.
889
- * @returns {ui.router.util.type:UrlMatcher} The UrlMatcher.
890
- */
891
- this.compile = function (pattern) {
892
- return new UrlMatcher(pattern);
893
- };
894
-
895
- /**
896
- * @ngdoc function
897
- * @name ui.router.util.$urlMatcherFactory#isMatcher
898
- * @methodOf ui.router.util.$urlMatcherFactory
899
- *
900
- * @description
901
- * Returns true if the specified object is a UrlMatcher, or false otherwise.
902
- *
903
- * @param {Object} object The object to perform the type check against.
904
- * @returns {Boolean} Returns `true` if the object has the following functions: `exec`, `format`, and `concat`.
905
- */
906
- this.isMatcher = function (o) {
907
- return isObject(o) && isFunction(o.exec) && isFunction(o.format) && isFunction(o.concat);
908
- };
909
-
910
- /* No need to document $get, since it returns this */
911
- this.$get = function () {
912
- return this;
913
- };
914
- }
915
-
916
- // Register as a provider so it's available to other providers
917
- angular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory);
918
-
919
- /**
920
- * @ngdoc object
921
- * @name ui.router.router.$urlRouterProvider
922
- *
923
- * @requires ui.router.util.$urlMatcherFactoryProvider
924
- *
925
- * @description
926
- * `$urlRouterProvider` has the responsibility of watching `$location`.
927
- * When `$location` changes it runs through a list of rules one by one until a
928
- * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify
929
- * a url in a state configuration. All urls are compiled into a UrlMatcher object.
930
- *
931
- * There are several methods on `$urlRouterProvider` that make it useful to use directly
932
- * in your module config.
933
- */
934
- $UrlRouterProvider.$inject = ['$urlMatcherFactoryProvider'];
935
- function $UrlRouterProvider( $urlMatcherFactory) {
936
- var rules = [],
937
- otherwise = null;
938
-
939
- // Returns a string that is a prefix of all strings matching the RegExp
940
- function regExpPrefix(re) {
941
- var prefix = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(re.source);
942
- return (prefix != null) ? prefix[1].replace(/\\(.)/g, "$1") : '';
943
- }
944
-
945
- // Interpolates matched values into a String.replace()-style pattern
946
- function interpolate(pattern, match) {
947
- return pattern.replace(/\$(\$|\d{1,2})/, function (m, what) {
948
- return match[what === '$' ? 0 : Number(what)];
949
- });
950
- }
951
-
952
- /**
953
- * @ngdoc function
954
- * @name ui.router.router.$urlRouterProvider#rule
955
- * @methodOf ui.router.router.$urlRouterProvider
956
- *
957
- * @description
958
- * Defines rules that are used by `$urlRouterProvider to find matches for
959
- * specific URLs.
960
- *
961
- * @example
962
- * <pre>
963
- * var app = angular.module('app', ['ui.router.router']);
964
- *
965
- * app.config(function ($urlRouterProvider) {
966
- * // Here's an example of how you might allow case insensitive urls
967
- * $urlRouterProvider.rule(function ($injector, $location) {
968
- * var path = $location.path(),
969
- * normalized = path.toLowerCase();
970
- *
971
- * if (path !== normalized) {
972
- * return normalized;
973
- * }
974
- * });
975
- * });
976
- * </pre>
977
- *
978
- * @param {object} rule Handler function that takes `$injector` and `$location`
979
- * services as arguments. You can use them to return a valid path as a string.
980
- *
981
- * @return {object} $urlRouterProvider - $urlRouterProvider instance
982
- */
983
- this.rule =
984
- function (rule) {
985
- if (!isFunction(rule)) throw new Error("'rule' must be a function");
986
- rules.push(rule);
987
- return this;
988
- };
989
-
990
- /**
991
- * @ngdoc object
992
- * @name ui.router.router.$urlRouterProvider#otherwise
993
- * @methodOf ui.router.router.$urlRouterProvider
994
- *
995
- * @description
996
- * Defines a path that is used when an invalied route is requested.
997
- *
998
- * @example
999
- * <pre>
1000
- * var app = angular.module('app', ['ui.router.router']);
1001
- *
1002
- * app.config(function ($urlRouterProvider) {
1003
- * // if the path doesn't match any of the urls you configured
1004
- * // otherwise will take care of routing the user to the
1005
- * // specified url
1006
- * $urlRouterProvider.otherwise('/index');
1007
- *
1008
- * // Example of using function rule as param
1009
- * $urlRouterProvider.otherwise(function ($injector, $location) {
1010
- * ...
1011
- * });
1012
- * });
1013
- * </pre>
1014
- *
1015
- * @param {string|object} rule The url path you want to redirect to or a function
1016
- * rule that returns the url path. The function version is passed two params:
1017
- * `$injector` and `$location` services.
1018
- *
1019
- * @return {object} $urlRouterProvider - $urlRouterProvider instance
1020
- */
1021
- this.otherwise =
1022
- function (rule) {
1023
- if (isString(rule)) {
1024
- var redirect = rule;
1025
- rule = function () { return redirect; };
1026
- }
1027
- else if (!isFunction(rule)) throw new Error("'rule' must be a function");
1028
- otherwise = rule;
1029
- return this;
1030
- };
1031
-
1032
-
1033
- function handleIfMatch($injector, handler, match) {
1034
- if (!match) return false;
1035
- var result = $injector.invoke(handler, handler, { $match: match });
1036
- return isDefined(result) ? result : true;
1037
- }
1038
-
1039
- /**
1040
- * @ngdoc function
1041
- * @name ui.router.router.$urlRouterProvider#when
1042
- * @methodOf ui.router.router.$urlRouterProvider
1043
- *
1044
- * @description
1045
- * Registers a handler for a given url matching. if handle is a string, it is
1046
- * treated as a redirect, and is interpolated according to the syyntax of match
1047
- * (i.e. like String.replace() for RegExp, or like a UrlMatcher pattern otherwise).
1048
- *
1049
- * If the handler is a function, it is injectable. It gets invoked if `$location`
1050
- * matches. You have the option of inject the match object as `$match`.
1051
- *
1052
- * The handler can return
1053
- *
1054
- * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter`
1055
- * will continue trying to find another one that matches.
1056
- * - **string** which is treated as a redirect and passed to `$location.url()`
1057
- * - **void** or any **truthy** value tells `$urlRouter` that the url was handled.
1058
- *
1059
- * @example
1060
- * <pre>
1061
- * var app = angular.module('app', ['ui.router.router']);
1062
- *
1063
- * app.config(function ($urlRouterProvider) {
1064
- * $urlRouterProvider.when($state.url, function ($match, $stateParams) {
1065
- * if ($state.$current.navigable !== state ||
1066
- * !equalForKeys($match, $stateParams) {
1067
- * $state.transitionTo(state, $match, false);
1068
- * }
1069
- * });
1070
- * });
1071
- * </pre>
1072
- *
1073
- * @param {string|object} what The incoming path that you want to redirect.
1074
- * @param {string|object} handler The path you want to redirect your user to.
1075
- */
1076
- this.when =
1077
- function (what, handler) {
1078
- var redirect, handlerIsString = isString(handler);
1079
- if (isString(what)) what = $urlMatcherFactory.compile(what);
1080
-
1081
- if (!handlerIsString && !isFunction(handler) && !isArray(handler))
1082
- throw new Error("invalid 'handler' in when()");
1083
-
1084
- var strategies = {
1085
- matcher: function (what, handler) {
1086
- if (handlerIsString) {
1087
- redirect = $urlMatcherFactory.compile(handler);
1088
- handler = ['$match', function ($match) { return redirect.format($match); }];
1089
- }
1090
- return extend(function ($injector, $location) {
1091
- return handleIfMatch($injector, handler, what.exec($location.path(), $location.search()));
1092
- }, {
1093
- prefix: isString(what.prefix) ? what.prefix : ''
1094
- });
1095
- },
1096
- regex: function (what, handler) {
1097
- if (what.global || what.sticky) throw new Error("when() RegExp must not be global or sticky");
1098
-
1099
- if (handlerIsString) {
1100
- redirect = handler;
1101
- handler = ['$match', function ($match) { return interpolate(redirect, $match); }];
1102
- }
1103
- return extend(function ($injector, $location) {
1104
- return handleIfMatch($injector, handler, what.exec($location.path()));
1105
- }, {
1106
- prefix: regExpPrefix(what)
1107
- });
1108
- }
1109
- };
1110
-
1111
- var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp };
1112
-
1113
- for (var n in check) {
1114
- if (check[n]) {
1115
- return this.rule(strategies[n](what, handler));
1116
- }
1117
- }
1118
-
1119
- throw new Error("invalid 'what' in when()");
1120
- };
1121
-
1122
- /**
1123
- * @ngdoc object
1124
- * @name ui.router.router.$urlRouter
1125
- *
1126
- * @requires $location
1127
- * @requires $rootScope
1128
- * @requires $injector
1129
- *
1130
- * @description
1131
- *
1132
- */
1133
- this.$get =
1134
- [ '$location', '$rootScope', '$injector',
1135
- function ($location, $rootScope, $injector) {
1136
- // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree
1137
- function update(evt) {
1138
- if (evt && evt.defaultPrevented) return;
1139
- function check(rule) {
1140
- var handled = rule($injector, $location);
1141
- if (handled) {
1142
- if (isString(handled)) $location.replace().url(handled);
1143
- return true;
1144
- }
1145
- return false;
1146
- }
1147
- var n=rules.length, i;
1148
- for (i=0; i<n; i++) {
1149
- if (check(rules[i])) return;
1150
- }
1151
- // always check otherwise last to allow dynamic updates to the set of rules
1152
- if (otherwise) check(otherwise);
1153
- }
1154
-
1155
- $rootScope.$on('$locationChangeSuccess', update);
1156
-
1157
- return {
1158
- /**
1159
- * @ngdoc function
1160
- * @name ui.router.router.$urlRouter#sync
1161
- * @methodOf ui.router.router.$urlRouter
1162
- *
1163
- * @description
1164
- * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`.
1165
- * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event,
1166
- * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed
1167
- * with the transition by calling `$urlRouter.sync()`.
1168
- *
1169
- * @example
1170
- * <pre>
1171
- * angular.module('app', ['ui.router']);
1172
- * .run(function($rootScope, $urlRouter) {
1173
- * $rootScope.$on('$locationChangeSuccess', function(evt) {
1174
- * // Halt state change from even starting
1175
- * evt.preventDefault();
1176
- * // Perform custom logic
1177
- * var meetsRequirement = ...
1178
- * // Continue with the update and state transition if logic allows
1179
- * if (meetsRequirement) $urlRouter.sync();
1180
- * });
1181
- * });
1182
- * </pre>
1183
- */
1184
- sync: function () {
1185
- update();
1186
- }
1187
- };
1188
- }];
1189
- }
1190
-
1191
- angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);
1192
-
1193
- /**
1194
- * @ngdoc object
1195
- * @name ui.router.state.$stateProvider
1196
- *
1197
- * @requires ui.router.router.$urlRouterProvider
1198
- * @requires ui.router.util.$urlMatcherFactoryProvider
1199
- * @requires $locationProvider
1200
- *
1201
- * @description
1202
- * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely
1203
- * on state.
1204
- *
1205
- * A state corresponds to a "place" in the application in terms of the overall UI and
1206
- * navigation. A state describes (via the controller / template / view properties) what
1207
- * the UI looks like and does at that place.
1208
- *
1209
- * States often have things in common, and the primary way of factoring out these
1210
- * commonalities in this model is via the state hierarchy, i.e. parent/child states aka
1211
- * nested states.
1212
- *
1213
- * The `$stateProvider` provides interfaces to declare these states for your app.
1214
- */
1215
- $StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider', '$locationProvider'];
1216
- function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $locationProvider) {
1217
-
1218
- var root, states = {}, $state, queue = {}, abstractKey = 'abstract';
1219
-
1220
- // Builds state properties from definition passed to registerState()
1221
- var stateBuilder = {
1222
-
1223
- // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined.
1224
- // state.children = [];
1225
- // if (parent) parent.children.push(state);
1226
- parent: function(state) {
1227
- if (isDefined(state.parent) && state.parent) return findState(state.parent);
1228
- // regex matches any valid composite state name
1229
- // would match "contact.list" but not "contacts"
1230
- var compositeName = /^(.+)\.[^.]+$/.exec(state.name);
1231
- return compositeName ? findState(compositeName[1]) : root;
1232
- },
1233
-
1234
- // inherit 'data' from parent and override by own values (if any)
1235
- data: function(state) {
1236
- if (state.parent && state.parent.data) {
1237
- state.data = state.self.data = extend({}, state.parent.data, state.data);
1238
- }
1239
- return state.data;
1240
- },
1241
-
1242
- // Build a URLMatcher if necessary, either via a relative or absolute URL
1243
- url: function(state) {
1244
- var url = state.url;
1245
-
1246
- if (isString(url)) {
1247
- if (url.charAt(0) == '^') {
1248
- return $urlMatcherFactory.compile(url.substring(1));
1249
- }
1250
- return (state.parent.navigable || root).url.concat(url);
1251
- }
1252
-
1253
- if ($urlMatcherFactory.isMatcher(url) || url == null) {
1254
- return url;
1255
- }
1256
- throw new Error("Invalid url '" + url + "' in state '" + state + "'");
1257
- },
1258
-
1259
- // Keep track of the closest ancestor state that has a URL (i.e. is navigable)
1260
- navigable: function(state) {
1261
- return state.url ? state : (state.parent ? state.parent.navigable : null);
1262
- },
1263
-
1264
- // Derive parameters for this state and ensure they're a super-set of parent's parameters
1265
- params: function(state) {
1266
- if (!state.params) {
1267
- return state.url ? state.url.parameters() : state.parent.params;
1268
- }
1269
- if (!isArray(state.params)) throw new Error("Invalid params in state '" + state + "'");
1270
- if (state.url) throw new Error("Both params and url specicified in state '" + state + "'");
1271
- return state.params;
1272
- },
1273
-
1274
- // If there is no explicit multi-view configuration, make one up so we don't have
1275
- // to handle both cases in the view directive later. Note that having an explicit
1276
- // 'views' property will mean the default unnamed view properties are ignored. This
1277
- // is also a good time to resolve view names to absolute names, so everything is a
1278
- // straight lookup at link time.
1279
- views: function(state) {
1280
- var views = {};
1281
-
1282
- forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) {
1283
- if (name.indexOf('@') < 0) name += '@' + state.parent.name;
1284
- views[name] = view;
1285
- });
1286
- return views;
1287
- },
1288
-
1289
- ownParams: function(state) {
1290
- if (!state.parent) {
1291
- return state.params;
1292
- }
1293
- var paramNames = {}; forEach(state.params, function (p) { paramNames[p] = true; });
1294
-
1295
- forEach(state.parent.params, function (p) {
1296
- if (!paramNames[p]) {
1297
- throw new Error("Missing required parameter '" + p + "' in state '" + state.name + "'");
1298
- }
1299
- paramNames[p] = false;
1300
- });
1301
- var ownParams = [];
1302
-
1303
- forEach(paramNames, function (own, p) {
1304
- if (own) ownParams.push(p);
1305
- });
1306
- return ownParams;
1307
- },
1308
-
1309
- // Keep a full path from the root down to this state as this is needed for state activation.
1310
- path: function(state) {
1311
- return state.parent ? state.parent.path.concat(state) : []; // exclude root from path
1312
- },
1313
-
1314
- // Speed up $state.contains() as it's used a lot
1315
- includes: function(state) {
1316
- var includes = state.parent ? extend({}, state.parent.includes) : {};
1317
- includes[state.name] = true;
1318
- return includes;
1319
- },
1320
-
1321
- $delegates: {}
1322
- };
1323
-
1324
- function isRelative(stateName) {
1325
- return stateName.indexOf(".") === 0 || stateName.indexOf("^") === 0;
1326
- }
1327
-
1328
- function findState(stateOrName, base) {
1329
- var isStr = isString(stateOrName),
1330
- name = isStr ? stateOrName : stateOrName.name,
1331
- path = isRelative(name);
1332
-
1333
- if (path) {
1334
- if (!base) throw new Error("No reference point given for path '" + name + "'");
1335
- var rel = name.split("."), i = 0, pathLength = rel.length, current = base;
1336
-
1337
- for (; i < pathLength; i++) {
1338
- if (rel[i] === "" && i === 0) {
1339
- current = base;
1340
- continue;
1341
- }
1342
- if (rel[i] === "^") {
1343
- if (!current.parent) throw new Error("Path '" + name + "' not valid for state '" + base.name + "'");
1344
- current = current.parent;
1345
- continue;
1346
- }
1347
- break;
1348
- }
1349
- rel = rel.slice(i).join(".");
1350
- name = current.name + (current.name && rel ? "." : "") + rel;
1351
- }
1352
- var state = states[name];
1353
-
1354
- if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {
1355
- return state;
1356
- }
1357
- return undefined;
1358
- }
1359
-
1360
- function queueState(parentName, state) {
1361
- if (!queue[parentName]) {
1362
- queue[parentName] = [];
1363
- }
1364
- queue[parentName].push(state);
1365
- }
1366
-
1367
- function registerState(state) {
1368
- // Wrap a new object around the state so we can store our private details easily.
1369
- state = inherit(state, {
1370
- self: state,
1371
- resolve: state.resolve || {},
1372
- toString: function() { return this.name; }
1373
- });
1374
-
1375
- var name = state.name;
1376
- if (!isString(name) || name.indexOf('@') >= 0) throw new Error("State must have a valid name");
1377
- if (states.hasOwnProperty(name)) throw new Error("State '" + name + "'' is already defined");
1378
-
1379
- // Get parent name
1380
- var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))
1381
- : (isString(state.parent)) ? state.parent
1382
- : '';
1383
-
1384
- // If parent is not registered yet, add state to queue and register later
1385
- if (parentName && !states[parentName]) {
1386
- return queueState(parentName, state.self);
1387
- }
1388
-
1389
- for (var key in stateBuilder) {
1390
- if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]);
1391
- }
1392
- states[name] = state;
1393
-
1394
- // Register the state in the global state list and with $urlRouter if necessary.
1395
- if (!state[abstractKey] && state.url) {
1396
- $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {
1397
- if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {
1398
- $state.transitionTo(state, $match, { location: false });
1399
- }
1400
- }]);
1401
- }
1402
-
1403
- // Register any queued children
1404
- if (queue[name]) {
1405
- for (var i = 0; i < queue[name].length; i++) {
1406
- registerState(queue[name][i]);
1407
- }
1408
- }
1409
-
1410
- return state;
1411
- }
1412
-
1413
- // Checks text to see if it looks like a glob.
1414
- function isGlob (text) {
1415
- return text.indexOf('*') > -1;
1416
- }
1417
-
1418
- // Returns true if glob matches current $state name.
1419
- function doesStateMatchGlob (glob) {
1420
- var globSegments = glob.split('.'),
1421
- segments = $state.$current.name.split('.');
1422
-
1423
- //match greedy starts
1424
- if (globSegments[0] === '**') {
1425
- segments = segments.slice(segments.indexOf(globSegments[1]));
1426
- segments.unshift('**');
1427
- }
1428
- //match greedy ends
1429
- if (globSegments[globSegments.length - 1] === '**') {
1430
- segments.splice(segments.indexOf(globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE);
1431
- segments.push('**');
1432
- }
1433
-
1434
- if (globSegments.length != segments.length) {
1435
- return false;
1436
- }
1437
-
1438
- //match single stars
1439
- for (var i = 0, l = globSegments.length; i < l; i++) {
1440
- if (globSegments[i] === '*') {
1441
- segments[i] = '*';
1442
- }
1443
- }
1444
-
1445
- return segments.join('') === globSegments.join('');
1446
- }
1447
-
1448
-
1449
- // Implicit root state that is always active
1450
- root = registerState({
1451
- name: '',
1452
- url: '^',
1453
- views: null,
1454
- 'abstract': true
1455
- });
1456
- root.navigable = null;
1457
-
1458
-
1459
- /**
1460
- * @ngdoc function
1461
- * @name ui.router.state.$stateProvider#decorator
1462
- * @methodOf ui.router.state.$stateProvider
1463
- *
1464
- * @description
1465
- * Allows you to extend (carefully) or override (at your own peril) the
1466
- * `stateBuilder` object used internally by `$stateProvider`. This can be used
1467
- * to add custom functionality to ui-router, for example inferring templateUrl
1468
- * based on the state name.
1469
- *
1470
- * When passing only a name, it returns the current (original or decorated) builder
1471
- * function that matches `name`.
1472
- *
1473
- * The builder functions that can be decorated are listed below. Though not all
1474
- * necessarily have a good use case for decoration, that is up to you to decide.
1475
- *
1476
- * In addition, users can attach custom decorators, which will generate new
1477
- * properties within the state's internal definition. There is currently no clear
1478
- * use-case for this beyond accessing internal states (i.e. $state.$current),
1479
- * however, expect this to become increasingly relevant as we introduce additional
1480
- * meta-programming features.
1481
- *
1482
- * **Warning**: Decorators should not be interdependent because the order of
1483
- * execution of the builder functions in non-deterministic. Builder functions
1484
- * should only be dependent on the state definition object and super function.
1485
- *
1486
- *
1487
- * Existing builder functions and current return values:
1488
- *
1489
- * - **parent** `{object}` - returns the parent state object.
1490
- * - **data** `{object}` - returns state data, including any inherited data that is not
1491
- * overridden by own values (if any).
1492
- * - **url** `{object}` - returns a {link ui.router.util.type:UrlMatcher} or null.
1493
- * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is
1494
- * navigable).
1495
- * - **params** `{object}` - returns an array of state params that are ensured to
1496
- * be a super-set of parent's params.
1497
- * - **views** `{object}` - returns a views object where each key is an absolute view
1498
- * name (i.e. "viewName@stateName") and each value is the config object
1499
- * (template, controller) for the view. Even when you don't use the views object
1500
- * explicitly on a state config, one is still created for you internally.
1501
- * So by decorating this builder function you have access to decorating template
1502
- * and controller properties.
1503
- * - **ownParams** `{object}` - returns an array of params that belong to the state,
1504
- * not including any params defined by ancestor states.
1505
- * - **path** `{string}` - returns the full path from the root down to this state.
1506
- * Needed for state activation.
1507
- * - **includes** `{object}` - returns an object that includes every state that
1508
- * would pass a '$state.includes()' test.
1509
- *
1510
- * @example
1511
- * <pre>
1512
- * // Override the internal 'views' builder with a function that takes the state
1513
- * // definition, and a reference to the internal function being overridden:
1514
- * $stateProvider.decorator('views', function ($state, parent) {
1515
- * var result = {},
1516
- * views = parent(state);
1517
- *
1518
- * angular.forEach(view, function (config, name) {
1519
- * var autoName = (state.name + '.' + name).replace('.', '/');
1520
- * config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';
1521
- * result[name] = config;
1522
- * });
1523
- * return result;
1524
- * });
1525
- *
1526
- * $stateProvider.state('home', {
1527
- * views: {
1528
- * 'contact.list': { controller: 'ListController' },
1529
- * 'contact.item': { controller: 'ItemController' }
1530
- * }
1531
- * });
1532
- *
1533
- * // ...
1534
- *
1535
- * $state.go('home');
1536
- * // Auto-populates list and item views with /partials/home/contact/list.html,
1537
- * // and /partials/home/contact/item.html, respectively.
1538
- * </pre>
1539
- *
1540
- * @param {string} name The name of the builder function to decorate.
1541
- * @param {object} func A function that is responsible for decorating the original
1542
- * builder function. The function receives two parameters:
1543
- *
1544
- * - `{object}` - state - The state config object.
1545
- * - `{object}` - super - The original builder function.
1546
- *
1547
- * @return {object} $stateProvider - $stateProvider instance
1548
- */
1549
- this.decorator = decorator;
1550
- function decorator(name, func) {
1551
- /*jshint validthis: true */
1552
- if (isString(name) && !isDefined(func)) {
1553
- return stateBuilder[name];
1554
- }
1555
- if (!isFunction(func) || !isString(name)) {
1556
- return this;
1557
- }
1558
- if (stateBuilder[name] && !stateBuilder.$delegates[name]) {
1559
- stateBuilder.$delegates[name] = stateBuilder[name];
1560
- }
1561
- stateBuilder[name] = func;
1562
- return this;
1563
- }
1564
-
1565
- /**
1566
- * @ngdoc function
1567
- * @name ui.router.state.$stateProvider#state
1568
- * @methodOf ui.router.state.$stateProvider
1569
- *
1570
- * @description
1571
- * Registers a state configuration under a given state name. The stateConfig object
1572
- * has the following acceptable properties.
1573
- *
1574
- * <a id='template'></a>
1575
- *
1576
- * - **`template`** - {string|function=} - html template as a string or a function that returns
1577
- * an html template as a string which should be used by the uiView directives. This property
1578
- * takes precedence over templateUrl.
1579
- *
1580
- * If `template` is a function, it will be called with the following parameters:
1581
- *
1582
- * - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by
1583
- * applying the current state
1584
- *
1585
- * <a id='templateUrl'></a>
1586
- *
1587
- * - **`templateUrl`** - {string|function=} - path or function that returns a path to an html
1588
- * template that should be used by uiView.
1589
- *
1590
- * If `templateUrl` is a function, it will be called with the following parameters:
1591
- *
1592
- * - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by
1593
- * applying the current state
1594
- *
1595
- * <a id='templateProvider'></a>
1596
- *
1597
- * - **`templateProvider`** - {function=} - Provider function that returns HTML content
1598
- * string.
1599
- *
1600
- * <a id='controller'></a>
1601
- *
1602
- * - **`controller`** - {string|function=} - Controller fn that should be associated with newly
1603
- * related scope or the name of a registered controller if passed as a string.
1604
- *
1605
- * <a id='controllerProvider'></a>
1606
- *
1607
- * - **`controllerProvider`** - {function=} - Injectable provider function that returns
1608
- * the actual controller or string.
1609
- *
1610
- * <a id='controllerAs'></a>
1611
- *
1612
- * - **`controllerAs`** – {string=} – A controller alias name. If present the controller will be
1613
- * published to scope under the controllerAs name.
1614
- *
1615
- * <a id='resolve'></a>
1616
- *
1617
- * - **`resolve`** - {object.&lt;string, function&gt;=} - An optional map of dependencies which
1618
- * should be injected into the controller. If any of these dependencies are promises,
1619
- * the router will wait for them all to be resolved or one to be rejected before the
1620
- * controller is instantiated. If all the promises are resolved successfully, the values
1621
- * of the resolved promises are injected and $stateChangeSuccess event is fired. If any
1622
- * of the promises are rejected the $stateChangeError event is fired. The map object is:
1623
- *
1624
- * - key - {string}: name of dependency to be injected into controller
1625
- * - factory - {string|function}: If string then it is alias for service. Otherwise if function,
1626
- * it is injected and return value it treated as dependency. If result is a promise, it is
1627
- * resolved before its value is injected into controller.
1628
- *
1629
- * <a id='url'></a>
1630
- *
1631
- * - **`url`** - {string=} - A url with optional parameters. When a state is navigated or
1632
- * transitioned to, the `$stateParams` service will be populated with any
1633
- * parameters that were passed.
1634
- *
1635
- * <a id='params'></a>
1636
- *
1637
- * - **`params`** - {object=} - An array of parameter names or regular expressions. Only
1638
- * use this within a state if you are not using url. Otherwise you can specify your
1639
- * parameters within the url. When a state is navigated or transitioned to, the
1640
- * $stateParams service will be populated with any parameters that were passed.
1641
- *
1642
- * <a id='views'></a>
1643
- *
1644
- * - **`views`** - {object=} - Use the views property to set up multiple views or to target views
1645
- * manually/explicitly.
1646
- *
1647
- * <a id='abstract'></a>
1648
- *
1649
- * - **`abstract`** - {boolean=} - An abstract state will never be directly activated,
1650
- * but can provide inherited properties to its common children states.
1651
- *
1652
- * <a id='onEnter'></a>
1653
- *
1654
- * - **`onEnter`** - {object=} - Callback function for when a state is entered. Good way
1655
- * to trigger an action or dispatch an event, such as opening a dialog.
1656
- *
1657
- * <a id='onExit'></a>
1658
- *
1659
- * - **`onExit`** - {object=} - Callback function for when a state is exited. Good way to
1660
- * trigger an action or dispatch an event, such as opening a dialog.
1661
- *
1662
- * <a id='reloadOnSearch'></a>
1663
- *
1664
- * - **`reloadOnSearch = true`** - {boolean=} - If `false`, will not retrigger the same state
1665
- * just because a search/query parameter has changed (via $location.search() or $location.hash()).
1666
- * Useful for when you'd like to modify $location.search() without triggering a reload.
1667
- *
1668
- * <a id='data'></a>
1669
- *
1670
- * - **`data`** - {object=} - Arbitrary data object, useful for custom configuration.
1671
- *
1672
- * @example
1673
- * <pre>
1674
- * // Some state name examples
1675
- *
1676
- * // stateName can be a single top-level name (must be unique).
1677
- * $stateProvider.state("home", {});
1678
- *
1679
- * // Or it can be a nested state name. This state is a child of the
1680
- * // above "home" state.
1681
- * $stateProvider.state("home.newest", {});
1682
- *
1683
- * // Nest states as deeply as needed.
1684
- * $stateProvider.state("home.newest.abc.xyz.inception", {});
1685
- *
1686
- * // state() returns $stateProvider, so you can chain state declarations.
1687
- * $stateProvider
1688
- * .state("home", {})
1689
- * .state("about", {})
1690
- * .state("contacts", {});
1691
- * </pre>
1692
- *
1693
- * @param {string} name A unique state name, e.g. "home", "about", "contacts".
1694
- * To create a parent/child state use a dot, e.g. "about.sales", "home.newest".
1695
- * @param {object} definition State configuration object.
1696
- */
1697
- this.state = state;
1698
- function state(name, definition) {
1699
- /*jshint validthis: true */
1700
- if (isObject(name)) definition = name;
1701
- else definition.name = name;
1702
- registerState(definition);
1703
- return this;
1704
- }
1705
-
1706
- /**
1707
- * @ngdoc object
1708
- * @name ui.router.state.$state
1709
- *
1710
- * @requires $rootScope
1711
- * @requires $q
1712
- * @requires ui.router.state.$view
1713
- * @requires $injector
1714
- * @requires ui.router.util.$resolve
1715
- * @requires ui.router.state.$stateParams
1716
- *
1717
- * @property {object} params A param object, e.g. {sectionId: section.id)}, that
1718
- * you'd like to test against the current active state.
1719
- * @property {object} current A reference to the state's config object. However
1720
- * you passed it in. Useful for accessing custom data.
1721
- * @property {object} transition Currently pending transition. A promise that'll
1722
- * resolve or reject.
1723
- *
1724
- * @description
1725
- * `$state` service is responsible for representing states as well as transitioning
1726
- * between them. It also provides interfaces to ask for current state or even states
1727
- * you're coming from.
1728
- */
1729
- // $urlRouter is injected just to ensure it gets instantiated
1730
- this.$get = $get;
1731
- $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$location', '$urlRouter', '$browser'];
1732
- function $get( $rootScope, $q, $view, $injector, $resolve, $stateParams, $location, $urlRouter, $browser) {
1733
-
1734
- var TransitionSuperseded = $q.reject(new Error('transition superseded'));
1735
- var TransitionPrevented = $q.reject(new Error('transition prevented'));
1736
- var TransitionAborted = $q.reject(new Error('transition aborted'));
1737
- var TransitionFailed = $q.reject(new Error('transition failed'));
1738
- var currentLocation = $location.url();
1739
- var baseHref = $browser.baseHref();
1740
-
1741
- function syncUrl() {
1742
- if ($location.url() !== currentLocation) {
1743
- $location.url(currentLocation);
1744
- $location.replace();
1745
- }
1746
- }
1747
-
1748
- root.locals = { resolve: null, globals: { $stateParams: {} } };
1749
- $state = {
1750
- params: {},
1751
- current: root.self,
1752
- $current: root,
1753
- transition: null
1754
- };
1755
-
1756
- /**
1757
- * @ngdoc function
1758
- * @name ui.router.state.$state#reload
1759
- * @methodOf ui.router.state.$state
1760
- *
1761
- * @description
1762
- * A method that force reloads the current state. All resolves are re-resolved, events are not re-fired,
1763
- * and controllers reinstantiated (bug with controllers reinstantiating right now, fixing soon).
1764
- *
1765
- * @example
1766
- * <pre>
1767
- * var app angular.module('app', ['ui.router']);
1768
- *
1769
- * app.controller('ctrl', function ($scope, $state) {
1770
- * $scope.reload = function(){
1771
- * $state.reload();
1772
- * }
1773
- * });
1774
- * </pre>
1775
- *
1776
- * `reload()` is just an alias for:
1777
- * <pre>
1778
- * $state.transitionTo($state.current, $stateParams, {
1779
- * reload: true, inherit: false, notify: false
1780
- * });
1781
- * </pre>
1782
- */
1783
- $state.reload = function reload() {
1784
- $state.transitionTo($state.current, $stateParams, { reload: true, inherit: false, notify: false });
1785
- };
1786
-
1787
- /**
1788
- * @ngdoc function
1789
- * @name ui.router.state.$state#go
1790
- * @methodOf ui.router.state.$state
1791
- *
1792
- * @description
1793
- * Convenience method for transitioning to a new state. `$state.go` calls
1794
- * `$state.transitionTo` internally but automatically sets options to
1795
- * `{ location: true, inherit: true, relative: $state.$current, notify: true }`.
1796
- * This allows you to easily use an absolute or relative to path and specify
1797
- * only the parameters you'd like to update (while letting unspecified parameters
1798
- * inherit from the currently active ancestor states).
1799
- *
1800
- * @example
1801
- * <pre>
1802
- * var app = angular.module('app', ['ui.router']);
1803
- *
1804
- * app.controller('ctrl', function ($scope, $state) {
1805
- * $scope.changeState = function () {
1806
- * $state.go('contact.detail');
1807
- * };
1808
- * });
1809
- * </pre>
1810
- * <img src='../ngdoc_assets/StateGoExamples.png'/>
1811
- *
1812
- * @param {string} to Absolute state name or relative state path. Some examples:
1813
- *
1814
- * - `$state.go('contact.detail')` - will go to the `contact.detail` state
1815
- * - `$state.go('^')` - will go to a parent state
1816
- * - `$state.go('^.sibling')` - will go to a sibling state
1817
- * - `$state.go('.child.grandchild')` - will go to grandchild state
1818
- *
1819
- * @param {object=} params A map of the parameters that will be sent to the state,
1820
- * will populate $stateParams. Any parameters that are not specified will be inherited from currently
1821
- * defined parameters. This allows, for example, going to a sibling state that shares parameters
1822
- * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.
1823
- * transitioning to a sibling will get you the parameters for all parents, transitioning to a child
1824
- * will get you all current parameters, etc.
1825
- * @param {object=} options Options object. The options are:
1826
- *
1827
- * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`
1828
- * will not. If string, must be `"replace"`, which will update url and also replace last history record.
1829
- * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.
1830
- * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'),
1831
- * defines which state to be relative from.
1832
- * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.
1833
- * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params
1834
- * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd
1835
- * use this when you want to force a reload when *everything* is the same, including search params.
1836
- *
1837
- * @returns {promise} A promise representing the state of the new transition.
1838
- *
1839
- * Possible success values:
1840
- *
1841
- * - $state.current
1842
- *
1843
- * <br/>Possible rejection values:
1844
- *
1845
- * - 'transition superseded' - when a newer transition has been started after this one
1846
- * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener
1847
- * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or
1848
- * when a `$stateNotFound` `event.retry` promise errors.
1849
- * - 'transition failed' - when a state has been unsuccessfully found after 2 tries.
1850
- * - *resolve error* - when an error has occurred with a `resolve`
1851
- *
1852
- */
1853
- $state.go = function go(to, params, options) {
1854
- return this.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options));
1855
- };
1856
-
1857
- /**
1858
- * @ngdoc function
1859
- * @name ui.router.state.$state#transitionTo
1860
- * @methodOf ui.router.state.$state
1861
- *
1862
- * @description
1863
- * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go}
1864
- * uses `transitionTo` internally. `$state.go` is recommended in most situations.
1865
- *
1866
- * @example
1867
- * <pre>
1868
- * var app = angular.module('app', ['ui.router']);
1869
- *
1870
- * app.controller('ctrl', function ($scope, $state) {
1871
- * $scope.changeState = function () {
1872
- * $state.transitionTo('contact.detail');
1873
- * };
1874
- * });
1875
- * </pre>
1876
- *
1877
- * @param {string} to State name.
1878
- * @param {object=} toParams A map of the parameters that will be sent to the state,
1879
- * will populate $stateParams.
1880
- * @param {object=} options Options object. The options are:
1881
- *
1882
- * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`
1883
- * will not. If string, must be `"replace"`, which will update url and also replace last history record.
1884
- * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.
1885
- * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'),
1886
- * defines which state to be relative from.
1887
- * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.
1888
- * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params
1889
- * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd
1890
- * use this when you want to force a reload when *everything* is the same, including search params.
1891
- *
1892
- * @returns {promise} A promise representing the state of the new transition. See
1893
- * {@link ui.router.state.$state#methods_go $state.go}.
1894
- */
1895
- $state.transitionTo = function transitionTo(to, toParams, options) {
1896
- toParams = toParams || {};
1897
- options = extend({
1898
- location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false
1899
- }, options || {});
1900
-
1901
- var from = $state.$current, fromParams = $state.params, fromPath = from.path;
1902
- var evt, toState = findState(to, options.relative);
1903
-
1904
- if (!isDefined(toState)) {
1905
- // Broadcast not found event and abort the transition if prevented
1906
- var redirect = { to: to, toParams: toParams, options: options };
1907
-
1908
- /**
1909
- * @ngdoc event
1910
- * @name ui.router.state.$state#$stateNotFound
1911
- * @eventOf ui.router.state.$state
1912
- * @eventType broadcast on root scope
1913
- * @description
1914
- * Fired when a requested state **cannot be found** using the provided state name during transition.
1915
- * The event is broadcast allowing any handlers a single chance to deal with the error (usually by
1916
- * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler,
1917
- * you can see its three properties in the example. You can use `event.preventDefault()` to abort the
1918
- * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value.
1919
- *
1920
- * @param {Object} event Event object.
1921
- * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties.
1922
- * @param {State} fromState Current state object.
1923
- * @param {Object} fromParams Current state params.
1924
- *
1925
- * @example
1926
- *
1927
- * <pre>
1928
- * // somewhere, assume lazy.state has not been defined
1929
- * $state.go("lazy.state", {a:1, b:2}, {inherit:false});
1930
- *
1931
- * // somewhere else
1932
- * $scope.$on('$stateNotFound',
1933
- * function(event, unfoundState, fromState, fromParams){
1934
- * console.log(unfoundState.to); // "lazy.state"
1935
- * console.log(unfoundState.toParams); // {a:1, b:2}
1936
- * console.log(unfoundState.options); // {inherit:false} + default options
1937
- * })
1938
- * </pre>
1939
- */
1940
- evt = $rootScope.$broadcast('$stateNotFound', redirect, from.self, fromParams);
1941
- if (evt.defaultPrevented) {
1942
- syncUrl();
1943
- return TransitionAborted;
1944
- }
1945
-
1946
- // Allow the handler to return a promise to defer state lookup retry
1947
- if (evt.retry) {
1948
- if (options.$retry) {
1949
- syncUrl();
1950
- return TransitionFailed;
1951
- }
1952
- var retryTransition = $state.transition = $q.when(evt.retry);
1953
- retryTransition.then(function() {
1954
- if (retryTransition !== $state.transition) return TransitionSuperseded;
1955
- redirect.options.$retry = true;
1956
- return $state.transitionTo(redirect.to, redirect.toParams, redirect.options);
1957
- }, function() {
1958
- return TransitionAborted;
1959
- });
1960
- syncUrl();
1961
- return retryTransition;
1962
- }
1963
-
1964
- // Always retry once if the $stateNotFound was not prevented
1965
- // (handles either redirect changed or state lazy-definition)
1966
- to = redirect.to;
1967
- toParams = redirect.toParams;
1968
- options = redirect.options;
1969
- toState = findState(to, options.relative);
1970
- if (!isDefined(toState)) {
1971
- if (options.relative) throw new Error("Could not resolve '" + to + "' from state '" + options.relative + "'");
1972
- throw new Error("No such state '" + to + "'");
1973
- }
1974
- }
1975
- if (toState[abstractKey]) throw new Error("Cannot transition to abstract state '" + to + "'");
1976
- if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState);
1977
- to = toState;
1978
-
1979
- var toPath = to.path;
1980
-
1981
- // Starting from the root of the path, keep all levels that haven't changed
1982
- var keep, state, locals = root.locals, toLocals = [];
1983
- for (keep = 0, state = toPath[keep];
1984
- state && state === fromPath[keep] && equalForKeys(toParams, fromParams, state.ownParams) && !options.reload;
1985
- keep++, state = toPath[keep]) {
1986
- locals = toLocals[keep] = state.locals;
1987
- }
1988
-
1989
- // If we're going to the same state and all locals are kept, we've got nothing to do.
1990
- // But clear 'transition', as we still want to cancel any other pending transitions.
1991
- // TODO: We may not want to bump 'transition' if we're called from a location change that we've initiated ourselves,
1992
- // because we might accidentally abort a legitimate transition initiated from code?
1993
- if (shouldTriggerReload(to, from, locals, options) ) {
1994
- if ( to.self.reloadOnSearch !== false )
1995
- syncUrl();
1996
- $state.transition = null;
1997
- return $q.when($state.current);
1998
- }
1999
-
2000
- // Normalize/filter parameters before we pass them to event handlers etc.
2001
- toParams = normalize(to.params, toParams || {});
2002
-
2003
- // Broadcast start event and cancel the transition if requested
2004
- if (options.notify) {
2005
- /**
2006
- * @ngdoc event
2007
- * @name ui.router.state.$state#$stateChangeStart
2008
- * @eventOf ui.router.state.$state
2009
- * @eventType broadcast on root scope
2010
- * @description
2011
- * Fired when the state transition **begins**. You can use `event.preventDefault()`
2012
- * to prevent the transition from happening and then the transition promise will be
2013
- * rejected with a `'transition prevented'` value.
2014
- *
2015
- * @param {Object} event Event object.
2016
- * @param {State} toState The state being transitioned to.
2017
- * @param {Object} toParams The params supplied to the `toState`.
2018
- * @param {State} fromState The current state, pre-transition.
2019
- * @param {Object} fromParams The params supplied to the `fromState`.
2020
- *
2021
- * @example
2022
- *
2023
- * <pre>
2024
- * $rootScope.$on('$stateChangeStart',
2025
- * function(event, toState, toParams, fromState, fromParams){
2026
- * event.preventDefault();
2027
- * // transitionTo() promise will be rejected with
2028
- * // a 'transition prevented' error
2029
- * })
2030
- * </pre>
2031
- */
2032
- evt = $rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams);
2033
- if (evt.defaultPrevented) {
2034
- syncUrl();
2035
- return TransitionPrevented;
2036
- }
2037
- }
2038
-
2039
- // Resolve locals for the remaining states, but don't update any global state just
2040
- // yet -- if anything fails to resolve the current state needs to remain untouched.
2041
- // We also set up an inheritance chain for the locals here. This allows the view directive
2042
- // to quickly look up the correct definition for each view in the current state. Even
2043
- // though we create the locals object itself outside resolveState(), it is initially
2044
- // empty and gets filled asynchronously. We need to keep track of the promise for the
2045
- // (fully resolved) current locals, and pass this down the chain.
2046
- var resolved = $q.when(locals);
2047
- for (var l=keep; l<toPath.length; l++, state=toPath[l]) {
2048
- locals = toLocals[l] = inherit(locals);
2049
- resolved = resolveState(state, toParams, state===to, resolved, locals);
2050
- }
2051
-
2052
- // Once everything is resolved, we are ready to perform the actual transition
2053
- // and return a promise for the new state. We also keep track of what the
2054
- // current promise is, so that we can detect overlapping transitions and
2055
- // keep only the outcome of the last transition.
2056
- var transition = $state.transition = resolved.then(function () {
2057
- var l, entering, exiting;
2058
-
2059
- if ($state.transition !== transition) return TransitionSuperseded;
2060
-
2061
- // Exit 'from' states not kept
2062
- for (l=fromPath.length-1; l>=keep; l--) {
2063
- exiting = fromPath[l];
2064
- if (exiting.self.onExit) {
2065
- $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals);
2066
- }
2067
- exiting.locals = null;
2068
- }
2069
-
2070
- // Enter 'to' states not kept
2071
- for (l=keep; l<toPath.length; l++) {
2072
- entering = toPath[l];
2073
- entering.locals = toLocals[l];
2074
- if (entering.self.onEnter) {
2075
- $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals);
2076
- }
2077
- }
2078
-
2079
- // Run it again, to catch any transitions in callbacks
2080
- if ($state.transition !== transition) return TransitionSuperseded;
2081
-
2082
- // Update globals in $state
2083
- $state.$current = to;
2084
- $state.current = to.self;
2085
- $state.params = toParams;
2086
- copy($state.params, $stateParams);
2087
- $state.transition = null;
2088
-
2089
- // Update $location
2090
- var toNav = to.navigable;
2091
- if (options.location && toNav) {
2092
- $location.url(toNav.url.format(toNav.locals.globals.$stateParams));
2093
-
2094
- if (options.location === 'replace') {
2095
- $location.replace();
2096
- }
2097
- }
2098
-
2099
- if (options.notify) {
2100
- /**
2101
- * @ngdoc event
2102
- * @name ui.router.state.$state#$stateChangeSuccess
2103
- * @eventOf ui.router.state.$state
2104
- * @eventType broadcast on root scope
2105
- * @description
2106
- * Fired once the state transition is **complete**.
2107
- *
2108
- * @param {Object} event Event object.
2109
- * @param {State} toState The state being transitioned to.
2110
- * @param {Object} toParams The params supplied to the `toState`.
2111
- * @param {State} fromState The current state, pre-transition.
2112
- * @param {Object} fromParams The params supplied to the `fromState`.
2113
- */
2114
- $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams);
2115
- }
2116
- currentLocation = $location.url();
2117
-
2118
- return $state.current;
2119
- }, function (error) {
2120
- if ($state.transition !== transition) return TransitionSuperseded;
2121
-
2122
- $state.transition = null;
2123
- /**
2124
- * @ngdoc event
2125
- * @name ui.router.state.$state#$stateChangeError
2126
- * @eventOf ui.router.state.$state
2127
- * @eventType broadcast on root scope
2128
- * @description
2129
- * Fired when an **error occurs** during transition. It's important to note that if you
2130
- * have any errors in your resolve functions (javascript errors, non-existent services, etc)
2131
- * they will not throw traditionally. You must listen for this $stateChangeError event to
2132
- * catch **ALL** errors.
2133
- *
2134
- * @param {Object} event Event object.
2135
- * @param {State} toState The state being transitioned to.
2136
- * @param {Object} toParams The params supplied to the `toState`.
2137
- * @param {State} fromState The current state, pre-transition.
2138
- * @param {Object} fromParams The params supplied to the `fromState`.
2139
- * @param {Error} error The resolve error object.
2140
- */
2141
- $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error);
2142
- syncUrl();
2143
-
2144
- return $q.reject(error);
2145
- });
2146
-
2147
- return transition;
2148
- };
2149
-
2150
- /**
2151
- * @ngdoc function
2152
- * @name ui.router.state.$state#is
2153
- * @methodOf ui.router.state.$state
2154
- *
2155
- * @description
2156
- * Similar to {@link ui.router.state.$state#methods_includes $state.includes},
2157
- * but only checks for the full state name. If params is supplied then it will be
2158
- * tested for strict equality against the current active params object, so all params
2159
- * must match with none missing and no extras.
2160
- *
2161
- * @example
2162
- * <pre>
2163
- * $state.is('contact.details.item'); // returns true
2164
- * $state.is(contactDetailItemStateObject); // returns true
2165
- *
2166
- * // everything else would return false
2167
- * </pre>
2168
- *
2169
- * @param {string|object} stateName The state name or state object you'd like to check.
2170
- * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like
2171
- * to test against the current active state.
2172
- * @returns {boolean} Returns true if it is the state.
2173
- */
2174
- $state.is = function is(stateOrName, params) {
2175
- var state = findState(stateOrName);
2176
-
2177
- if (!isDefined(state)) {
2178
- return undefined;
2179
- }
2180
-
2181
- if ($state.$current !== state) {
2182
- return false;
2183
- }
2184
-
2185
- return isDefined(params) && params !== null ? angular.equals($stateParams, params) : true;
2186
- };
2187
-
2188
- /**
2189
- * @ngdoc function
2190
- * @name ui.router.state.$state#includes
2191
- * @methodOf ui.router.state.$state
2192
- *
2193
- * @description
2194
- * A method to determine if the current active state is equal to or is the child of the
2195
- * state stateName. If any params are passed then they will be tested for a match as well.
2196
- * Not all the parameters need to be passed, just the ones you'd like to test for equality.
2197
- *
2198
- * @example
2199
- * <pre>
2200
- * $state.$current.name = 'contacts.details.item';
2201
- *
2202
- * $state.includes("contacts"); // returns true
2203
- * $state.includes("contacts.details"); // returns true
2204
- * $state.includes("contacts.details.item"); // returns true
2205
- * $state.includes("contacts.list"); // returns false
2206
- * $state.includes("about"); // returns false
2207
- * </pre>
2208
- *
2209
- * @description
2210
- * Basic globing patterns will also work.
2211
- *
2212
- * @example
2213
- * <pre>
2214
- * $state.$current.name = 'contacts.details.item.url';
2215
- *
2216
- * $state.includes("*.details.*.*"); // returns true
2217
- * $state.includes("*.details.**"); // returns true
2218
- * $state.includes("**.item.**"); // returns true
2219
- * $state.includes("*.details.item.url"); // returns true
2220
- * $state.includes("*.details.*.url"); // returns true
2221
- * $state.includes("*.details.*"); // returns false
2222
- * $state.includes("item.**"); // returns false
2223
- * </pre>
2224
- *
2225
- * @param {string} stateOrName A partial name to be searched for within the current state name.
2226
- * @param {object} params A param object, e.g. `{sectionId: section.id}`,
2227
- * that you'd like to test against the current active state.
2228
- * @returns {boolean} Returns true if it does include the state
2229
- */
2230
-
2231
- $state.includes = function includes(stateOrName, params) {
2232
- if (isString(stateOrName) && isGlob(stateOrName)) {
2233
- if (doesStateMatchGlob(stateOrName)) {
2234
- stateOrName = $state.$current.name;
2235
- } else {
2236
- return false;
2237
- }
2238
- }
2239
-
2240
- var state = findState(stateOrName);
2241
- if (!isDefined(state)) {
2242
- return undefined;
2243
- }
2244
-
2245
- if (!isDefined($state.$current.includes[state.name])) {
2246
- return false;
2247
- }
2248
-
2249
- var validParams = true;
2250
- angular.forEach(params, function(value, key) {
2251
- if (!isDefined($stateParams[key]) || $stateParams[key] !== value) {
2252
- validParams = false;
2253
- }
2254
- });
2255
- return validParams;
2256
- };
2257
-
2258
-
2259
- /**
2260
- * @ngdoc function
2261
- * @name ui.router.state.$state#href
2262
- * @methodOf ui.router.state.$state
2263
- *
2264
- * @description
2265
- * A url generation method that returns the compiled url for the given state populated with the given params.
2266
- *
2267
- * @example
2268
- * <pre>
2269
- * expect($state.href("about.person", { person: "bob" })).toEqual("/about/bob");
2270
- * </pre>
2271
- *
2272
- * @param {string|object} stateOrName The state name or state object you'd like to generate a url from.
2273
- * @param {object=} params An object of parameter values to fill the state's required parameters.
2274
- * @param {object=} options Options object. The options are:
2275
- *
2276
- * - **`lossy`** - {boolean=true} - If true, and if there is no url associated with the state provided in the
2277
- * first parameter, then the constructed href url will be built from the first navigable ancestor (aka
2278
- * ancestor with a valid url).
2279
- * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.
2280
- * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'),
2281
- * defines which state to be relative from.
2282
- * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl".
2283
- *
2284
- * @returns {string} compiled state url
2285
- */
2286
- $state.href = function href(stateOrName, params, options) {
2287
- options = extend({ lossy: true, inherit: false, absolute: false, relative: $state.$current }, options || {});
2288
- var state = findState(stateOrName, options.relative);
2289
- if (!isDefined(state)) return null;
2290
-
2291
- params = inheritParams($stateParams, params || {}, $state.$current, state);
2292
- var nav = (state && options.lossy) ? state.navigable : state;
2293
- var url = (nav && nav.url) ? nav.url.format(normalize(state.params, params || {})) : null;
2294
- if (!$locationProvider.html5Mode() && url) {
2295
- url = "#" + $locationProvider.hashPrefix() + url;
2296
- }
2297
-
2298
- if (baseHref !== '/') {
2299
- if ($locationProvider.html5Mode()) {
2300
- url = baseHref.slice(0, -1) + url;
2301
- } else if (options.absolute){
2302
- url = baseHref.slice(1) + url;
2303
- }
2304
- }
2305
-
2306
- if (options.absolute && url) {
2307
- url = $location.protocol() + '://' +
2308
- $location.host() +
2309
- ($location.port() == 80 || $location.port() == 443 ? '' : ':' + $location.port()) +
2310
- (!$locationProvider.html5Mode() && url ? '/' : '') +
2311
- url;
2312
- }
2313
- return url;
2314
- };
2315
-
2316
- /**
2317
- * @ngdoc function
2318
- * @name ui.router.state.$state#get
2319
- * @methodOf ui.router.state.$state
2320
- *
2321
- * @description
2322
- * Returns the state configuration object for any specific state or all states.
2323
- *
2324
- * @param {string|object=} stateOrName If provided, will only get the config for
2325
- * the requested state. If not provided, returns an array of ALL state configs.
2326
- * @returns {object|array} State configuration object or array of all objects.
2327
- */
2328
- $state.get = function (stateOrName, context) {
2329
- if (!isDefined(stateOrName)) {
2330
- var list = [];
2331
- forEach(states, function(state) { list.push(state.self); });
2332
- return list;
2333
- }
2334
- var state = findState(stateOrName, context);
2335
- return (state && state.self) ? state.self : null;
2336
- };
2337
-
2338
- function resolveState(state, params, paramsAreFiltered, inherited, dst) {
2339
- // Make a restricted $stateParams with only the parameters that apply to this state if
2340
- // necessary. In addition to being available to the controller and onEnter/onExit callbacks,
2341
- // we also need $stateParams to be available for any $injector calls we make during the
2342
- // dependency resolution process.
2343
- var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params, params);
2344
- var locals = { $stateParams: $stateParams };
2345
-
2346
- // Resolve 'global' dependencies for the state, i.e. those not specific to a view.
2347
- // We're also including $stateParams in this; that way the parameters are restricted
2348
- // to the set that should be visible to the state, and are independent of when we update
2349
- // the global $state and $stateParams values.
2350
- dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state);
2351
- var promises = [ dst.resolve.then(function (globals) {
2352
- dst.globals = globals;
2353
- }) ];
2354
- if (inherited) promises.push(inherited);
2355
-
2356
- // Resolve template and dependencies for all views.
2357
- forEach(state.views, function (view, name) {
2358
- var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {});
2359
- injectables.$template = [ function () {
2360
- return $view.load(name, { view: view, locals: locals, params: $stateParams, notify: false }) || '';
2361
- }];
2362
-
2363
- promises.push($resolve.resolve(injectables, locals, dst.resolve, state).then(function (result) {
2364
- // References to the controller (only instantiated at link time)
2365
- if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) {
2366
- var injectLocals = angular.extend({}, injectables, locals);
2367
- result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals);
2368
- } else {
2369
- result.$$controller = view.controller;
2370
- }
2371
- // Provide access to the state itself for internal use
2372
- result.$$state = state;
2373
- result.$$controllerAs = view.controllerAs;
2374
- dst[name] = result;
2375
- }));
2376
- });
2377
-
2378
- // Wait for all the promises and then return the activation object
2379
- return $q.all(promises).then(function (values) {
2380
- return dst;
2381
- });
2382
- }
2383
-
2384
- return $state;
2385
- }
2386
-
2387
- function shouldTriggerReload(to, from, locals, options) {
2388
- if ( to === from && ((locals === from.locals && !options.reload) || (to.self.reloadOnSearch === false)) ) {
2389
- return true;
2390
- }
2391
- }
2392
- }
2393
-
2394
- angular.module('ui.router.state')
2395
- .value('$stateParams', {})
2396
- .provider('$state', $StateProvider);
2397
-
2398
-
2399
- $ViewProvider.$inject = [];
2400
- function $ViewProvider() {
2401
-
2402
- this.$get = $get;
2403
- /**
2404
- * @ngdoc object
2405
- * @name ui.router.state.$view
2406
- *
2407
- * @requires ui.router.util.$templateFactory
2408
- * @requires $rootScope
2409
- *
2410
- * @description
2411
- *
2412
- */
2413
- $get.$inject = ['$rootScope', '$templateFactory'];
2414
- function $get( $rootScope, $templateFactory) {
2415
- return {
2416
- // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... })
2417
- /**
2418
- * @ngdoc function
2419
- * @name ui.router.state.$view#load
2420
- * @methodOf ui.router.state.$view
2421
- *
2422
- * @description
2423
- *
2424
- * @param {string} name name
2425
- * @param {object} options option object.
2426
- */
2427
- load: function load(name, options) {
2428
- var result, defaults = {
2429
- template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {}
2430
- };
2431
- options = extend(defaults, options);
2432
-
2433
- if (options.view) {
2434
- result = $templateFactory.fromConfig(options.view, options.params, options.locals);
2435
- }
2436
- if (result && options.notify) {
2437
- /**
2438
- * @ngdoc event
2439
- * @name ui.router.state.$state#$viewContentLoading
2440
- * @eventOf ui.router.state.$view
2441
- * @eventType broadcast on root scope
2442
- * @description
2443
- *
2444
- * Fired once the view **begins loading**, *before* the DOM is rendered.
2445
- *
2446
- * @param {Object} event Event object.
2447
- * @param {Object} viewConfig The view config properties (template, controller, etc).
2448
- *
2449
- * @example
2450
- *
2451
- * <pre>
2452
- * $scope.$on('$viewContentLoading',
2453
- * function(event, viewConfig){
2454
- * // Access to all the view config properties.
2455
- * // and one special property 'targetView'
2456
- * // viewConfig.targetView
2457
- * });
2458
- * </pre>
2459
- */
2460
- $rootScope.$broadcast('$viewContentLoading', options);
2461
- }
2462
- return result;
2463
- }
2464
- };
2465
- }
2466
- }
2467
-
2468
- angular.module('ui.router.state').provider('$view', $ViewProvider);
2469
-
2470
- /**
2471
- * @ngdoc object
2472
- * @name ui.router.state.$uiViewScrollProvider
2473
- *
2474
- * @description
2475
- * Provider that returns the {@link ui.router.state.$uiViewScroll} service function.
2476
- */
2477
- function $ViewScrollProvider() {
2478
-
2479
- var useAnchorScroll = false;
2480
-
2481
- /**
2482
- * @ngdoc function
2483
- * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll
2484
- * @methodOf ui.router.state.$uiViewScrollProvider
2485
- *
2486
- * @description
2487
- * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for
2488
- * scrolling based on the url anchor.
2489
- */
2490
- this.useAnchorScroll = function () {
2491
- useAnchorScroll = true;
2492
- };
2493
-
2494
- /**
2495
- * @ngdoc object
2496
- * @name ui.router.state.$uiViewScroll
2497
- *
2498
- * @requires $anchorScroll
2499
- * @requires $timeout
2500
- *
2501
- * @description
2502
- * When called with a jqLite element, it scrolls the element into view (after a
2503
- * `$timeout` so the DOM has time to refresh).
2504
- *
2505
- * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,
2506
- * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.
2507
- */
2508
- this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {
2509
- if (useAnchorScroll) {
2510
- return $anchorScroll;
2511
- }
2512
-
2513
- return function ($element) {
2514
- $timeout(function () {
2515
- $element[0].scrollIntoView();
2516
- }, 0, false);
2517
- };
2518
- }];
2519
- }
2520
-
2521
- angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);
2522
-
2523
- /**
2524
- * @ngdoc directive
2525
- * @name ui.router.state.directive:ui-view
2526
- *
2527
- * @requires ui.router.state.$state
2528
- * @requires $compile
2529
- * @requires $controller
2530
- * @requires $injector
2531
- * @requires ui.router.state.$uiViewScroll
2532
- * @requires $document
2533
- *
2534
- * @restrict ECA
2535
- *
2536
- * @description
2537
- * The ui-view directive tells $state where to place your templates.
2538
- *
2539
- * @param {string=} ui-view A view name. The name should be unique amongst the other views in the
2540
- * same state. You can have views of the same name that live in different states.
2541
- *
2542
- * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window
2543
- * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll
2544
- * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you
2545
- * scroll ui-view elements into view when they are populated during a state activation.
2546
- *
2547
- * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)
2548
- * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*
2549
- *
2550
- * @param {string=} onload Expression to evaluate whenever the view updates.
2551
- *
2552
- * @example
2553
- * A view can be unnamed or named.
2554
- * <pre>
2555
- * <!-- Unnamed -->
2556
- * <div ui-view></div>
2557
- *
2558
- * <!-- Named -->
2559
- * <div ui-view="viewName"></div>
2560
- * </pre>
2561
- *
2562
- * You can only have one unnamed view within any template (or root html). If you are only using a
2563
- * single view and it is unnamed then you can populate it like so:
2564
- * <pre>
2565
- * <div ui-view></div>
2566
- * $stateProvider.state("home", {
2567
- * template: "<h1>HELLO!</h1>"
2568
- * })
2569
- * </pre>
2570
- *
2571
- * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`}
2572
- * config property, by name, in this case an empty name:
2573
- * <pre>
2574
- * $stateProvider.state("home", {
2575
- * views: {
2576
- * "": {
2577
- * template: "<h1>HELLO!</h1>"
2578
- * }
2579
- * }
2580
- * })
2581
- * </pre>
2582
- *
2583
- * But typically you'll only use the views property if you name your view or have more than one view
2584
- * in the same template. There's not really a compelling reason to name a view if its the only one,
2585
- * but you could if you wanted, like so:
2586
- * <pre>
2587
- * <div ui-view="main"></div>
2588
- * </pre>
2589
- * <pre>
2590
- * $stateProvider.state("home", {
2591
- * views: {
2592
- * "main": {
2593
- * template: "<h1>HELLO!</h1>"
2594
- * }
2595
- * }
2596
- * })
2597
- * </pre>
2598
- *
2599
- * Really though, you'll use views to set up multiple views:
2600
- * <pre>
2601
- * <div ui-view></div>
2602
- * <div ui-view="chart"></div>
2603
- * <div ui-view="data"></div>
2604
- * </pre>
2605
- *
2606
- * <pre>
2607
- * $stateProvider.state("home", {
2608
- * views: {
2609
- * "": {
2610
- * template: "<h1>HELLO!</h1>"
2611
- * },
2612
- * "chart": {
2613
- * template: "<chart_thing/>"
2614
- * },
2615
- * "data": {
2616
- * template: "<data_thing/>"
2617
- * }
2618
- * }
2619
- * })
2620
- * </pre>
2621
- *
2622
- * Examples for `autoscroll`:
2623
- *
2624
- * <pre>
2625
- * <!-- If autoscroll present with no expression,
2626
- * then scroll ui-view into view -->
2627
- * <ui-view autoscroll/>
2628
- *
2629
- * <!-- If autoscroll present with valid expression,
2630
- * then scroll ui-view into view if expression evaluates to true -->
2631
- * <ui-view autoscroll='true'/>
2632
- * <ui-view autoscroll='false'/>
2633
- * <ui-view autoscroll='scopeVariable'/>
2634
- * </pre>
2635
- */
2636
- $ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll'];
2637
- function $ViewDirective( $state, $injector, $uiViewScroll) {
2638
-
2639
- function getService() {
2640
- return ($injector.has) ? function(service) {
2641
- return $injector.has(service) ? $injector.get(service) : null;
2642
- } : function(service) {
2643
- try {
2644
- return $injector.get(service);
2645
- } catch (e) {
2646
- return null;
2647
- }
2648
- };
2649
- }
2650
-
2651
- var service = getService(),
2652
- $animator = service('$animator'),
2653
- $animate = service('$animate');
2654
-
2655
- // Returns a set of DOM manipulation functions based on which Angular version
2656
- // it should use
2657
- function getRenderer(attrs, scope) {
2658
- var statics = function() {
2659
- return {
2660
- enter: function (element, target, cb) { target.after(element); cb(); },
2661
- leave: function (element, cb) { element.remove(); cb(); }
2662
- };
2663
- };
2664
-
2665
- if ($animate) {
2666
- return {
2667
- enter: function(element, target, cb) { $animate.enter(element, null, target, cb); },
2668
- leave: function(element, cb) { $animate.leave(element, cb); }
2669
- };
2670
- }
2671
-
2672
- if ($animator) {
2673
- var animate = $animator && $animator(scope, attrs);
2674
-
2675
- return {
2676
- enter: function(element, target, cb) {animate.enter(element, null, target); cb(); },
2677
- leave: function(element, cb) { animate.leave(element); cb(); }
2678
- };
2679
- }
2680
-
2681
- return statics();
2682
- }
2683
-
2684
- var directive = {
2685
- restrict: 'ECA',
2686
- terminal: true,
2687
- priority: 400,
2688
- transclude: 'element',
2689
- compile: function (tElement, tAttrs, $transclude) {
2690
- return function (scope, $element, attrs) {
2691
- var previousEl, currentEl, currentScope, latestLocals,
2692
- onloadExp = attrs.onload || '',
2693
- autoScrollExp = attrs.autoscroll,
2694
- renderer = getRenderer(attrs, scope);
2695
-
2696
- scope.$on('$stateChangeSuccess', function() {
2697
- updateView(false);
2698
- });
2699
- scope.$on('$viewContentLoading', function() {
2700
- updateView(false);
2701
- });
2702
-
2703
- updateView(true);
2704
-
2705
- function cleanupLastView() {
2706
- if (previousEl) {
2707
- previousEl.remove();
2708
- previousEl = null;
2709
- }
2710
-
2711
- if (currentScope) {
2712
- currentScope.$destroy();
2713
- currentScope = null;
2714
- }
2715
-
2716
- if (currentEl) {
2717
- renderer.leave(currentEl, function() {
2718
- previousEl = null;
2719
- });
2720
-
2721
- previousEl = currentEl;
2722
- currentEl = null;
2723
- }
2724
- }
2725
-
2726
- function updateView(firstTime) {
2727
- var newScope = scope.$new(),
2728
- name = currentEl && currentEl.data('$uiViewName'),
2729
- previousLocals = name && $state.$current && $state.$current.locals[name];
2730
-
2731
- if (!firstTime && previousLocals === latestLocals) return; // nothing to do
2732
-
2733
- var clone = $transclude(newScope, function(clone) {
2734
- renderer.enter(clone, $element, function onUiViewEnter() {
2735
- if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) {
2736
- $uiViewScroll(clone);
2737
- }
2738
- });
2739
- cleanupLastView();
2740
- });
2741
-
2742
- latestLocals = $state.$current.locals[clone.data('$uiViewName')];
2743
-
2744
- currentEl = clone;
2745
- currentScope = newScope;
2746
- /**
2747
- * @ngdoc event
2748
- * @name ui.router.state.directive:ui-view#$viewContentLoaded
2749
- * @eventOf ui.router.state.directive:ui-view
2750
- * @eventType emits on ui-view directive scope
2751
- * @description *
2752
- * Fired once the view is **loaded**, *after* the DOM is rendered.
2753
- *
2754
- * @param {Object} event Event object.
2755
- */
2756
- currentScope.$emit('$viewContentLoaded');
2757
- currentScope.$eval(onloadExp);
2758
- }
2759
- };
2760
- }
2761
- };
2762
-
2763
- return directive;
2764
- }
2765
-
2766
- $ViewDirectiveFill.$inject = ['$compile', '$controller', '$state'];
2767
- function $ViewDirectiveFill ($compile, $controller, $state) {
2768
- return {
2769
- restrict: 'ECA',
2770
- priority: -400,
2771
- compile: function (tElement) {
2772
- var initial = tElement.html();
2773
- return function (scope, $element, attrs) {
2774
- var name = attrs.uiView || attrs.name || '',
2775
- inherited = $element.inheritedData('$uiView');
2776
-
2777
- if (name.indexOf('@') < 0) {
2778
- name = name + '@' + (inherited ? inherited.state.name : '');
2779
- }
2780
-
2781
- $element.data('$uiViewName', name);
2782
-
2783
- var current = $state.$current,
2784
- locals = current && current.locals[name];
2785
-
2786
- if (! locals) {
2787
- return;
2788
- }
2789
-
2790
- $element.data('$uiView', { name: name, state: locals.$$state });
2791
- $element.html(locals.$template ? locals.$template : initial);
2792
-
2793
- var link = $compile($element.contents());
2794
-
2795
- if (locals.$$controller) {
2796
- locals.$scope = scope;
2797
- var controller = $controller(locals.$$controller, locals);
2798
- if (locals.$$controllerAs) {
2799
- scope[locals.$$controllerAs] = controller;
2800
- }
2801
- $element.data('$ngControllerController', controller);
2802
- $element.children().data('$ngControllerController', controller);
2803
- }
2804
-
2805
- link(scope);
2806
- };
2807
- }
2808
- };
2809
- }
2810
-
2811
- angular.module('ui.router.state').directive('uiView', $ViewDirective);
2812
- angular.module('ui.router.state').directive('uiView', $ViewDirectiveFill);
2813
-
2814
- function parseStateRef(ref) {
2815
- var parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/);
2816
- if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'");
2817
- return { state: parsed[1], paramExpr: parsed[3] || null };
2818
- }
2819
-
2820
- function stateContext(el) {
2821
- var stateData = el.parent().inheritedData('$uiView');
2822
-
2823
- if (stateData && stateData.state && stateData.state.name) {
2824
- return stateData.state;
2825
- }
2826
- }
2827
-
2828
- /**
2829
- * @ngdoc directive
2830
- * @name ui.router.state.directive:ui-sref
2831
- *
2832
- * @requires ui.router.state.$state
2833
- * @requires $timeout
2834
- *
2835
- * @restrict A
2836
- *
2837
- * @description
2838
- * A directive that binds a link (`<a>` tag) to a state. If the state has an associated
2839
- * URL, the directive will automatically generate & update the `href` attribute via
2840
- * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking
2841
- * the link will trigger a state transition with optional parameters.
2842
- *
2843
- * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be
2844
- * handled natively by the browser.
2845
- *
2846
- * You can also use relative state paths within ui-sref, just like the relative
2847
- * paths passed to `$state.go()`. You just need to be aware that the path is relative
2848
- * to the state that the link lives in, in other words the state that loaded the
2849
- * template containing the link.
2850
- *
2851
- * You can specify options to pass to {@link ui.router.state.$state#go $state.go()}
2852
- * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`,
2853
- * and `reload`.
2854
- *
2855
- * @example
2856
- * Here's an example of how you'd use ui-sref and how it would compile. If you have the
2857
- * following template:
2858
- * <pre>
2859
- * <a ui-sref="home">Home</a> | <a ui-sref="about">About</a>
2860
- *
2861
- * <ul>
2862
- * <li ng-repeat="contact in contacts">
2863
- * <a ui-sref="contacts.detail({ id: contact.id })">{{ contact.name }}</a>
2864
- * </li>
2865
- * </ul>
2866
- * </pre>
2867
- *
2868
- * Then the compiled html would be (assuming Html5Mode is off):
2869
- * <pre>
2870
- * <a href="#/home" ui-sref="home">Home</a> | <a href="#/about" ui-sref="about">About</a>
2871
- *
2872
- * <ul>
2873
- * <li ng-repeat="contact in contacts">
2874
- * <a href="#/contacts/1" ui-sref="contacts.detail({ id: contact.id })">Joe</a>
2875
- * </li>
2876
- * <li ng-repeat="contact in contacts">
2877
- * <a href="#/contacts/2" ui-sref="contacts.detail({ id: contact.id })">Alice</a>
2878
- * </li>
2879
- * <li ng-repeat="contact in contacts">
2880
- * <a href="#/contacts/3" ui-sref="contacts.detail({ id: contact.id })">Bob</a>
2881
- * </li>
2882
- * </ul>
2883
- *
2884
- * <a ui-sref="home" ui-sref-opts="{reload: true}">Home</a>
2885
- * </pre>
2886
- *
2887
- * @param {string} ui-sref 'stateName' can be any valid absolute or relative state
2888
- * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()}
2889
- */
2890
- $StateRefDirective.$inject = ['$state', '$timeout'];
2891
- function $StateRefDirective($state, $timeout) {
2892
- var allowedOptions = ['location', 'inherit', 'reload'];
2893
-
2894
- return {
2895
- restrict: 'A',
2896
- require: '?^uiSrefActive',
2897
- link: function(scope, element, attrs, uiSrefActive) {
2898
- var ref = parseStateRef(attrs.uiSref);
2899
- var params = null, url = null, base = stateContext(element) || $state.$current;
2900
- var isForm = element[0].nodeName === "FORM";
2901
- var attr = isForm ? "action" : "href", nav = true;
2902
-
2903
- var options = {
2904
- relative: base
2905
- };
2906
- var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {};
2907
- angular.forEach(allowedOptions, function(option) {
2908
- if (option in optionsOverride) {
2909
- options[option] = optionsOverride[option];
2910
- }
2911
- });
2912
-
2913
- var update = function(newVal) {
2914
- if (newVal) params = newVal;
2915
- if (!nav) return;
2916
-
2917
- var newHref = $state.href(ref.state, params, options);
2918
-
2919
- if (uiSrefActive) {
2920
- uiSrefActive.$$setStateInfo(ref.state, params);
2921
- }
2922
- if (!newHref) {
2923
- nav = false;
2924
- return false;
2925
- }
2926
- element[0][attr] = newHref;
2927
- };
2928
-
2929
- if (ref.paramExpr) {
2930
- scope.$watch(ref.paramExpr, function(newVal, oldVal) {
2931
- if (newVal !== params) update(newVal);
2932
- }, true);
2933
- params = scope.$eval(ref.paramExpr);
2934
- }
2935
- update();
2936
-
2937
- if (isForm) return;
2938
-
2939
- element.bind("click", function(e) {
2940
- var button = e.which || e.button;
2941
- if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {
2942
- // HACK: This is to allow ng-clicks to be processed before the transition is initiated:
2943
- $timeout(function() {
2944
- $state.go(ref.state, params, options);
2945
- });
2946
- e.preventDefault();
2947
- }
2948
- });
2949
- }
2950
- };
2951
- }
2952
-
2953
- /**
2954
- * @ngdoc directive
2955
- * @name ui.router.state.directive:ui-sref-active
2956
- *
2957
- * @requires ui.router.state.$state
2958
- * @requires ui.router.state.$stateParams
2959
- * @requires $interpolate
2960
- *
2961
- * @restrict A
2962
- *
2963
- * @description
2964
- * A directive working alongside ui-sref to add classes to an element when the
2965
- * related ui-sref directive's state is active, and removing them when it is inactive.
2966
- * The primary use-case is to simplify the special appearance of navigation menus
2967
- * relying on `ui-sref`, by having the "active" state's menu button appear different,
2968
- * distinguishing it from the inactive menu items.
2969
- *
2970
- * @example
2971
- * Given the following template:
2972
- * <pre>
2973
- * <ul>
2974
- * <li ui-sref-active="active" class="item">
2975
- * <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a>
2976
- * </li>
2977
- * </ul>
2978
- * </pre>
2979
- *
2980
- * When the app state is "app.user", and contains the state parameter "user" with value "bilbobaggins",
2981
- * the resulting HTML will appear as (note the 'active' class):
2982
- * <pre>
2983
- * <ul>
2984
- * <li ui-sref-active="active" class="item active">
2985
- * <a ui-sref="app.user({user: 'bilbobaggins'})" href="/users/bilbobaggins">@bilbobaggins</a>
2986
- * </li>
2987
- * </ul>
2988
- * </pre>
2989
- *
2990
- * The class name is interpolated **once** during the directives link time (any further changes to the
2991
- * interpolated value are ignored).
2992
- *
2993
- * Multiple classes may be specified in a space-separated format:
2994
- * <pre>
2995
- * <ul>
2996
- * <li ui-sref-active='class1 class2 class3'>
2997
- * <a ui-sref="app.user">link</a>
2998
- * </li>
2999
- * </ul>
3000
- * </pre>
3001
- */
3002
- $StateActiveDirective.$inject = ['$state', '$stateParams', '$interpolate'];
3003
- function $StateActiveDirective($state, $stateParams, $interpolate) {
3004
- return {
3005
- restrict: "A",
3006
- controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {
3007
- var state, params, activeClass;
3008
-
3009
- // There probably isn't much point in $observing this
3010
- activeClass = $interpolate($attrs.uiSrefActive || '', false)($scope);
3011
-
3012
- // Allow uiSref to communicate with uiSrefActive
3013
- this.$$setStateInfo = function(newState, newParams) {
3014
- state = $state.get(newState, stateContext($element));
3015
- params = newParams;
3016
- update();
3017
- };
3018
-
3019
- $scope.$on('$stateChangeSuccess', update);
3020
-
3021
- // Update route state
3022
- function update() {
3023
- if ($state.$current.self === state && matchesParams()) {
3024
- $element.addClass(activeClass);
3025
- } else {
3026
- $element.removeClass(activeClass);
3027
- }
3028
- }
3029
-
3030
- function matchesParams() {
3031
- return !params || equalForKeys(params, $stateParams);
3032
- }
3033
- }]
3034
- };
3035
- }
3036
-
3037
- angular.module('ui.router.state')
3038
- .directive('uiSref', $StateRefDirective)
3039
- .directive('uiSrefActive', $StateActiveDirective);
3040
-
3041
- /**
3042
- * @ngdoc filter
3043
- * @name ui.router.state.filter:isState
3044
- *
3045
- * @requires ui.router.state.$state
3046
- *
3047
- * @description
3048
- * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}.
3049
- */
3050
- $IsStateFilter.$inject = ['$state'];
3051
- function $IsStateFilter($state) {
3052
- return function(state) {
3053
- return $state.is(state);
3054
- };
3055
- }
3056
-
3057
- /**
3058
- * @ngdoc filter
3059
- * @name ui.router.state.filter:includedByState
3060
- *
3061
- * @requires ui.router.state.$state
3062
- *
3063
- * @description
3064
- * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.
3065
- */
3066
- $IncludedByStateFilter.$inject = ['$state'];
3067
- function $IncludedByStateFilter($state) {
3068
- return function(state) {
3069
- return $state.includes(state);
3070
- };
3071
- }
3072
-
3073
- angular.module('ui.router.state')
3074
- .filter('isState', $IsStateFilter)
3075
- .filter('includedByState', $IncludedByStateFilter);
3076
-
3077
- /*
3078
- * @ngdoc object
3079
- * @name ui.router.compat.$routeProvider
3080
- *
3081
- * @requires ui.router.state.$stateProvider
3082
- * @requires ui.router.router.$urlRouterProvider
3083
- *
3084
- * @description
3085
- * `$routeProvider` of the `ui.router.compat` module overwrites the existing
3086
- * `routeProvider` from the core. This is done to provide compatibility between
3087
- * the UI Router and the core router.
3088
- *
3089
- * It also provides a `when()` method to register routes that map to certain urls.
3090
- * Behind the scenes it actually delegates either to
3091
- * {@link ui.router.router.$urlRouterProvider $urlRouterProvider} or to the
3092
- * {@link ui.router.state.$stateProvider $stateProvider} to postprocess the given
3093
- * router definition object.
3094
- */
3095
- $RouteProvider.$inject = ['$stateProvider', '$urlRouterProvider'];
3096
- function $RouteProvider( $stateProvider, $urlRouterProvider) {
3097
-
3098
- var routes = [];
3099
-
3100
- onEnterRoute.$inject = ['$$state'];
3101
- function onEnterRoute( $$state) {
3102
- /*jshint validthis: true */
3103
- this.locals = $$state.locals.globals;
3104
- this.params = this.locals.$stateParams;
3105
- }
3106
-
3107
- function onExitRoute() {
3108
- /*jshint validthis: true */
3109
- this.locals = null;
3110
- this.params = null;
3111
- }
3112
-
3113
- this.when = when;
3114
- /*
3115
- * @ngdoc function
3116
- * @name ui.router.compat.$routeProvider#when
3117
- * @methodOf ui.router.compat.$routeProvider
3118
- *
3119
- * @description
3120
- * Registers a route with a given route definition object. The route definition
3121
- * object has the same interface the angular core route definition object has.
3122
- *
3123
- * @example
3124
- * <pre>
3125
- * var app = angular.module('app', ['ui.router.compat']);
3126
- *
3127
- * app.config(function ($routeProvider) {
3128
- * $routeProvider.when('home', {
3129
- * controller: function () { ... },
3130
- * templateUrl: 'path/to/template'
3131
- * });
3132
- * });
3133
- * </pre>
3134
- *
3135
- * @param {string} url URL as string
3136
- * @param {object} route Route definition object
3137
- *
3138
- * @return {object} $routeProvider - $routeProvider instance
3139
- */
3140
- function when(url, route) {
3141
- /*jshint validthis: true */
3142
- if (route.redirectTo != null) {
3143
- // Redirect, configure directly on $urlRouterProvider
3144
- var redirect = route.redirectTo, handler;
3145
- if (isString(redirect)) {
3146
- handler = redirect; // leave $urlRouterProvider to handle
3147
- } else if (isFunction(redirect)) {
3148
- // Adapt to $urlRouterProvider API
3149
- handler = function (params, $location) {
3150
- return redirect(params, $location.path(), $location.search());
3151
- };
3152
- } else {
3153
- throw new Error("Invalid 'redirectTo' in when()");
3154
- }
3155
- $urlRouterProvider.when(url, handler);
3156
- } else {
3157
- // Regular route, configure as state
3158
- $stateProvider.state(inherit(route, {
3159
- parent: null,
3160
- name: 'route:' + encodeURIComponent(url),
3161
- url: url,
3162
- onEnter: onEnterRoute,
3163
- onExit: onExitRoute
3164
- }));
3165
- }
3166
- routes.push(route);
3167
- return this;
3168
- }
3169
-
3170
- /*
3171
- * @ngdoc object
3172
- * @name ui.router.compat.$route
3173
- *
3174
- * @requires ui.router.state.$state
3175
- * @requires $rootScope
3176
- * @requires $routeParams
3177
- *
3178
- * @property {object} routes - Array of registered routes.
3179
- * @property {object} params - Current route params as object.
3180
- * @property {string} current - Name of the current route.
3181
- *
3182
- * @description
3183
- * The `$route` service provides interfaces to access defined routes. It also let's
3184
- * you access route params through `$routeParams` service, so you have fully
3185
- * control over all the stuff you would actually get from angular's core `$route`
3186
- * service.
3187
- */
3188
- this.$get = $get;
3189
- $get.$inject = ['$state', '$rootScope', '$routeParams'];
3190
- function $get( $state, $rootScope, $routeParams) {
3191
-
3192
- var $route = {
3193
- routes: routes,
3194
- params: $routeParams,
3195
- current: undefined
3196
- };
3197
-
3198
- function stateAsRoute(state) {
3199
- return (state.name !== '') ? state : undefined;
3200
- }
3201
-
3202
- $rootScope.$on('$stateChangeStart', function (ev, to, toParams, from, fromParams) {
3203
- $rootScope.$broadcast('$routeChangeStart', stateAsRoute(to), stateAsRoute(from));
3204
- });
3205
-
3206
- $rootScope.$on('$stateChangeSuccess', function (ev, to, toParams, from, fromParams) {
3207
- $route.current = stateAsRoute(to);
3208
- $rootScope.$broadcast('$routeChangeSuccess', stateAsRoute(to), stateAsRoute(from));
3209
- copy(toParams, $route.params);
3210
- });
3211
-
3212
- $rootScope.$on('$stateChangeError', function (ev, to, toParams, from, fromParams, error) {
3213
- $rootScope.$broadcast('$routeChangeError', stateAsRoute(to), stateAsRoute(from), error);
3214
- });
3215
-
3216
- return $route;
3217
- }
3218
- }
3219
-
3220
- angular.module('ui.router.compat')
3221
- .provider('$route', $RouteProvider)
3222
- .directive('ngView', $ViewDirective);
3223
- })(window, window.angular);