diff --git a/.csslintrc b/.csslintrc new file mode 100644 index 0000000..aacba95 --- /dev/null +++ b/.csslintrc @@ -0,0 +1,2 @@ +--exclude-exts=.min.css +--ignore=adjoining-classes,box-model,ids,order-alphabetical,unqualified-attributes diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..96212a3 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +**/*{.,-}min.js diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..9faa375 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,213 @@ +ecmaFeatures: + modules: true + jsx: true + +env: + amd: true + browser: true + es6: true + jquery: true + node: true + +# http://eslint.org/docs/rules/ +rules: + # Possible Errors + comma-dangle: [2, never] + no-cond-assign: 2 + no-console: 0 + no-constant-condition: 2 + no-control-regex: 2 + no-debugger: 2 + no-dupe-args: 2 + no-dupe-keys: 2 + no-duplicate-case: 2 + no-empty: 2 + no-empty-character-class: 2 + no-ex-assign: 2 + no-extra-boolean-cast: 2 + no-extra-parens: 0 + no-extra-semi: 2 + no-func-assign: 2 + no-inner-declarations: [2, functions] + no-invalid-regexp: 2 + no-irregular-whitespace: 2 + no-negated-in-lhs: 2 + no-obj-calls: 2 + no-regex-spaces: 2 + no-sparse-arrays: 2 + no-unexpected-multiline: 2 + no-unreachable: 2 + use-isnan: 2 + valid-jsdoc: 0 + valid-typeof: 2 + + # Best Practices + accessor-pairs: 2 + block-scoped-var: 0 + complexity: [2, 6] + consistent-return: 0 + curly: 0 + default-case: 0 + dot-location: 0 + dot-notation: 0 + eqeqeq: 2 + guard-for-in: 2 + no-alert: 2 + no-caller: 2 + no-case-declarations: 2 + no-div-regex: 2 + no-else-return: 0 + no-empty-label: 2 + no-empty-pattern: 2 + no-eq-null: 2 + no-eval: 2 + no-extend-native: 2 + no-extra-bind: 2 + no-fallthrough: 2 + no-floating-decimal: 0 + no-implicit-coercion: 0 + no-implied-eval: 2 + no-invalid-this: 0 + no-iterator: 2 + no-labels: 0 + no-lone-blocks: 2 + no-loop-func: 2 + no-magic-number: 0 + no-multi-spaces: 0 + no-multi-str: 0 + no-native-reassign: 2 + no-new-func: 2 + no-new-wrappers: 2 + no-new: 2 + no-octal-escape: 2 + no-octal: 2 + no-proto: 2 + no-redeclare: 2 + no-return-assign: 2 + no-script-url: 2 + no-self-compare: 2 + no-sequences: 0 + no-throw-literal: 0 + no-unused-expressions: 2 + no-useless-call: 2 + no-useless-concat: 2 + no-void: 2 + no-warning-comments: 0 + no-with: 2 + radix: 2 + vars-on-top: 0 + wrap-iife: 2 + yoda: 0 + + # Strict + strict: 0 + + # Variables + init-declarations: 0 + no-catch-shadow: 2 + no-delete-var: 2 + no-label-var: 2 + no-shadow-restricted-names: 2 + no-shadow: 0 + no-undef-init: 2 + no-undef: 0 + no-undefined: 0 + no-unused-vars: 0 + no-use-before-define: 0 + + # Node.js and CommonJS + callback-return: 2 + global-require: 2 + handle-callback-err: 2 + no-mixed-requires: 0 + no-new-require: 0 + no-path-concat: 2 + no-process-exit: 2 + no-restricted-modules: 0 + no-sync: 0 + + # Stylistic Issues + array-bracket-spacing: 0 + block-spacing: 0 + brace-style: 0 + camelcase: 0 + comma-spacing: 0 + comma-style: 0 + computed-property-spacing: 0 + consistent-this: 0 + eol-last: 0 + func-names: 0 + func-style: 0 + id-length: 0 + id-match: 0 + indent: 0 + jsx-quotes: 0 + key-spacing: 0 + linebreak-style: 0 + lines-around-comment: 0 + max-depth: 0 + max-len: 0 + max-nested-callbacks: 0 + max-params: 0 + max-statements: [2, 30] + new-cap: 0 + new-parens: 0 + newline-after-var: 0 + no-array-constructor: 0 + no-bitwise: 0 + no-continue: 0 + no-inline-comments: 0 + no-lonely-if: 0 + no-mixed-spaces-and-tabs: 0 + no-multiple-empty-lines: 0 + no-negated-condition: 0 + no-nested-ternary: 0 + no-new-object: 0 + no-plusplus: 0 + no-restricted-syntax: 0 + no-spaced-func: 0 + no-ternary: 0 + no-trailing-spaces: 0 + no-underscore-dangle: 0 + no-unneeded-ternary: 0 + object-curly-spacing: 0 + one-var: 0 + operator-assignment: 0 + operator-linebreak: 0 + padded-blocks: 0 + quote-props: 0 + quotes: 0 + require-jsdoc: 0 + semi-spacing: 0 + semi: 0 + sort-vars: 0 + space-after-keywords: 0 + space-before-blocks: 0 + space-before-function-paren: 0 + space-before-keywords: 0 + space-in-parens: 0 + space-infix-ops: 0 + space-return-throw-case: 0 + space-unary-ops: 0 + spaced-comment: 0 + wrap-regex: 0 + + # ECMAScript 6 + arrow-body-style: 0 + arrow-parens: 0 + arrow-spacing: 0 + constructor-super: 0 + generator-star-spacing: 0 + no-arrow-condition: 0 + no-class-assign: 0 + no-const-assign: 0 + no-dupe-class-members: 0 + no-this-before-super: 0 + no-var: 0 + object-shorthand: 0 + prefer-arrow-callback: 0 + prefer-const: 0 + prefer-reflect: 0 + prefer-spread: 0 + prefer-template: 0 + require-yield: 0 diff --git a/.gitignore b/.gitignore index b4a861d..ce44bc4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,4 @@ out target *.iml logs -db - - - - +db \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..6f1b2a9 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,2 @@ +language: java +jdk: oraclejdk8 \ No newline at end of file diff --git a/config/nginx.conf.conf b/config/nginx.conf.conf index 1be06c8..56cb03f 100644 --- a/config/nginx.conf.conf +++ b/config/nginx.conf.conf @@ -13,7 +13,7 @@ http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; - keepalive_timeout 65; + keepalive_timeout 180; error_log /home/ec2-user/javaops/logs/nginx.error.log; access_log /home/ec2-user/javaops/logs/nginx.access.log; @@ -32,14 +32,28 @@ http { } location /css/ { - expires 1d; + expires 3h; access_log off; } +# location /interview/test.html { +# proxy_pass http://localhost:8080/view/test; +# } +# location /payment.html { +# proxy_pass http://localhost:8080/view/payment; +# } +# location /story.html { +# proxy_pass http://localhost:8080/view/story; +# } +# location ~ ^.*\.html$ { +# expires 3h; +# access_log off; +# } + location / { expires 0m; proxy_pass http://localhost:8080; - proxy_connect_timeout 10s; + proxy_connect_timeout 30s; } } } \ No newline at end of file diff --git a/db_migration/2016-03-01.sql b/db_migration/2016-03-01.sql new file mode 100644 index 0000000..8db2a80 --- /dev/null +++ b/db_migration/2016-03-01.sql @@ -0,0 +1,2 @@ +ALTER TABLE PUBLIC.USER_GROUP ALTER COLUMN TYPE RENAME TO REGISTER_TYPE; +ALTER TABLE PUBLIC.USER_GROUP ADD PARTICIPATION_TYPE VARCHAR(255) NULL; diff --git a/db_migration/2016-06-01.sql b/db_migration/2016-06-01.sql new file mode 100644 index 0000000..47badbd --- /dev/null +++ b/db_migration/2016-06-01.sql @@ -0,0 +1,2 @@ +ALTER TABLE USERS ADD STATS_AGREE BOOL DEFAULT FALSE; +UPDATE USERS SET STATS_AGREE=FALSE; \ No newline at end of file diff --git a/db_migration/2016-08-09.sql b/db_migration/2016-08-09.sql new file mode 100644 index 0000000..02a15f4 --- /dev/null +++ b/db_migration/2016-08-09.sql @@ -0,0 +1 @@ +ALTER TABLE MAIL_CASE ALTER COLUMN RESULT TEXT; \ No newline at end of file diff --git a/db_migration/2017-02-23.sql b/db_migration/2017-02-23.sql new file mode 100644 index 0000000..891b140 --- /dev/null +++ b/db_migration/2017-02-23.sql @@ -0,0 +1 @@ +ALTER TABLE USERS ALTER COLUMN JOB_THRU_TOPJAVA RENAME TO JOB_THROUGH_TOPJAVA; \ No newline at end of file diff --git a/db_migration/2017-02-24.sql b/db_migration/2017-02-24.sql new file mode 100644 index 0000000..370f60f --- /dev/null +++ b/db_migration/2017-02-24.sql @@ -0,0 +1 @@ +ALTER TABLE USER_GROUP ADD registered_date TIMESTAMP DEFAULT NOW(); \ No newline at end of file diff --git a/db_migration/2017-02-25.sql b/db_migration/2017-02-25.sql new file mode 100644 index 0000000..51ad827 --- /dev/null +++ b/db_migration/2017-02-25.sql @@ -0,0 +1 @@ +CREATE UNIQUE INDEX USER_ROLES_USER_ID_ROLE_uindex ON USER_ROLES (USER_ID, ROLE); \ No newline at end of file diff --git a/db_migration/2017-04-23.sql b/db_migration/2017-04-23.sql new file mode 100644 index 0000000..dbeb314 --- /dev/null +++ b/db_migration/2017-04-23.sql @@ -0,0 +1,11 @@ +ALTER TABLE PAYMENT ADD USER_GROUP_ID INT NULL; +ALTER TABLE PAYMENT ADD CONSTRAINT payment_user_group_idx FOREIGN KEY (USER_GROUP_ID) REFERENCES USER_GROUP (ID) ON DELETE CASCADE; + +SELECT * FROM PAYMENT p WHERE USER_GROUP_ID IS NULL; + +-- SELECT * FROM USER_GROUP WHERE GROUP_ID=1; +-- UPDATE PAYMENT p SET USER_GROUP_ID=210 WHERE USER_GROUP_ID IS NULL; + +ALTER TABLE PAYMENT ALTER COLUMN USER_GROUP_ID INTEGER NOT NULL; +ALTER TABLE USER_GROUP DROP COLUMN PAYMENT_ID; + diff --git a/db_migration/2017-06-09.sql b/db_migration/2017-06-09.sql new file mode 100644 index 0000000..dbeb314 --- /dev/null +++ b/db_migration/2017-06-09.sql @@ -0,0 +1,11 @@ +ALTER TABLE PAYMENT ADD USER_GROUP_ID INT NULL; +ALTER TABLE PAYMENT ADD CONSTRAINT payment_user_group_idx FOREIGN KEY (USER_GROUP_ID) REFERENCES USER_GROUP (ID) ON DELETE CASCADE; + +SELECT * FROM PAYMENT p WHERE USER_GROUP_ID IS NULL; + +-- SELECT * FROM USER_GROUP WHERE GROUP_ID=1; +-- UPDATE PAYMENT p SET USER_GROUP_ID=210 WHERE USER_GROUP_ID IS NULL; + +ALTER TABLE PAYMENT ALTER COLUMN USER_GROUP_ID INTEGER NOT NULL; +ALTER TABLE USER_GROUP DROP COLUMN PAYMENT_ID; + diff --git a/db_migration/2017-06-19.sql b/db_migration/2017-06-19.sql new file mode 100644 index 0000000..57116a7 --- /dev/null +++ b/db_migration/2017-06-19.sql @@ -0,0 +1,2 @@ +UPDATE USERS SET BONUS=0; +ALTER TABLE USERS ALTER COLUMN BONUS INTEGER DEFAULT 0; diff --git a/topjava2.md b/info.md similarity index 60% rename from topjava2.md rename to info.md index 4ed18f0..b94ef08 100644 --- a/topjava2.md +++ b/info.md @@ -1,23 +1,21 @@ -Запуск: mvn spring-boot:run - -Коннект к базе (только 1 коннект возможен): - -- профиль prod - - - приложение не работает jdbc:h2:file:~/db/javaops - - приложение работает: jdbc:h2:tcp://localhost:9092/~/db/javaops - -- профиль dev - - jdbc:h2:tcp://localhost:9092/mem:javaops - ------------------------------------------------------ ## Spring Boot generate/run +[mvnw / mvnw.cmd](http://stackoverflow.com/questions/38723833/spring-boot-what-is-the-purpose-of-mvnw-and-mvnw-cmd-files) + - Spring Boot and Intellij IDEA 14 - https://github.com/snicoll-demos/spring-boot-intellij-idea-webinar - Spring Boot Reference Guide - spring-projects/spring-boot - Building REST services with Spring +- https://springframework.guru/spring-boot-web-application-part-1-spring-initializr/ +- https://springframework.guru/spring-boot-web-application-part-2-using-thymeleaf/ +- https://springframework.guru/using-logback-spring-boot/ +- https://www.youtube.com/watch?v=KmxoQRnMLfE + +spring-boot-starter-actuator: https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html + +CharacterEncodingFilter : http://stackoverflow.com/a/23051264/548473 + 2. Profiles. 3. Add H2. WebServer/TcpServer 4. Model User/Role. Repository UserRepository. @@ -64,6 +62,18 @@ http://mtdevuk.com/2015/02/10/how-to-deploy-a-spring-boot-application-to-amazon- - Deploy spring boot application to amazon elastic beanstalk - Spring Cloud AWS +http://eax.me/amazon-one-year/ + +SES: https://aws.amazon.com/ru/ses/faqs/ + +Remote git via SSH: +git via ssh: http://stackoverflow.com/a/17307628/548473 +git ssh url syntax: http://stackoverflow.com/a/39841058/548473 +http://stackoverflow.com/questions/11117823/git-push-error-refusing-to-update-checked-out-branch +git push non-bare repository: http://stackoverflow.com/a/28262104/548473 + +[Change Timezone](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html#change_time_zone) + ## Static resources http://www.baeldung.com/spring-mvc-static-resources @@ -79,8 +89,8 @@ Run at 80 port: http://stackoverflow.com/questions/33703965/spring-boot-running- cat /etc/init.d/nginx `Ctrl+D (exit)` -# config: /etc/nginx/nginx.conf -# config: /etc/sysconfig/nginx +config: /etc/nginx/nginx.conf +config: /etc/sysconfig/nginx cat /etc/sysconfig/nginx cat /etc/nginx/nginx.conf @@ -103,6 +113,7 @@ namei -om /home/ec2-user/javaops/static/index.html How do I run a Unix process in the background? +- Startup scripts ## External properties http://www.javabeat.net/spring-boot-external-configurations/ @@ -130,6 +141,14 @@ additional-spring-configuration-metadata.json ## OAuth2 https://github.com/spring-cloud-samples/authserver +http://oauthbible.com/ + +1. Create app +- [Registering OAuth Apps]https://developer.github.com/apps/building-integrations/setting-up-and-registering-oauth-apps/ + - [OAuth applications](https://github.com/settings/developers) + + + ## Execution and Scheduling CompletionService over an ExecutorService @@ -192,6 +211,9 @@ http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#unescaped-text Inlining http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#inlining +Href +http://www.thymeleaf.org/doc/articles/standardurlsyntax.html + ### Using multiple template resolvers http://blog.kaczmarzyk.net/2015/01/04/loading-view-templates-from-database-with-thymeleaf/ http://stackoverflow.com/questions/26609226/using-multiple-template-resolvers-with-spring-3-2-and-thymeleaf-2-1-3-for-emails @@ -236,10 +258,119 @@ https://dzone.com/articles/spring-caching-abstraction-and ## Logging https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot-features-logging-file-output +http://blog.codeleak.pl/2017/03/spring-boot-configure-log-level-in.html ## Error handling http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-error-handling -org.springframework.web.servlet.DispatcherServlet.getHandler #1115 \ No newline at end of file +org.springframework.web.servlet.DispatcherServlet.getHandler #1115 + +## stormpath +https://devcenter.heroku.com/articles/stormpath + +## encoding +http://stackoverflow.com/questions/24054648/how-to-config-characterencodingfilter-in-springboot + +## UI: +GWT Toolkit + + +https://ru.wikipedia.org/wiki/Веб-компоненты + +https://github.com/vaadin/gwt-polymer-elements + +Веб-компоненты +http://frontender.info/shadowdom/ + +Building a modern GWT app using Polymer Elements +http://www.gwtproject.org/doc/latest/polymer-tutorial/introduction.html + +http://stackoverflow.com/questions/28564438/spring-boot-gwt-embedded-configuraiton +https://github.com/Ekito/spring-boot-gwt +https://github.com/feedm3/spring-boot-gwt + +Создаем приложение с помощью Spring и GWT. +http://alextretyakov.blogspot.ru/2011/10/4.html + +http://www.springbyexample.org/static/1.1/html/simple-gwt-spring-webapp.html + +## Slack +https://api.slack.com/web +https://api.slack.com/docs/oauth-test-tokens +http://stackoverflow.com/questions/30955818/slack-api-team-invitation +https://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate + +Spring-jdbc: https://www.javacodegeeks.com/2016/03/springboot-working-jdbctemplate.html + +## Google Apps Admin SDK Directory API +[Explorer](https://developers.google.com/admin-sdk/directory/v1/reference/members/list) +[QuickStart](https://developers.google.com/admin-sdk/directory/v1/quickstart/java) +[Service Accounts](https://console.developers.google.com/iam-admin/serviceaccounts/project) +[Group mail](https://groups.google.com/a/javaops.ru/forum/#!groupsettings/masterjava/information) +[Delegating domain-wide authority to the service account](https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority) +[Управление доступом клиента API](https://admin.google.com/AdminHome?chromeless=1#OGX:ManageOauthClients) + + +## Hot Swapping +http://docs.spring.io/spring-boot/docs/current/reference/html/howto-hotswapping.html +https://patrickgrimard.io/2016/01/18/spring-boot-devtools-first-look/ +https://www.youtube.com/watch?v=VWF7vCJSqrA : spring-boot-devtools +https://www.leveluplunch.com/java/tutorials/004-hot-deploy-java-applications-with-spring-loaded/ + +----------- +## H2 +- H2 TCP connection + +## Spring Boot +- https://habrahabr.ru/post/257223/ +- Spring Boot and Intellij IDEA 14 +- https://github.com/snicoll-demos/spring-boot-intellij-idea-webinar +- Spring Boot Reference Guide +- spring-projects/spring-boot +- Building REST services with Spring +- Common application properties +- Multiple external configuration +http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html + +## REST +- http://curl.haxx.se/docs/manpage.html +- http://spring.io/guides/gs/accessing-data-rest/ +- https://github.com/spring-guides/gs-accessing-data-rest + +org\springframework\web\servlet\DispatcherServlet.java + mappedHandler = getHandler(processedRequest) + +org.springframework.data.rest.core.mapping.ResourceMetadata + for (ResourceMetadata metadata : cache.values()) { +- Spring Data REST now comes with ALPS metadata +- HAL: https://tools.ietf.org/html/draft-kelly-json-hal-07 + +## ETag +- https://objectpartners.com/2015/06/02/etags-and-spring-data-rest/ +- http://stackoverflow.com/questions/31882180/why-is-the-version-property-not-set-with-spring-data-jpa + + +## ID +- https://github.com/spring-projects/spring-hateoas/issues/66 +- https://github.com/spring-projects/spring-hateoas/issues/67 +- https://github.com/gregturn/task-manager-app +- http://stackoverflow.com/questions/24936636/while-using-spring-data-rest-after-migrating-an-app-to-spring-boot-i-have-obser +- http://stackoverflow.com/questions/24839760/spring-boot-responsebody-doesnt-serialize-entity-id + +## JSON +https://github.com/spring-projects/spring-hateoas/issues/333 + +## Projects +https://github.com/spring-projects/spring-data-rest +https://github.com/spring-projects/spring-hateoas +https://en.wikipedia.org/wiki/HATEOAS +http://translate.academic.ru/hypermedia/en/ru/ +http://stackoverflow.com/questions/19514131/spring-hateoas-versus-spring-data-rest/19516776 +https://ru.wikipedia.org/wiki/Список_кодов_состояния_HTTP +https://github.com/spring-projects/spring-data-examples/tree/master/rest/ + +## Bugs +http://stackoverflow.com/questions/17277078/spring-mvc-exception-when-using-responsebody-and-entity-with-circular-referenc +http://stackoverflow.com/questions/8966030/hibernate-jpa-import-sql-utf8-characters-corrupted \ No newline at end of file diff --git a/pom.xml b/pom.xml index 06a7378..02edfbb 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 1.3.2.RELEASE + 1.5.3.RELEASE @@ -41,7 +41,25 @@ org.springframework.boot spring-boot-starter-thymeleaf + + + nz.net.ultraq.thymeleaf + thymeleaf-layout-dialect + + + org.springframework.boot spring-boot-starter-web @@ -65,12 +83,17 @@ spring-boot-configuration-processor true + + + com.google.apis + google-api-services-admin-directory + directory_v1-rev76-1.22.0 + - - org.pegdown - pegdown - 1.6.0 + org.jsoup + jsoup + 1.10.1 @@ -88,7 +111,7 @@ com.google.guava guava - 19.0 + 21.0 @@ -101,6 +124,20 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 + + + org.projectlombok + lombok + 1.16.14 + + + @@ -109,6 +146,14 @@ org.springframework.boot spring-boot-maven-plugin + diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..07ae2fa --- /dev/null +++ b/readme.md @@ -0,0 +1,49 @@ +https://api.travis-ci.org/gkislin/javaops.svg?branch=master + +## Разработка сайта для Java проектов http://javaops.ru + +[![Codacy Badge](https://api.codacy.com/project/badge/grade/300abd4332374403bec8fac9499b1127)](https://www.codacy.com/app/gkislin/javaops) +[![Build Status](https://travis-ci.org/gkislin/javaops.svg?branch=master)](https://travis-ci.org/gkislin/javaops) +[![Dependency Status](https://dependencyci.com/github/gkislin/javaops/badge)](https://dependencyci.com/github/gkislin/javaops) +[![codebeat badge](https://codebeat.co/badges/37249a90-da08-4f9b-804f-2197296f91ff)](https://codebeat.co/projects/github-com-gkislin-javaops) + +### Стек: +- Spring Boot +- H2 +- Thymeleaf +- Рассмаривается на кандидаты в UI: + - https://vaadin.com/elements + - https://www.sencha.com/products/gxt + +### Задачи: +- Рассылка сообщений в slack: https://api.slack.com/interactive-messages +SSL: https://www.emaro-ssl.ru/shop/Comodo/positive-ssl/ - 690р в год. +Есть бесплатные с пробным периодом 1-3 месяца. Но вижу бесплатные и на 2 года, что странно https://www.startcomca.com/ +Ограничения самого дешевого сертификата: 1 домен example.com и 1 поддомен www.example.com, но у каждого разные правила +Сертификат заказывается для доменного имени, поэтому при заказе сразу понадобиться либо почта admin@example.com, либо на свой хостинг положить файл, чтобы доказать, что доменное имя принадлежат тебе. См. другие способы валидации https://thehost.ua/wiki/SSL +Далее Comodo или другой сертификационный центр присылает сертификат на домен и пачку ssl-рутовых - всё это добро я скармливал nginx, а под ним tomcat. +Потом там начинаются проблемы с редиректами для логина на google.com/fb.com/vk.com +С этим всем можно 2 недели провозиться. Первый раз я пробовал всё настраивать на тестовом домене и хостинге. +emaro-ssl.ru + +https://thehost.ua/wiki/SSL +https://www.emaro-ssl.ru/shop/Comodo/positive-ssl/ + + +### Работа: + Создать пустой ./config/sql.properties + Закомментировать GoogleAdminSDKDirectoryService.init() + + Запуск: `mvn spring-boot:run` + + Коннект к базе (только 1 коннект возможен): + + - профиль **prod** (`\config\application-prod.yaml`, не чекинится в репозиторий) + - приложение не работает `jdbc:h2:file:~/db/javaops` + - приложение работает: `jdbc:h2:tcp://localhost:9092/~/db/javaops` + + - профиль **dev** + - `jdbc:h2:tcp://localhost:9092/mem:javaops` + + - Общение в https://javaops.slack.com/messages/javaops_ru/ + diff --git a/resources/activation.html b/resources/activation.html deleted file mode 100644 index 0ceb034..0000000 --- a/resources/activation.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - Изменение подписки - - - - - - -
-
-
-

- Ваша подписка выключена. -

-

Изменить подписку

-
-
- - diff --git a/resources/css/style.css b/resources/css/style.css index eda44b9..3c92aab 100644 --- a/resources/css/style.css +++ b/resources/css/style.css @@ -1,5 +1,113 @@ .box { - padding: 50px; text-align: center; vertical-align: middle; + align-content: center; +} + +.pad, .box { + padding-top: 70px; +} + +.container { + width: 1170px !important; +} + +.bs-callout { + padding: 5px 20px; +} + +.align_left, .dataTables_filter { + text-align: left !important; +} + +.align_center { + text-align: center; +} + +footer { + border-top: 1px solid #eee; + width: 1170px; + max-width: 100%; + margin-left: auto; + margin-right: auto; + padding: 15px; + font-size: 75%; + color: #CCC; +} + +.nav-bgr { + background-color: #293a48; +} + +a[href^="mailto:"] { + padding-left: 20px !important; + background: url(../static/img/email.png) no-repeat center left; + } + +a[href^="https://vk.com"]:not(.waves-effect), .vk { + padding-left: 20px !important; + background: url(../static/img/vk.gif) no-repeat center left; +} + +a[href^="https://tproger.ru"] { + padding-left: 20px !important; + background: url(../static/img/tprg.ico) no-repeat center left; +} + +a[href^="https://www.youtube.com"]:not(.waves-effect), .video { + padding-left: 20px !important; + background: url(../static/img/youtube.ico) no-repeat center left; +} + +a[href^="https://habrahabr.ru"] { + padding-left: 20px !important; + background: url(../static/img/habrahabr.png) no-repeat center left; +} + +a[href^="https://stackoverflow.com"] { + padding-left: 20px !important; + background: url(../static/img/so.ico) no-repeat center left; +} + +a[href^="https://www.linkedin.com"] { + padding-left: 20px !important; + background: url(../static/img/lin.png) no-repeat center left; +} + +a[href*="github.com"] { + padding-left: 20px !important; + background: url(../static/img/gh.png) no-repeat center left; +} + +a[href*="drive.google.com"] { + padding-left: 20px !important; + background: url(../static/img/gdrv.ico) no-repeat center left; +} + +a[href*="docs.google.com"] { + padding-left: 20px !important; + background: url(../static/img/gdoc.ico) no-repeat center left; +} + +a[href*="yadi.sk"] { + padding-left: 20px !important; + background: url(../static/img/yadi.png) no-repeat center left; +} + +a[href*="hh.ru"], a[href*="hh.ua"] { + padding-left: 20px !important; + background: url(../static/img/hh.png) no-repeat center left; +} + +.nav-link a{ + padding-left: 0 !important; + background: none !important; +} + +.anchor:target { + padding-top: 70px; +} + +.navbar-nav .nav-link { + padding-right: 1em; } \ No newline at end of file diff --git a/resources/exception.html b/resources/exception.html deleted file mode 100644 index d4fbbe8..0000000 --- a/resources/exception.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - Ошибка - - - - - - - -
-
-
-

Ошибка приложения:

- -

403

-

message

-
-
- - \ No newline at end of file diff --git a/resources/fragments.html b/resources/fragments.html deleted file mode 100644 index 1cdd5f6..0000000 --- a/resources/fragments.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/resources/habr/fistJob.html b/resources/habr/fistJob.html new file mode 100644 index 0000000..98ceabe --- /dev/null +++ b/resources/habr/fistJob.html @@ -0,0 +1,110 @@ +https://dou.ua/add-post/ + + + + Из юниоров в разработчики: получаем первую работу. + + + +Здравствуйте! Коротко о себе: программирую с 1989 г., с 2005 года в Java, с 2013 года работаю Java-тренером (до января этого года совмещал с основной работой Java-разработчика). Достаточно много моих выпускников трудоустроились, и я хочу поделится своими соображениями, как получить работу Java-разработчика (и не только Java). + +

От изучения Java до получения оффера работы - большое расстояние

+Требования к кандидатам на вакансию Java разработчика достаточно высоки, см. пример тестового задания на джуниора от одного из аутсорсеров РБ. Конечно есть позиции и с меньшими требованиям, но их не так много и, по статистике на Украине (dou работает через прокси, в Росии не нашел), соотношение Отклики/Вакансии на такие позиции: от 20 до 50. + +Для вакансий с опытом работы (которых значительно больше) получается замкнутый круг: без опыта не получить работы, а без работы не получить опыта. На вопрос "Кто виноват?" ответ очевиден - компании, которые не хотят вкладывать время и деньги в обучение, а хотят получить уже готового специалиста. Остается главный вопрос: + +

Что делать?

+ +Крупные компании в основном закрывают позиции юниоров своими стажерами. Один из вариантов трудоустройства - пойти на стажировку, но + + +Шаги другого варианта хорошо знакомы (отличное видео Якова Фейна "Как стать профессиональным Java разработчиком"): + +
+Хорошее (выделяющееся) резюме означает, что его замечает HR и отправляет вам приглашение на собеседование. + +В интернете есть большое количество рекомендаций, как этого добиться: + + +Но, на мой взгляд, главное: + +

Позиционируйте себя НЕ как юниора.

+Для этого необходимо: + + +Материалов по Java фреймворкам и технологиям в интернете много. Но если вы хотите их освоить, а не прочитать/посмотреть и забыть, необходимо написать на них собственный пэт-проект. Это может быть проект домашней библиотеки или бухгалтерии, или кормления кота или... Хорошо, если в нем будет реальная потребность - тогда при его эксплуатации вы постепенно будете приходить к оптимальным решениям. + +Лучше всего делать его на основе небольшого проекта на популярном стеке, например референсной имплементации Spring Pet clinic. С первого раза сделать код красивым и правильным не подсилу даже синьору. Проект должен жить и нести его владельцу радость приобщения к красоте кода через рефакторинг. И, кроме понимания технолигий и развития чувства перкрасного, из работы над собственным проектом Вы получаете навыки нахождения красивых и практических решений для конкретных задач и решения конкретных проблем, из которых состоит ежедневная работа программиста. Для этого нужно: + + +Эта задача непростая и, если знаний, опыта, времени недостаточно, рекомендую пройти какой-нибудь тренинг Java Enterprise на этом стеке, обязательно с написанием проекта на основе пройденных технологий на выходе. Мои критерии тренинга: + + +После того, как у Вас будет опыт в собственном Java Enterprise проекте, + +

Сделайте новое резюме:

+Типичное резюме Java юниора начинается так: +
Начать карьеру как junior Java developer в современной, перспективной компании, чтобы через 3 года стать специалистом...
+ Хорошо обучаем...
+ Оптыт работы: отсутствует
+ Прошел курсы...
+Нужно: + + +Например, ОПЫТ РАБОТЫ: +Участие в разработке Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей на стеке Maven/ Spring MVC/ Security/ REST(Jackson)/ Java 8 Stream API: + + +С таким резюме вы можете не бояться обращаться на вакансии с требованием 1-2 года опыта и, возможно, пройдете на следующий уровень: "Приглашения на собеседования и тренировка в их прохождении", что уже требует отдельной статьи. + +Спасибо за внимание и желаю отличной карьеры в IT . + \ No newline at end of file diff --git a/resources/habr/jsonView.html b/resources/habr/jsonView.html new file mode 100644 index 0000000..79e7797 --- /dev/null +++ b/resources/habr/jsonView.html @@ -0,0 +1,124 @@ + + + Spring/Jackson + @JsonView: фильтруем JSON. + +Здравствуйте!
+Недавно в проекте Spring столкнулся с задачей катомизации сериализации объекта User в JSON в зависимости от контроллера. +Для REST API контроллера нужно было возвращать хешированный пароль (поле user.password), а для контроллера отображения на UI- нет. +Можно решить задачу в "лоб", сделав нестолько TO (Data Transfer + Object), но в Spring 4.2+/Jackson 2.6 появилась возможность использовать +Jackson’s + Serialization Views. +Однако с статье есть подвох и для невнимательных читателей вьюхи работают не так, как он ожидает. +В результате мне пришлось немного покапаться в реализации Jackson чтобы понять, как все это работает. Коротко об этом "under cut". + +

MapperFeature.DEFAULT_VIEW_INCLUSION

+ +В статье есть небольшое упоминание "In Spring MVC default configuration, MapperFeature.DEFAULT_VIEW_INCLUSION is set to false." +Это означает что по умолчанию поля, непомеченные аннотацией @JsonView исключаются. +Но если посмотреть в код MapperFeature то увидим: + +
+    ...
+    * Default value is enabled, meaning that non-annotated
+    * properties are included in all views if there is no
+    * {@link com.fasterxml.jackson.annotation.JsonView} annotation.
+    *
+    * Feature is enabled by default.
+    */
+    DEFAULT_VIEW_INCLUSION(true),
+
+
+Т.е все с точностью до наоборот- все что непомечено включается. И если пометить только нужные для UI поля User: + +
+public class User
+    ...
+
+    @JsonView(View.UI.class)
+    protected String email;
+
+    @JsonView(View.UI.class)
+    protected boolean enabled = true;
+
+    protected String password;
+
+
+и вызвать метод контроллера + +
+@JsonView(View.UI.class)
+@RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
+public User get(@PathVariable("id") int id) {
+   return ...;
+}
+
+
+то в результат войдут как помеченные поля User (email, enabled, ..), так и все остальные (password). + +

FilteredBeanPropertyWriter

+Т.к. хочется исключить из контроллера UI только одно поле password, логично будет пометить только его. +Смотрим в код: если запрос контроллера и поля его результата аннотированы @JsonView, Jackson сериализует через +FilteredBeanPropertyWriter.serializeAsField. Для jackson-databind-2.8.0: + +
+    final Class activeView = prov.getActiveView();
+    if (activeView != null) {
+        int i = 0, len = _views.length;
+        for (; i < len; ++i) {
+           if (_views[i].isAssignableFrom(activeView)) break;
+        }
+        // not included, bail out:
+        if (i == len) {
+            _delegate.serializeAsOmittedField(bean, jgen, prov);
+            return;
+        }
+    }
+    _delegate.serializeAsField(bean, jgen, prov);
+
+
+Те. если view, которым помечено поле объекта совпадает или является суперклассом от view метода контроллера, +поле сериализуется. Иначе оно пропускается (serializeAsOmittedField). +

Решение

+В итоге: + \ No newline at end of file diff --git a/resources/habr/religion.html b/resources/habr/religion.html new file mode 100644 index 0000000..5aedb33 --- /dev/null +++ b/resources/habr/religion.html @@ -0,0 +1,12 @@ + + + Религия для программиста. + +Привет, Хабр!
+Тема достаточно необычная для habr, но хочу написать именно об этом: как программисту перестать беспокоится и начать жить в соглагии с собой и с +тем безграничным, которое имеет много названий и частью которого мы все являемся. +
+Для начала, как истинный программист, забил в поиск Google и был удивлен, но совсем не первый, кто пишет на эту тему:) +
+Про себя скажу, что в определенный момент (после института), решил бросить программирования из-за выгорания и невозможности контролировать себя. Когда сидишь 2-3 недели без отрыва от клавиатуры и экрана, +наступает пересыщение и нежелание вообще подходить к нему в течении следующей недели. \ No newline at end of file diff --git a/resources/habr/rss.html b/resources/habr/rss.html new file mode 100644 index 0000000..443b807 --- /dev/null +++ b/resources/habr/rss.html @@ -0,0 +1,33 @@ + + + Интегрируем мессенждеры: GitHub, RSS (в частности Java), вакансии под ваш запрос. + +

+Привет, Хабр!
+В последнее время набирают популярность команды мессанждеров по интересам. +Удобный интерфейс и разделение по каналом, общение в личке позволяет в них комфортно общаться большому (несколько сотен, а возможно и тысяч) человек. +Интеграция с другими приложениями делает этот инструмент общения еще более полезным (список приложений для Slack).
+

GitHub

+К примеру, если ваша команда в Slack разрабатывает общий проект на github, можно сделать отдельный канал для отслеживания всех изменений в проекте и +подпистаться на него. Нарпимер в моем учебном проекте Java Enterprise изменения в канале публикуются так:

+.
+

RSS новости

+Еще более интересную возможность дает интеграция с RSS: оформление подписки на новости. Пример подписки на Типичный программист

: +
+Наиболее интересные каналы новостей по Java: + +

Свежие вакансии

+Наконец, вы можете настроить свой запрос (зарплата, позиция, опыт, профобласть, регион, график) на HH и взять RSS вашего запроса +и подписываться на него, в Channel выбирав себя. Интересующие именно вас вакансии будут доставляться вам в личку. +
+Стоит иметь в виду, что быстрый отклик на вакансию имеет как плюсы, так и минусы, он особенно актуален для срочных вакансий. +
+Буду признателен за другие примеры полезных интеграций. Спасибо за внимание и желаю отличной карьеры в IT . + + diff --git a/resources/index.html b/resources/index.html deleted file mode 100644 index b430712..0000000 --- a/resources/index.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - Java Online Projects - - - - - - - -
-
-
-
    -
  • -

    Максимальный охват

    -

    Самые важные и необходимые Java разработчику темы, API, - фреймворки, инструменты в одном - курсе.

    -
  • -
  • -

    Насыщенное и структурированное изложение как - дополнение - к - проекту

    -

    Изложение материала "без воды" нацелено на практическое - использование и дополняется материалом для самостоятельной проработки. - Темы идут не по отдельности (в воздухе) на отстраненных примерах, а последовательно, - в - связке, как дополнения к - созданию единого работающего приложения.
    - Усвоение и понимание материала увеличивается в разы.

    -
  • -
  • -

    Совместная разработка

    -

    Участники на протяжении всего курса работают с кодом - проекта. - Выполнение домашних заданий - закрепляет полученные знания.
    В результате проект становится "Вашим".

    -
  • -
  • -

    Поддержка группы и преподавателя

    -

    По любым вопросам: git, трудоустройство, зарплаты - программиста, - java консультации, архитектура, новости IT и пр.

    -
  • -
  • -

    Доступность и структурированность материалов

    -

    Все видео доступно для просмотра онлайн и скачивания (в - случае - вебинаров- сразу после занятия). Записи разбиты по темам и - тщательно отредактированы. Большое количество подобранных ресурсов для углубления в - детали.

    -
  • -
  • -

    Оптимальное подобранное время

    -

    Занятия проходят раз в неделю, время необходимое для - проработки - пройденных тем и выполнения домашнего задания

    -
  • -
  • -

    Ревью Вашего кода.

    -

    Вы увидите именно свои ошибки в стиле, структурах - данных, - алгоритмах, кодировании.
    Опыт равноценен нескольким годам работы - разработчиком - java.

    -
  • -
-
-
-

Top Java Enterprise. Наиболее - востребованные технологии /инструменты /фреймворки Java Enterprise.

-

Старт 25.02.2016 (по четвергам с конца февраля).

-

Maven, Spring, Security, JPA(Hibernate), REST(Jackson), Bootstrap, jQuery + plugins
- Разработка полнофункционального Spring / JPA приложения c авторизацией и правами доступа на - основе - ролей

-
-
-
-
- -
- - - \ No newline at end of file diff --git a/resources/mails/basejava/basejava_for_topjava.html b/resources/mails/basejava/basejava_for_topjava.html new file mode 100644 index 0000000..e4fb8f7 --- /dev/null +++ b/resources/mails/basejava/basejava_for_topjava.html @@ -0,0 +1,40 @@ + + + + + + Информация: 29.03 начало интенсива "Практика Java. Разработка Web приложения". + +

+ Здравствуй firstName!
+

+

29.03 стартует очередной (7-й) выпуск еще одного моего тренинга: Практика Java. Разработка Web приложения. +

+

+ Занятия будут проходить в интенсивном режиме: 2 раза в неделю, с 20.00 (GMT+3, Москва) по вторникам и пятницам, все материалы будут + доступны в записи. Этот проект не так сильно проработат, как Topjava, поэтому будет проходить как вебинар, совмещенный с рассылкой. +

+

Организационные моменты

+Следующий выпуск topjava начнется 26.05, для тебя повторное участие бесплатное.
+"Разработка Web приложения" также будет еще проводится, точную дату следующего старта пока сказать не могу.
+Если у тебя есть пробелы в базовых вещах: организация памяти в Java, коллекции, дженерики, внутренние и вложенные классы, многопоточность, сервлеты, JDBC, объектная модель, +которые не дают тебе полноценно проходить курс Topjava, можно сделать паузу до 26.05 и принять участие в этом интенсиве. Или можно будет пройти этот курс уже после Topjava (таких примерно 10% участников Topjava). +

Требование к участникам:

+Насыщенное обучение предполагает наличие опыта в программировании. На базовом курсе изучается принципы ООП и + самые необходимые разделы Java API, включая работу с базой данных (JDBC API) и написние веб-приложения (Tomcat/ + Servlets/ JSP/ JSTL), поэтому знание SQL и HTML желательно. Все темы курса являются частью проекта, в материалах есть достаточно много ссылок на курс Программирование + на Java на intuit. Если у Вас опыта с Java немного, рекомендую прочитать его до курса. + Или будте готовы к тому, чтобы прорабатывать его вместе с темами наших занятий. Для полного усвоения + материалов выполнения домашних заданий и самостоятельная работа по ссылкам с вебинара НЕОБХОДИМА. + Т.е. это будет тренинг либо для программистов, желающих перейти на Java, либо для людей, у который уже есть практический опыт с Java. +

+Вступительное занятие, кроме установки ПО и Git, состоит из подтягивания проекта.
+

+

+ Стоимость участия со скидкой участника: 6200 руб. (90$) без проверки домашних заданий и 14400 руб. (209$) с проверкой. + По всем вопросам пиши в личку в skype (или slack). +

+

Ответы на вопросы.

+

+ \ No newline at end of file diff --git a/resources/mails/basejava/basejava_register_info.html b/resources/mails/basejava/basejava_register_info.html new file mode 100644 index 0000000..b2e5f9c --- /dev/null +++ b/resources/mails/basejava/basejava_register_info.html @@ -0,0 +1,32 @@ + + + + + + Информация по проекту "Практика Java. Разработка Web приложения". + +

+ Здравствуй firstName!
+

+Текущая информация по проекту "Практика Java. Разработка Web приложения": +
    +
  • + Обновилось вступительное задание: добавил видео "Литература по + Java и разработке ПО" и "Обзор языка Java". +
  • +
  • Оплатившим участникам начал раздавать учебные ключи к IDEA и доступ к материалам на Google Drive.
  • +
  • 25.03 (в эту пятницу) будет рассылка по 1-му уроку, первый вебинар будет 29.03 (во вторник) в 20.00 (Москва, GMT+3)
  • +
+Если вы решили участвовать в проекте - поспешите. +

+ Стоимость участия: 6900 руб. без проверки домашних заданий и 15900 руб. с проверкой.
+ Как обычно участникам моих курсов - скидка.
+ Добавляйтесь в skype: grigory.kislin, после этого можно оплачивать + курс. +

+ +Добавляйся в группу VK: Java Enterprise Online Обучение
+Всего наилучшего и до встречи на проекте!
+

Ответы на вопросы.

+

+ \ No newline at end of file diff --git a/resources/mails/basejava/basejava_reminder.html b/resources/mails/basejava/basejava_reminder.html new file mode 100644 index 0000000..0e13bf6 --- /dev/null +++ b/resources/mails/basejava/basejava_reminder.html @@ -0,0 +1,39 @@ + + + + + + Завтра (29.03) - начало вебинаров 'Практика Java. Разработка Web приложения'. + +

+ Здравствуй firstName!
+

+

+ Напоминаю, что завтра, 29.03 в 20.00 Москвы (GMT+3) стартуют вебинары проекта 'Практика Java. Разработка Web приложения'. Для участия в вебинарах протестируйте Adobe Connect meeting. +

+

Напомню, что нужно сделать до вебинара во вторник:

+
    +
  • Посмотреть видео вступительного занятия
    + (добавилось видео "Литература" и "Обзор языка Java") .
  • +
  • Поставить ПО: (Java 8, IDEA Ultimate).
  • +
  • Склонировать к себе локально проект:
    + git clone https://github.com/JavaWebinar/webapp.git
  • +
  • Открыть его в IDEA и запустить main().
  • +
  • Сделать аккаунт и репозиторий на GitHub. На первом занятии мы зальем туда твою + копию проекта. +
  • +
+

+ Стоимость участия: 6900 руб. без проверки домашних заданий и 15900 руб. с проверкой.
+ Добавляйтесь в skype: grigory.kislin, после этого можно оплачивать курс.
+ В USD можно оплачивать по текущему курсу. +

+ +Добавляйся в группу VK: Java Enterprise Online Обучение
+Всего наилучшего и до встречи на проекте!
+

Ответы на вопросы.

+

+

+ \ No newline at end of file diff --git a/resources/mails/basejava/intro_webinar.html b/resources/mails/basejava/intro_webinar.html new file mode 100644 index 0000000..674e90d --- /dev/null +++ b/resources/mails/basejava/intro_webinar.html @@ -0,0 +1,37 @@ + + + + ЗАВТРА бесплатный вебинар "Java: от основ до получения работы" + + +

+ Здравствуй firstName! +

+Прошу прощение за долгоую информационную паузу по проекту JavaSE + Web
+Рад сообщить, что ЗАВТРА совместно cо школой U-Rise я проверду бесплатный вебинар "Java: от основ до + получения работы". + +
    Темы вебинара: +
  • Что востребовано на рынке Java
  • +
  • С чего начинать изучение
  • +
  • Что нужно, чтобы стать Java разработчиком
  • +
  • Подготовка к собеседованию
  • +
+На вебинаре можно будет задать все интересующие вопросы мне, либо организатором обучения школы U-Rise.
+Для тех, кто не сможет присутствовать, будет рассылка записи вебинара. +

Начало трансляции по ссылке в 21.00 Москва / 20.00 + Киев

+

Дополнительная информация

+Проект JavaSE + Web ведется ведется на базе школы U-Rise в личном кабинете и с личным куратором.
+Прграмма проекта состоит из 18 занятий (вместе с +вступительным), +созданным на основе переработанного и дополненного проекта "Практика Java. + Разработка Web приложения".
+Презентация системы обучения U-Rise +

+ До встречи на вебинаре +

+

+

+ + \ No newline at end of file diff --git a/resources/mails/basejava/intro_webinar_record.html b/resources/mails/basejava/intro_webinar_record.html new file mode 100644 index 0000000..03ab690 --- /dev/null +++ b/resources/mails/basejava/intro_webinar_record.html @@ -0,0 +1,24 @@ + + + + ЗАПИСЬ вебинара "Java: от основ до получения работы" + + +

+ Здравствуй firstName! +

+Высылаю тебе запись вчерашнего вебинара + и презентацию с полезными ссылками.
+Если ты уже осилил вступительное задание JavaSE+Web, +свяжись со мной в skype grigory.kislin или ответом на письмо и я свяжу тебя с организаторами. +

+Проект JavaSE + Web ведется ведется на базе школы U-Rise в личном кабинете и с личным куратором.
+Прграмма проекта состоит из 18 занятий (вместе с +вступительным), +созданным на основе переработанного и дополненного проекта "Практика Java. + Разработка Web приложения"
. +

+

+

+ + \ No newline at end of file diff --git a/resources/mails/basejava/participate.html b/resources/mails/basejava/participate.html new file mode 100644 index 0000000..d3f75b8 --- /dev/null +++ b/resources/mails/basejava/participate.html @@ -0,0 +1,86 @@ + + + + Участие в проекте 'Разработка Web приложения "База данных резюме"'. + +

+ Здравствуй firstName!
+

+

+ Поздравляю тебя с участием в проекте "Разработка Web приложения "База данных резюме""!
+ На проекте общаемся на ты, так удобнее и процесс становится более неформальным. Проект ведется по подготовленным на основе вебинара, разбитым по темам и отредактированым записям в индивидуальном режиме. Все домашние + задания являются чаcтью проекта, подобранны по темам занятий и требуют реализации функциональности, схожей с + пройденной на занятии. Куратор проекта Татьяна. +

+

Заполнение регистрационной формы

+Общение на проекте будет вестись в группе Slack. Заполни пожалуйста все поля + регистрационной формы. После ее сохранения +
    +
  • на почту придет приглашение в группу (обычно в течении 5 мин, проверь папку спам)
  • +
  • по gmail аккаунту предоставится доступ к материалам. Если + картинка по ссылке закрыта, по порядку: +
      +
    • выйти-войти в gmail аккаунт, который ты указал в форме регистрации
    • +
    • попробовать войти в анонимной вкладке
    • +
    • Внимание!! НЕ НАДО запрашивать доступ через Google Drive (он дается автоматически по заполнению + формы)
    • +
    • если доступа нет, напиши мне в skype grigory.kislin или в личку в группы Slack
    • +
    +
  • +
+Общение в Slack происходит в каналах по темам, для каждого нового занятие будет делаться отдельный канал. Обсуждение первого занятия происходит в канале Slack #lesson01.
+Другие каналы Slack: +
    +
  • #flooding: оффтопик
  • +
  • #general: общие вопросы
  • +
  • #idea: вопросы по IDEA
  • +
  • #links: интересные ресурсы
  • +
  • #rss: подписка на публикации от JUG.ru, Хабрабабр, + Типичный программист. +
  • +
+Форматирование сообщений в + slack
+Desktop/ Mobile приложение Slack +

IDE: IntelliJ IDEA

+IDEA считается лучшей Java IDE, и по последней + статистике IntelliJ is the number one IDE. Поэтому разработка проекта ведется в IntelliJ IDEA, брать версию + Ultimate. Если ты студент (или есть знакомые студенты/ аспиранты), то лучше взять студенческую + учебную лицензию IntelliJ IDEA на год. Купон на бесплатную личную лизензию IntelliJ IDEA на полгода +можно получить согласно политике JetBrains только +один раз по этой ссылке и далее по +инструкции в письме (лучше активировать ее после месячного trial периода, купон будет действителен). +

Проверка домашних заданий

+Разбор домашний заданий происходит в начале каждого занятия.
+Если у тебя участие с проверкой ДЗ, то свое решение нужно присылать на проверку +Татьяне (@tanya) личным сообщением группы Slack в течении недели. +Если есть объективные причины, по которым не получается выполнить задание в течении недели, необходимо сообщить об этом Татьяне (из за разницы во времени Татьяна появляется онлайн ближе к вечеру). +

+ Проверка заданий подразумевает ревью твоего кода (лучше ДЗ присылать пораньше, чтобы успеть поправить ошибки и + сделать еще одно ревью). Ты увидишь именно свои ошибки в стиле, структурах данных, + алгоритмах и кодировании. Это самый эффективный способ научиться программировать. Все домашние задания + являются частью проекта. Участники чекинят код в + гитхаб и шлют ссылку на репозиторий. Результат проверки пишется в slack. Получается эффективно и + оперативно. Можно что-то переделать и снова поревьюится.
+

+

Пожелания к участникам.

+Для усвоения материала ВЫПОЛНЯТЬ ДОМАШНИЕ ЗАДАНИЯ НЕОБХОДИМО: после +лекции, через месяц у студента в голове остаётся 3% знаний. А если он выполнил упражнение на практике то в памяти +сохраняется 95% знаний + бонус. Студент, практикуя упражнение, открывает ещё 50% нюансов знаний, которые не были +озвучены преподавателем. + +

Ресурсы

+ +

+

+ \ No newline at end of file diff --git a/resources/mails/basejava/urise_start.html b/resources/mails/basejava/urise_start.html new file mode 100644 index 0000000..25554d1 --- /dev/null +++ b/resources/mails/basejava/urise_start.html @@ -0,0 +1,26 @@ + + + + + + Вступительное занятие курса 'Практика Java. Разработка Web приложения' + +

+ Здравствуй firstName!
+

+

+Я адаптировал и начал вести свой обновленный курс Практика Java. Разработка Web приложения в рамках школы U-Rise. +Курс расширился (предполагается 16 занятий) и идет на платформе обучения в личном кабинете с контролем результатов. Мне помогает еще один преподаватель Станислав, который лично курирует процесс обучения. +

+Курс расчитан на людей с разным уровнем знаний, поэтому, чтобы оценить свой уровень, нужно установить ПО и выполнить вступительное задание. +

+ После этого можно регистрироваться по сслыке обучение JAVA + и с тобой свяжутся и порекомендуют нужный формат прохождения курса (для новичков, начинающих или продолжающих). Не забудь получить скидку в 5%, сказав что пришел с сайта JavaWebinar.ru от меня. +

+

+ Добавляйся в группу VK: Java Enterprise Online Обучение
+ До встречи на курсе! +

+

+

+ \ No newline at end of file diff --git a/resources/mails/basejava/webinar_start.html b/resources/mails/basejava/webinar_start.html new file mode 100644 index 0000000..8ef1cb5 --- /dev/null +++ b/resources/mails/basejava/webinar_start.html @@ -0,0 +1,21 @@ + + + + Последнее занятие "Java. Разработка Web приложения" сегодня, в 20.00 (GMT+3) + + +

+ Здравствуй firstName! +

+Старт последнего занятия сегодня в 20.00 (GMT+3) в комнате Adobe meeting.
+Внимание - url поменялся, пароль снова webapp. Если с логином будут проблемы - попробуйте залогинится в анонимном окне (Ctrl+Shift+N). +

+ До встречи на вебинаре,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Java Online Projects +

+ + \ No newline at end of file diff --git a/resources/mails/basejava_entrance.html b/resources/mails/basejava_entrance.html new file mode 100644 index 0000000..2e8e86c --- /dev/null +++ b/resources/mails/basejava_entrance.html @@ -0,0 +1,41 @@ + + + + + + Первое занятие проекта 'Разработка Web приложения "База данных резюме"' + +

+ Здравствуй firstName!
+

+

+ Спасибо за интерес к проекту Разработка Web приложения "База данных резюме"!
+

+Я адаптировал и обновил этот проект (стало 17 занятий!) и теперь он идет в индивидуальном порядке (старт в любое время) по готовым материалам с поддержкой в группе Slack. +Проверку домашних заданий и поддержку проводит уже многим знакомая по стажировке Java Enterprise (Topjava) куратор проекта Татьяна. +

11.07 в 20.00 (GMT+3) будет вступительный вебинар по проекту +
    +
  • Презентация проекта
  • +
  • Настройка окружения и проекта в IntelliJ IDEA.
  • +
  • Ответы на вопросы
  • +
+

+

Но участвовать в обучении можно уже сейчас!

+

Изучайте первое открытое занятие.
+Внизу урока есть первое домашнее задание, по которому можно оценить свой уровень готовности к проекту.

+Первые участники уже обучаются (их совсем немного и внимание Татьяны к каждому сейчас больше, хотя общения между собой поменьше) +
    +
  • Проект ведется на GitHub (используем самую популярную систему версионирования Git)
  • +
  • Общение по проекту будет в группе Slaсk (разные каналы для уроков и общения)
  • +
  • Участникам проекта выдается индивидуальный ключ IDEA сроком на 6 месяцев (согласно политике JetBrains купон + выдается только один раз) +
  • +
+ +

+

+ \ No newline at end of file diff --git a/resources/mails/basejava_register.html b/resources/mails/basejava_register.html deleted file mode 100644 index f3db605..0000000 --- a/resources/mails/basejava_register.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Регистрация на проект 'Практика Java. Разработка Web приложения' - -

- Здравствуй firstName!
-

-

-Спасибо за регистрацию на проекте Практика Java. Разработка Web приложения!
-Старт проекта будет по мере набора группы.
-Буду делать рассылку и держать в курсе. -

-

До начала занятий необходимо установить ПО и подготовится по вступительному занятию.

-

-Добавляйся в группу VK
-Всего наилучшего и до встречи на проекте!
-

-

Ответы на вопросы.

-

-

- \ No newline at end of file diff --git a/resources/mails/confirm.html b/resources/mails/confirm.html deleted file mode 100644 index c4f9423..0000000 --- a/resources/mails/confirm.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - -

-

-

-

-

-

- \ No newline at end of file diff --git a/resources/mails/hr/at_consult.html b/resources/mails/hr/at_consult.html new file mode 100644 index 0000000..977cd1e --- /dev/null +++ b/resources/mails/hr/at_consult.html @@ -0,0 +1,43 @@ + + + + + + Уточнение релокации в профиле. Вакансия Java-разработчик (Москва,СПб) + + +

+ Здравствуй firstName!
+

+

+ Если у тебя поднят флаг "Рассматриваю релокацию", пожалуйста уточни в своем профиле + ее желаемое местонахождение, например: только Санкт-Петербург, Киев, Польша и Европа (можно делать избыточно, + множественный выбор через Ctrl). + Будущая рассылка вакансий и внимание HR будут нацелено на тебя точнее! +

+

В рамках сотрудничества с AT Consulting производится набор на + позицию Java-разработчик (Москва, Санкт-Петербург)

+Проект по разработке высоконагруженной фронтальной системы у ведущего российского банка на +современном стеке технологий.
+Подробное описание + в презентации +
    Краткая информация о системе: +
  • Общее число пользователей: более 200 000
  • +
  • Бекенд на Spring
  • +
  • Фронт базируется на React
  • +
  • В разработке используется Agile-методология
  • +
  • Все команды комплектуется как минимум одним высококлассным тимлидом, который курирует начинающих специалистов и + выполняет ревью кода +
  • +
+
    Кратко о компании: +
  • Ведущий системный интегратор AT Consulting.
  • +
  • Оформление по ТК. Белая заработная плата.
  • +
  • Возможность обучения. Кураторство начинающих специалистов.
  • +
+Если тебе вакансия интересна, пришли в ответ ссылку на резюме и на свою реализацию выпускного проект Topjava (или своего на подобном стеке). +Я сделаю небольшой фидбэк по решению. Время на ответ и количество кандидатов на вакансию не ограничено, но, чем быстрее, тем больше шансов. +

+

+ diff --git a/resources/mails/hr/hr.html b/resources/mails/hr/hr.html new file mode 100644 index 0000000..49014dd --- /dev/null +++ b/resources/mails/hr/hr.html @@ -0,0 +1,27 @@ + + + + + + Трудоустройство: запущено сотрудничество с HR + +

+ Здравствуй firstName!
+

+Рад сообщить, что начался процесс сотрудничества с HR (если у тебя поднят флаг Рассматриваю предложения о работе, возможно, ты уже начал получать рассылку). +Обращаю внимание, что поля, доступные сотрудникам HR: имя, почта, скайп, город, ссылка на резюме, готов к релокации, "Обо мне. Опыт с Java". +Проверь, что в твоем профиле все эти поля заполненны корректно. +Например, если город есть в выпадающем списке, поставь его в этом виде (заглавные буквы не объязательны). На всякий случай повторю: твои данные доступны HR только при включенном флаге "Рассматриваю предложения о работе". +Напомню про позиционирование проекта Topjava в своем резюме в опыте работы (не как обучение, а как участие в проекте). +

+Если у тебя на работе готовы трудоустроить наших выпускников (среди которых есть очень хорошие готовые специалисты), пожалуйста дай мне email вашего отдела кадров (или дай им мои контакты). +Я занесу их в список доступа и напишу как делать запрос к данным соискателей. +

+

+ Наконец, если ты трудоустроился благодаря Topjava/Masterjava и прошел испытательный срок, очень жду историй успеха.
Помоги тем, кто еще в процессе трудоустройства! +

+Надеюсь вместе с вами сделать процесс трудоустройства простым и доступным каждому выпускнику! +

+

+ \ No newline at end of file diff --git a/resources/mails/hr/hr2.html b/resources/mails/hr/hr2.html new file mode 100644 index 0000000..b7fc7cd --- /dev/null +++ b/resources/mails/hr/hr2.html @@ -0,0 +1,37 @@ + + + + + + Трудоустройство: 04.04 рассылка по HR (на данный момент 54 партнера) + +

+ Здравствуй firstName!
+

+Рад сообщить, что договорился о партнерстве с 54-мя (на данный момент) организациями и HR-фрилансерами, которым интересны пре-миддл и миддл +Java разработчики (как с коммерческим опытом, так и без него). Если ты рассматриваешь предложения о работе (и уже готов проходить техническое собеседования), проверь что: +
    +
  1. в твоем профиле есть ссылка на резюме
  2. +
  3. резюме открыто и доступно без авторизации
  4. +
  5. если еще нет опыта в it и ты закончил topjava/masterjava, они отображены в разделе опыт
  6. +
  7. информация (город, о себе, готов к релокации, рассматриваю предложения о работе) актуальна
  8. +
+Твои данные доступны HR только при включенном флаге "Рассматриваю предложения о работе" и присутствии ссылки на резюме. Задача: получить опыт в как можно большем количестве технических интервью (см. типичные вопросы на собеседовании). + Результатами собеседований делимся в канале #vacancies +группы выпускников Slack JavaOPs (если ты участник проектов, можно присоединится по ссылке. После сохранения формы должно прийти приглашение). +

+ Если резюме или ты еще не готовы, не расстраивайся: я буду рассылать всем HR обновления нашей базы кандидатов (скорее всего в начале июня). +

+

+ Если у тебя на работе готовы трудоустроить наших выпускников (среди которых есть очень хорошие готовые специалисты) или есть знакомые HR, пожалуйста дай мне email (или дай им мои контакты). + Я занесу их в список доступа и напишу как делать запрос к данным соискателей. +

+

+ Наконец, если ты трудоустроился благодаря Topjava / Masterjava и прошел испытательный срок, + обнови поля профиля "Получил работу благодаря стажировке Java Online Projects" (для статистики) и "Текущее место работы" и очень жду твою историю успеха. Помоги тем, кто еще в процессе трудоустройства! +

+Желаю удачи на собеседованиях и отличной карьеры в IT! +

+

+ \ No newline at end of file diff --git a/resources/mails/hr/hr3.html b/resources/mails/hr/hr3.html new file mode 100644 index 0000000..cbbc8dd --- /dev/null +++ b/resources/mails/hr/hr3.html @@ -0,0 +1,20 @@ + + + + + + Рассылка доступа к базе кандидатов: проверьте доступ к резюме и как правильно написать "Обо мне" + +

+ Здравствуй firstName!
+

+Напомню, что 04.04 начинаю рассылку базы выпускников, рассматривающих работу (флаг рассматриваю предложения о работе поднят и есть ссылка на резюме).
+В базе есть закрытые резюме, которые требуют авторизации (например на hh.ru). Проверь!
+Также очень важна для HR информация Обо мне. Вот так выглядит информация, которую видит HR.
+Напиши о себе что-нибудь (пусть будет нескромно:), чтобы твое резюме захотели открыть! Например тут основная часть или вот небольшие примеры. +

+Напомню ссылки для подготовки к собеседованию. Удачи и отличной карьеры в IT! +

+

+

+ \ No newline at end of file diff --git a/resources/mails/hr/it_rabota.html b/resources/mails/hr/it_rabota.html new file mode 100644 index 0000000..49dba4e --- /dev/null +++ b/resources/mails/hr/it_rabota.html @@ -0,0 +1,20 @@ + + + + + + Сотрудничество с IT Rabota + + +

+ Здравствуйте!
+

+

+В рамках сотрудничества Java Online Projects и IT Rabota +ответьте пожалуйста, удалось ли Вам найти работу по их программе трудоустройства? Если нет - почему?
+Буду очень признателен за ответ, заранее спасибо. +

+

+

+ + diff --git a/resources/mails/hr/jet_vacation.html b/resources/mails/hr/jet_vacation.html new file mode 100644 index 0000000..01ed142 --- /dev/null +++ b/resources/mails/hr/jet_vacation.html @@ -0,0 +1,33 @@ + + + + + + Вакансия Java-разработчик (на полгода, Москва, обучение продукту в Чехии) + + +

+ Здравствуй firstName!
+

+

+ Есть неплохая вакансия в Москве до конца года: (на чешский проект, компания Jet Infosystem).
+ Вилка- 100_000 - 170_000 руб. брутто.
+ Обучение продукту в Чехии (18.07.2016 – 19.08.2016), потом до конца года работа в Москве на територии заказчика.
+ Обучение бесплатно, проезд-проживание компенсируются по факту.
+ К 18.07.2016 нужно иметь загран паспорт и визу. +

+
    Требования: +
  • Отличное знание Java core, опыт разработки от 1 года
  • +
  • Уверенное знание SQL (Oracle), опыт создания сложных запросов
  • +
  • Опыт использования Spring (3.0.x), application containers (Tomcat, Jetty)
  • +
  • Опыт разработки WebServices (Apache CXF, REST …)
  • +
  • Опыт использования Log4j
  • +
  • Опыт разработки JUnit, Unitils, Mockito тестов, знание методики TDD
  • +
  • Опыт создания скриптов на Ant/Maven
  • +
  • Опыт использования JPA (EclipseLink) (опционально)
  • +
  • Опыт использования Vaadin (опционально)
  • +
+Если интересно, пришли плз. ссылку на резюме (ответ на письмо или по скайпу grigory.kislin). +

+

+ diff --git a/resources/mails/hr/sber.html b/resources/mails/hr/sber.html new file mode 100644 index 0000000..8c26eea --- /dev/null +++ b/resources/mails/hr/sber.html @@ -0,0 +1,45 @@ + + + + + + Вакансия Java-разработчик (Москва,Санкт-Петербург) + + +

+ Здравствуй firstName!
+

+Возможно тебе будет интересно: открыты вакансии Java разработчиков: +

AT Consulting (Москва, Санкт-Петербург)

+Подробное описание в презентации +
    Краткая информация о системе: +
  • Общее число пользователей: более 200 000
  • +
  • Бекенд на Spring
  • +
  • Фронт базируется на React
  • +
  • В разработке используется Agile-методология
  • +
  • Все команды комплектуется как минимум одним высококлассным тимлидом, который курирует начинающих + специалистов и + выполняет ревью кода +
  • +
+
    Кратко о компании: +
  • Ведущий системный интегратор AT Consulting.
  • +
  • Оформление по ТК. Белая заработная плата.
  • +
  • Возможность обучения. Кураторство начинающих специалистов.
  • +
+

ТехноДиасофт (Москва)

+
    +
  • Требования: Java Core, Oracle, Hibernate
  • +
+Если тебе вакансии интересны, пришли в ответ ссылку на резюме.
+Удаленка не предусмотрена, только с релокацией. +Вилка ~60-80 тыс. руб. +

+ Еще - если интересна/неинтересна рассылка вакансий - проверь плз. + в своем профиле поля + "Рассматриваю предложения о работе", "Рассматриваю релокацию" и "Ссылка на резюме". + +

+

+

+ \ No newline at end of file diff --git a/resources/mails/hr/underRecruitment.html b/resources/mails/hr/underRecruitment.html new file mode 100644 index 0000000..a7aa654 --- /dev/null +++ b/resources/mails/hr/underRecruitment.html @@ -0,0 +1,33 @@ + + + + Трудоустройства выпускников Topjava/Masterjava + +

+ Здравствуй!
+

+Пишу по поводу трудоустройства выпускников. Если у тебя на работе готовы рассмотреть базу выпускников стажировки Topjava/ +проекта Mastrejava я буду рад выслать ее на почту. Лучше напрмую HR, тк периодически (раз в 2-3 месяца) +буду делать рассылку и обновления базы. +Можно переслать это письмо с текстом: +

+Предлагаю Вам бесплатный доступ к базе выпускников стажировки Java Enterprise с соискателями на позицию Middle Java +разработчик. +Стажировка проводится с 2014 года по самым востребованным технологиям (Maven, Spring MVC, Security, JPA(Hibernate), +REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API, JAXB/STaХ, SOAP/JAX-WS, +JAX-RS и др.) +На данный момент в базе 155 кандидатов с резюме, география в основном Россия, Украина, Беларусь, +Казахстан, Польша. Достаточно много выпускников (среди которых есть очень хорошие готовые специалисты уровня миддл) в +настоящий момент рассматривают вакансии Java разработчиков. +Если у вас есть заинтерсованность в специалистах такого уровня (в основном без опыта комммерческой разработки, но +готовых сразу же влится в проект и приносить прибыль), пришлите мне ответ на admin@javaops.ru. +По email я дам доступ и вышлю ссылку на данные соискателей, которых можно фильтровать по городам и есть удобная опция +экспорта данных в формате csv. Я +делаю это бесплатно, потому что мне важно трудоустройство выпускников. +

+

+ С лучшими пожеланиями,
+ Григорий Кислин
+ skype: grigory.kislin +

+ \ No newline at end of file diff --git a/resources/mails/idea_register.html b/resources/mails/idea_register.html new file mode 100644 index 0000000..3df7f4c --- /dev/null +++ b/resources/mails/idea_register.html @@ -0,0 +1,23 @@ + + + + Регистрация IntelliJ IDEA + +

+ Здравствуй!
+

+Для персональной регистрации учебной лицензии IntelliJ IDEA на полгода: +
    +
  • зайди по этой ссылке
  • +
  • выбери в New Subscription кнопку BUY NOW
  • +
  • следуй этой инструкции (с пункта 2)
  • +
  • под Product IntelliJ IDEA есть линк "Have a discount code?", введи туда + купон
  • +
  • после завершения заказа на почту приходит письмо с сертификатом.
    + В IDEA я его активировал через Help -> Register...-> JetBrains Account -> email/password -> Activate.
    + Возможно также активировать по ссылке из письма и "Download activation code for offline usage" или через "Legacy license key"
  • +
+Не спеши при регистрации. Если c нескольких раз не получилось, пиши в личку skype или slack. +

+

+ \ No newline at end of file diff --git a/resources/mails/javaops/news.html b/resources/mails/javaops/news.html new file mode 100644 index 0000000..2ca6b19 --- /dev/null +++ b/resources/mails/javaops/news.html @@ -0,0 +1,57 @@ + + + + + + Обновления в Topjava, Статистика и Трудоустройство. + +

+ Здравствуй firstName!
+

+Проект Topjava постоянно развивается, в том числе благодаря вашему активному участию, появляются новые отзывы участников, +новые технологии (Bootstrap Glyphicons, +XSS, JPA 2.1 EntityGraph, Jackson @JsonView, методы улучшения качества кода) список изменений по проектам, новый дизайн демо приложения. Код самого последнего (9-го) выпуска проекта можно взять на GitHub. +

Если у тебя есть знакомые, желающие значительно поднять свой уровень владения самым востребованным в Java Enterprise + стеке + технологий и принять участие в проекте, до 01.03 действует акция на + юбилейный 10й проект: 7700 руб. (без проверки ДЗ) и 15000 руб. с проверкой.

+TopJava-10 начнется 16.03 (первое занятие 23.03, расписание). +Если есть желание повторно поучаствовать, небольшое условие: пожалуйста сделай репост объявления о наборе в VK или в Facebookзарегистрируйся, +придет ссылка на группу Slack topjava10 (за репост буду благодарен, даже если не собираетесь идти на повтор:). +
+Проект Java OPs также развивается (хотя и не так быстро, как бы мне хотелось). Растет +число историй успеха.
+

А ты уже прошел испытательный срок и написал свою историю:)?
+ Помоги тем, кто еще в процессе трудоустройства!

+ +Также собираюсь делать рассылки по вакансиям более красиво, чем через форму + соискателя. +
    В твоем профиле + появились поля +
  • Рассматриваю предложения о работе: рассылка о работе на почту, доступность твоих данных для HR
  • +
  • Ссылка на резюме (проверь, что оно открыто, не забудь вписать Topjava в + опыт) +
  • +
  • Готов к релокации: рассматриваешь предложения независимо от города
  • +
  • Текущее место работы и идет набор: последнее, если у тебя на работе готовы + трудоустроить наших выпускников, это важно! +
  • +
  • Получил работу благодаря стажировке Java Online Projects: для статистики, которая будет доступна + всем +
  • +
+Пожалуйста отредактируй город из выпадающего списка (в основном кириллицей), чтобы тебя нашли и скорректируй данные о +себе для HR, если рассматриваешь предложения о работе.
+Надеюсь, что вместе с вами процесс трудоустройства станет простым и доступным каждому выпускнику! +

+

+ \ No newline at end of file diff --git a/resources/mails/javaops/slack_invitation.html b/resources/mails/javaops/slack_invitation.html new file mode 100644 index 0000000..79c87e2 --- /dev/null +++ b/resources/mails/javaops/slack_invitation.html @@ -0,0 +1,23 @@ + + + + + + Регистрация в группе Slack "Java Online Projects". + + +

+ Здравствуй firstName!
+

+Рад сообщить, что группа skype с общением выпускников и участников Java Online проектов на все темы IT (помощь с Java, отзывы о работах, обсуждение тестовых заданий, вакансии, цены на рынке труда, IT события, интересные видео по теме и пр.) +переехала на Slack (группа javaops). По каждой теме сделан свой канал. Т.е по общим темам общаться удобно там, по проекту topjava- только в нашей topjava7. +Клиент Slack поддерживает несколько групп и переключение между ними. +

+ +Проверь пожалуйста свои данные регистрационной формы. +Галочка 'размещение своих данных в закрытой статистике группы' говорит о том, что участники проектов смогут увидеть твои контактные данные в статистике (приделаю позже). +

+После сохранения формы на почту должно прийти приглашение в новую группу. Приглашаю всех разработчиков! +

+

+ diff --git a/resources/mails/javaops/story_notify.html b/resources/mails/javaops/story_notify.html new file mode 100644 index 0000000..47d6676 --- /dev/null +++ b/resources/mails/javaops/story_notify.html @@ -0,0 +1,31 @@ + + + + + + Наши истории (делимся опытом и успехом) + +

+ Здравствуй!
+

+

+ У нас появились первые истории! +

+

+Я добавил еще свою и спасибо всем, кто откликнулся!!! Много кто еще или собирается написать, или ждет окончания испытательного срока. +Пишите!! Думаю что это будет полезно как автору - переосмыслить свой опыт, так и конечно же тем, кто ищет работу или делает первые шаги в карьере. +А может даже и не первые:) +

+

+Свои новости написал в конце своей истории: 29.03 запускаю совмещенный с рассылкой вебинар-интенсив Практика Java. Разработка Web +приложения (2 раза в неделю) и 26.05 будет следующий (7й) выпуск Topjava Enterprise. В ближайших планах обновить вебинар Веб-сервисы. SOA-based + архитектура, дополнив его микросервисами и разрабатываю проект Topjava-2: Spring Boot, H2, Thymleaf, AWS, nginx, +авторизация по OAuth2, асинхронность, Guava, ... +

+Участники Topjava, уделите, пожалуйста, 5-10 минут своей жизни на этот опросник - это очень поможет нам улучшать курс TopJava и другие курсы. +

+

+ \ No newline at end of file diff --git a/resources/mails/javaops/webinar2_topjava.html b/resources/mails/javaops/webinar2_topjava.html new file mode 100644 index 0000000..4574350 --- /dev/null +++ b/resources/mails/javaops/webinar2_topjava.html @@ -0,0 +1,24 @@ + + + + + + Вебинар СЕГОДНЯ в 20.00 Москва, 19.00 Киев: "Осваиваем Java Enterprise" + +

+ Здравствуй firstName!
+

+Напоминаю, что СЕГОДНЯ в 20.00 GMT+3 состоится бесплатный вебинар: +

Осваиваем Java Enterprise

+
    +
  • Статистика: что востребовано на рынке
  • +
  • С чего начинать изучение
  • +
  • Что нужно, чтобы стать Java разработчиком
  • +
+Для участия нужно в назначенное время зайти по ссылке: +

Прямая трансляция "Осваиваем Java Enterprise"

+Статистика, полезные ресурсы, структура типичного Enterprise приложения, опыт трудоустойства и ответы вживую на любой интересующий тебя вопрос по этим темам.
+
+Слайды презентации +

+ \ No newline at end of file diff --git a/resources/mails/javaops/webinar3_topjava.html b/resources/mails/javaops/webinar3_topjava.html new file mode 100644 index 0000000..75c03ec --- /dev/null +++ b/resources/mails/javaops/webinar3_topjava.html @@ -0,0 +1,23 @@ + + + + + + Запись вебинара ОСВАИВАЕМ JAVA ENTERPRISE + +

+ Здравствуй firstName!
+

+По ссылке доступна немного отредактированная в начале запись сегодняшнего вебинара +

ОСВАИВАЕМ JAVA ENTERPRISE

+Надеюсь, что было интересно. +

+Полезные ссылки из слайдов презентации: +

+

+

+ \ No newline at end of file diff --git a/resources/mails/javaops/webinar_topjava.html b/resources/mails/javaops/webinar_topjava.html new file mode 100644 index 0000000..54d5010 --- /dev/null +++ b/resources/mails/javaops/webinar_topjava.html @@ -0,0 +1,21 @@ + + + + + + Бесплатный вебинар: "Осваиваем Java Enterprise". 17.11 (четверг), 20.00 (GMT+3) + +

+ Здравствуй firstName!
+

+Приглашаю тебя на бесплатный ознакомительный вебинар по актуальной для каждого начинающего Java разработчика теме: +

Осваиваем Java Enterprise

+
    +
  • Статистика: что востребовано на рынке
  • +
  • С чего начинать изучение
  • +
  • Составляем резюме. Первая работа
  • +
+

Начало 17.11 (четверг) в 20.00 Москва, 19.00 Киев

+Статистика, полезные ресурсы, структура типичного Enterprise приложения, опыт трудоустойства и ответы вживую на любой интересующий тебя вопрос по этим темам. +

+ \ No newline at end of file diff --git a/resources/mails/javaops/webinar_urise.html b/resources/mails/javaops/webinar_urise.html new file mode 100644 index 0000000..37ee3c6 --- /dev/null +++ b/resources/mails/javaops/webinar_urise.html @@ -0,0 +1,27 @@ + + + + + + ЗАВТРА, 10.11 в 19.00 Киев, 20.00 Москва вебинар: Java SE + Web + Enterprise. Трудоустройство. + +

+ Здравствуй firstName!
+

+

Приглашаю тебя на бесплатный вебинар по актуальным темам:

+

Осваиваем Java SE + Web

+
    +
  • Основные темы Java SE
  • +
  • Самые частые вопросы на собеседованиях
  • +
  • Первое Web приложение
  • +
+

Java Enterprise

+
    +
  • Что востребовано на рынке
  • +
  • С чего начинать изучать
  • +
  • Составляем резюме. Первая работа
  • +
+Статистика, полезные ресурсы, опыт трудоустойства и ответы вживую на любой интересующий тебя вопрос по этим темам. +

Приглашаю к участию в вебинаре

+

+ \ No newline at end of file diff --git a/resources/mails/jr_confirm.html b/resources/mails/jr_confirm.html new file mode 100644 index 0000000..d20ea10 --- /dev/null +++ b/resources/mails/jr_confirm.html @@ -0,0 +1,142 @@ + + + + Зачисление на стажировку JavaRush 06.07.2017 + +

+ Здравствуй!
+

+

Ваше решение тестового задания проверено. Поздравляю, результат положительный!
+ Вы зачислены на стажировку JavaRush 06.07.2017 +

+

+ Тип участия: (про проверку домашних заданий смотрите ниже). +

+

Информация по проекту от преподавателя Григория Кислина:

+

Поздравляю с участием в стажировке на проекте Java Enterprise + (Topjava)

+Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API и сохранением в базах данных Postgresql и HSQLDB. +

+Общение на проекте предлагаю на "ты". Проект ведется по подготовленным на основе вебинара, разбитым по темам и +отредактированым записям. +Раз в неделю (четверг) производится рассылка новых материалов, обновления к проекту (патчи) и домашние задания. Все +домашние +задания являются чаcтью проекта, подобранны по темам занятий и требуют реализации функциональности, схожей с +пройденной на занятии. +

+

Описание и план проекта
+ Демо разрабатываемого приложения

+

Заполнение регистрационной формы

+Общение на проекте будет вестись в группе Slack. Заполни пожалуйста все поля + регистрационной формы. После ее сохранения +
    +
  • на почту придет приглашение в группу (обычно в течении 5 мин, проверь папку спам)
  • +
  • по gmail аккаунту предоставится доступ к материалам. Если + картинка по ссылке закрыта, по порядку: +
      +
    • выйти-войти в gmail аккаунт, который ты указал в форме регистрации
    • +
    • попробовать войти в анонимной вкладке
    • +
    • Внимание!! НЕ НАДО запрашивать доступ через Google Drive (он дается автоматически по заполнению + формы)
    • +
    • если доступа нет, напиши мне в skype grigory.kislin или в личку в группы Slack
    • +
    +
  • +
+Общение в Slack происходит в каналах по темам, для каждого нового урока будет делаться отдельный канал. Обсуждение +вступительного занятия происходит в канале Slack #hw0.
+Другие каналы Slack: +
    +
  • #flooding: оффтопик
  • +
  • #general: общие вопросы
  • +
  • #git: вопросы по git
  • +
  • #idea: вопросы по idea
  • +
  • #interview_job: прохождение интервью, работа, + вакансии +
  • +
  • #links: интересные ресурсы
  • +
  • #rss: подписка на публикации от JUG.ru, Хабрабабр, + Типичный программист. +
  • +
+Форматирование сообщений в + slack
+Desktop/ Mobile приложение Slack +

IDE: IntelliJ IDEA

+IDEA считается лучшей Java IDE, и по последней + статистике IntelliJ is the number one IDE. Поэтому разработка проекта ведется в IntelliJ IDEA, брать версию + Ultimate. Если ты студент (или есть знакомые студенты/ аспиранты), то лучше взять студенческую + учебную лицензию IntelliJ IDEA на год. Купон на бесплатную личную лизензию IntelliJ IDEA на полгода +можно получить согласно политике JetBrains только +один раз по этой ссылке и далее по +инструкции в письме (лучше активировать ее после месячного trial периода, купон будет действителен). +

Вводное занятие

+До старта проекта 06.07 приступай к освоению вводного + занятия. Здесь есть видео с подробными инструкциями по установке проекта и работе с системой управления +версиями git и GitHub. +Перед выполнением домашнего задания обязательно посмотри все видео занятия и следуй +инструкциям. Особое внимание обращаю на wiki по ведению + проекта в Git, необходимо строго следовать этим правилам. +

Проверка домашних заданий

+Разбор домашний заданий происходит в начале каждого занятия.
+Если у тебя подписка ментор или Premium Pro, то свое решение вступительного задания нужно присылать на +проверку начиная c +06.07 до вечера 11.07 и остальных домашних заданий - до вечера вторника.
+

+ Проверка заданий подразумевает ревью твоего кода (лучше ДЗ присылать пораньше, чтобы успеть поправить ошибки и + сделать еще одно ревью). Ты увидишь именно свои ошибки в стиле, структурах данных, алгоритмах и кодировании. Это + самый эффективный способ научиться программировать. Все домашние задания это часть проекта. Часть из них + достаточно + простая, часть Optional - сложнее. Обычно участники чекинят код в гитхаб и шлют ссылку на репозиторий. Проверка + заданий делается ассистентом Татьяной при моей поддержке, результат проверки пишется в slack. Получается эффективно и + оперативно. Можно что-то переделать и снова поревьюится. +

+

+ Также, начиная с 4-го занятие участники разраатывают выпускной проект на нашем стеке (Maven/ Spring MVC, Security/ + Hibernate/ REST), ревью которого входит в участие с проверкой. Если у тебя тип участие "без проверки" ДЗ и есть желание участвовать с + проверкой, свяжись со мной + отдельно по skype: grigory.kislin или в личку + в группы Slack. + Стоимость проверки всех домашних заданий + ревью выпускного проекта: 7900 руб./140$ +

+Также для всех участников: бесплатное (или с доплатой за проверку) участие в следующий выпусках проекта Topjava +(ближе к концу проекта я вышлю ссылку). +Проект постоянно развивается, в том числе благодаря вашему активному участию. По сравнению с первыми выпусками проект существенно обновился. + +

Пожелания к участникам.

+Обычно участники подбираются с разным уровнем. Поэтому главное - не стеснятся задавать вопросы! Всегда есть поддержка +группы, меня и ассистента Татьяны. Проходят занятия раз в неделю, поэтому времени для усвоения пройденного и выполнения +домашних +заданий достаточно, при условии что вы НЕ ОТКЛАДЫВАЕТЕ обучение на потом. В зависимости от уровня подготовки на обучение +необходимо уделять от 5 до 15 часов в неделю. Для усвоения материала ВЫПОЛНЯТЬ ДОМАШНИЕ ЗАДАНИЯ НЕОБХОДИМО: после +лекции, через месяц у студента в голове остаётся 3% знаний. А если он выполнил упражнение на практике то в памяти +сохраняется 95% знаний + бонус. Студент, практикуя упражнение, открывает ещё 50% нюансов знаний, которые не были +озвучены преподавателем. + +

Ресурсы

+Основы JavaSсript необходимы для понимания проекта, начиная с 8-го занятия. Для подготовки к проекту рекомендую изучить +Полезные ресурсы. +Еще полезные ссылки: + +

+ Удачи в освоении материалов и выполнении вводного задания,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Java Online Projects +

+ diff --git a/resources/mails/linkedin.html b/resources/mails/linkedin.html new file mode 100644 index 0000000..7c7af0d --- /dev/null +++ b/resources/mails/linkedin.html @@ -0,0 +1,19 @@ + + + + + + Java Online Projects на LinkedIn + +

+ Здравствуй!
+

+Рад сообщить, что Java Online Projects появился как компания на linkedIn. +

+ Т.е теперь в своем резюме на linkedIn можно занести опыт работы с указанием компании: набирай в имени компании Java Online... и она появится в списке.
+ Пример, как можно позиционировать в резюме проект Topjava. +

+Также напомню, что когда у тебя появится возможность поделиться своим опытом и успехом, буду рад разместить твою историю. +

+

+ \ No newline at end of file diff --git a/resources/mails/mailFragments.html b/resources/mails/mailFragments.html index bf702fc..0f07b73 100644 --- a/resources/mails/mailFragments.html +++ b/resources/mails/mailFragments.html @@ -1,22 +1,81 @@ -

-
+

С лучшими пожеланиями,
Григорий Кислин
skype: grigory.kislin

- Java Online Projects + Личный профиль
+ Java Online Projects
+ vk: Java Enterprise Online Projects (все самое интересное из мира Java + и IT)

- отписаться от рассылки
+ Отписаться от рассылки
+

+
+ +
+

+ Удачи в освоении материалов и выполнении задания,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Личный профиль
+ Java Online Projects
+ vk: Java Enterprise Online Projects (все самое интересное из мира Java + и IT) +

+
+
+

+ С лучшими пожеланиями,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Личный профиль
+ Java Online Projects
+ vk: Java Enterprise Online Projects (все самое интересное из мира Java + и IT) +

+
+
+

+ С лучшими пожеланиями,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Отписаться от рассылки
+

+
+
+

+

    На бонусы можно +
  • получить скидку на любой из текущих проектов (Masterjava, + Basejava, Topjava), 1 бонус = 1% скидки +
  • +
  • получить скидку на будущие проекты. В конце лета планирую дополнения к Topjava (Java Config, Thymleaf, H2, + Bean Mapping, Ouath2, JWT, Nginx, Spring Boot, ...). +
  • +
  • накопив от 100 бонусов получить комиссию деньгами (100 бонусов = 10 000 руб./ 175$)
  • +
+
    Личные реферальные ссылки: +
  • +
  • +
  • +

\ No newline at end of file diff --git a/resources/mails/masterjava/_participate.html b/resources/mails/masterjava/_participate.html new file mode 100644 index 0000000..2230673 --- /dev/null +++ b/resources/mails/masterjava/_participate.html @@ -0,0 +1,73 @@ + + + + Участие в проекте 'Masterjava' + +

+ Здравствуй firstName!
+

+

Поздравляю тебя с участием в проекте
+ Многомодульный maven. + Многопоточность. XML. Веб сервисы. Удаленное взаимодействие!

+Общение на проекте продолжаем на "ты":) Проект будет вестись по подготовленным на основе вебинаров, разбитым по темам и отредактированым записям. Раз в +неделю (во вторник) производится рассылка новых материалов, обновления к проекту (патчи) и домашние задания, которые нужно +будет делать в ветках git. Официальное начало первого занятия: 28.02. +Т.е второе занятие буду рассылать 07.03. +До этого можно приступать в выполнению первого занятия Многопоточность. +Выполнение домашнего задания и чекин в свой репозиторий нужно делать согласно wiki по ведению + проекта в Gitвводном занятии проекта + TopJava есть видео с правилами работы с Git и c проектом). +

Проверка домашних заданий

+Разбор домашний заданий происходит в начале каждого занятия.
+Если у тебя участие с проверкой ДЗ, то свое решение вступительного задания желательно присылать на проверку начиная c +28.02 до вечера 05.03, остальных домашних заданий - до вечера воскресенья. +

Приглашение в Slack и доступ к материалам

+Общение на проекте будет вестись в группе Slack. Заполни пожалуйста все +поля регистрационной формы. После ее сохранения +
    +
  • на почту придет приглашение в группу Slack (обычно в течении 5 мин, проверь папку спам)
  • +
  • по gmail аккаунту предоставится доступ к материалам. Если + картинка по ссылке закрыта, по порядку: +
      +
    • выйти-войти в gmail аккаунт
    • +
    • попробовать войти в анонимной вкладке
    • +
    • Внимание!! НЕ НАДО запрашивать доступ через Google Drive (он дается автоматически по заполнению формы)
    • +
    • если доступа нет, напиши мне в skype grigory.kislin или в личку в группы Slack
    • +
    +
  • +
+ +Общение в Slack происходит в каналах по темам, для каждого нового урока будет делаться отдельный канал.
+Обсуждение первого занятия происходит в канале Slack #hw01.
+
    +
  • #flooding: оффтопик
  • +
  • #general: общие вопросы
  • +
  • #help: помощь
  • +
  • #git: вопросы по git
  • +
  • #idea: вопросы по idea
  • +
  • #links: интересные ресурсы
  • +
+Форматирование сообщений в + slack
+Desktop/ Mobile приложение Slack +

IDE: IntelliJ IDEA

+Разработка проекта ведется в IntelliJ IDEA, брать версию Ultimate. + Если ты студент (или есть знакомые студенты/ аспиранты), то лучше взять студенческую + учебную лицензию IntelliJ IDEA на год. Купон на бесплатную личную лизензию IntelliJ IDEA на полгода можно получить согласно политике JetBrains только +один раз по этой ссылке и далее по +инструкции в письме. +

+ Удачи в освоении материалов и выполнении первого ДЗ,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Java Online Projects +

+ + \ No newline at end of file diff --git a/resources/mails/masterjava/ad.html b/resources/mails/masterjava/ad.html new file mode 100644 index 0000000..7d052af --- /dev/null +++ b/resources/mails/masterjava/ad.html @@ -0,0 +1,38 @@ + + + + СКОРО старт проекта 'Masterjava' + +

+ Здравствуй firstName!
+

+

СКОРО (28.02) старт проекта Masterjava
+ Многомодульный maven. + Многопоточность. XML. Веб сервисы. Удаленное взаимодействие!
+Программа проекта

+Проект будет вестись по подготовленным на основе вебинаров, разбитым по темам и отредактированым записям. Раз в +неделю (во вторник) производится рассылка новых материалов, обновления к проекту (патчи) и домашние задания, которые нужно +будет делать в ветках git (анологично проекту Topjava). Уже собираемся в слаке, проверяем доступ к материалам и разбираем личные полугодовые лицензии IDEA (даются только один раз) +и до второго занятия, которое будет рассылаться 07.03 делаем первое занятие Многопоточность. Проверку ДЗ делаю с 28.02 до 05.03. +
    +
  • Стоимость участия без проверки домашних заданий: 8900 руб. (после курса TopJava: 8200 руб.)
    + сюда входят все материалы, участие в группе skype и slack, ответы на вопросы и помощь с проектом. +
  • +
  • Стоимость полного пакета: 17000 руб. (после TopJava: 15500 руб.)
    + добавляется проверка домашних заданий
  • +
  • Для всех: бесплатное (или с доплатой за проверку ДЗ) участие в следующий выпусках проекта MasterJava.
  • +
  • Способы оплаты
  • +
  • Курс рубля
  • +
+ +

+ Поспеши, если решил присоединиться к нам!
+ Надеюсь встретится на проекте,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Java Online Projects +

+ \ No newline at end of file diff --git a/resources/mails/masterjava/doc/2_lesson.html b/resources/mails/masterjava/doc/2_lesson.html new file mode 100644 index 0000000..36c4c9c --- /dev/null +++ b/resources/mails/masterjava/doc/2_lesson.html @@ -0,0 +1,55 @@ + + + + + + Старт проекта 'Многопоточность. XML. Веб сервисы.' + +

+ Здравствуй!
+

+Рад сообщить, что 23.09 (пятница) в 20.00 будет 2-е занятие masterjava: +
    +
  • разбор вступительного задания
  • +
  • прикручивание Microbenchmarking Framework JMH (от Алексея Шипилева)
  • +
  • XML технологии: XML. XSD, XPath, XSL(T) в Java: DOM, SAX, StAX, XSLT
  • +
  • домашнее задание по Java XML
  • +
+План занятий еще будет уточняться в процессе проведения проекта. +

+Вебинар будет вестись в Adobe Connect (диагностика + подключения) с одновременной записью. Удобно, что участники вебинара могут общаться голосом и в чате и +запись доступна сразу после вебинара. +Ограничение: 25 человек, включая меня. Т.е. после 24-го человека можно будет участвовать по записям занятий и в слаке +(записи +планирую редактировать и выкладывать в Google Doc), сейчас нас 9. +

+

+ Жду решений вступительное задание от всех + для сравнивания скорости. + У кого есть проверка буду делать разбор. + Сылку на github шлите мне в личку в группе slack Java Online Projects, а я буду + публиковать результаты выполнения на своем + компе в канале masterjava. +

+

+ Если тебя еще нет в этой группе Slack, проверь пожалуйста свои данные регистрационной + формы + (если ссылка не работает и есть желание принять участие в masterjava - свяжись со мной в skype: + grigory.kislin). + Галочка 'размещение своих данных в закрытой статистике группы' говорит о том, что участники проектов смогут увидеть + твои контактные данные в статистике. + После сохранения формы на почту должно прийти приглашение в эту группу. Пока, думаю, будем общаться там, но, по + потребности, можно будет создать новую. +

+

+ Перед 2-м занятием нужно оплатить участие: 7900 руб. без + проверки ДЗ и 15000 руб. с проверкой + (после оплаты отписывайтесь в skype grigory.kislin с вашим email). Если важно участие в вебинаре, перед оплатой + поинтересуйся в skype текущим номером. +

+Жду ваших вступительных ДЗ и до встречи на проекте, +

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/doc/lesson2.html b/resources/mails/masterjava/doc/lesson2.html new file mode 100644 index 0000000..919b23b --- /dev/null +++ b/resources/mails/masterjava/doc/lesson2.html @@ -0,0 +1,50 @@ + + + + + + 2-е занятие Masterjava + +

+ Здравствуй!
+

+Сегодня выложил 2-е занятие Masterjava. +Для обсуждение материалов занятия и домашнего задания (HW2) группа слака #hw02. +Обзор Guava перенес в 3й урок. +

+ Проект будет вестись в GitHub репозитории masterjava + анологично проекту topjava:
+

+

+
+Напомню, что для доступа к материалам урока и получения приглашения в Slack необходимо заполнить регистрационную форму. После ее сохранения +
    +
  • на почту придет приглашение в группу Slack (обычно в течении 5 мин, проверь папку спам)
  • +
  • по gmail аккаунту предоставится доступ к материалам.
    + Если доступа к материалам урока нет, + НЕ НАДО запрашивать доступ через Google Drive (он дается автоматически по заполнению формы)
    + По порядку: +
      +
    • выйти-войти в gmail аккаунт, который указан в gmail формы
    • +
    • попробовать войти в анонимной вкладке
    • +
    • написать мне в skype grigory.kislin или в личку в группы Slack
    • +
    +
  • +
+
+У кого есть проверка ДЗ - жду решения до вечера 12.03 в личку слака. +

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/doc/lesson3.html b/resources/mails/masterjava/doc/lesson3.html new file mode 100644 index 0000000..2f5fe05 --- /dev/null +++ b/resources/mails/masterjava/doc/lesson3.html @@ -0,0 +1,18 @@ + + + + + + 3-е занятие Masterjava + +

+ Здравствуй!
+

+14.03 выложил 3-е занятие Masterjava, запостил в Slack и забыл продублировать письмом:(
+Обсуждение материалов занятия и домашнего задания (HW3) в группе слака #hw03.
+У кого есть проверка ДЗ - жду решения до вечера 19.03 в личку слака.
+Напомню, что перед применением патчей ваша ветка master должна быть такой же, как ветка master нашего репозитория. +

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/doc/lesson3_fix.html b/resources/mails/masterjava/doc/lesson3_fix.html new file mode 100644 index 0000000..1525cca --- /dev/null +++ b/resources/mails/masterjava/doc/lesson3_fix.html @@ -0,0 +1,18 @@ + + + + + + 3-е занятие занятие Masterjava (поправил ссылку на урок) + +

+ Здравствуй!
+

+3-е занятие Masterjava, запостил в Slack и забыл продублировать письмом:(
+Обсуждение материалов занятия и домашнего задания (HW3) в группе слака #hw03.
+У кого есть проверка ДЗ - жду решения до вечера 19.03 в личку слака.
+Напомню, что перед применением патчей ваша ветка master должна быть такой же, как ветка master нашего репозитория. +

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/doc/lesson4.html b/resources/mails/masterjava/doc/lesson4.html new file mode 100644 index 0000000..b794d7f --- /dev/null +++ b/resources/mails/masterjava/doc/lesson4.html @@ -0,0 +1,25 @@ + + + + + + Готово 4-е занятие Masterjava + +

+ Здравствуй!
+

+Доделал 4-е занятие Masterjava. +
    Добавилось +
  • после видео 1 маленькое видео с ответом на вопрос "как разбивать приложение на модули"
  • +
  • патчи 4_8_fix_and_context.patch, 4_9_persist.patch, видео 5 и 6 и HW4
  • +
+После 4_7_logging.patch нужно у себя в корне диска создать каталог + /apps/masterjava/config/ и положить в него содержимое config_templates. +

+ В ветку master нашего репозитория уже вчекинил + 2 первых патча + 4_2_HW3_thymeleaf_upload и 4_1_HW3_pom_structure. +

+

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/info.html b/resources/mails/masterjava/info.html new file mode 100644 index 0000000..e55310a --- /dev/null +++ b/resources/mails/masterjava/info.html @@ -0,0 +1,22 @@ + + + + + Обновления 'Masterjava' + +

+ Здравствуй!
+

+Доделал и выложил отредактированные видео предпоследнего (10-го) занятия. +Также репозиторий обновился патчами по JMS.
+

+Все материалы проекта (+архив репозитория) скопировал в Google Drive/MasterJava01. + Просматривать файлы md можно в IDEA (plugin markdown) или Markdown Preview + для Хрома, в настройках Markdown Preview Plus (chrome://extensions/) нужно разрешить открывать файлы по ссылкам. + На MasterJava02 начнем репозиторий проекта заново (с 1-го занятия), обновление будет патчами. +

+Завтра буду делать рассылку обновленного 2-го занятия на Masterjava-2 (ссылка на бесплатный повтор, +проверка ДЗ сохраняется). +

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/invite.html b/resources/mails/masterjava/invite.html new file mode 100644 index 0000000..9bd4432 --- /dev/null +++ b/resources/mails/masterjava/invite.html @@ -0,0 +1,27 @@ + + + + + + СЕГОДНЯ в 20.00 (GMT+3.00) 2-е занятие Masterjava + +

+ Здравствуй!
+

+СЕГОДНЯ, 23.09 (пятница) в 20.00 состоится 2-е занятие Masterjava +

+ Ссылка на комнату вебинара
+ Логин: твой email, пароль: masterjava23
+ Доступ дал, проверь!
+ Запись будет доступна сразу после вебинара, через 2-4 дня я ее отредактирую и размещу в Google Doc. +

+

Настрой свой проект, чтобы забирать мои + изменения и пушить в свой репозиторий.
+ У кого еще нет доступа в группу https://javaops.slack.com, пришлите мне свой email в skype: + grigory.kislin +

+До встречи в комнате вебинара, +

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/late_participate.html b/resources/mails/masterjava/late_participate.html new file mode 100644 index 0000000..a9befc4 --- /dev/null +++ b/resources/mails/masterjava/late_participate.html @@ -0,0 +1,29 @@ + + + + + + Участие в проекте 'Многопоточность. XML. Веб сервисы.' + +

+ Здравствуй! +

+Поздравляю с участием в проекте Многопоточность. XML. Веб сервисы.! +

+Проект идет живыми вебинарами в Adobe Connect (диагностика + подключения) с одновременной записью. Удобно, что участники вебинара могут общаться голосом и в чате и + запись доступна сразу после вебинара (записи редактирую и выкладываю в Google Doc, но не сразу).
+ Занятия начинаются в 20.00 GMT+3, заренее я делаю пост в группе slack и рассылку по почте. + Периодичность получаются ~ раз в две недели. +

+Вступительное занятие
+Остальные уроки +

Настрой свой проект, чтобы забирать мои + изменения и пушить в свой репозиторий (по ходу вебинара можно будет забирать по Ctrl+T мои изменения). +

+ +До встречи на проекте, +

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/masterjava_1st.html b/resources/mails/masterjava/masterjava_1st.html new file mode 100644 index 0000000..54d962f --- /dev/null +++ b/resources/mails/masterjava/masterjava_1st.html @@ -0,0 +1,28 @@ + + + + + + Вступительное занятие проекта 'Многопоточность. Веб сервисы.' + +

+ Здравствуй!
+

+

+ Напомню, что СЕГОДНЯ, 26.07 в 20.00 (GMT+3, Москва/Киев) будет бесплатный вебинар:
вступительное занятие + по обновленному проекту + Многопоточность. Веб сервисы.
+ разработка полнофункционального многомодульного Maven проекта с использованием веб-сервисов (SOAP, JAX-WS), REST + (JAX-RS) и JMX. Проект стартует во второй половине августа. +

+

+ Встречу проведем на платформе Google Hangouts:
+ Определится с участием
+ Видео на YouTube +

+

+ До встречи на вебинаре! +

+

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/masterjava_ad.html b/resources/mails/masterjava/masterjava_ad.html new file mode 100644 index 0000000..3a7235a --- /dev/null +++ b/resources/mails/masterjava/masterjava_ad.html @@ -0,0 +1,38 @@ + + + + + + Старт проекта 'Многопоточность. Веб сервисы.' + +

+ Здравствуй!
+

+

+ Рад сообщить, что 26.07 в 20.00 (GMT+3, Москва/Киев) будет бесплатный вебинар:
вступительное занятие по + обновленному проекту + Многопоточность. Веб сервисы.
+ разработка полнофункционального многомодульного Maven проекта с использованием веб-сервисов (SOAP, JAX-WS), REST + (JAX-RS) и JMX.
+ Формат проекта: вебинары. +

+Для участия необходимо зарегистрироваться (если еще не регистрировались) и пройти материалы + вступительного задания.
+Выполнить вступительное задание желательно, но +не обязательно.
+Проект стартует во второй половине августа, разбирать задание будем на первом уроке. +
+Предварительная стоимость участия: +
    +
  • без проверок домашних заданий: 8600 руб.
  • +
  • с проверками заданий: 16500 руб.
  • +
  • стоимость для участников Topjava: 7900 руб. и 15000 руб.
  • +
  • бесплатное повторное участие в формате рассылки материалов
  • +
+ +

+ До встречи на бесплатном вебинаре вступительного занятия! +

+

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/participate.html b/resources/mails/masterjava/participate.html new file mode 100644 index 0000000..7ccb2b8 --- /dev/null +++ b/resources/mails/masterjava/participate.html @@ -0,0 +1,61 @@ + + + + Участие в проекте 'Masterjava' + +

+ Здравствуй firstName!
+

+

Поздравляю тебя с участием в проекте
+ Многомодульный maven. + Многопоточность. XML. Веб сервисы. Удаленное взаимодействие!

+ +

Участие в проекте в индивидуальном порядке по готовым материалам и патчам с поддержкой в группе Slack. Для всех участников осенью планируется стажировка (занятия раз в неделю) с обновлением проекта (анологично формату Topjava).

+ +Первое занятия открыто, +здесь остальные занятия проекта. +Выполнение домашнего задания и чекин в свой репозиторий нужно делать согласно wiki по ведению + проекта в Git (анологично проекту Topjava, в вводном занятии проекта + TopJava есть видео с правилами работы с Git и c проектом). +

Приглашение в Slack и доступ к материалам

+Общение на проекте будет вестись в группе Slack. Заполни пожалуйста все +поля регистрационной формы. После ее сохранения +
    +
  • на почту придет приглашение в группу Slack (обычно в течении 5 мин, проверь папку спам)
  • +
  • по gmail аккаунту предоставится доступ к материалам. Если + картинка по ссылке закрыта, по порядку: +
      +
    • выйти-войти в gmail аккаунт
    • +
    • попробовать войти в анонимной вкладке
    • +
    • Внимание!! НЕ НАДО запрашивать доступ через Google Drive (он дается автоматически по заполнению формы)
    • +
    • если доступа нет, напиши мне в skype grigory.kislin или в личку в группы Slack
    • +
    +
  • +
+ +Общение в Slack происходит в каналах по темам, для каждого нового занятия будет делаться отдельный канал.
+Обсуждение первого занятия происходит в канале Slack #hw01.
+
    +
  • #flooding: оффтопик
  • +
  • #general: общие вопросы
  • +
  • #help: помощь
  • +
  • #git: вопросы по git
  • +
  • #idea: вопросы по idea
  • +
  • #links: интересные ресурсы
  • +
+Форматирование сообщений в + slack
+Desktop/ Mobile приложение Slack +

IDE: IntelliJ IDEA

+Разработка проекта ведется в IntelliJ IDEA, брать версию Ultimate. +Если ты студент (или есть знакомые студенты/ аспиранты), то лучше взять студенческую + учебную лицензию IntelliJ IDEA на год. Купон на бесплатную личную лизензию IntelliJ IDEA на полгода можно получить согласно политике JetBrains только +один раз по этой ссылке и далее по +инструкции в письме. +

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/reminder.html b/resources/mails/masterjava/reminder.html new file mode 100644 index 0000000..bd74889 --- /dev/null +++ b/resources/mails/masterjava/reminder.html @@ -0,0 +1,34 @@ + + + + + + ЗАВТРА старт проекта 'Многопоточность. XML. Веб сервисы.' + +

+ Здравствуй!
+

+Напомню, что ЗАВТРА, 23.09 (пятница) в 20.00 будет 2-е занятие masterjava: +
    +
  • разбор вступительного задания
  • +
  • прикручивание Microbenchmarking Framework JMH (от Алексея Шипилева)
  • +
  • XML технологии: XML. XSD, XPath, XSL(T) в Java: DOM, SAX, StAX, XSLT
  • +
  • домашнее задание по Java XML
  • +
+

+ Места есть (пока нас 15). Если есть желание заапгрейдить свой java скиллз - поторопись с оплатой:
+ 7900 руб. без проверки ДЗ и 15000 руб. с проверкой + (после оплаты отписывайтесь в skype grigory.kislin с вашим email). +

+ +

+Вебинар будет вестись в Adobe Connect (диагностика + подключения) с одновременной записью. Удобно, что участники вебинара могут общаться голосом и в чате и +запись доступна сразу после вебинара. +Ограничение: 25 человек, включая меня. Т.е. после 24-го человека можно будет участвовать по записям занятий и в слаке +(записи планирую редактировать и выкладывать в Google Doc). +

+Надеюсь встретится на проекте, +

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/repeat_1_2_fix.html b/resources/mails/masterjava/repeat_1_2_fix.html new file mode 100644 index 0000000..c2b22b0 --- /dev/null +++ b/resources/mails/masterjava/repeat_1_2_fix.html @@ -0,0 +1,14 @@ + + + + + Ссылка на Masterjava2 + +

+ Здравствуй!
+

+Исправил нерабочую ссылку в предыдущем письме: +выслать приглашение на Masterjava02 +

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/start.html b/resources/mails/masterjava/start.html new file mode 100644 index 0000000..38d3b04 --- /dev/null +++ b/resources/mails/masterjava/start.html @@ -0,0 +1,30 @@ + + + + Начало 'Masterjava' + +

+ Здравствуй firstName!
+

+Напомню, что сегодня начало проекта Masterjava: Многомодульный maven. + Многопоточность. XML. Веб сервисы. Удаленное взаимодействие! +

+С сегодняшнего дня принимаю на проверку Домашние Задания к первому занятию Многопоточность (если есть проверка). +
+Второе занятие буду рассылать 07.03. +Проверь, что ты в состоишь в группе Slack и есть + доступ к картинке через gmail аккаунт. +
+ Если нет- напиши мне в skype grigory.kislin или ответ на письмо - вышлю приглашение вручную. +

+

+ Удачи в освоении материалов и выполнении первого ДЗ,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Java Online Projects +

+ + \ No newline at end of file diff --git a/resources/mails/masterjava/start_ad.html b/resources/mails/masterjava/start_ad.html new file mode 100644 index 0000000..dcbb06d --- /dev/null +++ b/resources/mails/masterjava/start_ad.html @@ -0,0 +1,37 @@ + + + + Начало 'Masterjava' + +

+ Здравствуй firstName!
+

+Сегодня начало проекта Masterjava: Многомодульный maven. + Многопоточность. XML. Веб сервисы. Удаленное взаимодействие! +

+С сегодняшнего дня принимаю на проверку Домашние Задания к первому занятию Многопоточность (если есть проверка). +
+Сформирована группа Slack, дал доступ к Google Drive и личные полугодовые лицензии IDEA.
+Второе занятие буду рассылать 07.03, +еще есть возможность принять участие в этом потоке. +

+
    +
  • Стоимость участия без проверки домашних заданий: 8900 руб. (после курса TopJava: 8200 руб.)
    + сюда входят все материалы, участие в группе skype и slack, ответы на вопросы и помощь с проектом. +
  • +
  • Стоимость полного пакета: 17000 руб. (после TopJava: 15500 руб.)
    + добавляется проверка домашних заданий
  • +
  • Для всех: бесплатное (или с доплатой за проверку ДЗ) участие в следующий выпусках проекта MasterJava.
  • +
  • Способы оплаты
  • +
  • Курс рубля
  • +
+

+ Поспеши, если решил присоединиться к нам!
+ Надеюсь встретится на проекте,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava/start_tomorrow.html b/resources/mails/masterjava/start_tomorrow.html new file mode 100644 index 0000000..fe2b3f2 --- /dev/null +++ b/resources/mails/masterjava/start_tomorrow.html @@ -0,0 +1,43 @@ + + + + Завтра (07.03) второе занятие 'Masterjava' + +

+ Здравствуй firstName!
+

+Я добавил подсказки по первому ДЗ: +
    +
  • не делайте 1000 000 тасок, лучше их сделать крупнее
  • +
  • у меня разница между 4 и 1000 тасками по времени незаметна, поэтому делайте просто и не делайте сложно
  • +
  • наконец: можно не считать значение элемента результирующей матрицы C за раз, а накапливать (concurrentMultiply2)
  • +
+Мои результаты (через JMH):
+
+    Benchmark                             (matrixSize)  Mode  Cnt    Score    Error  Units
+    MatrixBenchmark.singleThreadMultiplyOpt       1000    ss  100  837,867 ± 25,530  ms/op
+    MatrixBenchmark.concurrentMultiply            1000    ss  100  394,294 ± 21,657  ms/op
+    MatrixBenchmark.concurrentMultiply2           1000    ss  100  186,827 ± 11,882  ms/op
+
+

ЗАВТРА начинается платная часть проекта Masterjava: Занятие 2: JMH, + Guava, XML /XSD /JAXB /JAXP /StAX /XPath/ XSLT. Последняя возможность принять участие в проекте. +

+
    +
  • Стоимость участия без проверки домашних заданий: 8900 руб. (после курса TopJava: 8200 руб.)
    + сюда входят все материалы, участие в группе skype и slack, ответы на вопросы и помощь с проектом. +
  • +
  • Стоимость полного пакета: 17000 руб. (после TopJava: 15500 руб.)
    + добавляется проверка домашних заданий
  • +
  • Для всех: бесплатное (или с доплатой за проверку ДЗ) участие в следующий выпусках проекта MasterJava.
  • +
  • Способы оплаты
  • +
  • Курс рубля
  • +
+

+ Поспеши, если решил присоединиться к нам!
+ Надеюсь встретится на проекте,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+

+ \ No newline at end of file diff --git a/resources/mails/masterjava_entrance.html b/resources/mails/masterjava_entrance.html new file mode 100644 index 0000000..d260f7c --- /dev/null +++ b/resources/mails/masterjava_entrance.html @@ -0,0 +1,13 @@ + + + + Занятие 'Многопоточность' проекта Masterjava + +

+ Здравствуй!
+

+

Спасибо за интерес к проекту + Многомодульный maven. Многопоточность. XML. Веб сервисы. Удаленное взаимодействие. +

+
+ \ No newline at end of file diff --git a/resources/mails/masterjava_info.html b/resources/mails/masterjava_info.html new file mode 100644 index 0000000..cf769d2 --- /dev/null +++ b/resources/mails/masterjava_info.html @@ -0,0 +1,35 @@ + + +

Участие в проекте в индивидуальном порядке (в любое время) по готовым материалам и патчам с поддержкой в группе + Slack. +

+

Для всех участников осенью планируется стажировка (занятия раз в неделю) с обновлением проекта (анологично формату Topjava).

+

Программа проекта

+

Первое бесплатное занятие проекта: Многопоточность, + после которого можно выполнять + домашнее задание (HW1). +

+
    +
  • Участникам проекта выдается индивидуальный ключ IDEA сроком на 6 месяцев (согласно политике JetBrains купон + выдается только один раз) +
  • +
  • Общение по проекту будет в группе Slaсk (разные каналы для уроков и общения)
  • +
  • Проект будет вестись в записи, обновление проекта патчами (как на стажировке Topjava)
  • +
+
    +
  • Стоимость участия 8600 руб./ 155$, (участникам стажировки TopJava: 7900 руб./ 143$)
  • +
  • Стоимость с проверкой домашних заданий: 16300 руб./296$ (после TopJava: 14900 руб./270$)
  • +
  • Специальная цена на одновременную оплату 2-х проектов (TopJava + MasterJava): -15% от стоимости +
  • +
  • Оплата участия любым удобным способом
  • +
  • После оплаты обязательно свяжитесь со мной в skype grigory.kislin или ответом на это письмо (с указанием куда и когда был платеж) +
  • +
+

+ До встречи на проекте! +

+

+

+
+ \ No newline at end of file diff --git a/resources/mails/masterjava_register.html b/resources/mails/masterjava_register.html index 24a92e7..7af0635 100644 --- a/resources/mails/masterjava_register.html +++ b/resources/mails/masterjava_register.html @@ -1,21 +1,14 @@ - - - + - Регистрация на проект 'Веб-сервисы. SOA-based (Microservices) архитектура' + Регистрация на проект Masterjava

Здравствуй firstName!

-

-Спасибо за регистрацию на проекте Веб-сервисы. SOA-based (Microservices) архитектура!
-Я собираюсь его переработать, старт будет по готовности и по мере набора группы.
-Буду делать рассылку и держать в курсе. -Добавляйся в группу VK
-До встречи на проекте!
-

-

Ответы на вопросы.

-

-

+

+ Спасибо за регистрацию на проекте Многомодульный maven. Многопоточность. + XML. Веб сервисы. Удаленное взаимодействие.
+

+
\ No newline at end of file diff --git a/resources/mails/masterjava_repeat.html b/resources/mails/masterjava_repeat.html new file mode 100644 index 0000000..1bc2756 --- /dev/null +++ b/resources/mails/masterjava_repeat.html @@ -0,0 +1,28 @@ + + + + + + Повторное участие на проекте 'Masterjava' + +

+ Здравствуй firstName!
+

+Буду рад снова видеть тебя на проекте MasterJava! +

Повторное участие без проверки домашних заданий бесплатное. Единственное условие: пожалуйста сделай репост объявления о наборе в VK или в Facebook +

+Пока участие в проекте в индивидуальном порядке (в любое время) по материалам и патчам Masterjava2 с поддержкой в группе Slack +materjava2.
+Осенью планирую стажировку (занятия раз в неделю) с обновлением проекта. Следи за рассылкой. +

+ Добавляйся в группу VK: Java Enterprise Online Обучение
+

+

+ До встречи на проекте!
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Java Online Projects +

+ \ No newline at end of file diff --git a/resources/mails/masterjava_repeat_1.html b/resources/mails/masterjava_repeat_1.html new file mode 100644 index 0000000..e0c5638 --- /dev/null +++ b/resources/mails/masterjava_repeat_1.html @@ -0,0 +1,46 @@ + + + + + + Повторное участие на проекте 'Masterjava' + +

+ Здравствуй firstName!
+

+Буду рад снова видеть тебя на проекте MasterJava! +

Повторное участие без проверки домашних заданий бесплатное. Единственное условие: пожалуйста сделай репост объявления о наборе в VK или в Facebook +

+

Google Drive

+

+ Проект эволюционирует, поэтому патчи текущего выпуска будут отличаться. Видео также будут редактироваться / + дополнятся. + Все актуальные материалы нашего выпуска будут находится в папке MasterJava02. +

+

Slack

+Проверь почту- должно прийти приглашение в группу Slack masterjava02 (обычно в течении 5 минут) +
    Темы каналов: +
  • #hw0: вопросы по вступительному заданию
  • +
  • #flooding: оффтопик
  • +
  • #general: общие вопросы
  • +
  • #git: вопросы по git
  • +
  • #idea: вопросы по idea
  • +
  • #links: полезные ссылки
  • +
+Форматирование сообщениq в + slack
+Desktop/ Mobile приложение Slack +

Рассылка второго занятия будет во вторник, 07.03.

+

+ Добавляйся в группу VK: Практика Java (Web/ Enterprise)
+

+

+ До встречи на проекте!
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Java Online Projects +

+ \ No newline at end of file diff --git a/resources/mails/ref/refHrProfile.html b/resources/mails/ref/refHrProfile.html new file mode 100644 index 0000000..0be7b00 --- /dev/null +++ b/resources/mails/ref/refHrProfile.html @@ -0,0 +1,21 @@ + + + + Свежие вакансии + реферальная программа + +

+

+

На прошлой неделе закончилась 10-я стажировка Java Enterprise, в базе появились свежие вакансии.

+И появилась возможность из + своего профиля выбирать кандидатов, +добавивших резюме с определенной даты (выбор даты и ссылка на базу вверху профиля). Также Вы можете заполнить пустые +поля профиля для лучшего сотрудничества. +

+ Возможно также Вас заинтересует реферальная программа (заранее извиняюсь, если нет). + На каждую регистрацию (получение первого бесплатного занятия) по реферальным ссылкам Вам будет приходить + уведомительное письмо а при оплате добавляться бонусы, которые можно будет перевести в деньги (подробности по + запросу). +

+Спасибо за сотрудничество! Надеюсь, что Вы найдете в базе кандидатов достойных Java разработчиков. + + \ No newline at end of file diff --git a/resources/mails/ref/refParticipation.html b/resources/mails/ref/refParticipation.html new file mode 100644 index 0000000..5720564 --- /dev/null +++ b/resources/mails/ref/refParticipation.html @@ -0,0 +1,14 @@ + + + + + +

+ Здравствуй!
+

+

+

+
+ + + \ No newline at end of file diff --git a/resources/mails/ref/refProgram.html b/resources/mails/ref/refProgram.html new file mode 100644 index 0000000..433152a --- /dev/null +++ b/resources/mails/ref/refProgram.html @@ -0,0 +1,12 @@ + + + + Текущие и будущие проекты, бонусная программа, презентация Basejava + +

+ Здравствуй!
+

+
+ + + \ No newline at end of file diff --git a/resources/mails/ref/refProjects.html b/resources/mails/ref/refProjects.html new file mode 100644 index 0000000..3e852cb --- /dev/null +++ b/resources/mails/ref/refProjects.html @@ -0,0 +1,79 @@ + + + + Обновленная информация по проектам + реферальная программа + +

+ Здравствуй!
+

+ +

Высылаю обновленную информацию по текущим и будущим проектам.
+ Возможно что-то подойдет тебе или кому-то из твоих знакомых (ниже есть реферальные ссылки).

+ +

1. Запускаю базовую программу Разработка Web приложения "База + данных резюме" (Basejava), от массивов до сервлетов и деплоя в Heroku.com

+

11.07 в 20.00 будет вступительный + вебинар-презентация по проекту
+ Ссылка на первое открытое + занятие
+ Проект идет в индивидуальном режиме (старт в любое время) по готовым материалам с поддержкой в мессенджере Slack и + личным куратором Татьяной (многим знакомой по Topjava).

+Разработка веб приложение начиная с первого занятия, основываясь на базовых темах проекта: объектная модель, коллекции, +система ввода-вывода, работа с файлами, сериализация, работа с XML, JSON, SQL, персистентность в базу данных +(PostgreSQL), сервлеты, JSP/JSTL, веб-контейнер Tomcat, HTML, модульные тесты JUnit, java.util.Logging, система контроля +версий Git.
+ +

2. Стажировка Java Enterprise (Topjava), 11 выпуск

+

Старт 06.07, первое занятие 13.07. Расписание
+12-й выпуск будет в конце октября

+ +Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей с +использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), +REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API и сохранением в базах данных +Postgresql и HSQLDB. + +

3. Многомодульный maven. Многопоточность. XML. Веб сервисы. + Удаленное взаимодействие (Masterjava)

+

Участие в проекте в индивидуальном порядке (старт в любое время) по готовым материалам и патчам с поддержкой в + группе Slack. Для всех участников осенью планируется стажировка (занятия раз в неделю) с обновлением проекта + (анологично + формату Topjava)

+Разработка полнофункционального многомодульного Maven проекта, состоящего из 3-х веб приложений. XML (JAXB, StAX, +XPath, XSLT), SOAP (JAX-WS, MTOM), JAX-RS (Jersey), JMS (ActiveMQ), AKKA (Typed и Untyped Actors), servlet 3.0, +jDBI, LiquiBase, Guava, Thymleaf, Lombook, StreamEx, Typesafe Config, Java Microbenchmark JMH + +

4. Интервью в skype (голосом) на позицию Java разработчик. +

+
    +
  • cамые распространенные вопросы на собеседованиях
  • +
  • упор не на заучивание ответов, а на понимание основ
  • +
  • советы как лучше ответить или оформить свою мысль
  • +
  • выявление слабых мест и пробелов
  • +
  • объяснение непонятных мест, указание ресурсов для проработки
  • +
  • позитивный, доброжелательный настрой и уверенность
  • +
  • оценка реального уровня знаний
  • +
+ +

5. В планах (ближе к осени): дополнения к Topjava (Java Config, Thymleaf, H2, Bean Mapping, Ouath2, JWT, Nginx, + Spring Boot, ...)

+
+

Запустил реферальную программу!

+

На каждую регистрацию (получение бесплатного занятия по реферальным ссылкам ниже) тебе будет приходить + уведомительное письмо, а при оплате добавляться 25 бонусов за Topjava/Masterjava и 10 за Basejava.

+ +
    На бонусы можно +
  • получить скидку на любой из текущих или будущих проектов , 1 бонус = 1% скидки +
  • +
  • накопив от 100 бонусов получить комиссию деньгами (100 бонусов = 10 000 руб./ 175$)
  • +
+

+ Твои бонусы на данный момент: 100 +

+
    Личные реферальные ссылки (зарегистрировавшись по которым участник будет считаться твоим): +
  • Topjava
  • +
  • Masterjava
  • +
  • Basejava
  • +
+Надеюсь, что программа будет взаимовыгодной:) + + \ No newline at end of file diff --git a/resources/mails/ref/refRegistration.html b/resources/mails/ref/refRegistration.html new file mode 100644 index 0000000..b07367c --- /dev/null +++ b/resources/mails/ref/refRegistration.html @@ -0,0 +1,15 @@ + + + + Регистрация пользователя mail на проект + project + +

+ Здравствуй!
+

+

+В случае оплаты придет письмо и +25 бонусов +
+ + + \ No newline at end of file diff --git a/resources/mails/simpleConfirm.html b/resources/mails/simpleConfirm.html new file mode 100644 index 0000000..b588266 --- /dev/null +++ b/resources/mails/simpleConfirm.html @@ -0,0 +1,30 @@ + + + + + + + + + +

Уже есть в группе, повторная регистрация.

+
+
+

Успешно добавлен в группу.

+

Добавлен в группу, уже присутствует в базе Java + Online Projects.

+

Повторная регистрация на проекте.

+
+
+

Имя: имя +

+

+

+

Skype: 123-456 +

+

Тип участия: participationType +

+

+

+
+ \ No newline at end of file diff --git a/resources/mails/test.html b/resources/mails/test.html index 608185f..fe70a99 100644 --- a/resources/mails/test.html +++ b/resources/mails/test.html @@ -1,6 +1,4 @@ - - - + Тестовое письмо @@ -12,7 +10,7 @@

Тестовый mail

-

+

\ No newline at end of file diff --git a/resources/mails/topjava/ad.html b/resources/mails/topjava/ad.html new file mode 100644 index 0000000..c6b9b10 --- /dev/null +++ b/resources/mails/topjava/ad.html @@ -0,0 +1,101 @@ + + + + + + АКЦИЯ на юбилейный (10-й) проект 'Java Enterprise (Topjava)' + +

+ Здравствуй firstName!
+

+

16.03 старт 10-го выпуска проекта-стажировки Java Enterprise + (Topjava)

+Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), + REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API
+

+ Проект постоянно развивается, в том числе благодаря вашему активному участию, появляются новые отзывы участников, новые истории успеха, + новые технологии (Bootstrap Glyphicons, + XSS, JPA 2.1 EntityGraph, Jackson @JsonView, методы улучшения качества кода) , новый дизайн а + также выпускной проект, который каждый участник пишет самостоятельно (взят из реального тестового задания). +

+
    Основное, что можно получить от участия в проекте: +
  • понимания технологий, как работают фреймворки, на чем они основаны, какие паттерны используются
  • +
  • навыки нахождения правильных практических решений для конкретных задач и решений конкретных проблем, из которых + состоит ежедневная работа программиста (~75% это умение выбрать из найденного на Stackoverflow) +
  • +
  • работа с инструментами: Git, IDEA, Maven, Tomcat, DB клиент, тестирование REST сервисов
  • +
  • привычка кодировать красиво
  • +
  • кругозор, навыки решения подобных задач
  • +
+Мы учимся мыслить и работать как Java разработчики, на работе это будет гораздо сложнее и стоить дороже. +Вот на мой взгляд хорошие советы новичкам. +От себя я добавлю: +
    +
  • Учись грамотно формулировать проблему. Проблема "у меня не работает" может иметь тысячи причин. В процессе + формулирования очень часто приходит ее решение. +
  • +
  • Учись исследовать проблему. Внимательное чтение логов и умение дебажить - основные навыки разработчика. В логах + надо читать верх самого нижнего эксепшена - там причина всей портянки. +
  • +
  • Грамотно уделяй время каждой проблеме. Две крайности - сразу бросаться в чат или ко мне за помощью и бится нам + ней часами. + Пробуй решить ее сам и в зависимости от проблемы выделяй на это разумное время. +
  • +
+

Стажировка реально дает возможность устроится + на позицию middle разработчика (особенно при выполнении всех Домашних Заданий).

+

Требования к участникам:

+На проекте мы не проходим синтаксис java: предполагается, что вы уже знаете, что такое классы, конструкторы, +аннотации, анонимные классы, исключения и пр. +Также необходим некоторый опыт программирования на java. Желательно знание сервлетов. Мы начинаем использовать их на +первом занятии, кратко повторяя основы. +Знание SQL (на уровне Select/ Insert/ Update/ Delete), JavaScript желательно, но не принципиально. Весь +"Enterprise": Maven, Git (в том объеме, который нам нужен), Spring, Hibernate, REST даются с азов. Никаких + специальных знаний Java EE не требуется.
+

Выполняя вступительное задание можно оценить свои силы и + получить представление о том, как будут проходить занятия.

+
    +
  • +

    + Стоимость участия без проверки домашних заданий: 8300 руб.
    + сюда входят все материалы, участие в группе skype и slack, ответы на вопросы и помощь с + проектом.
    + Цена по АКЦИИ до 01.03: 7700 руб. +

    +
  • +
  • Стоимость полного пакета: 16500 руб. + добавляется проверка домашних заданий + ревью выпускного проекта (либо вашего, например тестового задания при + устройстве на работу).
    + Цена по АКЦИИ до 01.03: 15000 руб. +

    +
  • +
  • Для всех: бесплатное (или с доплатой за проверку) участие в следующий выпусках проекта.
  • +
  • Способы оплаты
  • +
  • Вопросы по проекту
  • +
  • Ресурсы для подготовки
  • +
  • Курс рубля
  • +
+

Если у тебя есть подписка JavaRush "реальный проект/стажировка", свяжись со мной отдельно в скайпе: grigory.kislin + или в ответе на письмо.
+ Если такой подписки нет и ты уже принял решение об участии, успей сдалать это в период до 01.03.
+ После оплаты объязательны напиши мне в skype: grigory.kislin, VK или в + ответе на это письмо детали оплаты и email: я вышлю письмо участника с приглашением в группу проекта Slack и дам + доступ к материалам.

+После проекта в твоем резюме появится раздел в опыте работы: участие в разработке Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + на стеке Maven/ Spring MVC/ Security/ REST(Jackson)/ Java 8 Stream API: +
    +
  • реализация сохранения в базы Postgres и HSQLDB на основе Spring JBDC, JPA(Hibernate) и Spring-Data-JPA
  • +
  • реализация и тестирование REST и AJAX контроллеров
  • +
  • реализация клиента на Bootstrap (css/js), datatables, jQuery + plugins.
  • +
  • твоя доработка проекта
  • +
+

Поторопись, если хочешь значительно поднять свой уровень владения самым востребованным в Java Enterprise стеке + технологий и принять участие в разработке!

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/early_price2.html b/resources/mails/topjava/early_price2.html new file mode 100644 index 0000000..53f07f4 --- /dev/null +++ b/resources/mails/topjava/early_price2.html @@ -0,0 +1,35 @@ + + + + ЗАВТРА (15.06) заканчивается ранняя цена на 'Java Enterprise (Topjava)'. + +

+ Здравствуй!
+

+Напомню, что ЗАВТРА (01.03) заканчивается ранняя цена на стажировку Java + Enterprise (Topjava)
+ +

+ Можно зафиксировать эту цену, внеся предоплату 2000 руб./ 36$
+ Если у тебя есть подписка JavaRush "Premium Pro/стажировка", свяжись со мной отдельно. + После оплаты обязательно вышли мне в skype: grigory.kislin или + в ответ на письмо свой email и детали оплаты - я вышлю письмо участника (приглашение в Slack, доступ к матириалам, полугодовую лицензию IDEA). +

+Старт проекта 06.07, здесь расписание. + +

+ Последний шанс принять участие в стажировке по ранней цене!

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/hw.html b/resources/mails/topjava/hw.html new file mode 100644 index 0000000..845bf35 --- /dev/null +++ b/resources/mails/topjava/hw.html @@ -0,0 +1,24 @@ + + + + Проверка ДЗ на проекта 'Java Enterprise (TopJava)' + +

+ Здравствуй firstName!
+

+Выслал приглашение в группу Slack, где будет проверятся ДЗ: topjava11-hw.
+В группе необходимо сделать канал (+ рядом с CHANNELS) с именем [свое_имея_в_Slack]_hw (точки заменять на +"_"). Например мой канал бы назывался grigory_kislin_hw, Татьяны - tanya_hw.
+В него шли свою ссылку на свой github репозиторий (в котором уже есть ветка HW0 с решением вступительного задания).
+Ветку делать одну, коммитов можно несколько. Сделай оба решения (циклами и стримами) в разных методах. +Татьяна проверяет с утра (по канадскому времени:), те наш поздний вечер. +Делай заранее (до воскресенья, понедельника), чтобы была возможность исправить замечания и еще раз проревьюится. +Я участвую в решении сложных и спорных вопросов. Проверку вступительного начинаем с 06.07 (старта стажировки) и решения принимаем до вечера вторника 11.07 +

+ Ждем твоего ДЗ и успехов в выполнении!
+ Григорий, Татьяна
+

+

+ Java Online Projects +

+ \ No newline at end of file diff --git a/resources/mails/topjava/intro_webinar.html b/resources/mails/topjava/intro_webinar.html new file mode 100644 index 0000000..431efe5 --- /dev/null +++ b/resources/mails/topjava/intro_webinar.html @@ -0,0 +1,34 @@ + + + + ЗАВТРА бесплатный вебинар "Java: от основ до получения работы" + + +

+ Здравствуй firstName! +

+Рад сообщить, что ЗАВТРА состоится бесплатный вебинар "Java: от основ до получения работы". + +
    +
  • Что востребовано на рынке Java
  • +
  • С чего начинать изучение
  • +
  • Что нужно, чтобы стать Java разработчиком
  • +
  • Подготовка к собеседованию
  • +
+На вебинаре можно будет задать все интересующие вопросы мне, либо организатором обучения школы U-Rise, на базе которой проходит +базовый проект JavaSE + Web. Для тех, кто не сможет присутствовать, будет рассылка записи вебинара. +

Начало трансляции по ссылке в 21.00 Москва / 20.00 + Киев

+ +

+ До встречи на вебинаре! +

+

Напоминаю, что 16.03 начинаю принимать на проверку домашнее задание вводного занятия проекта-стажировки Java Enterprise (Topjava). +После оплаты участия включаю в группу Slack, даю доступ к материалам проекта и личный ключ IDEA на 6 месяцев.

+Стоимость участия с проверкой ДЗ: 16500 руб., без проверки 8300 руб.
+После оплаты обязательно сообщи мне свой email для рассылки письма участника.
+Рассылка первого занятия для участников будет 23.03. +

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/intro_webinar_record.html b/resources/mails/topjava/intro_webinar_record.html new file mode 100644 index 0000000..32c1eba --- /dev/null +++ b/resources/mails/topjava/intro_webinar_record.html @@ -0,0 +1,24 @@ + + + + ЗАПИСЬ вебинара "Java: от основ до получения работы", старт Topjava + + +

+ Здравствуй firstName! +

+Высылаю тебе запись вчерашнего вебинара Java: от основ до + получения работы.
+ И Презентация с полезными для начинающего Java разработчика ссылками.
+

+ На всякий случай даю ссылки на предуыдущие вебинары:
+ Собеседование. Разработка ПО. Вопросы.
+ ОСВАИВАЕМ JAVA ENTERPRISE +

+Напомню, что сегодня начало 10-го юбилейного проекта-стажировки +Java Enterprise (Topjava) +

Рассылка первого занятия 23.03. Еще есть возможность принять участие!

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/final_fix.html b/resources/mails/topjava/lesson/final_fix.html new file mode 100644 index 0000000..1bf6c7b --- /dev/null +++ b/resources/mails/topjava/lesson/final_fix.html @@ -0,0 +1,87 @@ + + + + + + Окончание проекта 'Java Enterprise (TopJava)' + +

+ Здравствуй firstName!
+

+- Что надо знать о логировании прагматичному Java‑программисту +- Как начинающему Java-разработчику подружиться со своей базой данных? + +Выложил заключительное занятие + нашего проекта.
+Перед накаткой патчей код в ветке master твоего проекта должен быть в том же состоянии, что и ветка master нашего проекта.
+Обсуждение занятия и ревью твоего резюме в Slack #hw11
+
    +
  • + Если ты решил сделать доработку проекта, отдай мне свой код на ревью. Я включу ссылку на твой репозиторий в + список сделанных доработок для доступа к ним всех участников Topjava.

    +
  • +
  • Выпускной + проект от участников с проверкой ДЗ желательно сдать на ревью до 01.09 + (напомню, что лишние профили в коде и в pom.xml нужно удалить).

    +
  • +
  • Повторное участие в проекте без проверки домашних заданий бесплатное.
    + Зарегистрируйся и тебе + придет ссылка на группу Slack topjava10 (там уже есть новые участники с JavaRush). + Здесь есть расписание topjava10. Приглашай знакомых, желающих стать java разработчиками или + повысить свою квалификацию. Со ссылкой на тебя даю скидку 5%.

    +
  • +
  • Группа Slack topjava10 к 01.09 будет удалена. Приглашаю в Slack Java Online Projects (кто еще не + вступил), где мы все общаемся на любые темы IT (помощь с Java, отзывы о работах, обсуждение тестовых заданий, + вакансии, цены на рынке труда, IT события, интересные видео по теме и пр.) + По каждой теме сделан свой канал. Проверь свои контактные + данные. + Галочка 'размещение своих данных в закрытой статистике группы' говорит о том, что участники проектов смогут + увидеть твой город и skype в списке, а ты сможешь найти там разработчиков из своего города. + После сохранения формы на почту должно прийти приглашение в группу Slack и откроется ссылка на список + участников, отсортированный по городам.

    +
  • +
  • + Все материалы проекта останутся вам доступны (в течении нового курса они будут постепенно переезжать в подпапку topjava10). Репозиторий + topjava10 до 01.09 будет заархивирован и положен в Google Drive вместе с занятиями в формате markdown. + Для просмотра в Chrome файлов md я пользуюсь плагином + Markdown Preview (нужно в его параметрах разрешить открывать файл по ссылкам) или можно использовать плагин + IDEA Markdown support.

    +
  • +
  • + В конце августа-начале сентября я планирую запустить курс Многопоточность. Веб сервисы.
    + Посмотри бесплатное первое + занятие: многопоточность, + это важная для разработчика тема, ее часто спрашивают на собеседованиях.

    + Предварительная стоимость участия: +
      +
    • без проверок домашних заданий: 8600 руб.
    • +
    • с проверками заданий: 16500 руб.
    • +
    • стоимость для участников Topjava: 7900 руб. и 15000 руб. (курс рубля к USD)
    • +
    • бесплатное повторное участие в формате рассылки материалов
    • +
    +
    Дата старта и программа проекта будут уточняться и рассылаться всем зарегистрированным участникам.

    + Также у участников Topjava будут скидки на другие проекты (осенью планируется topjava2 на Spring-Boot).
    + О всех новостях буду делать рассылку и публиковать в группе VK Java Enterprise Online Обучение.

    +
  • +
  • + Наконец, если ты рассматриваешь предложения о работе, занеси свои данные и ссылку на резюме в форму соискателя. + Я ее рассылаю всем знакомым HR. А после прохождения испытательного срока не забудь поделиться своей историей успеха! +

    +
  • +
  • + Можно еще участвовать в разработке сайта Java Online Projects (репозиторий в GitHub, канал в Slack), но тут пока почти никакой от меня поддержки, кроме выставления заданий. + Есть еще мысли сделать что-то вроде фрилансовой конторы, но это планы после курса topjava2. +
  • +
+

Большая просьба ответить на несколько вопросов по проекту.
+Важно: если проект понравился, напиши пожалуйста в VK отзыв о + проекте.

+

+ Спасибо за участие в Topjava и, надеюсь, до новой встречи! +

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson01.html b/resources/mails/topjava/lesson/lesson01.html new file mode 100644 index 0000000..08c888a --- /dev/null +++ b/resources/mails/topjava/lesson/lesson01.html @@ -0,0 +1,36 @@ + + + + Первое занятие проекта Java Enterprise (Topjava) + + +

+ Здравствуй firstName! +

+Поздравляю тебя с первым занятием нашего + проекта!
+Обычно ночью я выкладываю новое занятие в slack и днем дублирую информацию в письме. +

+ В репозитории на github я буду вести проект паралельно (классы в нем совпадают с теми, откуда ты делал fork).
+ Перед началом занятия код в ветке master твоего проекта должна быть в том же состоянии, что и в моей ветка master. + В случае проблем с накаткой патчей из этого репозитория всегда можно взять код, на который патчи будут ложиться без проблем, + например UserMealsUtil в формате Raw. Решение проблем с патчами есть в Wiki Git. + В правилах работы с патчами на проекте написал, что делать apply patch лучше по одному, непосредственно перед видео на эту тему, а при просмотре видео сразу отслеживать все изменения кода проекта по изменению в патче. + Код проекта обновляется и не всегда совпадает с видео (можно увидеть как развивался проект). Изменения в проекте указываю после соответствующего патча. + Патчи можно закачивать архивом и распаковывать в корень (или отдельную папку) в проекте (я добавил *.patch в .gitignore, чтобы они не попадали в git). +

+ Занятия буду выкладывать в каталоге doc ветки doc проекта.
+ Обсуждение занятия и HW1 в канале Slack #hw1. +

+Инструкция по доступу к Google Drive есть в письме участника, запросы на доступ из Google Drive не принимаю (там уже достигли лимита). + Если нет доступа к материалам (после логаут/логин в Google Account), зайди в свой профиль и проверь правильность gmail (домен com вместо ru, не пропушены ли буквы или символы). Если после сохранения доступ не появился, свяжись со мной (личка slack или skype: grigory.kislin) + Если в Google Drive патчи удваиваются, попробуйте выйти из акаунта и снова войти. +

+Обновленная ссылка на купон IntelliJ IDEA на полгода (можно получить только 1 раз). +

+ Домашнее задание (у кого есть проверка) присылать до вечера 28.03.
+

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson02.html b/resources/mails/topjava/lesson/lesson02.html new file mode 100644 index 0000000..0858140 --- /dev/null +++ b/resources/mails/topjava/lesson/lesson02.html @@ -0,0 +1,34 @@ + + + + Второе занятие проекта Java Enterprise (Topjava) + + +

+ Здравствуй firstName! +

+Готово второе достаточно сложное занятие нашего проекта "Каркас приложения, добавление + Spring".
+Перед сборкой проекта (или запуском Tomcat) сделай в окошке Maven clean, если страничка в браузере работает +неверно, очисти кэш (Ctrl+F5 в хроме).
+После выполнения ДЗ обязательно сверься с подсказками. +

+ Перед началом занятия код в ветке master твоего проекта должна быть в том же состоянии, что и в моей ветка master.
+ В случае проблем с накаткой патчей смотри в Git + Wiki "Patch + не накатывается (предлагает merge)". +

+

+ Обсуждение домашнего задания (HW2) в ветке #hw2
+ + У кого есть проверка ДЗ желательно присылать до вечера 04.04
+ Удачи в освоении материалов и выполнении этого важного задания! +

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson03.html b/resources/mails/topjava/lesson/lesson03.html new file mode 100644 index 0000000..c2442ff --- /dev/null +++ b/resources/mails/topjava/lesson/lesson03.html @@ -0,0 +1,25 @@ + + + + Третье занятие проекта TopJava Enterprise + + +

+ Здравствуй firstName! +

+Третье занятие нашего проекта: JUnit + тестирование и начало работы с DB.
+Если с SQL и RDBMS опыта нет, прочти основы по ссылкам занятия. +

+ Перед началом занятия код в ветке master твоего проекта должна быть в том же состоянии, что и в моей ветка master.
+ Обсуждение занятия и HW3 в канале slack #hw3. +

+

+ После выполения ДЗ обязательно проверься по пунктам.
+ Домашнее задание (у кого есть проверка) желательно присылать до вечера 11.04.
+

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson04.html b/resources/mails/topjava/lesson/lesson04.html new file mode 100644 index 0000000..d61364d --- /dev/null +++ b/resources/mails/topjava/lesson/lesson04.html @@ -0,0 +1,43 @@ + + + + Четвертое занятие проекта TopJava Enterprise + + +

+ Здравствуй firstName! +

+

+ Четвертое занятие нашего проекта: + популирование данных через Spring, JPA/ + Hibernate, HSQLDB.
+ Материалов по JPA огромное количество. Чтобы не утонуть - не надо пытаться освоить все сразу. Пока достаточно того, что нужно для выполнения HW4. + Обсуждение занятия и домашнего задания в slack #hw4 +

+

+ + После выполнения этого достаточно несложного HW4 можно приступать к выполнению выпускного + проекта. + Выпускной проект делаете в паралели с нашим (прошли тему занятия - сделали ее в выпускном). Срок сдачи на ревью у участников с проверкой- до 07.07 + Последнее занятие стажировки 08.06 (см. расписание). В майские праздники 04.05 занятия не будет: HW6 достаточно большое и будет время занятся выпускным. + +

+

Нашу группу Slack topjava10 я удалю после проверки выпускных проектов, поэтому приглашаю тебя уже сейчас в общую группу Slack Java Online Projects, где мы все общаемся на любые темы IT (помощь с Java, + отзывы о работах, обсуждение тестовых заданий, + вакансии, цены на рынке труда, IT события, интересные видео по теме и пр.) + По каждой теме сделан свой канал. Проверь свои контактные + данные. + Галочка 'размещение своих данных в закрытой статистике группы' говорит о том, что участники проектов смогут + увидеть твой город и skype в списке, а ты сможешь найти там разработчиков из своего города. + После сохранения формы на почту должно прийти приглашение в группу выпускников Slack и откроется ссылка на список + участников, отсортированный по городам. +

+

+ Домашнее задание HW4 (у кого есть проверка) присылать до вечера 18.04.
+

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson05.html b/resources/mails/topjava/lesson/lesson05.html new file mode 100644 index 0000000..795bbcf --- /dev/null +++ b/resources/mails/topjava/lesson/lesson05.html @@ -0,0 +1,23 @@ + + + + Пятое занятие проекта TopJava Enterprise + + +

+ Здравствуй firstName! +

+

+ Готово пятое занятие нашего проекта.
+ Заканчиваем с базой данных, на следующем уроке перейдем к слою web. + Перед накаткой первого патча код в ветке master твоего проекта должен быть в том же состоянии, что и ветка master нашего проекта.
+ Обсуждение занятия и домашнего задания в slack #hw5 +

+

+ Домашнее задание (у кого есть проверка) присылать до вечера 25.04
+

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson06.html b/resources/mails/topjava/lesson/lesson06.html new file mode 100644 index 0000000..dd99073 --- /dev/null +++ b/resources/mails/topjava/lesson/lesson06.html @@ -0,0 +1,27 @@ + + + + Шестое занятие проекта TopJava Enterprise + + +

+ Здравствуй firstName! +

+

+ Выложил шестое занятие нашего + проекта
+ Начинаем изучать Spring-MVC и слой Web. Урок большой, поэтому следующее занятие будет уже после майских праздников, 11.05 (расписание и план занятий).
+

+

+ Перед накаткой первого патча код в ветке master твоего проекта должен быть в том же состоянии, что и ветка master нашего проекта. + Обсуждение занятия в и домашнего задания в канале slack #hw6 +

+

+ Домашнее задание (у кого есть проверка) желательно присылать до воскресенья-понедельника (07.05-08.05), + чтобы успеть провериться несколько раз.
+

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson07.html b/resources/mails/topjava/lesson/lesson07.html new file mode 100644 index 0000000..9270d63 --- /dev/null +++ b/resources/mails/topjava/lesson/lesson07.html @@ -0,0 +1,27 @@ + + + + Седьмое занятие проекта TopJava Enterprise + + +

+ Здравствуй firstName! +

+

+ Выложил седьмое занятие нашего + проекта: REST контроллеры и тестирование контроллеров. +

+В патче прошлого занятия 6_16_spring_i18n.patch на app_ru.properties была ошибка: Spring в отличии от JSP понимает +в ресурсах локализации UTF-8.
+Если у вас проблемы с 7_02_HW6_meals.patch, скопируйте всю правую часть из предлагаемого merge или возьмите этот файл с google drive. +

+ Обсуждение занятия и HW7 в slack #hw7 +

+

+ Домашнее задание не очень большое, у кого есть проверка присылать до вечера 16.05
+

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson08.html b/resources/mails/topjava/lesson/lesson08.html new file mode 100644 index 0000000..d7b6b78 --- /dev/null +++ b/resources/mails/topjava/lesson/lesson08.html @@ -0,0 +1,22 @@ + + + + Восьмое занятие проекта TopJava Enterprise + + +

+ Здравствуй firstName! +

+

+Вчера выложил восьмое занятие нашего проекта.
+ CSS (Bootstrap), JavaScript (jQuery + plugins), AJAX, добавление к REST контроллерам базовой авторизации (в UI и тесты добавим на следующем уроке). +

+Внимание: в конце занятия добавил fix 10_fix.patch +

+ Перед накаткой патчей код в ветке master твоего проекта должен быть в том же состоянии, что и ветка master нашего проекта.
+ Обсуждение занятия и домашнего задания в slack #hw8 +

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson09.html b/resources/mails/topjava/lesson/lesson09.html new file mode 100644 index 0000000..0dcb42e --- /dev/null +++ b/resources/mails/topjava/lesson/lesson09.html @@ -0,0 +1,24 @@ + + + + Девятое занятие проекта TopJava Enterprise + + +

+ Здравствуй firstName! +

+

+В четверг выложил девятое занятие нашего проекта.
+Наконец делаем настоящую авторизацию, ее тестирование и отрисовку таблиц по AJAX. +

+

+ Перед накаткой патчей код в ветке master твоего проекта должен быть в том же состоянии, что и ветка master нашего проекта. + Обсуждение занятия и домашнего задания в slack #hw9 +

+

+ Не тяните с выполнением домашнего задания!
+

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson10.html b/resources/mails/topjava/lesson/lesson10.html new file mode 100644 index 0000000..27e06d8 --- /dev/null +++ b/resources/mails/topjava/lesson/lesson10.html @@ -0,0 +1,39 @@ + + + + Десятое занятие проекта TopJava Enterprise + + +

+ Здравствуй firstName! +

+

+ Выложил десятое занятие нашего + проекта.
+ Обсуждение занятия и домашнего задания в Slack #hw10
+ Не тяните с выполнением Домашнее задания
+

+

+08.06 проведем заключительное занятие с деплоем в Heroku.
+Для участников с проверкой ДЗ принимаю выпускной проект на ревью в течении 3 недель после окончания Topjava, до 06.07.
+

+

+ Напоминаю про группу Slack Java Online Projects, где мы все общаемся на IT темы (помощь с Java, отзывы о работах, + обсуждение тестовых заданий, + вакансии, цены на рынке труда, IT события, интересные видео по теме и пр.) + Проверь свои контактные + данные. + Галочка 'размещение своих данных в закрытой статистике группы' говорит о том, что участники проектов смогут + увидеть твой город и skype в списке, а ты сможешь найти там разработчиков из своего города. + После сохранения формы на почту должно прийти приглашение в группу Slack (обычно в течении 5 минут) и откроется ссылка на список + участников, отсортированный по городам. Группу topjava10 после окончания проекта удалю. +

+Следующий выпуск TopJava11 начнется 06.07 (первое занятие 13.07, внизу расписание). +Повторное участие без проверки домашних заданий бесплатное. Единственное условие: пожалуйста сделай репост объявления о наборе в VK или в Facebook. +Для повторного участия зарегистрируйся тут и тебе + придет ссылка на группу Slack topjava11. +

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson10_fix.html b/resources/mails/topjava/lesson/lesson10_fix.html new file mode 100644 index 0000000..e22d52a --- /dev/null +++ b/resources/mails/topjava/lesson/lesson10_fix.html @@ -0,0 +1,16 @@ + + + + Ошибка в 10м уроке (10_15_csrf.patch) + + +

+ Здравствуй firstName! +

+В 10-м уроке ошибка в патче 10_15_csrf.patch: CSFR должен выставляется в 'makeEditable()' для всех запросов. +Также удалил '@page session="false"' в JSP: не отображаются ошибки авторизации, которые находятся в сессии, отключенной от JSP. +

Накатите патч 11_0_fix.patch

+

+

+ + \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson11.html b/resources/mails/topjava/lesson/lesson11.html new file mode 100644 index 0000000..35d3c3c --- /dev/null +++ b/resources/mails/topjava/lesson/lesson11.html @@ -0,0 +1,66 @@ + + + + + + 11 заключительное занятие проекта 'Java Enterprise (TopJava)' + +

+ Здравствуй firstName!
+

+Выложил заключительное занятие и +обновленное демо приложение.
+Обсуждение занятия и твоего резюме в Slack #hw11
+Выпускной + проект от участников с проверкой ДЗ нужно сдать на ревью до 06.07 +(обратите внимание на рекомендации).
+При участии впроекте Многомодульный maven. Многопоточность. XML (JAXB/StAX). + Веб сервисы (JAX-RS/SOAP). Удаленное взаимодействие (JMS/AKKA) срок на ревью + 3 месяца. +

+ Все + материалы проекта останутся тебе доступны (в течении нового курса они будут постепенно переезжать в подпапку + Topjava11). Для просмотра в Chrome файлов md я пользуюсь плагином + Markdown Preview (нужно в его параметрах разрешить открывать файл по ссылкам) или можно использовать плагин + IDEA Markdown support. +

+

Обновленное резюме внесите в свой + профиль (также проверьте флаг 'рассматриваю работу', 'готов к релокации' и информация для HR). + Обновления базы соискателей буду рассылать по HR 14.06, постарайтесь успеть.

+

Буду очень признателен за репост набора на Topjava11 в + VK или Facebook, +

+

Открыта регистрация на проект MasterJava (участие в проекте в + индивидуальном порядке (в любое время) по готовым материалам и патчам с поддержкой в группе Slack). + Для всех участников осенью планируется стажировка (занятия раз в неделю) с обновлением проекта

+

Большая просьба ответить на 4-6 вопросов по проекту, чтобы сделать его + лучше. Если проект понравился, напиши пожалуйста в VK отзыв о + проекте.

+

После прохождения испытательного срока на работе не забудь поделиться своей + историей успеха!
+

+

+ Доработки + приложения шли мне на ревью. Я включу ссылку на твой репозиторий в список для доступа к ним всех участников + Topjava. + Можно также участвовать в разработке сайта Java Online Projects (Spring Boot, репозиторий в GitHub, канал в Slack), с меня - выставление заданий и ревью. К сожалению по причине загрузки поддержка от меня будет небольшая. +

+

Важные ссылки:

+ +

На следующей неделе сделаю заключительную рассылку по стажировке, системе бонусов и будующих проектах.

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/lesson/lesson11_final.html b/resources/mails/topjava/lesson/lesson11_final.html new file mode 100644 index 0000000..8136125 --- /dev/null +++ b/resources/mails/topjava/lesson/lesson11_final.html @@ -0,0 +1,61 @@ + + + + + + Окончание проекта-стажировки 'Java Enterprise (TopJava)' + +

+ Здравствуй firstName!
+

+

+ Спасибо за участие в проекте-стажировке Java Enterprise (Topjava)! И спасибо всем, кто принял участие в мини-опросе. + Кто еще не сделал, ответьте плз. на 4 вопроса. +

+ЗАВТРА, 16.06, буду делать рассылку обновлений по HR (на данный момент 87 HR контактов). Еще +можно успеть доделать резюме (см. +замечания по резюме) +и заполнить в +своем профиле поля для HR: +"Город (как он в комбо-боксе, если есть)", "Текущее место работы", "Ссылка на резюме", "Рассматриваю предложения о работе", "Готов к релокации", "Информация для HR". +Если у тебя на работе есть вакансии для наших выпускников, публикуй их в #vacancies группы JavaOPs и пришли мне email отдела +кадров, я вышлю им доступ к нашей базе. +

+ Группу slack topjava10 вскоре удалю, продолжаем общение в Slack + JavaOPs (после сохранения формы должно прийти приглашение). + Github репозиторий topjava10 также скоро заархивирую и положу в Google Drive (доступ ко всем + материалам остается).
+

+

+ Если есть желание, можно пройти со мной тестовое интервью (здесь + также есть полезные ссылки для подготовки, расценки внизу).
+

+

Пожалуйста напиши отзыв в VK (или в личку + Slack/skype, если нет VK аккаунта)!
+ Новый выпуск topjava11 стартует 06.07 (первое занятие 13.07), приглашай + знакомых. +

+

Сделал последний патч:

+
    +
  • Убрал @SafeHtml для полей email (валидируется на формат email) и password + (не попадает в браузер) +
  • +
  • Сделал локализацию NotFoundException, отнаследовав ее от ApplicationException
  • +
  • Добавил вывод локализированных ApplicationException сообщений в GlobalControllerExceptionHandler + (например при попытке отредактировать профиль админа в Heroku) +
  • +
+

+ Добавляйся в группу VK: Java Enterprise Online Обучение, + все + интересное публикую там.
+

+До встреч на новых проектах! (в Masterjava до осени участие индивидуальное по готовым материалам и патчам с поддержкой в группе Slack). +Информацию об остальных проектах + систему бонусов вскоре разошлю. +

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/participate.html b/resources/mails/topjava/participate.html new file mode 100644 index 0000000..9a33dd9 --- /dev/null +++ b/resources/mails/topjava/participate.html @@ -0,0 +1,114 @@ + + + + Участие в проекте 'Java Enterprise (TopJava)' + +

+ Здравствуй firstName!
+

+

Поздравляю тебя с участием в проекте Java Enterprise (Topjava)!

+Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API и сохранением в базах данных Postgresql и HSQLDB. +

+Общение на проекте предлагаю на "ты". Проект ведется по подготовленным на основе вебинара, разбитым по темам и +отредактированым записям. Раз в неделю +(четверг) производится рассылка новых материалов, обновления к проекту (патчи) и домашние задания. Все домашние +задания являются чаcтью проекта, подобранны по темам занятий и требуют реализации функциональности, схожей с +пройденной на занятии. +

+

Описание и план проекта
+ Демо разрабатываемого приложения

+

Заполнение регистрационной формы

+Общение на проекте будет вестись в группе Slack. Заполни пожалуйста все поля + регистрационной формы. После ее сохранения +
    +
  • на почту придет приглашение в группу (обычно в течении 5 мин, проверь папку спам)
  • +
  • по gmail аккаунту предоставится доступ к материалам. Если + картинка по ссылке закрыта, по порядку: +
      +
    • выйти-войти в gmail аккаунт, который ты указал в форме регистрации
    • +
    • попробовать войти в анонимной вкладке
    • +
    • Внимание!! НЕ НАДО запрашивать доступ через Google Drive (он дается автоматически по заполнению + формы)
    • +
    • если доступа нет, напиши мне в skype grigory.kislin или в личку в группы Slack
    • +
    +
  • +
+Общение в Slack происходит в каналах по темам, для каждого нового занятия будет делаться отдельный канал. Обсуждение вступительного занятия происходит в канале Slack #hw0.
+Другие каналы Slack: +
    +
  • #flooding: оффтопик
  • +
  • #general: общие вопросы
  • +
  • #git: вопросы по git
  • +
  • #idea: вопросы по IDEA
  • +
  • #interview_job: прохождение интервью, работа, + вакансии +
  • +
  • #links: интересные ресурсы
  • +
  • #rss: подписка на публикации от JUG.ru, Хабрабабр, + Типичный программист. +
  • +
+Форматирование сообщений в + slack
+Desktop/ Mobile приложение Slack +

IDE: IntelliJ IDEA

+IDEA считается лучшей Java IDE, и по последней + статистике IntelliJ is the number one IDE. Поэтому разработка проекта ведется в IntelliJ IDEA, брать версию + Ultimate. Если ты студент (или есть знакомые студенты/ аспиранты), то лучше взять студенческую + учебную лицензию IntelliJ IDEA на год. Купон на бесплатную личную лизензию IntelliJ IDEA на полгода +можно получить согласно политике JetBrains только +один раз по этой ссылке и далее по +инструкции в письме (лучше активировать ее после месячного trial периода, купон будет действителен). +

Вводное занятие

+До старта проекта 06.07 приступай к освоению вводного + занятия. Здесь есть видео с подробными инструкциями по установке проекта и работе с системой управления +версиями git и GitHub. +Перед выполнением домашнего задания обязательно посмотри все видео занятия и следуй +инструкциям. Особое внимание обращаю на WIKI по ведению + проекта в Git, необходимо строго следовать этим правилам!. +

Проверка домашних заданий

+Разбор домашний заданий происходит в начале каждого занятия.
+Если у тебя участие с проверкой ДЗ, то свое решение вступительного задания желательно присылать на проверку начиная c +06.07 до вечера 11.07, остальных домашних заданий - до вечера вторника. +

+ Проверка заданий подразумевает ревью твоего кода (лучше ДЗ присылать пораньше, чтобы успеть поправить ошибки и + сделать еще одно ревью). Ты увидишь именно свои ошибки в стиле, структурах данных, + алгоритмах и кодировании. Это самый эффективный способ научиться программировать. Все домашние задания + это часть проекта. Часть из них достаточно простая, часть Optional - сложнее. Обычно участники чекинят код в + гитхаб и шлют ссылку на репозиторий. Проверка заданий делается ассистентом Татьяной при моей поддержке, результат проверки + пишется в slack. Получается эффективно и + оперативно. Можно что-то переделать и снова поревьюится.
+

+Для всех участников: БЕСПЛАТНОЕ участие в следующий выпусках проекта Topjava (по желанию, ближе к концу проекта я вышлю +ссылку). +Проект постоянно развивается, в том числе благодаря вашему активному участию. По сравнению с первыми выпусками проект существенно обновился. + +

Пожелания к участникам.

+Обычно участники подбираются с разным уровнем. Поэтому главное- не стеснятся задавать вопросы! Всегда есть поддержка +группы, меня и ассистента Татьяны. Проходят занятия раз в неделю, поэтому времени для усвоения пройденного и выполнения домашних +заданий достаточно, при условии что вы НЕ ОТКЛАДЫВАЕТЕ обучение на потом. В зависимости от уровня подготовки на обучение +необходимо уделять от 5 до 15 часов в неделю. Для усвоения материала ВЫПОЛНЯТЬ ДОМАШНИЕ ЗАДАНИЯ НЕОБХОДИМО: после +лекции, через месяц у студента в голове остаётся 3% знаний. А если он выполнил упражнение на практике то в памяти +сохраняется 95% знаний + бонус. Студент, практикуя упражнение, открывает ещё 50% нюансов знаний, которые не были +озвучены преподавателем. + +

Ресурсы

+Основы JavaSсript необходимы для понимания проекта, начиная с 8-го занятия. Рекомендую также изучить полезные ресурсы. + +

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/start.html b/resources/mails/topjava/start.html new file mode 100644 index 0000000..14f71d1 --- /dev/null +++ b/resources/mails/topjava/start.html @@ -0,0 +1,37 @@ + + + + Старт проекта-стажировки 'Java Enterprise (TopJava)' + +

+ Здравствуй firstName!
+

+Поздравляю тебя со стартом проекта-стажировки Java Enterprise (Topjava)!
+Напомню, что общение на проекте на "ты" и проект ведется по подготовленным на основе вебинара, разбитым по темам и отредактированым записям. +

Расписание занятий выложил в репозиторий github, в котором будет вестись наш проект

+Он, за исключением md информационных файлов, совпадает с твоим. +

+ С сегодня (16.03) и до вечера 21.03 начинаю принимать решения вступительного домашнего задания (проверяем вдвоем с ассистентом Татьяной). + У кого есть проверка, я пришлю дополнительное письмо, куда нужно слать ссылку на свой репозиторий. Если у тебя нет проверки, то ДЗ на твоей совести, но я ОЧЕНЬ рекомендую его выполнять! + ТОЛЬКО ТОГДА от проекта будет польза.
+ В начале каждого урока будет разбор заданий и можно сравнить свое решение с моим. +

+

Рассылка первого занятие будет 23.03
+ (обычно ночью выкладываю ссылку в канал #general Slack и днем дублирую ее на почту)

+Все общение по проекту ведется в каналах группы Slack по темам, для каждого нового урока будет делаться отдельный канал. Обсуждение вступительного занятия происходит в канале Slack #hw0.
+ +

Если у тебя нет доступа к картинке по ссылке или ты еще не в группе Slack, внимательно прочти инструкцию в письме участника.

+ В случае проблем нужно связаться со мной в skype grigory.kislin или в личку в группы Slack или в ответе на это письмо. +

+Основы JavaSсript необходимы для понимания проекта, начиная с 8-го занятия. Рекомендую также изучить полезные ресурсы. +

+

+ Удачи в освоении материалов и выполнении задания,
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Java Online Projects +

+ \ No newline at end of file diff --git a/resources/mails/topjava/topjava_10day.html b/resources/mails/topjava/topjava_10day.html new file mode 100644 index 0000000..d68324c --- /dev/null +++ b/resources/mails/topjava/topjava_10day.html @@ -0,0 +1,46 @@ + + + + + + Участие в 'Java Enterprise (Topjava)': не пропусти важное. + +

+ Здравствуй firstName!
+

+

Напомню, что скоро старт проекта Java Enterprise (Topjava)!

+

+Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), + REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API

+

+ В группе Slack нас уже больше 100! (с учетом участников, которые пошли на повтор).
+Уже идут обсуждения в каналах #general, #hw0, #idea. Также сделал канал #rss с подпиской на интерсные публикации от +JUG.ru, Хабрабабр, Типичный программист.
+

+

+ Если у тебя есть подписка JavaRush "реальный проект/стажировка", свяжись со мной отдельно в скайпе: grigory.kislin (или тел. +7 921 855 0482). +

+

Если такой подписки нет и ты уже принял решение об участии, можно оплачивать и участвовать в проекте, чтобы не пропустить ничего важного.

+

После оплаты объязательны вышли мне в skype: grigory.kislin (или VK или sms +7 921 855 0482) свой email - я вышлю письмо участника с приглашением в группу проекта.

+
    +
  • + Стоимость участия без проверки домашних заданий: 8300 руб./ 128$
    + сюда входят все материалы, участие в группе slack, ответы на вопросы и помощь с проектом. +
  • +
  • Стоимость полного пакета: 16500 руб./255$: + добавляется проверка домашних заданий + ревью выпускного проекта (либо вашего, например тестового задания при + устройстве на работу). +
  • +
  • Для всех: бесплатное участие в следующий выпусках проекта.
  • +
+

Способы оплаты

+Вопросы по проекту
+Ресурсы для подготовки
+Отзывы реальных участиников предыдущих выпусков
+Демо приложения +
+

Поторопись, если хочешь значительно поднять свой уровень владения Java Enterprise и принять участие в разработке!

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/topjava_ad.html b/resources/mails/topjava/topjava_ad.html new file mode 100644 index 0000000..09d3e8a --- /dev/null +++ b/resources/mails/topjava/topjava_ad.html @@ -0,0 +1,45 @@ + + + + + + Ранняя цена на стажировку 'Java Enterprise (Topjava)'. Старт 06.07 + +

+ Здравствуй firstName!
+

+

Приглашаю тебя на стажировку Java Enterprise (Topjava) по ранней цене.

+Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), + REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API
+Отзывы по проекту +

Старт 06.07

+

+ По ссылке можно получить бесплатное вступительное + задание, чтобы оценить свои силы и + получить представление о том, как будут проходить занятия. +

+ранняя
    +
  • + Стоимость участия без проверки домашних заданий до 15.06: 7900 руб./ 143$
    + сюда входят все материалы, участие в группе skype и slack, ответы на вопросы и помощь с проектом. +
  • +
  • Стоимость полного пакета до 15.06: 15500 руб./ 272$ + добавляется проверка домашних заданий + ревью выпускного проекта (либо вашего, например тестового задания при + устройстве на работу). +
  • +
  • Для всех: бесплатное участие в следующий выпусках проекта.
  • +
  • Способы оплаты
  • +
  • Вопросы по проекту
  • +
  • Ресурсы для подготовки
  • +
+После оплаты объязательны напиши мне в skype: grigory.kislin или в +ответе на это письмо детали оплаты и email: я вышлю письмо участника с приглашением в группу проекта Slack, доступом +ко всем материалам проекта и лицензией IntelliJ IDEA на 6 месяцев. +Если у тебя есть подписка JavaRush "стажировка/Premium Pro", свяжись со мной отдельно в скайпе: grigory.kislin + или в ответе на письмо. +
+

Надеюсь увидеться на проекте,

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/topjava_ad_repeat.html b/resources/mails/topjava/topjava_ad_repeat.html new file mode 100644 index 0000000..b5fa7f2 --- /dev/null +++ b/resources/mails/topjava/topjava_ad_repeat.html @@ -0,0 +1,99 @@ + + + + + + 26.05 старт проекта 'Java Enterprise (Topjava)' + +

+ Здравствуй firstName!
+

+

Приглашаю тебя принять участие в очередном выпуске проекта Java Enterprise (Topjava)

+Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), + REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API
+ +

Старт 26.05 (следующий четверг).
+ Выполняя вступительное задание можно оценить свои силы и + получить представление о том, как будут проходить занятия. +

+

Требования к участникам:

+На проекте мы не проходим синтаксис java: предполагается, что вы уже знаете, что такое классы, конструкторы, +аннотации, анонимные классы, исключения и пр. +Также необходим некоторый опыт программирования на java. Желательно знание сервлетов. Мы начинаем использовать их на +первом занятии, кратко повторяя основы. +Знание SQL (на уровне Select/ Insert/ Update/ Delete), JavaScript желательно, но не принципиально. Весь +"Enterprise": Maven, Git (в том объеме, который нам нужен), Spring, Hibernate, REST даются с азов. Никаких + специальных знаний Java EE не требуется. +
    +
  • + Стоимость участия без проверки домашних заданий: 8300 руб.
    + сюда входят все материалы, участие в группе skype и slack, ответы на вопросы и помощь с проектом. +
  • +
  • Стоимость полного пакета: 16500 руб. + добавляется проверка домашних заданий + ревью выпускного проекта (либо вашего, например тестового задания при + устройстве на работу). +
  • +
  • Для всех: бесплатное (или с доплатой за проверку) участие в следующий выпусках проекта.
  • + Если Вы уже участвовали на моих курсах, то есть скидка: 700 руб. (без проверки ДЗ) и 1500 руб (с проверкой). +
  • Способы оплаты
  • +
  • Вопросы по проекту
  • +
  • Ресурсы для подготовки
  • +
  • Курс рубля
  • +
+ +
+

Основные достоинста проекта, взятые из отзывов участников: +

+

Максимальный охват

+Самые важные и необходимые Java разработчику темы, API, фреймворки, инструменты в одном курсе. + +

Насыщенное и структурированное изложение как дополнение к проекту

+Изложение материала "без воды" нацелено на практическое использование и дополняется материалом для самостоятельной +проработки. Темы идут не по отдельности (в воздухе) на отстраненных примерах, а последовательно, в связке, как +дополнения к созданию единого работающего приложения. +Усвоение и понимание материала увеличивается в разы. + +

Последовательная возрастание сложности с нуля

+Сложность проекта возрастает постепенно, с кода "Hello Topjava" в main() вступительного задания до финальной версии. +Слон съедается по кусочкам. + +

Совместная разработка

+Участники на протяжении всего курса работают с кодом проекта. Выполнение домашних заданий закрепляет полученные +знания. +В результате проект становится "Твоим". + +

Поддержка группы и преподавателя

+Общение по любым вопросам: git, IDEA, домашние задания, зарплаты программиста, java консультации, архитектура, +трудоустройство, вакансии, новости IT и пр. + +

Доступность и структурированность материалов

+Все видео доступно для просмотра онлайн и скачивания. Записи разбиты по темам +и тщательно отредактированы. Большое количество подобранных ресурсов для углубления в детали. + +

Оптимальное подобранное время

+Занятия проходят раз в неделю, оптимальное время необходимое для проработки пройденных тем и выполнения домашнего +задания. + +

Ревью Вашего кода.

+Вы увидите именно свои ошибки в стиле, структурах данных, алгоритмах, кодировании. +Опыт равноценен нескольким годам работы разработчиком java. + +

Помощь в составлении резюме и с трудоустройством.

+Ваши формы соискателя я рассылаю всем знакомым HR, уже есть случаи трудоустройства выпускников. +Также в группе выпускников происходит активное общение на эту тему, коллеги делятся своим опытом трудоустройства, +публикуют вакансии со своей работы. +

После проекта в твоем резюме появится раздел в опыте работы:

+Участие в разработке Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей +на стеке Maven/ Spring MVC/ Security/ REST(Jackson)/ Java 8 Stream API: +
    +
  • реализация сохранения в базы Postgres и HSQLDB на основе Spring JBDC, JPA(Hibernate) и Spring-Data-JPA
  • +
  • реализация и тестирование REST и AJAX контроллеров
  • +
  • реализация клиента на Bootstrap (css/js), datatables, jQuery + plugins.
  • +
  • твоя доработка проекта
  • +
+ +

Надеюсь увидеться на проекте,

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/topjava_early_price.html b/resources/mails/topjava/topjava_early_price.html new file mode 100644 index 0000000..56f6602 --- /dev/null +++ b/resources/mails/topjava/topjava_early_price.html @@ -0,0 +1,44 @@ + + + + Ранняя цена на стажировку 'Java Enterprise (Topjava)'. Старт 06.07 + +

+ Здравствуй!
+

+

Приглашаю тебя на стажировку Java Enterprise (Topjava) по ранней цене.

+Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), + REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API
+
+

Бесплатное вводное занятие

+ До 15.06 действует раняя цена на стажировку Java Enterprise + (Topjava). Если ты еще в поиске работы Java разработчика, после проекта твои шансы получить работу возрастут на порядок.
+ Если уже работаешь, но нет достаточно опыта в стеке Maven, Spring MVC, Security, JPA(Hibernate), REST(Jackson), + Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API, это отличный шанс получить его быстро и на хорошем уровне: + проект зрелый (идет уже 3 года) и постоянно дорабатывается.
+ Стоимость до 15.06: + + После оплаты объязательны напиши мне в skype: grigory.kislin или в + ответе на это письмо детали оплаты и email: я вышлю письмо участника с приглашением в группу проекта Slack, доступом + ко всем материалам проекта и личной лицензией IntelliJ IDEA на 6 месяцев. + Если у тебя есть подписка JavaRush "стажировка/ Premium Pro", свяжись со мной отдельно в скайпе: grigory.kislin + или в ответе на письмо. +
+

Старт 06.07. До встречи на стажировке!

+ Cсылки проекта: + +

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/topjava_first_lesson.html b/resources/mails/topjava/topjava_first_lesson.html new file mode 100644 index 0000000..19caefc --- /dev/null +++ b/resources/mails/topjava/topjava_first_lesson.html @@ -0,0 +1,152 @@ + + + + + + Проект Java Enterprise (Topjava): рассылка первого занятия 02.06.2016 + +

+ Здравствуй firstName!
+

+Проект Java Enterprise (Topjava) стартовал, участники собраны в группе Slack (общение по темам), розданы права на материалы, делается вступительное задание.
+Рассылка первого урока будет 02.06, у тебя еще есть возможность принять участие. +Не упусти шанс кардинально поднять свой уровень Java разработчика. +
    +
  • + Стоимость участия без проверки домашних заданий: 8300 руб.
    + сюда входят все материалы, участие в группе skype и slack, ответы на вопросы и помощь с проектом. +
  • +
  • Стоимость полного пакета: 16500 руб. + добавляется проверка домашних заданий + ревью выпускного проекта (либо вашего, например тестового задания при + устройстве на работу). +
  • +
  • Для всех: бесплатное (или с доплатой за проверку) участие в следующий выпусках проекта.
  • + Скидка для участников других проектов: 700 руб. (без проверки ДЗ) и 1500 руб (с проверкой). +
  • Способы оплаты
  • +
  • Курс рубля

  • +
  • Вопросы по проекту
  • +
  • Ресурсы для подготовки
  • +
+

Перед оплатой пожалуйста свяжись со мной в скайпе: grigory.kislin (или тел. +7 921 855 0482)

+
+

Отзывы реальных участиников предыдущих выпусков.

+

Расписание занятий проекта:

+рассылка занятий происходит по четвергам, для участников с проверкой домашнего задания желательно присылать + ссылку github на решение до вечера следующего вторника, чтобы я успел сделать ревью кода. +
    +
  • Сбор группы в Slack и Skype
  • +
  • Заполнение формы регистрации участника (в том числе gmail для доступа к материалам на Google Drive)
  • +
  • Раздача учебных лицензий IntelliJ IDEA
  • +
  • Начало выполнение вступительного задания
  • +
+

    02.06: 1-е занятие

    +
  • Разбор домашнего задания вступительного занятия (вместе с Optional)
  • +
  • Обзор используемых в проекте технологий. Интеграция ПО
  • +
  • Maven
  • +
  • WAR. Веб-контейнер Tomcat. Сервлеты
  • +
  • Логирование
  • +
  • Уровни и зависимости логгирования. JMX
  • +
  • Домашнее задание 1-го занятия (HW1 + Optional)
  • +
+

    09.06: 2-е занятие

    +
  • Разбор домашнего задания HW1 + Optional
  • +
  • Библиотека vs Фреймворк. Стандартные библиотеки Apache Commons, Guava
  • +
  • Слои приложения. Создание каркаса приложения
  • +
  • Обзор Spring Framework. Spring Context
  • +
  • Пояснения к HW2. Обработка Autowired
  • +
  • Домашнее задание (HW2 + Optional)
  • +
+

    16.06: 3-е занятие

    +
  • Разбор домашнего задания HW2 + Optional
  • +
  • Жизненный цикл Spring контекста
  • +
  • Тестирование через JUnit
  • +
  • Spring Test
  • +
  • Базы данных. Обзор NoSQL и Java persistence solution без ORM
  • +
  • Настройка Database в IDEA
  • +
  • Скрипты инициализации базы. Spring Jdbc Template
  • +
  • Подготовка тестовых данных и тестирование UserService
  • +
  • Логирование тестов
  • +
  • Домашнее задание (HW3 + Optional)
  • +
+

    23.06: 4-е занятие

    +
  • Разбор домашнего задания HW3 + Optional
  • +
  • Методы улучшения качества кода
  • +
  • Spring: инициализация и популирование DB
  • +
  • Подмена контекста при тестировании
  • +
  • ORM. Hibernate. JPA
  • +
  • Поддержка HSQLDB
  • +
  • Домашнее задание (HW4 + Optional)
  • +
+

    30.06: 5-е занятие

    +
  • Разбор вопросов
  • +
  • Разбор домашнего задания HW4 + Optional
  • +
  • Транзакции
  • +
  • Профили Maven и Spring
  • +
  • Пул коннектов
  • +
  • Spring Data JPA
  • +
  • Spring кэш
  • +
  • Домашнее задание (HW5 + Optional)
  • +
+

    07.07: 6-е занятие

    +
  • Разбор домашнего задания HW5 + Optional
  • +
  • Кэш Hibernate
  • +
  • Spring Web
  • +
  • JPS, JSTL, internationalization
  • +
  • Динамическое изменение профиля при запуске
  • +
  • Конфигурирование Tomcat через maven plugin. Jndi-lookup
  • +
  • Spring Web MVC
  • +
  • Spring Internationalization
  • +
  • Домашнее задание (HW6 + Optional)
  • +
+

    14.07: 7-е занятие

    +
  • Разбор домашнего задания HW6 + Optional
  • +
  • Автогенерация DDL по модели
  • +
  • Тестирование Spring MVC
  • +
  • REST контроллеры
  • +
  • Тестирование REST контроллеров. Jackson
  • +
  • jackson-datatype-hibernate. Тестирование через матчеры
  • +
  • Тестирование через SoapUi. UTF-8
  • +
  • Домашнее задание (HW7 + Optional)
  • +
+

    21.07: 8-е занятие

    +
  • Разбор домашнего задания HW7 + Optional
  • +
  • WebJars. jQuery и JavaScript frameworks
  • +
  • Bootstrap
  • +
  • AJAX. Datatables. jQuery
  • +
  • jQuery notifications plugin
  • +
  • Добавление Spring Security
  • +
  • Домашнее задание (HW8 + Optional)
  • +
+

    28.07: 9-е занятие

    +
  • Разбор домашнего задания HW8 + Optional
  • +
  • Spring Binding
  • +
  • Spring Validation
  • +
  • Перевод DataTables на Ajax
  • +
  • Форма login / logout
  • +
  • Реализация собственного провайдера авторицазии
  • +
  • Принцип работы Spring Security. Проксирование
  • +
  • Spring Security Test
  • +
  • Cookie. Session
  • +
  • Домашнее задание (HW9 + Optional)
  • +
+

    04.08: 10-е занятие

    +
  • Разбор домашнего задания HW10 + Optional
  • +
  • Spring Security Taglib. Method Security Expressions
  • +
  • Интерсепторы. Редактирование профиля. JSP tag files
  • +
  • Форма регистрации
  • +
  • Обработка исключений в Spring
  • +
  • Encoding password
  • +
  • Защита от межсайтовой подделки запросов (CSRF)
  • +
  • Домашнее задание (HW10)
  • +
+

    11.08: Заключительное занятие

    +
  • Рефакторинг
  • +
  • Разбор домашнего задания HW10 + Optional
  • +
  • Деплой приложения в Heroku
  • +
  • Возможные доработки приложения
  • +
  • Опрос участников проекта
  • +
  • Домашнее задание по проекту: составление резюме
  • +
+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/topjava_graduation.html b/resources/mails/topjava/topjava_graduation.html new file mode 100644 index 0000000..1abb104 --- /dev/null +++ b/resources/mails/topjava/topjava_graduation.html @@ -0,0 +1,28 @@ + + + + Выпускной проект тренинга 'Java Enterprise (TopJava)' + +

+ Здравствуй firstName!
+

+От участников были и есть жалобы, что новая информация плохо оседает в голове, когда дается в виде патчей. +И чтобы она надолго усваивалась были пожелания делать это вам самостоятельно. +

+Поэтому у меня повилась идея выпускного проекта, сделанного на нашем стеке. +

+

+ "Как лучше сделать и почему не работает" подсказок с моей стороны не будет. Представьте, что это ваше тестовое задание на работу. + И лучше не делиться своим кодом, иначе вы оказываете медвежью услугу. Но общие вопросы по технологиям конечно задавать можно и нужно в + канале #graduation +

+Далее вы сможете занести этот проект в свое портфолио и резюме как собственный, без всяких оговорок. +Ревью проекта входит в продписку с проверкой домашних заданий (ревьюится один раз). Проект можно делать в процессе topjava и еще 2 недели после его окончания. +Авторы лучших выпускных проектов будут иметь дополнительные преимущества в трудоустройстве. +

+ Еще: у нас новые истории выпускников!
+ Желаю хорошего кодинга и, конечно же, после трудоустройства и прохождения испытательного срока, буду ждать ваших историй! +

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/topjava_last_chance.html b/resources/mails/topjava/topjava_last_chance.html new file mode 100644 index 0000000..c46033c --- /dev/null +++ b/resources/mails/topjava/topjava_last_chance.html @@ -0,0 +1,48 @@ + + + + + + Первое занятие проекта Java Enterprise (Topjava) + +

+ Здравствуй firstName!
+

+СЕГОДНЯ (23.03) для участников проекта сделал рассылку первого занятия с разбором вводного задания +(расписание проекта есть в конце странички регистрации). +
+Если не получилось принять участие в этом проекте, следующий выпуск запланирован на 06.07, буду делать рассылку. +
+На проекте мы учимся мыслить и работать как Java разработчики уже сейчас, потом это будет гораздо сложнее и стоить дороже. +Вот на мой взгляд хорошие советы новичкам. От себя я добавлю: +
    +
  • Учись грамотно формулировать проблему. Проблема "у меня не работает" может иметь тысячи причин. В процессе формулирования очень часто приходит ее решение.
  • +
  • Учись исследовать проблему. Внимательное чтение логов и умение дебажить - основные навыки разработчика. В логах надо читать верх самого нижнего эксепшена - там причина всей портянки.
  • +
  • Грамотно уделяй время каждой проблеме. Две крайности - сразу бросаться за помощью и бится нам ней часами. + Пробуй решить ее сам и в зависимости от проблемы выделяй на это разумное время.
  • +
+
    +
  • + Стоимость участия без проверки домашних заданий: 8300 руб./145$
    + сюда входят все материалы, участие в группе slack, ответы на вопросы и помощь с проектом. +
  • +
  • Стоимость полного пакета: 16500 руб./285$ + добавляется проверка домашних заданий + ревью выпускного проекта (либо вашего, например тестового задания при + устройстве на работу). +
  • +
  • Для всех: бесплатное участие в следующий выпусках проекта.
  • +
+

+

+

Еще есть возможность попасть в этот выпуск: оплатить и ответить на это письмо (или в skype grigory.kislin). Я вышлю + письмо участника проекта и дам доступ ко всем ресурсам и персональный ключ IDEA на полгода.

+
+Отзывы реальных участиников предыдущих выпусков
+Демо приложения
+Вопросы по проекту
+Ресурсы для подготовки
+ +

Не упусти свой шанс стать Java Enterprise разработчиком!

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/topjava_on_week.html b/resources/mails/topjava/topjava_on_week.html new file mode 100644 index 0000000..6690c79 --- /dev/null +++ b/resources/mails/topjava/topjava_on_week.html @@ -0,0 +1,53 @@ + + + + + + Обновления в проекте 'Java Enterprise (Topjava)' + +

+ Здравствуй firstName!
+

+

+Старт Java Enterprise (Topjava) уже совсем скоро - в этот четверг, 01.12. +

+

+В wiki по проекту есть ответы на большинство ваших вопросов,
+ в требованиях к участникам никаких специальных знаний JavaEE для проекта не тербуется. +

+Отзывы проекта пополнились несколькими с последнего выпуска + (01.09- 17.11), проект реально дает возможность устроится на позицию middle разработчика (особенно при выполнении всех Домашних Заданий). +TopJava постоянно развивается, в том числе благодаря вашему активному участию. По сравнению с первыми выпусками +изменилось очень многое. Нарпимер: +
    +
  • 7й выпуск проекта дополнился JPA 2.1 EntityGraph, Jackson @JsonView, валидацией объектов REST, +локализацией в JavaScript, tomcat7-maven-plugin плагин перключили на Tomcat 8 (cargo-maven2-plugin), зарефакторилась обработка ошибок и матчеров +тестирования. +
  • +
  • в последнем 8м выпуске добавилась защита от XSS (Cross-Site Scripting), зарефакторилась работа с PK Hibernate в случае ленивой загрузки (баг call to id getter initializes proxy), + добавилась интеграция с Dependency Ci и Travis Ci (в дополнение к введенной ранее интеграции с + проверкой кода в Codacy), добавились тесты на профиль деплоя Heroku (общее количество JUnit тестов стало 102), добавилась локализация календаря, улучшился вид datatables и другие мелочи. + +
  • +
+Если у тебя есть подписка JavaRush "реальный проект/стажировка", свяжись со мной отдельно в скайпе: grigory.kislin или по почте.
+Если такой подписки нет можно оплатить участие и ответить на письмо, когда и куда была оплата (или в скайп grigory.kislin).
+Я вышлю письмо участника с приглашением в группу проекта слак. +В каналах группы #general, #hw0, #idea уже много интересного. Также сделал канал #rss с подпиской на публикации от +JUG.ru, Хабрабабр, Типичный программист. +
    +
  • + Стоимость участия без проверки домашних заданий: 8300 руб.
    + сюда входят все материалы, участие в группе slack, ответы на вопросы и помощь с проектом. +
  • +
  • Стоимость полного пакета: 16500 руб. + добавляется проверка домашних заданий + ревью выпускного проекта (либо вашего, например тестового задания при + устройстве на работу). +
  • +
  • Для всех: бесплатное (или с доплатой за проверку) участие в следующий выпусках проекта.
  • +
+
+Надеюсь увидеться на проекте. +

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/topjava_tomorrow.html b/resources/mails/topjava/topjava_tomorrow.html new file mode 100644 index 0000000..efdd460 --- /dev/null +++ b/resources/mails/topjava/topjava_tomorrow.html @@ -0,0 +1,47 @@ + + + + + + ЗАВТРА, 01.12 старт проекта 'Java Enterprise (Topjava)' + +

+ Здравствуй firstName!
+

+

Напомню, что ЗАВТРА, 01.12 старт проекта Java Enterprise (Topjava)!

+

+Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), + REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API

+ Требования к участникам +

+Проект ведется по подготовленным на основе вебинара, разбитым по темам и отредактированым записям. Раз в неделю +(четверг) производится рассылка новых материалов, обновления к проекту (патчи) и домашние задания. Домашние задания +подобранны по темам занятия и требуют реализации функциональности, схожей с пройденной на занятии. Разбор домашних +заданий происходит в начале каждого урока. +

+Завтра, 01.12, я буду раздавать доступ ко всем материалам проекта и начну принимать +решения вступительного задания.
+Первое занятие (с разбором вступительного задания) будет 08.12 +

+ +

+ Если у тебя есть подписка JavaRush "реальный проект/стажировка", свяжись со мной отдельно в скайпе: grigory.kislin или по почте. +

+

Если подписки нет можно оплачивать и ответить на это письмо куда была оплата (или в skype grigory.kislin): я вышлю + письмо участника для включения в группу слак.

+
+

Поторопись, если хочешь получить реальную возможность устроится на позицию middle разработчика!

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava/topjava_tomorrow2.html b/resources/mails/topjava/topjava_tomorrow2.html new file mode 100644 index 0000000..69593c6 --- /dev/null +++ b/resources/mails/topjava/topjava_tomorrow2.html @@ -0,0 +1,41 @@ + + + + + + Завтра, 08.09, рассылка первого занятия проекта 'Java Enterprise (Topjava)' + +

+ Здравствуй firstName!
+

+

Завтра, 08.09, рассылка первого занятия проекта Java Enterprise (08.09-17.11)

+Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), + REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API
+Отзывы реальных участиников предыдущих выпусков
+Демо приложения +

+ Если твое решение вступительное задания не готово, можешь посмотреть на мое (через стримы и через циклы) при его разборе в материалах первого занятия. + Для этого надо оплатить учатие. После оплаты выдаю доступ сразу ко всем материалам проекта, учебную лицензию IntelliJ IDEA и приглашение в группу Slack. +

+
    +
  • + Стоимость участия без проверки домашних заданий: 8300 руб.
    + сюда входят все материалы, участие в группе slack, ответы на вопросы и помощь с проектом. +
  • +
  • Стоимость полного пакета: 16500 руб. + добавляется проверка домашних заданий + ревью выпускного проекта (либо вашего, например тестового задания при + устройстве на работу). +
  • +
  • Для всех: бесплатное (или с доплатой за проверку) участие в следующий выпусках проекта.
  • +
  • Способы оплаты
  • +
  • Курс рубля
  • +
  • Вопросы по проекту
  • +
  • Ресурсы для подготовки
  • +
+

Перед оплатой пожалуйста свяжись со мной в скайпе: grigory.kislin (или тел. +7 921 855 0482)

+

Не упусти шанс значительно поднять свой уровень владения Java Enterprise и принять участие в + разработке!

+

+

+ \ No newline at end of file diff --git a/resources/mails/topjava_entrance.html b/resources/mails/topjava_entrance.html new file mode 100644 index 0000000..e14f397 --- /dev/null +++ b/resources/mails/topjava_entrance.html @@ -0,0 +1,11 @@ + + + + Вводное занятие стажировки 'Java Enterprise (Topjava)' + +

+ Здравствуй!
+

+

Спасибо за интерес к стажировке Java Enterprise (Topjava):

+
+ \ No newline at end of file diff --git a/resources/mails/topjava_info.html b/resources/mails/topjava_info.html new file mode 100644 index 0000000..3a0c854 --- /dev/null +++ b/resources/mails/topjava_info.html @@ -0,0 +1,261 @@ + + + разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + с + использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), + REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API и хранением в базах данных Postgresql и HSQLDB.
+

На бесплатном вводном занятии + подробно + разбирается работа с проектом в системе управления версиями Git. На занятиях мы последовательно разрабатываем + приложение с объяснениями и теоретическим материалом по всем темам проекта. + Домашние задания выполняются по всем темам занятий и являются частью проекта. На заключительном занятии каждый + участник деплоит свой + проект из github в облачный сервис Heroku. +

+
    +
  • Если ты еще в поиске работы Java разработчика, после проекта твои шансы получить работу возрастут на порядок
  • +
  • Если уже работаешь, но нет достаточно опыта работы на этом самом востребованном в Enterprise стеке, это отличный шанс получить его быстро и на хорошем уровне.
  • +
+ Проект ведется по подготовленным на основе вебинара, разбитым по темам и отредактированым записям. Раз в неделю (четверг) производится рассылка новых материалов, обновления к проекту (патчи) и домашние задания. Домашние задания подобранны по темам занятия и требуют реализации функциональности, схожей с пройденной на занятии. Разбор домашних заданий происходит в начале каждого урока. + Вопросы и обсуждение занятий и домашних заданий, общение на разные темы происходит в различных каналах группы проекта + (используем мессенджер Slack). Начиная с 4-го занятия участники пишут + собственный выпускной проект. +

Первое занятие с разбором вступительного задания будет в рассылке 13.07

+

Требования к участникам:

+ На проекте мы не проходим синтаксис java: предполагается, что вы уже знаете, что такое классы, конструкторы, + аннотации, анонимные классы, исключения и пр. + Также необходим некоторый опыт программирования на java. Желательно знание сервлетов. Мы начинаем использовать их на + первом занятии, кратко повторяя основы. + Знание SQL (на уровне Select/ Insert/ Update/ Delete), JavaScript желательно, но не принципиально. Весь + "Enterprise": Maven, Git (в том объеме, который нам нужен), Spring, Hibernate, REST даются с азов. Никаких + специальных знаний Java EE не требуется. +
+

Основные достоинста проекта, взятые из отзывов участников: +

+

Максимальный охват

+ Самые важные и необходимые Java разработчику темы, API, фреймворки, инструменты в одном курсе. + +

Насыщенное и структурированное изложение как дополнение к проекту

+ Изложение материала "без воды" нацелено на практическое использование и дополняется материалом для самостоятельной + проработки. Темы идут не по отдельности (в воздухе) на отстраненных примерах, а последовательно, в связке, как + дополнения к созданию единого работающего приложения. + Усвоение и понимание материала увеличивается в разы. + +

Последовательная возрастание сложности с нуля

+ Сложность проекта возрастает постепенно, с кода "Hello Topjava" в main() вступительного задания до финальной версии. + Слон съедается по кусочкам. + +

Совместная разработка

+ Участники на протяжении всего курса работают с кодом проекта. Выполнение домашних заданий закрепляет полученные + знания. + В результате проект становится "Твоим". + +

Поддержка группы и преподавателя

+ Общение по любым вопросам: git, IDEA, домашние задания, зарплаты программиста, java консультации, архитектура, + трудоустройство, вакансии, новости IT и пр. + +

Доступность и структурированность материалов

+ Все видео доступно для просмотра онлайн и скачивания. Записи разбиты по темам + и тщательно отредактированы. Большое количество подобранных ресурсов для углубления в детали. + +

Оптимальное подобранное время

+ Занятия проходят раз в неделю, оптимальное время необходимое для проработки пройденных тем и выполнения домашнего + задания. + +

Ревью Вашего кода.

+ Вы увидите именно свои ошибки в стиле, структурах данных, алгоритмах, кодировании. + Опыт равноценен нескольким годам работы разработчиком java. + +

Помощь в составлении резюме и с трудоустройством.

+ Ваши формы соискателя я рассылаю всем знакомым HR, уже есть случаи трудоустройства выпускников. + Также в группе выпускников происходит активное общение на эту тему, коллеги делятся своим опытом трудоустройства, + публикуют вакансии со своей работы. +

После проекта в твоем резюме появится раздел в опыте работы:

+ Участие в разработке Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + на стеке Maven/ Spring MVC/ Security/ REST(Jackson)/ Java 8 Stream API: +
    +
  • реализация сохранения в базы Postgres и HSQLDB на основе Spring JBDC, JPA(Hibernate) и Spring-Data-JPA
  • +
  • реализация и тестирование REST и AJAX контроллеров
  • +
  • реализация клиента на Bootstrap (css/js), datatables, jQuery + plugins.
  • +
  • твоя доработка проекта
  • +
+
+
    +
  • Стоимость участия без проверки домашних заданий: 8300 руб./ 150$
    + сюда входят все материалы, участие в группе skype и slack, ответы на вопросы и помощь с проектом.

    +
  • +
  • Стоимость полного пакета: 16200 руб./ 294$
    + добавляется проверка домашних заданий + ревью выпускного проекта (либо вашего, например тестового задания + при устройстве на работу).

  • +
  • Для всех: бесплатное участие в следующий выпусках проекта.

  • +
  • Скидка на другие проекты: 700 руб. (без ДЗ) и 1500 руб (с ДЗ).

  • +
  • Добавляйся в skype: grigory.kislin с пометкой topjava.

  • +
  • Способы оплаты (если у тебя есть подписка "стажировка/PremiumPro" от JavaRush, обязательно перед оплатой свяжись со мной)
    + После оплаты обязательно напиши в skype grigory.ksilin, куда была оплата и свой email (или можно написать информацию по оплате в ответ на это письмо)

  • +
  • Вопросы по проекту
  • +
  • Ресурсы для подготовки +
  • +
+
+

На проекте

+
    +
  • Основное внимание будет уделяться способам решения многочисленных проблем разработки в Spring/JPA, а + также + структурному (красивому и надежному) java кодированию и архитектуре приложения. +
  • +
  • Каждая итерация проекта закрепляется домашним заданием по реализации схожей функциональности. + Следующее + занятие + начинается с разбора домашних заданий. +
  • +
  • Большое внимание уделяется тестированию кода: в проекте 113 JUnit тестов. +
  • +
  • Несмотря на относительно небольшой размер, приложение разрабатывается с нуля как большой проект + (например, мы используем кэш 2-го уровня Hibernate, настраиваем Jenkins для работы с ленивой загрузкой + Hibernate, делаем конверторы для типов LocalDateTime (Java 8 time API), + которые еще не поддерживаются ни JPA/Hibernate, ни Jackson/json). + Разбираются архитектурные паттерны: слои приложения и как правильно разбивать логику по слоям, когда + нужно + применят Data Transfer Object. + Т.е на выходе получается не учебный проект, а хорошо маштабируемый шаблон для большого проекта на всех + пройденных технологиях. +
  • +
  • Большое внимание уделяется деталям: популяция базы, использование транзакционности, тесты сервисов и + REST + контроллеров, насторойка EntityManagerFactory, + выбор реализации пула коннектов. Особое внимание уделяется работе с базой: мы делаем реализацию через Spring + JDBC, Spring ORM + и Spring Data Jpa. +
  • +
  • Используются самые востребованные на сегодняшний момент фреймворки: Maven, Spring Security 4 + вместе с Spring Security Test, наиболее удобный для работы с базой проект Spring Data Jpa, библиотека + логирования logback, реализующая SLF4J, повсеместно используемый Bootstrap и jQuery. +
  • +
+

Расписание занятий проекта

+

    06.07: Старт проекта

    +
  • Сбор группы в Slack
  • +
  • Заполнение формы регистрации участника (в том числе gmail для доступа к материалам на Google Drive)
  • +
  • Раздача учебных лицензий IntelliJ IDEA
  • +
  • Выполнение и проверка вступительного задания +
  • +
+

    13.07: 1-е занятие

    +
  • Разбор домашнего задания вступительного занятия (вместе с Optional)
  • +
  • Обзор используемых в проекте технологий. Интеграция ПО
  • +
  • Maven
  • +
  • WAR. Веб-контейнер Tomcat. Сервлеты
  • +
  • Логирование
  • +
  • Уровни и зависимости логгирования. JMX
  • +
  • Домашнее задание 1-го занятия (HW1 + Optional)
  • +
+

    20.07: 2-е занятие

    +
  • Разбор домашнего задания HW1 + Optional
  • +
  • Библиотека vs Фреймворк. Стандартные библиотеки Apache Commons, Guava
  • +
  • Слои приложения. Создание каркаса приложения
  • +
  • Обзор Spring Framework. Spring Context
  • +
  • Пояснения к HW2. Обработка Autowired
  • +
  • Домашнее задание (HW2 + Optional)
  • +
+

    27.07: 3-е занятие

    +
  • Разбор домашнего задания HW2 + Optional
  • +
  • Жизненный цикл Spring контекста
  • +
  • Тестирование через JUnit
  • +
  • Spring Test
  • +
  • Базы данных. Обзор NoSQL и Java persistence solution без ORM
  • +
  • Настройка Database в IDEA
  • +
  • Скрипты инициализации базы. Spring Jdbc Template
  • +
  • Подготовка тестовых данных и тестирование UserService
  • +
  • Логирование тестов
  • +
  • Домашнее задание (HW3 + Optional)
  • +
+

    03.08: 4-е занятие

    +
  • Разбор домашнего задания HW3 + Optional
  • +
  • Методы улучшения качества кода
  • +
  • Spring: инициализация и популирование DB
  • +
  • Подмена контекста при тестировании
  • +
  • ORM. Hibernate. JPA
  • +
  • Поддержка HSQLDB
  • +
  • Домашнее задание (HW4 + Optional)
  • +
+

    10.08: 5-е занятие

    +
  • Разбор вопросов
  • +
  • Разбор домашнего задания HW4 + Optional
  • +
  • Транзакции
  • +
  • Профили Maven и Spring
  • +
  • Пул коннектов
  • +
  • Spring Data JPA
  • +
  • Spring кэш
  • +
  • Домашнее задание (HW5 + Optional)
  • +
+

    17.08: 6-е занятие

    +
  • Разбор домашнего задания HW5 + Optional
  • +
  • Кэш Hibernate
  • +
  • Spring Web
  • +
  • JPS, JSTL, internationalization
  • +
  • Динамическое изменение профиля при запуске
  • +
  • Конфигурирование Tomcat через maven plugin. Jndi-lookup
  • +
  • Spring Web MVC
  • +
  • Spring Internationalization
  • +
  • Домашнее задание (HW6 + Optional)
  • +
+

    24.08: 7-е занятие

    +
  • Разбор домашнего задания HW6 + Optional
  • +
  • Автогенерация DDL по модели
  • +
  • Тестирование Spring MVC
  • +
  • REST контроллеры
  • +
  • Тестирование REST контроллеров. Jackson
  • +
  • jackson-datatype-hibernate. Тестирование через матчеры
  • +
  • Тестирование через SoapUi. UTF-8
  • +
  • Домашнее задание (HW7 + Optional)
  • +
+

    31.08: 8-е занятие

    +
  • Разбор домашнего задания HW7 + Optional
  • +
  • WebJars. jQuery и JavaScript frameworks
  • +
  • Bootstrap
  • +
  • AJAX. Datatables. jQuery
  • +
  • jQuery notifications plugin
  • +
  • Добавление Spring Security
  • +
  • Домашнее задание (HW8 + Optional)
  • +
+

    07.09: 9-е занятие

    +
  • Разбор домашнего задания HW8 + Optional
  • +
  • Spring Binding
  • +
  • Spring Validation
  • +
  • Перевод DataTables на Ajax
  • +
  • Форма login / logout
  • +
  • Реализация собственного провайдера авторицазии
  • +
  • Принцип работы Spring Security. Проксирование
  • +
  • Spring Security Test
  • +
  • Cookie. Session
  • +
  • Домашнее задание (HW9 + Optional)
  • +
+

    14.09: 10-е занятие

    +
  • Разбор домашнего задания HW10 + Optional
  • +
  • Spring Security Taglib. Method Security Expressions
  • +
  • Интерсепторы. Редактирование профиля. JSP tag files
  • +
  • Форма регистрации
  • +
  • Обработка исключений в Spring
  • +
  • Encoding password
  • +
  • Защита от межсайтовой подделки запросов (CSRF)
  • +
  • Домашнее задание (HW10)
  • +
+

    21.09: Заключительное занятие

    +
  • Разбор домашнего задания HW10 + Optional
  • +
  • Локализация datatables, ошибок валидации
  • +
  • Защита от XSS (Cross Site Scripting)
  • +
  • Обработка ошибок 404 (NotFound)
  • +
  • Доступ к AuthorizedUser
  • +
  • Ограничение модификации пользователей
  • +
  • Деплой приложения в Heroku
  • +
  • Собеседование. Разработка ПО
  • +
  • Возможные доработки приложения
  • +
+
+

+ До встречи на стажировке! +

+

+

+
+ \ No newline at end of file diff --git a/resources/mails/topjava_register.html b/resources/mails/topjava_register.html new file mode 100644 index 0000000..b3f6be6 --- /dev/null +++ b/resources/mails/topjava_register.html @@ -0,0 +1,11 @@ + + + + Регистрация на стажировку 'Java Enterprise (Topjava)' + +

+ Здравствуй!
+

+

Спасибо за регистрацию на стажировку Java Enterprise (Topjava):

+
+ \ No newline at end of file diff --git a/resources/mails/topjava_repeat.html b/resources/mails/topjava_repeat.html new file mode 100644 index 0000000..f7cc3af --- /dev/null +++ b/resources/mails/topjava_repeat.html @@ -0,0 +1,34 @@ + + + + + + Повторное участие на проекте 'Java Enterprise (Topjava)' + +

+ Здравствуй firstName!
+

+Буду рад снова видеть тебя на проекте Java Enterprise (Topjava)! +

Повторное участие без проверки домашних заданий бесплатное. Единственное условие: пожалуйста сделай репост объявления о наборе в VK или в Facebook +

+

Google Drive

+

+ Проект эволюционирует, поэтому патчи текущего выпуска будут отличаться. Видео возможно также будут редактироваться / + дополнятся. Все актуальные материалы нашего выпуска будут находится в папке TopJava11. +

+

Проверь почту- должно прийти приглашение в группу Slack topjava11 (обычно в течении 5 минут)

+

Рассылка первого занятия будет в четверг, 13.07.

+

+ Добавляйся в группу VK: Java Enterprise Online Обучение
+

+

+ До встречи на проекте!
+ Григорий Кислин
+ skype: grigory.kislin +

+

+ Личный профиль
+ Java Online Projects +

+ \ No newline at end of file diff --git a/resources/static/bootstrap-3.3.6/css/bootstrap-theme.css b/resources/static/bootstrap-3.3.6/css/bootstrap-theme.css deleted file mode 100644 index ebe57fb..0000000 --- a/resources/static/bootstrap-3.3.6/css/bootstrap-theme.css +++ /dev/null @@ -1,587 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); -} -.btn-default:active, -.btn-primary:active, -.btn-success:active, -.btn-info:active, -.btn-warning:active, -.btn-danger:active, -.btn-default.active, -.btn-primary.active, -.btn-success.active, -.btn-info.active, -.btn-warning.active, -.btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn-default.disabled, -.btn-primary.disabled, -.btn-success.disabled, -.btn-info.disabled, -.btn-warning.disabled, -.btn-danger.disabled, -.btn-default[disabled], -.btn-primary[disabled], -.btn-success[disabled], -.btn-info[disabled], -.btn-warning[disabled], -.btn-danger[disabled], -fieldset[disabled] .btn-default, -fieldset[disabled] .btn-primary, -fieldset[disabled] .btn-success, -fieldset[disabled] .btn-info, -fieldset[disabled] .btn-warning, -fieldset[disabled] .btn-danger { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-default .badge, -.btn-primary .badge, -.btn-success .badge, -.btn-info .badge, -.btn-warning .badge, -.btn-danger .badge { - text-shadow: none; -} -.btn:active, -.btn.active { - background-image: none; -} -.btn-default { - text-shadow: 0 1px 0 #fff; - background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); - background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #dbdbdb; - border-color: #ccc; -} -.btn-default:hover, -.btn-default:focus { - background-color: #e0e0e0; - background-position: 0 -15px; -} -.btn-default:active, -.btn-default.active { - background-color: #e0e0e0; - border-color: #dbdbdb; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #e0e0e0; - background-image: none; -} -.btn-primary { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); - background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #245580; -} -.btn-primary:hover, -.btn-primary:focus { - background-color: #265a88; - background-position: 0 -15px; -} -.btn-primary:active, -.btn-primary.active { - background-color: #265a88; - border-color: #245580; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #265a88; - background-image: none; -} -.btn-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #3e8f3e; -} -.btn-success:hover, -.btn-success:focus { - background-color: #419641; - background-position: 0 -15px; -} -.btn-success:active, -.btn-success.active { - background-color: #419641; - border-color: #3e8f3e; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #419641; - background-image: none; -} -.btn-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #28a4c9; -} -.btn-info:hover, -.btn-info:focus { - background-color: #2aabd2; - background-position: 0 -15px; -} -.btn-info:active, -.btn-info.active { - background-color: #2aabd2; - border-color: #28a4c9; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #2aabd2; - background-image: none; -} -.btn-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #e38d13; -} -.btn-warning:hover, -.btn-warning:focus { - background-color: #eb9316; - background-position: 0 -15px; -} -.btn-warning:active, -.btn-warning.active { - background-color: #eb9316; - border-color: #e38d13; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #eb9316; - background-image: none; -} -.btn-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #b92c28; -} -.btn-danger:hover, -.btn-danger:focus { - background-color: #c12e2a; - background-position: 0 -15px; -} -.btn-danger:active, -.btn-danger.active { - background-color: #c12e2a; - border-color: #b92c28; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #c12e2a; - background-image: none; -} -.thumbnail, -.img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-color: #e8e8e8; - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - background-color: #2e6da4; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; -} -.navbar-default { - background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); - background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); - background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); -} -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, .25); -} -.navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-radius: 4px; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); - background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); -} -.navbar-inverse .navbar-brand, -.navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); -} -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} -@media (max-width: 767px) { - .navbar .navbar-nav .open .dropdown-menu > .active > a, - .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; - } -} -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); -} -.alert-success { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); - background-repeat: repeat-x; - border-color: #b2dba1; -} -.alert-info { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); - background-repeat: repeat-x; - border-color: #9acfea; -} -.alert-warning { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); - background-repeat: repeat-x; - border-color: #f5e79e; -} -.alert-danger { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); - background-repeat: repeat-x; - border-color: #dca7a7; -} -.progress { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); - background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 #286090; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); - background-repeat: repeat-x; - border-color: #2b669a; -} -.list-group-item.active .badge, -.list-group-item.active:hover .badge, -.list-group-item.active:focus .badge { - text-shadow: none; -} -.panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: 0 1px 2px rgba(0, 0, 0, .05); -} -.panel-default > .panel-heading { - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; -} -.panel-primary > .panel-heading { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; -} -.panel-success > .panel-heading { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); - background-repeat: repeat-x; -} -.panel-info > .panel-heading { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); - background-repeat: repeat-x; -} -.panel-warning > .panel-heading { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); - background-repeat: repeat-x; -} -.panel-danger > .panel-heading { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); - background-repeat: repeat-x; -} -.well { - background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; - border-color: #dcdcdc; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); -} -/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/resources/static/bootstrap-3.3.6/css/bootstrap-theme.min.css b/resources/static/bootstrap-3.3.6/css/bootstrap-theme.min.css deleted file mode 100644 index dc95d8e..0000000 --- a/resources/static/bootstrap-3.3.6/css/bootstrap-theme.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} -/*# sourceMappingURL=bootstrap-theme.min.css.map */ \ No newline at end of file diff --git a/resources/static/bootstrap-3.3.6/css/bootstrap.css b/resources/static/bootstrap-3.3.6/css/bootstrap.css deleted file mode 100644 index 42c79d6..0000000 --- a/resources/static/bootstrap-3.3.6/css/bootstrap.css +++ /dev/null @@ -1,6760 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - margin: .67em 0; - font-size: 2em; -} -mark { - color: #000; - background: #ff0; -} -small { - font-size: 80%; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -.5em; -} -sub { - bottom: -.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - height: 0; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - margin: 0; - font: inherit; - color: inherit; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-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; -} -fieldset { - padding: .35em .625em .75em; - margin: 0 2px; - border: 1px solid #c0c0c0; -} -legend { - padding: 0; - border: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-spacing: 0; - border-collapse: collapse; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\002a"; -} -.glyphicon-plus:before { - content: "\002b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333; - background-color: #fff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - display: inline-block; - max-width: 100%; - height: auto; - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -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: normal; - line-height: 1; - color: #777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -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; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -mark, -.mark { - padding: .2em; - background-color: #fcf8e3; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover, -a.text-primary:focus { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover, -a.text-success:focus { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover, -a.text-info:focus { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover, -a.text-danger:focus { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - margin-left: -5px; - list-style: none; -} -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - text-align: right; - border-right: 5px solid #eee; - border-left: 0; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - -webkit-box-shadow: none; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - color: #333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -.row { - margin-right: -15px; - margin-left: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #ddd; -} -.table .table { - background-color: #fff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - display: table-column; - float: none; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - display: table-cell; - float: none; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - min-height: .01%; - overflow-x: auto; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); -} -.form-control::-moz-placeholder { - color: #999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999; -} -.form-control::-webkit-input-placeholder { - color: #999; -} -.form-control::-ms-expand { - background-color: transparent; - border: 0; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eee; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 34px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 46px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-top: 4px \9; - margin-left: -20px; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - vertical-align: middle; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - min-height: 34px; - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-right: 0; - padding-left: 0; -} -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.form-group-sm select.form-control { - height: 30px; - line-height: 30px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - min-height: 32px; - padding: 6px 10px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.form-group-lg select.form-control { - height: 46px; - line-height: 46px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - min-height: 38px; - padding: 11px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - background-color: #dff0d8; - border-color: #3c763d; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #8a6d3b; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - background-color: #f2dede; - border-color: #a94442; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - padding-top: 7px; - margin-bottom: 0; - text-align: right; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 18px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 12px; - } -} -.btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.42857143; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333; - text-decoration: none; -} -.btn:active, -.btn.active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; - opacity: .65; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #fff; - border-color: #ccc; -} -.btn-default .badge { - color: #fff; - background-color: #333; -} -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #fff; - background-color: #286090; - border-color: #122b40; -} -.btn-primary:hover { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #fff; - background-color: #204d74; - border-color: #122b40; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:focus, -.btn-success.focus { - color: #fff; - background-color: #449d44; - border-color: #255625; -} -.btn-success:hover { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #fff; - background-color: #398439; - border-color: #255625; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:focus, -.btn-info.focus { - color: #fff; - background-color: #31b0d5; - border-color: #1b6d85; -} -.btn-info:hover { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #fff; - background-color: #269abc; - border-color: #1b6d85; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:focus, -.btn-warning.focus { - color: #fff; - background-color: #ec971f; - border-color: #985f0d; -} -.btn-warning:hover { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #fff; - background-color: #d58512; - border-color: #985f0d; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:focus, -.btn-danger.focus { - color: #fff; - background-color: #c9302c; - border-color: #761c19; -} -.btn-danger:hover { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #fff; - background-color: #ac2925; - border-color: #761c19; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #fff; -} -.btn-link { - font-weight: normal; - color: #337ab7; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #23527c; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity .15s linear; - -o-transition: opacity .15s linear; - transition: opacity .15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; - -webkit-transition-duration: .35s; - -o-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - text-align: left; - list-style: none; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - color: #262626; - text-decoration: none; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - background-color: #337ab7; - outline: 0; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - right: 0; - left: auto; -} -.dropdown-menu-left { - right: auto; - left: 0; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - content: ""; - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } - .navbar-right .dropdown-menu-left { - right: auto; - left: 0; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - display: table-cell; - float: none; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-right: 0; - padding-left: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group .form-control:focus { - z-index: 3; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555; - text-align: center; - background-color: #eee; - border: 1px solid #ccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eee; -} -.nav > li.disabled > a { - color: #777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eee #eee #ddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #fff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - -webkit-overflow-scrolling: touch; - border-top: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-right: 0; - padding-left: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - height: 50px; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} -.navbar-form { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-right: 15px; - margin-left: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777; -} -.navbar-default .navbar-nav > li > a { - color: #777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #ddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #ddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - color: #555; - background-color: #e7e7e7; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777; -} -.navbar-default .navbar-link:hover { - color: #333; -} -.navbar-default .btn-link { - color: #777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #ccc; -} -.navbar-inverse { - background-color: #222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #fff; - background-color: #080808; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #fff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #fff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - padding: 0 5px; - color: #ccc; - content: "/\00a0"; -} -.breadcrumb > .active { - color: #777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.42857143; - color: #337ab7; - text-decoration: none; - background-color: #fff; - border: 1px solid #ddd; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 2; - color: #23527c; - background-color: #eee; - border-color: #ddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 3; - color: #fff; - cursor: default; - background-color: #337ab7; - border-color: #337ab7; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777; - cursor: not-allowed; - background-color: #fff; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #337ab7; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #286090; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: middle; - background-color: #777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #337ab7; - background-color: #fff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron, -.container-fluid .jumbotron { - padding-right: 15px; - padding-left: 15px; - border-radius: 6px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: border .2s ease-in-out; - -o-transition: border .2s ease-in-out; - transition: border .2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-right: auto; - margin-left: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); -} -.progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - -webkit-transition: width .6s ease; - -o-transition: width .6s ease; - transition: width .6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - overflow: hidden; - zoom: 1; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - padding-left: 0; - margin-bottom: 20px; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; -} -.list-group-item:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item, -button.list-group-item { - color: #555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - color: #555; - text-decoration: none; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - color: #777; - cursor: not-allowed; - background-color: #eee; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: 0 1px 1px rgba(0, 0, 0, .05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-right: 15px; - padding-left: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #ddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - margin-bottom: 0; - border: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; -} -.panel-default { - border-color: #ddd; -} -.panel-default > .panel-heading { - color: #333; - background-color: #f5f5f5; - border-color: #ddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #fff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, .15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - filter: alpha(opacity=20); - opacity: .2; -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - filter: alpha(opacity=50); - opacity: .5; -} -button.close { - -webkit-appearance: none; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; -} -.modal-open { - overflow: hidden; -} -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - display: none; - overflow: hidden; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - -o-transition: -o-transform .3s ease-out; - transition: transform .3s ease-out; - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - outline: 0; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); - box-shadow: 0 3px 9px rgba(0, 0, 0, .5); -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; -} -.modal-backdrop.fade { - filter: alpha(opacity=0); - opacity: 0; -} -.modal-backdrop.in { - filter: alpha(opacity=50); - opacity: .5; -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - font-style: normal; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - filter: alpha(opacity=0); - opacity: 0; - - line-break: auto; -} -.tooltip.in { - filter: alpha(opacity=90); - opacity: .9; -} -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-left .tooltip-arrow { - right: 5px; - bottom: 0; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - font-style: normal; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - - line-break: auto; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - content: ""; - border-width: 10px; -} -.popover.top > .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, .25); - border-bottom-width: 0; -} -.popover.top > .arrow:after { - bottom: 1px; - margin-left: -10px; - content: " "; - border-top-color: #fff; - border-bottom-width: 0; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, .25); - border-left-width: 0; -} -.popover.right > .arrow:after { - bottom: -10px; - left: 1px; - content: " "; - border-right-color: #fff; - border-left-width: 0; -} -.popover.bottom > .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, .25); -} -.popover.bottom > .arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - border-top-width: 0; - border-bottom-color: #fff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, .25); -} -.popover.left > .arrow:after { - right: 1px; - bottom: -10px; - content: " "; - border-right-width: 0; - border-left-color: #fff; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: .6s ease-in-out left; - -o-transition: .6s ease-in-out left; - transition: .6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform .6s ease-in-out; - -o-transition: -o-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - left: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - left: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - left: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); - background-color: rgba(0, 0, 0, 0); - filter: alpha(opacity=50); - opacity: .5; -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control:hover, -.carousel-control:focus { - color: #fff; - text-decoration: none; - filter: alpha(opacity=90); - outline: 0; - opacity: .9; -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - margin-top: -10px; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - font-family: serif; - line-height: 1; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); - border: 1px solid #fff; - border-radius: 10px; -} -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #fff; -} -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-header:before, -.modal-header:after, -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-header:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-right: auto; - margin-left: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -/*# sourceMappingURL=bootstrap.css.map */ diff --git a/resources/static/bootstrap-3.3.6/css/bootstrap.min.css b/resources/static/bootstrap-3.3.6/css/bootstrap.min.css deleted file mode 100644 index 4cf729e..0000000 --- a/resources/static/bootstrap-3.3.6/css/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-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}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.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}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/resources/static/bootstrap-3.3.6/css/docs.min.css b/resources/static/bootstrap-3.3.6/css/docs.min.css deleted file mode 100644 index c4d844d..0000000 --- a/resources/static/bootstrap-3.3.6/css/docs.min.css +++ /dev/null @@ -1 +0,0 @@ -@-ms-viewport{width:device-width}@-o-viewport{width:device-width}@viewport{width:device-width}.hll{background-color:#ffc}.c{color:#999}.err{color:#a00;background-color:#faa}.k{color:#069}.o{color:#555}.cm{color:#999}.cp{color:#099}.c1{color:#999}.cs{color:#999}.gd{background-color:#fcc;border:1px solid #c00}.ge{font-style:italic}.gr{color:red}.gh{color:#030}.gi{background-color:#cfc;border:1px solid #0c0}.go{color:#aaa}.gp{color:#009}.gu{color:#030}.gt{color:#9c6}.kc{color:#069}.kd{color:#069}.kn{color:#069}.kp{color:#069}.kr{color:#069}.kt{color:#078}.m{color:#f60}.s{color:#d44950}.na{color:#4f9fcf}.nb{color:#366}.nc{color:#0a8}.no{color:#360}.nd{color:#99f}.ni{color:#999}.ne{color:#c00}.nf{color:#c0f}.nl{color:#99f}.nn{color:#0cf}.nt{color:#2f6f9f}.nv{color:#033}.ow{color:#000}.w{color:#bbb}.mf{color:#f60}.mh{color:#f60}.mi{color:#f60}.mo{color:#f60}.sb{color:#c30}.sc{color:#c30}.sd{color:#c30;font-style:italic}.s2{color:#c30}.se{color:#c30}.sh{color:#c30}.si{color:#a00}.sx{color:#c30}.sr{color:#3aa}.s1{color:#c30}.ss{color:#fc3}.bp{color:#366}.vc{color:#033}.vg{color:#033}.vi{color:#033}.il{color:#f60}.css .nt+.nt,.css .o,.css .o+.nt{color:#999}body{position:relative}.table code{font-size:13px;font-weight:400}h2 code,h3 code,h4 code{background-color:inherit}.btn-outline{color:#563d7c;background-color:transparent;border-color:#563d7c}.btn-outline:active,.btn-outline:focus,.btn-outline:hover{color:#fff;background-color:#563d7c;border-color:#563d7c}.btn-outline-inverse{color:#fff;background-color:transparent;border-color:#cdbfe3}.btn-outline-inverse:active,.btn-outline-inverse:focus,.btn-outline-inverse:hover{color:#563d7c;text-shadow:none;background-color:#fff;border-color:#fff}.bs-docs-booticon{display:block;font-weight:500;color:#fff;text-align:center;cursor:default;background-color:#563d7c;border-radius:15%}.bs-docs-booticon-sm{width:30px;height:30px;font-size:20px;line-height:28px}.bs-docs-booticon-lg{width:144px;height:144px;font-size:108px;line-height:140px}.bs-docs-booticon-inverse{color:#563d7c;background-color:#fff}.bs-docs-booticon-outline{background-color:transparent;border:1px solid #cdbfe3}#skippy{display:block;padding:1em;color:#fff;background-color:#6f5499;outline:0}#skippy .skiplink-text{padding:.5em;outline:1px dotted}#content:focus{outline:0}.bs-docs-nav{margin-bottom:0;background-color:#fff;border-bottom:0}.bs-home-nav .bs-nav-b{display:none}.bs-docs-nav .navbar-brand,.bs-docs-nav .navbar-nav>li>a{font-weight:500;color:#563d7c}.bs-docs-nav .navbar-nav>.active>a,.bs-docs-nav .navbar-nav>.active>a:hover,.bs-docs-nav .navbar-nav>li>a:hover{color:#463265;background-color:#f9f9f9}.bs-docs-nav .navbar-toggle .icon-bar{background-color:#563d7c}.bs-docs-nav .navbar-header .navbar-toggle{border-color:#fff}.bs-docs-nav .navbar-header .navbar-toggle:focus,.bs-docs-nav .navbar-header .navbar-toggle:hover{background-color:#f9f9f9;border-color:#f9f9f9}.bs-docs-footer{padding-top:50px;padding-bottom:50px;margin-top:100px;color:#99979c;text-align:center;background-color:#2a2730}.bs-docs-footer a{color:#fff}.bs-docs-footer-links{padding-left:0;margin-bottom:20px}.bs-docs-footer-links li{display:inline-block}.bs-docs-footer-links li+li{margin-left:15px}@media (min-width:768px){.bs-docs-footer{text-align:left}.bs-docs-footer p{margin-bottom:0}}.bs-docs-header,.bs-docs-masthead{position:relative;padding:30px 0;color:#cdbfe3;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1);background-color:#6f5499;background-image:-webkit-gradient(linear,left top,left bottom,from(#563d7c),to(#6f5499));background-image:-webkit-linear-gradient(top,#563d7c 0,#6f5499 100%);background-image:-o-linear-gradient(top,#563d7c 0,#6f5499 100%);background-image:linear-gradient(to bottom,#563d7c 0,#6f5499 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#563d7c', endColorstr='#6F5499', GradientType=0);background-repeat:repeat-x}.bs-docs-masthead .bs-docs-booticon{margin:0 auto 30px}.bs-docs-masthead h1{font-weight:300;line-height:1;color:#fff}.bs-docs-masthead .lead{margin:0 auto 30px;font-size:20px;color:#fff}.bs-docs-masthead .version{margin-top:-15px;margin-bottom:30px;color:#9783b9}.bs-docs-masthead .btn{width:100%;padding:15px 30px;font-size:20px}@media (min-width:480px){.bs-docs-masthead .btn{width:auto}}@media (min-width:768px){.bs-docs-masthead{padding:80px 0}.bs-docs-masthead h1{font-size:60px}.bs-docs-masthead .lead{font-size:24px}}@media (min-width:992px){.bs-docs-masthead .lead{width:80%;font-size:30px}}.bs-docs-header{margin-bottom:40px;font-size:20px}.bs-docs-header h1{margin-top:0;color:#fff}.bs-docs-header p{margin-bottom:0;font-weight:300;line-height:1.4}.bs-docs-header .container{position:relative}@media (min-width:768px){.bs-docs-header{padding-top:60px;padding-bottom:60px;font-size:24px;text-align:left}.bs-docs-header h1{font-size:60px;line-height:1}}@media (min-width:992px){.bs-docs-header h1,.bs-docs-header p{margin-right:380px}}.carbonad{width:auto!important;height:auto!important;padding:20px!important;margin:30px -15px -31px!important;overflow:hidden;font-size:13px!important;line-height:16px!important;text-align:left;background:0 0!important;border:solid #866ab3!important;border-width:1px 0!important}.carbonad-img{margin:0!important}.carbonad-tag,.carbonad-text{display:block!important;float:none!important;width:auto!important;height:auto!important;margin-left:145px!important;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif!important}.carbonad-text{padding-top:0!important}.carbonad-tag{color:inherit!important;text-align:left!important}.carbonad-tag a,.carbonad-text a{color:#fff!important}.carbonad #azcarbon>img{display:none}@media (min-width:480px){.carbonad{width:330px!important;margin:20px auto!important;border-width:1px!important;border-radius:4px}.bs-docs-masthead .carbonad{margin:50px auto 0!important}}@media (min-width:768px){.carbonad{margin-right:0!important;margin-left:0!important}}@media (min-width:992px){.carbonad{position:absolute;top:0;right:15px;width:330px!important;padding:15px!important;margin:0!important}.bs-docs-masthead .carbonad{position:static}}.bs-docs-featurette{padding-top:40px;padding-bottom:40px;font-size:16px;line-height:1.5;color:#555;text-align:center;background-color:#fff;border-bottom:1px solid #e5e5e5}.bs-docs-featurette+.bs-docs-footer{margin-top:0;border-top:0}.bs-docs-featurette-title{margin-bottom:5px;font-size:30px;font-weight:400;color:#333}.half-rule{width:100px;margin:40px auto}.bs-docs-featurette h3{margin-bottom:5px;font-weight:400;color:#333}.bs-docs-featurette-img{display:block;margin-bottom:20px;color:#333}.bs-docs-featurette-img:hover{color:#337ab7;text-decoration:none}.bs-docs-featurette-img img{display:block;margin-bottom:15px}@media (min-width:480px){.bs-docs-featurette .img-responsive{margin-top:30px}}@media (min-width:768px){.bs-docs-featurette{padding-top:100px;padding-bottom:100px}.bs-docs-featurette-title{font-size:40px}.bs-docs-featurette .lead{max-width:80%;margin-right:auto;margin-left:auto}.bs-docs-featurette .img-responsive{margin-top:0}}.bs-docs-featured-sites{margin-right:-1px;margin-left:-1px}.bs-docs-featured-sites .col-xs-6{padding:1px}.bs-docs-featured-sites .img-responsive{margin-top:0}@media (min-width:768px){.bs-docs-featured-sites .col-sm-3:first-child img{border-top-left-radius:4px;border-bottom-left-radius:4px}.bs-docs-featured-sites .col-sm-3:last-child img{border-top-right-radius:4px;border-bottom-right-radius:4px}}.bs-examples .thumbnail{margin-bottom:10px}.bs-examples h4{margin-bottom:5px}.bs-examples p{margin-bottom:20px}@media (max-width:480px){.bs-examples{margin-right:-10px;margin-left:-10px}.bs-examples>[class^="col-"]{padding-right:10px;padding-left:10px}}.bs-docs-sidebar.affix{position:static}@media (min-width:768px){.bs-docs-sidebar{padding-left:20px}}.bs-docs-sidenav{margin-top:20px;margin-bottom:20px}.bs-docs-sidebar .nav>li>a{display:block;padding:4px 20px;font-size:13px;font-weight:500;color:#767676}.bs-docs-sidebar .nav>li>a:focus,.bs-docs-sidebar .nav>li>a:hover{padding-left:19px;color:#563d7c;text-decoration:none;background-color:transparent;border-left:1px solid #563d7c}.bs-docs-sidebar .nav>.active:focus>a,.bs-docs-sidebar .nav>.active:hover>a,.bs-docs-sidebar .nav>.active>a{padding-left:18px;font-weight:700;color:#563d7c;background-color:transparent;border-left:2px solid #563d7c}.bs-docs-sidebar .nav .nav{display:none;padding-bottom:10px}.bs-docs-sidebar .nav .nav>li>a{padding-top:1px;padding-bottom:1px;padding-left:30px;font-size:12px;font-weight:400}.bs-docs-sidebar .nav .nav>li>a:focus,.bs-docs-sidebar .nav .nav>li>a:hover{padding-left:29px}.bs-docs-sidebar .nav .nav>.active:focus>a,.bs-docs-sidebar .nav .nav>.active:hover>a,.bs-docs-sidebar .nav .nav>.active>a{padding-left:28px;font-weight:500}.back-to-top,.bs-docs-theme-toggle{display:none;padding:4px 10px;margin-top:10px;margin-left:10px;font-size:12px;font-weight:500;color:#999}.back-to-top:hover,.bs-docs-theme-toggle:hover{color:#563d7c;text-decoration:none}.bs-docs-theme-toggle{margin-top:0}@media (min-width:768px){.back-to-top,.bs-docs-theme-toggle{display:block}}@media (min-width:992px){.bs-docs-sidebar .nav>.active>ul{display:block}.bs-docs-sidebar.affix,.bs-docs-sidebar.affix-bottom{width:213px}.bs-docs-sidebar.affix{position:fixed;top:20px}.bs-docs-sidebar.affix-bottom{position:absolute}.bs-docs-sidebar.affix .bs-docs-sidenav,.bs-docs-sidebar.affix-bottom .bs-docs-sidenav{margin-top:0;margin-bottom:0}}@media (min-width:1200px){.bs-docs-sidebar.affix,.bs-docs-sidebar.affix-bottom{width:263px}}.bs-docs-section{margin-bottom:60px}.bs-docs-section:last-child{margin-bottom:0}h1[id]{padding-top:20px;margin-top:0}.bs-callout{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px}.bs-callout h4{margin-top:0;margin-bottom:5px}.bs-callout p:last-child{margin-bottom:0}.bs-callout code{border-radius:3px}.bs-callout+.bs-callout{margin-top:-5px}.bs-callout-danger{border-left-color:#ce4844}.bs-callout-danger h4{color:#ce4844}.bs-callout-warning{border-left-color:#aa6708}.bs-callout-warning h4{color:#aa6708}.bs-callout-info{border-left-color:#1b809e}.bs-callout-info h4{color:#1b809e}.color-swatches{margin:0 -5px;overflow:hidden}.color-swatch{float:left;width:60px;height:60px;margin:0 5px;border-radius:3px}@media (min-width:768px){.color-swatch{width:100px;height:100px}}.color-swatches .gray-darker{background-color:#222}.color-swatches .gray-dark{background-color:#333}.color-swatches .gray{background-color:#555}.color-swatches .gray-light{background-color:#999}.color-swatches .gray-lighter{background-color:#eee}.color-swatches .brand-primary{background-color:#337ab7}.color-swatches .brand-success{background-color:#5cb85c}.color-swatches .brand-warning{background-color:#f0ad4e}.color-swatches .brand-danger{background-color:#d9534f}.color-swatches .brand-info{background-color:#5bc0de}.color-swatches .bs-purple{background-color:#563d7c}.color-swatches .bs-purple-light{background-color:#c7bfd3}.color-swatches .bs-purple-lighter{background-color:#e5e1ea}.color-swatches .bs-gray{background-color:#f9f9f9}.bs-team .team-member{line-height:32px;color:#555}.bs-team .team-member:hover{color:#333;text-decoration:none}.bs-team .github-btn{float:right;width:180px;height:20px;margin-top:6px}.bs-team img{float:left;width:32px;margin-right:10px;border-radius:4px}.bs-docs-browser-bugs td p{margin-bottom:0}.bs-docs-browser-bugs th:first-child{width:18%}.show-grid{margin-bottom:15px}.show-grid [class^="col-"]{padding-top:10px;padding-bottom:10px;background-color:#eee;background-color:rgba(86,61,124,.15);border:1px solid #ddd;border:1px solid rgba(86,61,124,.2)}.bs-example{position:relative;padding:45px 15px 15px;margin:0 -15px 15px;border-color:#e5e5e5 #eee #eee;border-style:solid;border-width:1px 0;-webkit-box-shadow:inset 0 3px 6px rgba(0,0,0,.05);box-shadow:inset 0 3px 6px rgba(0,0,0,.05)}.bs-example:after{position:absolute;top:15px;left:15px;font-size:12px;font-weight:700;color:#959595;text-transform:uppercase;letter-spacing:1px;content:"Example"}.bs-example-padded-bottom{padding-bottom:24px}.bs-example+.highlight,.bs-example+.zero-clipboard+.highlight{margin:-15px -15px 15px;border-width:0 0 1px;border-radius:0}@media (min-width:768px){.bs-example{margin-right:0;margin-left:0;background-color:#fff;border-color:#ddd;border-width:1px;border-radius:4px 4px 0 0;-webkit-box-shadow:none;box-shadow:none}.bs-example+.highlight,.bs-example+.zero-clipboard+.highlight{margin-top:-16px;margin-right:0;margin-left:0;border-width:1px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.bs-example-standalone{border-radius:4px}}.bs-example .container{width:auto}.bs-example>.alert:last-child,.bs-example>.form-control:last-child,.bs-example>.jumbotron:last-child,.bs-example>.list-group:last-child,.bs-example>.navbar:last-child,.bs-example>.panel:last-child,.bs-example>.progress:last-child,.bs-example>.table-responsive:last-child>.table,.bs-example>.table:last-child,.bs-example>.well:last-child,.bs-example>blockquote:last-child,.bs-example>ol:last-child,.bs-example>p:last-child,.bs-example>ul:last-child{margin-bottom:0}.bs-example>p>.close{float:none}.bs-example-type .table .type-info{color:#767676;vertical-align:middle}.bs-example-type .table td{padding:15px 0;border-color:#eee}.bs-example-type .table tr:first-child td{border-top:0}.bs-example-type h1,.bs-example-type h2,.bs-example-type h3,.bs-example-type h4,.bs-example-type h5,.bs-example-type h6{margin:0}.bs-example-bg-classes p{padding:15px}.bs-example>.img-circle,.bs-example>.img-rounded,.bs-example>.img-thumbnail{margin:5px}.bs-example>.table-responsive>.table{background-color:#fff}.bs-example>.btn,.bs-example>.btn-group{margin-top:5px;margin-bottom:5px}.bs-example>.btn-toolbar+.btn-toolbar{margin-top:10px}.bs-example-control-sizing input[type="text"]+input[type="text"],.bs-example-control-sizing select{margin-top:10px}.bs-example-form .input-group{margin-bottom:10px}.bs-example>textarea.form-control{resize:vertical}.bs-example>.list-group{max-width:400px}.bs-example .navbar:last-child{margin-bottom:0}.bs-navbar-bottom-example,.bs-navbar-top-example{z-index:1;padding:0;overflow:hidden}.bs-navbar-bottom-example .navbar-header,.bs-navbar-top-example .navbar-header{margin-left:0}.bs-navbar-bottom-example .navbar-fixed-bottom,.bs-navbar-top-example .navbar-fixed-top{position:relative;margin-right:0;margin-left:0}.bs-navbar-top-example{padding-bottom:45px}.bs-navbar-top-example:after{top:auto;bottom:15px}.bs-navbar-top-example .navbar-fixed-top{top:-1px}.bs-navbar-bottom-example{padding-top:45px}.bs-navbar-bottom-example .navbar-fixed-bottom{bottom:-1px}.bs-navbar-bottom-example .navbar{margin-bottom:0}@media (min-width:768px){.bs-navbar-bottom-example .navbar-fixed-bottom,.bs-navbar-top-example .navbar-fixed-top{position:absolute}}.bs-example .pagination{margin-top:10px;margin-bottom:10px}.bs-example>.pager{margin-top:0}.bs-example-modal{background-color:#f5f5f5}.bs-example-modal .modal{position:relative;top:auto;right:auto;bottom:auto;left:auto;z-index:1;display:block}.bs-example-modal .modal-dialog{left:auto;margin-right:auto;margin-left:auto}.bs-example>.dropdown>.dropdown-toggle{float:left}.bs-example>.dropdown>.dropdown-menu{position:static;display:block;margin-bottom:5px;clear:left}.bs-example-tabs .nav-tabs{margin-bottom:15px}.bs-example-tooltips{text-align:center}.bs-example-tooltips>.btn{margin-top:5px;margin-bottom:5px}.bs-example-tooltip .tooltip{position:relative;display:inline-block;margin:10px 20px;opacity:1}.bs-example-popover{padding-bottom:24px;background-color:#f9f9f9}.bs-example-popover .popover{position:relative;display:block;float:left;width:260px;margin:20px}.scrollspy-example{position:relative;height:200px;margin-top:10px;overflow:auto}.bs-example>.nav-pills-stacked-example{max-width:300px}#collapseExample .well{margin-bottom:0}.bs-events-table>tbody>tr>td:first-child,.bs-events-table>thead>tr>th:first-child{white-space:nowrap}.bs-events-table>thead>tr>th:first-child{width:150px}.js-options-table>thead>tr>th:nth-child(1),.js-options-table>thead>tr>th:nth-child(2){width:100px}.js-options-table>thead>tr>th:nth-child(3){width:50px}.highlight{padding:9px 14px;margin-bottom:14px;background-color:#f7f7f9;border:1px solid #e1e1e8;border-radius:4px}.highlight pre{padding:0;margin-top:0;margin-bottom:0;word-break:normal;white-space:nowrap;background-color:transparent;border:0}.highlight pre code{font-size:inherit;color:#333}.highlight pre code:first-child{display:inline-block;padding-right:45px}.table-responsive .highlight pre{white-space:normal}.bs-table th small,.responsive-utilities th small{display:block;font-weight:400;color:#999}.responsive-utilities tbody th{font-weight:400}.responsive-utilities td{text-align:center}.responsive-utilities td.is-visible{color:#468847;background-color:#dff0d8!important}.responsive-utilities td.is-hidden{color:#ccc;background-color:#f9f9f9!important}.responsive-utilities-test{margin-top:5px}.responsive-utilities-test .col-xs-6{margin-bottom:10px}.responsive-utilities-test span{display:block;padding:15px 10px;font-size:14px;font-weight:700;line-height:1.1;text-align:center;border-radius:4px}.hidden-on .col-xs-6 .hidden-lg,.hidden-on .col-xs-6 .hidden-md,.hidden-on .col-xs-6 .hidden-sm,.hidden-on .col-xs-6 .hidden-xs,.visible-on .col-xs-6 .hidden-lg,.visible-on .col-xs-6 .hidden-md,.visible-on .col-xs-6 .hidden-sm,.visible-on .col-xs-6 .hidden-xs{color:#999;border:1px solid #ddd}.hidden-on .col-xs-6 .visible-lg-block,.hidden-on .col-xs-6 .visible-md-block,.hidden-on .col-xs-6 .visible-sm-block,.hidden-on .col-xs-6 .visible-xs-block,.visible-on .col-xs-6 .visible-lg-block,.visible-on .col-xs-6 .visible-md-block,.visible-on .col-xs-6 .visible-sm-block,.visible-on .col-xs-6 .visible-xs-block{color:#468847;background-color:#dff0d8;border:1px solid #d6e9c6}.bs-glyphicons{margin:0 -10px 20px;overflow:hidden}.bs-glyphicons-list{padding-left:0;list-style:none}.bs-glyphicons li{float:left;width:25%;height:115px;padding:10px;font-size:10px;line-height:1.4;text-align:center;background-color:#f9f9f9;border:1px solid #fff}.bs-glyphicons .glyphicon{margin-top:5px;margin-bottom:10px;font-size:24px}.bs-glyphicons .glyphicon-class{display:block;text-align:center;word-wrap:break-word}.bs-glyphicons li:hover{color:#fff;background-color:#563d7c}@media (min-width:768px){.bs-glyphicons{margin-right:0;margin-left:0}.bs-glyphicons li{width:12.5%;font-size:12px}}.bs-customizer .toggle{float:right;margin-top:25px}.bs-customizer label{margin-top:10px;font-weight:500;color:#555}.bs-customizer h2{padding-top:30px;margin-top:0;margin-bottom:5px}.bs-customizer h3{margin-bottom:0}.bs-customizer h4{margin-top:15px;margin-bottom:0}.bs-customizer .bs-callout h4{margin-top:0;margin-bottom:5px}.bs-customizer input[type="text"]{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;background-color:#fafafa}.bs-customizer .help-block{margin-bottom:5px;font-size:12px}#less-section label{font-weight:400}.bs-customize-download .btn-outline{padding:20px}.bs-customizer-alert{position:fixed;top:0;right:0;left:0;z-index:1030;padding:15px 0;color:#fff;background-color:#d9534f;border-bottom:1px solid #b94441;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25);box-shadow:inset 0 1px 0 rgba(255,255,255,.25)}.bs-customizer-alert .close{margin-top:-4px;font-size:24px}.bs-customizer-alert p{margin-bottom:0}.bs-customizer-alert .glyphicon{margin-right:5px}.bs-customizer-alert pre{margin:10px 0 0;color:#fff;background-color:#a83c3a;border-color:#973634;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.05) , 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 2px 4px rgba(0,0,0,.05) , 0 1px 0 rgba(255,255,255,.1)}.bs-dropzone{position:relative;padding:20px;margin-bottom:20px;color:#777;text-align:center;border:2px dashed #eee;border-radius:4px}.bs-dropzone .import-header{margin-bottom:5px}.bs-dropzone .glyphicon-download-alt{font-size:40px}.bs-dropzone hr{width:100px}.bs-dropzone .lead{margin-bottom:10px;font-weight:400;color:#333}#import-manual-trigger{cursor:pointer}.bs-dropzone p:last-child{margin-bottom:0}.bs-brand-logos{display:table;width:100%;margin-bottom:15px;overflow:hidden;color:#563d7c;background-color:#f9f9f9;border-radius:4px}.bs-brand-item{padding:60px 0;text-align:center}.bs-brand-item+.bs-brand-item{border-top:1px solid #fff}.bs-brand-logos .inverse{color:#fff;background-color:#563d7c}.bs-brand-item h1,.bs-brand-item h3{margin-top:0;margin-bottom:0}.bs-brand-item .bs-docs-booticon{margin-right:auto;margin-left:auto}.bs-brand-item .glyphicon{width:30px;height:30px;margin:10px auto -10px;line-height:30px;color:#fff;border-radius:50%}.bs-brand-item .glyphicon-ok{background-color:#5cb85c}.bs-brand-item .glyphicon-remove{background-color:#d9534f}@media (min-width:768px){.bs-brand-item{display:table-cell;width:1%}.bs-brand-item+.bs-brand-item{border-top:0;border-left:1px solid #fff}.bs-brand-item h1{font-size:60px}}.zero-clipboard{position:relative;display:none}.btn-clipboard{position:absolute;top:0;right:0;z-index:10;display:block;padding:5px 8px;font-size:12px;color:#767676;cursor:pointer;background-color:#fff;border:1px solid #e1e1e8;border-radius:0 4px 0 4px}.btn-clipboard-hover{color:#fff;background-color:#563d7c;border-color:#563d7c}@media (min-width:768px){.zero-clipboard{display:block}.bs-example+.zero-clipboard .btn-clipboard{top:-16px;border-top-right-radius:0}}.anchorjs-link{color:inherit}@media (max-width:480px){.anchorjs-link{display:none}}:hover>.anchorjs-link{opacity:.75;-webkit-transition:color .16s linear;-o-transition:color .16s linear;transition:color .16s linear}.anchorjs-link:focus,:hover>.anchorjs-link:hover{text-decoration:none;opacity:1}#focusedInput{border-color:#ccc;border-color:rgba(82,168,236,.8);outline:0;outline:thin dotted\9 ;-webkit-box-shadow:0 0 8px rgba(82,168,236,.6);box-shadow:0 0 8px rgba(82,168,236,.6)}.v4-tease{display:block;padding:15px 20px;font-weight:bold;color:#fff;text-align:center;background-color:#0275d8}.v4-tease:hover{color:#fff;text-decoration:none;background-color:#0269c2} \ No newline at end of file diff --git a/resources/static/bootstrap-3.3.6/js/bootstrap.js b/resources/static/bootstrap-3.3.6/js/bootstrap.js deleted file mode 100644 index 01fbbcb..0000000 --- a/resources/static/bootstrap-3.3.6/js/bootstrap.js +++ /dev/null @@ -1,2363 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under the MIT license - */ - -if (typeof jQuery === 'undefined') { - throw new Error('Bootstrap\'s JavaScript requires jQuery') -} - -+function ($) { - 'use strict'; - var version = $.fn.jquery.split(' ')[0].split('.') - if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) { - throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3') - } -}(jQuery); - -/* ======================================================================== - * Bootstrap: transition.js v3.3.6 - * http://getbootstrap.com/javascript/#transitions - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ - - function transitionEnd() { - var el = document.createElement('bootstrap') - - var transEndEventNames = { - WebkitTransition : 'webkitTransitionEnd', - MozTransition : 'transitionend', - OTransition : 'oTransitionEnd otransitionend', - transition : 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } - - return false // explicit for ie8 ( ._.) - } - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false - var $el = this - $(this).one('bsTransitionEnd', function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this - } - - $(function () { - $.support.transition = transitionEnd() - - if (!$.support.transition) return - - $.event.special.bsTransitionEnd = { - bindType: $.support.transition.end, - delegateType: $.support.transition.end, - handle: function (e) { - if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) - } - } - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: alert.js v3.3.6 - * http://getbootstrap.com/javascript/#alerts - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // ALERT CLASS DEFINITION - // ====================== - - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.VERSION = '3.3.6' - - Alert.TRANSITION_DURATION = 150 - - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = $(selector) - - if (e) e.preventDefault() - - if (!$parent.length) { - $parent = $this.closest('.alert') - } - - $parent.trigger(e = $.Event('close.bs.alert')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - // detach from parent, fire event then clean up data - $parent.detach().trigger('closed.bs.alert').remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent - .one('bsTransitionEnd', removeElement) - .emulateTransitionEnd(Alert.TRANSITION_DURATION) : - removeElement() - } - - - // ALERT PLUGIN DEFINITION - // ======================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') - - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - var old = $.fn.alert - - $.fn.alert = Plugin - $.fn.alert.Constructor = Alert - - - // ALERT NO CONFLICT - // ================= - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - // ALERT DATA-API - // ============== - - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: button.js v3.3.6 - * http://getbootstrap.com/javascript/#buttons - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // BUTTON PUBLIC CLASS DEFINITION - // ============================== - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - this.isLoading = false - } - - Button.VERSION = '3.3.6' - - Button.DEFAULTS = { - loadingText: 'loading...' - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() - - state += 'Text' - - if (data.resetText == null) $el.data('resetText', $el[val]()) - - // push to event loop to allow forms to submit - setTimeout($.proxy(function () { - $el[val](data[state] == null ? this.options[state] : data[state]) - - if (state == 'loadingText') { - this.isLoading = true - $el.addClass(d).attr(d, d) - } else if (this.isLoading) { - this.isLoading = false - $el.removeClass(d).removeAttr(d) - } - }, this), 0) - } - - Button.prototype.toggle = function () { - var changed = true - var $parent = this.$element.closest('[data-toggle="buttons"]') - - if ($parent.length) { - var $input = this.$element.find('input') - if ($input.prop('type') == 'radio') { - if ($input.prop('checked')) changed = false - $parent.find('.active').removeClass('active') - this.$element.addClass('active') - } else if ($input.prop('type') == 'checkbox') { - if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false - this.$element.toggleClass('active') - } - $input.prop('checked', this.$element.hasClass('active')) - if (changed) $input.trigger('change') - } else { - this.$element.attr('aria-pressed', !this.$element.hasClass('active')) - this.$element.toggleClass('active') - } - } - - - // BUTTON PLUGIN DEFINITION - // ======================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - var old = $.fn.button - - $.fn.button = Plugin - $.fn.button.Constructor = Button - - - // BUTTON NO CONFLICT - // ================== - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - // BUTTON DATA-API - // =============== - - $(document) - .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - Plugin.call($btn, 'toggle') - if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault() - }) - .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { - $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: carousel.js v3.3.6 - * http://getbootstrap.com/javascript/#carousel - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CAROUSEL CLASS DEFINITION - // ========================= - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = null - this.sliding = null - this.interval = null - this.$active = null - this.$items = null - - this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) - - this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element - .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) - .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) - } - - Carousel.VERSION = '3.3.6' - - Carousel.TRANSITION_DURATION = 600 - - Carousel.DEFAULTS = { - interval: 5000, - pause: 'hover', - wrap: true, - keyboard: true - } - - Carousel.prototype.keydown = function (e) { - if (/input|textarea/i.test(e.target.tagName)) return - switch (e.which) { - case 37: this.prev(); break - case 39: this.next(); break - default: return - } - - e.preventDefault() - } - - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) - - this.interval && clearInterval(this.interval) - - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - - return this - } - - Carousel.prototype.getItemIndex = function (item) { - this.$items = item.parent().children('.item') - return this.$items.index(item || this.$active) - } - - Carousel.prototype.getItemForDirection = function (direction, active) { - var activeIndex = this.getItemIndex(active) - var willWrap = (direction == 'prev' && activeIndex === 0) - || (direction == 'next' && activeIndex == (this.$items.length - 1)) - if (willWrap && !this.options.wrap) return active - var delta = direction == 'prev' ? -1 : 1 - var itemIndex = (activeIndex + delta) % this.$items.length - return this.$items.eq(itemIndex) - } - - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || this.getItemForDirection(type, $active) - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var that = this - - if ($next.hasClass('active')) return (this.sliding = false) - - var relatedTarget = $next[0] - var slideEvent = $.Event('slide.bs.carousel', { - relatedTarget: relatedTarget, - direction: direction - }) - this.$element.trigger(slideEvent) - if (slideEvent.isDefaultPrevented()) return - - this.sliding = true - - isCycling && this.pause() - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) - $nextIndicator && $nextIndicator.addClass('active') - } - - var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" - if ($.support.transition && this.$element.hasClass('slide')) { - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one('bsTransitionEnd', function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { - that.$element.trigger(slidEvent) - }, 0) - }) - .emulateTransitionEnd(Carousel.TRANSITION_DURATION) - } else { - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger(slidEvent) - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - var old = $.fn.carousel - - $.fn.carousel = Plugin - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - var clickHandler = function (e) { - var href - var $this = $(this) - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 - if (!$target.hasClass('carousel')) return - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - Plugin.call($target, options) - - if (slideIndex) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - } - - $(document) - .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) - .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - Plugin.call($carousel, $carousel.data()) - }) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: collapse.js v3.3.6 - * http://getbootstrap.com/javascript/#collapse - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + - '[data-toggle="collapse"][data-target="#' + element.id + '"]') - this.transitioning = null - - if (this.options.parent) { - this.$parent = this.getParent() - } else { - this.addAriaAndCollapsedClass(this.$element, this.$trigger) - } - - if (this.options.toggle) this.toggle() - } - - Collapse.VERSION = '3.3.6' - - Collapse.TRANSITION_DURATION = 350 - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var activesData - var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') - - if (actives && actives.length) { - activesData = actives.data('bs.collapse') - if (activesData && activesData.transitioning) return - } - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - if (actives && actives.length) { - Plugin.call(actives, 'hide') - activesData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing')[dimension](0) - .attr('aria-expanded', true) - - this.$trigger - .removeClass('collapsed') - .attr('aria-expanded', true) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('collapse in')[dimension]('') - this.transitioning = 0 - this.$element - .trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one('bsTransitionEnd', $.proxy(complete, this)) - .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element[dimension](this.$element[dimension]())[0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse in') - .attr('aria-expanded', false) - - this.$trigger - .addClass('collapsed') - .attr('aria-expanded', false) - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .removeClass('collapsing') - .addClass('collapse') - .trigger('hidden.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one('bsTransitionEnd', $.proxy(complete, this)) - .emulateTransitionEnd(Collapse.TRANSITION_DURATION) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - Collapse.prototype.getParent = function () { - return $(this.options.parent) - .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') - .each($.proxy(function (i, element) { - var $element = $(element) - this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) - }, this)) - .end() - } - - Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { - var isOpen = $element.hasClass('in') - - $element.attr('aria-expanded', isOpen) - $trigger - .toggleClass('collapsed', !isOpen) - .attr('aria-expanded', isOpen) - } - - function getTargetFromTrigger($trigger) { - var href - var target = $trigger.attr('data-target') - || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 - - return $(target) - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.collapse - - $.fn.collapse = Plugin - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { - var $this = $(this) - - if (!$this.attr('data-target')) e.preventDefault() - - var $target = getTargetFromTrigger($this) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - - Plugin.call($target, option) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: dropdown.js v3.3.6 - * http://getbootstrap.com/javascript/#dropdowns - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle="dropdown"]' - var Dropdown = function (element) { - $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.VERSION = '3.3.6' - - function getParent($this) { - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = selector && $(selector) - - return $parent && $parent.length ? $parent : $this.parent() - } - - function clearMenus(e) { - if (e && e.which === 3) return - $(backdrop).remove() - $(toggle).each(function () { - var $this = $(this) - var $parent = getParent($this) - var relatedTarget = { relatedTarget: this } - - if (!$parent.hasClass('open')) return - - if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return - - $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) - - if (e.isDefaultPrevented()) return - - $this.attr('aria-expanded', 'false') - $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) - }) - } - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we use a backdrop because click events don't delegate - $(document.createElement('div')) - .addClass('dropdown-backdrop') - .insertAfter($(this)) - .on('click', clearMenus) - } - - var relatedTarget = { relatedTarget: this } - $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) - - if (e.isDefaultPrevented()) return - - $this - .trigger('focus') - .attr('aria-expanded', 'true') - - $parent - .toggleClass('open') - .trigger($.Event('shown.bs.dropdown', relatedTarget)) - } - - return false - } - - Dropdown.prototype.keydown = function (e) { - if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return - - var $this = $(this) - - e.preventDefault() - e.stopPropagation() - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - if (!isActive && e.which != 27 || isActive && e.which == 27) { - if (e.which == 27) $parent.find(toggle).trigger('focus') - return $this.trigger('click') - } - - var desc = ' li:not(.disabled):visible a' - var $items = $parent.find('.dropdown-menu' + desc) - - if (!$items.length) return - - var index = $items.index(e.target) - - if (e.which == 38 && index > 0) index-- // up - if (e.which == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 - - $items.eq(index).trigger('focus') - } - - - // DROPDOWN PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.dropdown') - - if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - var old = $.fn.dropdown - - $.fn.dropdown = Plugin - $.fn.dropdown.Constructor = Dropdown - - - // DROPDOWN NO CONFLICT - // ==================== - - $.fn.dropdown.noConflict = function () { - $.fn.dropdown = old - return this - } - - - // APPLY TO STANDARD DROPDOWN ELEMENTS - // =================================== - - $(document) - .on('click.bs.dropdown.data-api', clearMenus) - .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) - .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) - .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: modal.js v3.3.6 - * http://getbootstrap.com/javascript/#modals - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // MODAL CLASS DEFINITION - // ====================== - - var Modal = function (element, options) { - this.options = options - this.$body = $(document.body) - this.$element = $(element) - this.$dialog = this.$element.find('.modal-dialog') - this.$backdrop = null - this.isShown = null - this.originalBodyPad = null - this.scrollbarWidth = 0 - this.ignoreBackdropClick = false - - if (this.options.remote) { - this.$element - .find('.modal-content') - .load(this.options.remote, $.proxy(function () { - this.$element.trigger('loaded.bs.modal') - }, this)) - } - } - - Modal.VERSION = '3.3.6' - - Modal.TRANSITION_DURATION = 300 - Modal.BACKDROP_TRANSITION_DURATION = 150 - - Modal.DEFAULTS = { - backdrop: true, - keyboard: true, - show: true - } - - Modal.prototype.toggle = function (_relatedTarget) { - return this.isShown ? this.hide() : this.show(_relatedTarget) - } - - Modal.prototype.show = function (_relatedTarget) { - var that = this - var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.checkScrollbar() - this.setScrollbar() - this.$body.addClass('modal-open') - - this.escape() - this.resize() - - this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) - - this.$dialog.on('mousedown.dismiss.bs.modal', function () { - that.$element.one('mouseup.dismiss.bs.modal', function (e) { - if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true - }) - }) - - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - if (!that.$element.parent().length) { - that.$element.appendTo(that.$body) // don't move modals dom position - } - - that.$element - .show() - .scrollTop(0) - - that.adjustDialog() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element.addClass('in') - - that.enforceFocus() - - var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) - - transition ? - that.$dialog // wait for modal to slide in - .one('bsTransitionEnd', function () { - that.$element.trigger('focus').trigger(e) - }) - .emulateTransitionEnd(Modal.TRANSITION_DURATION) : - that.$element.trigger('focus').trigger(e) - }) - } - - Modal.prototype.hide = function (e) { - if (e) e.preventDefault() - - e = $.Event('hide.bs.modal') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.escape() - this.resize() - - $(document).off('focusin.bs.modal') - - this.$element - .removeClass('in') - .off('click.dismiss.bs.modal') - .off('mouseup.dismiss.bs.modal') - - this.$dialog.off('mousedown.dismiss.bs.modal') - - $.support.transition && this.$element.hasClass('fade') ? - this.$element - .one('bsTransitionEnd', $.proxy(this.hideModal, this)) - .emulateTransitionEnd(Modal.TRANSITION_DURATION) : - this.hideModal() - } - - Modal.prototype.enforceFocus = function () { - $(document) - .off('focusin.bs.modal') // guard against infinite focus loop - .on('focusin.bs.modal', $.proxy(function (e) { - if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { - this.$element.trigger('focus') - } - }, this)) - } - - Modal.prototype.escape = function () { - if (this.isShown && this.options.keyboard) { - this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { - e.which == 27 && this.hide() - }, this)) - } else if (!this.isShown) { - this.$element.off('keydown.dismiss.bs.modal') - } - } - - Modal.prototype.resize = function () { - if (this.isShown) { - $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) - } else { - $(window).off('resize.bs.modal') - } - } - - Modal.prototype.hideModal = function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.$body.removeClass('modal-open') - that.resetAdjustments() - that.resetScrollbar() - that.$element.trigger('hidden.bs.modal') - }) - } - - Modal.prototype.removeBackdrop = function () { - this.$backdrop && this.$backdrop.remove() - this.$backdrop = null - } - - Modal.prototype.backdrop = function (callback) { - var that = this - var animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $(document.createElement('div')) - .addClass('modal-backdrop ' + animate) - .appendTo(this.$body) - - this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { - if (this.ignoreBackdropClick) { - this.ignoreBackdropClick = false - return - } - if (e.target !== e.currentTarget) return - this.options.backdrop == 'static' - ? this.$element[0].focus() - : this.hide() - }, this)) - - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - - this.$backdrop.addClass('in') - - if (!callback) return - - doAnimate ? - this.$backdrop - .one('bsTransitionEnd', callback) - .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : - callback() - - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') - - var callbackRemove = function () { - that.removeBackdrop() - callback && callback() - } - $.support.transition && this.$element.hasClass('fade') ? - this.$backdrop - .one('bsTransitionEnd', callbackRemove) - .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : - callbackRemove() - - } else if (callback) { - callback() - } - } - - // these following methods are used to handle overflowing modals - - Modal.prototype.handleUpdate = function () { - this.adjustDialog() - } - - Modal.prototype.adjustDialog = function () { - var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight - - this.$element.css({ - paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', - paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' - }) - } - - Modal.prototype.resetAdjustments = function () { - this.$element.css({ - paddingLeft: '', - paddingRight: '' - }) - } - - Modal.prototype.checkScrollbar = function () { - var fullWindowWidth = window.innerWidth - if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 - var documentElementRect = document.documentElement.getBoundingClientRect() - fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) - } - this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth - this.scrollbarWidth = this.measureScrollbar() - } - - Modal.prototype.setScrollbar = function () { - var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) - this.originalBodyPad = document.body.style.paddingRight || '' - if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) - } - - Modal.prototype.resetScrollbar = function () { - this.$body.css('padding-right', this.originalBodyPad) - } - - Modal.prototype.measureScrollbar = function () { // thx walsh - var scrollDiv = document.createElement('div') - scrollDiv.className = 'modal-scrollbar-measure' - this.$body.append(scrollDiv) - var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth - this.$body[0].removeChild(scrollDiv) - return scrollbarWidth - } - - - // MODAL PLUGIN DEFINITION - // ======================= - - function Plugin(option, _relatedTarget) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.modal') - var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data) $this.data('bs.modal', (data = new Modal(this, options))) - if (typeof option == 'string') data[option](_relatedTarget) - else if (options.show) data.show(_relatedTarget) - }) - } - - var old = $.fn.modal - - $.fn.modal = Plugin - $.fn.modal.Constructor = Modal - - - // MODAL NO CONFLICT - // ================= - - $.fn.modal.noConflict = function () { - $.fn.modal = old - return this - } - - - // MODAL DATA-API - // ============== - - $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - var href = $this.attr('href') - var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 - var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) - - if ($this.is('a')) e.preventDefault() - - $target.one('show.bs.modal', function (showEvent) { - if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown - $target.one('hidden.bs.modal', function () { - $this.is(':visible') && $this.trigger('focus') - }) - }) - Plugin.call($target, option, this) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: tooltip.js v3.3.6 - * http://getbootstrap.com/javascript/#tooltip - * Inspired by the original jQuery.tipsy by Jason Frame - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // TOOLTIP PUBLIC CLASS DEFINITION - // =============================== - - var Tooltip = function (element, options) { - this.type = null - this.options = null - this.enabled = null - this.timeout = null - this.hoverState = null - this.$element = null - this.inState = null - - this.init('tooltip', element, options) - } - - Tooltip.VERSION = '3.3.6' - - Tooltip.TRANSITION_DURATION = 150 - - Tooltip.DEFAULTS = { - animation: true, - placement: 'top', - selector: false, - template: '', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - container: false, - viewport: { - selector: 'body', - padding: 0 - } - } - - Tooltip.prototype.init = function (type, element, options) { - this.enabled = true - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) - this.inState = { click: false, hover: false, focus: false } - - if (this.$element[0] instanceof document.constructor && !this.options.selector) { - throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') - } - - var triggers = this.options.trigger.split(' ') - - for (var i = triggers.length; i--;) { - var trigger = triggers[i] - - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' - var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' - - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - Tooltip.prototype.getDefaults = function () { - return Tooltip.DEFAULTS - } - - Tooltip.prototype.getOptions = function (options) { - options = $.extend({}, this.getDefaults(), this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay, - hide: options.delay - } - } - - return options - } - - Tooltip.prototype.getDelegateOptions = function () { - var options = {} - var defaults = this.getDefaults() - - this._options && $.each(this._options, function (key, value) { - if (defaults[key] != value) options[key] = value - }) - - return options - } - - Tooltip.prototype.enter = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget).data('bs.' + this.type) - - if (!self) { - self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) - $(obj.currentTarget).data('bs.' + this.type, self) - } - - if (obj instanceof $.Event) { - self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true - } - - if (self.tip().hasClass('in') || self.hoverState == 'in') { - self.hoverState = 'in' - return - } - - clearTimeout(self.timeout) - - self.hoverState = 'in' - - if (!self.options.delay || !self.options.delay.show) return self.show() - - self.timeout = setTimeout(function () { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - Tooltip.prototype.isInStateTrue = function () { - for (var key in this.inState) { - if (this.inState[key]) return true - } - - return false - } - - Tooltip.prototype.leave = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget).data('bs.' + this.type) - - if (!self) { - self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) - $(obj.currentTarget).data('bs.' + this.type, self) - } - - if (obj instanceof $.Event) { - self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false - } - - if (self.isInStateTrue()) return - - clearTimeout(self.timeout) - - self.hoverState = 'out' - - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.timeout = setTimeout(function () { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - Tooltip.prototype.show = function () { - var e = $.Event('show.bs.' + this.type) - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - - var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) - if (e.isDefaultPrevented() || !inDom) return - var that = this - - var $tip = this.tip() - - var tipId = this.getUID(this.type) - - this.setContent() - $tip.attr('id', tipId) - this.$element.attr('aria-describedby', tipId) - - if (this.options.animation) $tip.addClass('fade') - - var placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - - var autoToken = /\s?auto?\s?/i - var autoPlace = autoToken.test(placement) - if (autoPlace) placement = placement.replace(autoToken, '') || 'top' - - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) - .addClass(placement) - .data('bs.' + this.type, this) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - this.$element.trigger('inserted.bs.' + this.type) - - var pos = this.getPosition() - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight - - if (autoPlace) { - var orgPlacement = placement - var viewportDim = this.getPosition(this.$viewport) - - placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : - placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : - placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : - placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : - placement - - $tip - .removeClass(orgPlacement) - .addClass(placement) - } - - var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) - - this.applyPlacement(calculatedOffset, placement) - - var complete = function () { - var prevHoverState = that.hoverState - that.$element.trigger('shown.bs.' + that.type) - that.hoverState = null - - if (prevHoverState == 'out') that.leave(that) - } - - $.support.transition && this.$tip.hasClass('fade') ? - $tip - .one('bsTransitionEnd', complete) - .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : - complete() - } - } - - Tooltip.prototype.applyPlacement = function (offset, placement) { - var $tip = this.tip() - var width = $tip[0].offsetWidth - var height = $tip[0].offsetHeight - - // manually read margins because getBoundingClientRect includes difference - var marginTop = parseInt($tip.css('margin-top'), 10) - var marginLeft = parseInt($tip.css('margin-left'), 10) - - // we must check for NaN for ie 8/9 - if (isNaN(marginTop)) marginTop = 0 - if (isNaN(marginLeft)) marginLeft = 0 - - offset.top += marginTop - offset.left += marginLeft - - // $.fn.offset doesn't round pixel values - // so we use setOffset directly with our own function B-0 - $.offset.setOffset($tip[0], $.extend({ - using: function (props) { - $tip.css({ - top: Math.round(props.top), - left: Math.round(props.left) - }) - } - }, offset), 0) - - $tip.addClass('in') - - // check to see if placing tip in new offset caused the tip to resize itself - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - } - - var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) - - if (delta.left) offset.left += delta.left - else offset.top += delta.top - - var isVertical = /top|bottom/.test(placement) - var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight - var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' - - $tip.offset(offset) - this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) - } - - Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { - this.arrow() - .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') - .css(isVertical ? 'top' : 'left', '') - } - - Tooltip.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - Tooltip.prototype.hide = function (callback) { - var that = this - var $tip = $(this.$tip) - var e = $.Event('hide.bs.' + this.type) - - function complete() { - if (that.hoverState != 'in') $tip.detach() - that.$element - .removeAttr('aria-describedby') - .trigger('hidden.bs.' + that.type) - callback && callback() - } - - this.$element.trigger(e) - - if (e.isDefaultPrevented()) return - - $tip.removeClass('in') - - $.support.transition && $tip.hasClass('fade') ? - $tip - .one('bsTransitionEnd', complete) - .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : - complete() - - this.hoverState = null - - return this - } - - Tooltip.prototype.fixTitle = function () { - var $e = this.$element - if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') - } - } - - Tooltip.prototype.hasContent = function () { - return this.getTitle() - } - - Tooltip.prototype.getPosition = function ($element) { - $element = $element || this.$element - - var el = $element[0] - var isBody = el.tagName == 'BODY' - - var elRect = el.getBoundingClientRect() - if (elRect.width == null) { - // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 - elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) - } - var elOffset = isBody ? { top: 0, left: 0 } : $element.offset() - var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } - var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null - - return $.extend({}, elRect, scroll, outerDims, elOffset) - } - - Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { - return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : - placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : - placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : - /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } - - } - - Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { - var delta = { top: 0, left: 0 } - if (!this.$viewport) return delta - - var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 - var viewportDimensions = this.getPosition(this.$viewport) - - if (/right|left/.test(placement)) { - var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll - var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight - if (topEdgeOffset < viewportDimensions.top) { // top overflow - delta.top = viewportDimensions.top - topEdgeOffset - } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow - delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset - } - } else { - var leftEdgeOffset = pos.left - viewportPadding - var rightEdgeOffset = pos.left + viewportPadding + actualWidth - if (leftEdgeOffset < viewportDimensions.left) { // left overflow - delta.left = viewportDimensions.left - leftEdgeOffset - } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow - delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset - } - } - - return delta - } - - Tooltip.prototype.getTitle = function () { - var title - var $e = this.$element - var o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - Tooltip.prototype.getUID = function (prefix) { - do prefix += ~~(Math.random() * 1000000) - while (document.getElementById(prefix)) - return prefix - } - - Tooltip.prototype.tip = function () { - if (!this.$tip) { - this.$tip = $(this.options.template) - if (this.$tip.length != 1) { - throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') - } - } - return this.$tip - } - - Tooltip.prototype.arrow = function () { - return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) - } - - Tooltip.prototype.enable = function () { - this.enabled = true - } - - Tooltip.prototype.disable = function () { - this.enabled = false - } - - Tooltip.prototype.toggleEnabled = function () { - this.enabled = !this.enabled - } - - Tooltip.prototype.toggle = function (e) { - var self = this - if (e) { - self = $(e.currentTarget).data('bs.' + this.type) - if (!self) { - self = new this.constructor(e.currentTarget, this.getDelegateOptions()) - $(e.currentTarget).data('bs.' + this.type, self) - } - } - - if (e) { - self.inState.click = !self.inState.click - if (self.isInStateTrue()) self.enter(self) - else self.leave(self) - } else { - self.tip().hasClass('in') ? self.leave(self) : self.enter(self) - } - } - - Tooltip.prototype.destroy = function () { - var that = this - clearTimeout(this.timeout) - this.hide(function () { - that.$element.off('.' + that.type).removeData('bs.' + that.type) - if (that.$tip) { - that.$tip.detach() - } - that.$tip = null - that.$arrow = null - that.$viewport = null - }) - } - - - // TOOLTIP PLUGIN DEFINITION - // ========================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tooltip') - var options = typeof option == 'object' && option - - if (!data && /destroy|hide/.test(option)) return - if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.tooltip - - $.fn.tooltip = Plugin - $.fn.tooltip.Constructor = Tooltip - - - // TOOLTIP NO CONFLICT - // =================== - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(jQuery); - -/* ======================================================================== - * Bootstrap: popover.js v3.3.6 - * http://getbootstrap.com/javascript/#popovers - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // POPOVER PUBLIC CLASS DEFINITION - // =============================== - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') - - Popover.VERSION = '3.3.6' - - Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { - placement: 'right', - trigger: 'click', - content: '', - template: '' - }) - - - // NOTE: POPOVER EXTENDS tooltip.js - // ================================ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) - - Popover.prototype.constructor = Popover - - Popover.prototype.getDefaults = function () { - return Popover.DEFAULTS - } - - Popover.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - var content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events - this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' - ](content) - - $tip.removeClass('fade top bottom left right in') - - // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do - // this manually by checking the contents. - if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() - } - - Popover.prototype.hasContent = function () { - return this.getTitle() || this.getContent() - } - - Popover.prototype.getContent = function () { - var $e = this.$element - var o = this.options - - return $e.attr('data-content') - || (typeof o.content == 'function' ? - o.content.call($e[0]) : - o.content) - } - - Popover.prototype.arrow = function () { - return (this.$arrow = this.$arrow || this.tip().find('.arrow')) - } - - - // POPOVER PLUGIN DEFINITION - // ========================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.popover') - var options = typeof option == 'object' && option - - if (!data && /destroy|hide/.test(option)) return - if (!data) $this.data('bs.popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.popover - - $.fn.popover = Plugin - $.fn.popover.Constructor = Popover - - - // POPOVER NO CONFLICT - // =================== - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(jQuery); - -/* ======================================================================== - * Bootstrap: scrollspy.js v3.3.6 - * http://getbootstrap.com/javascript/#scrollspy - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // SCROLLSPY CLASS DEFINITION - // ========================== - - function ScrollSpy(element, options) { - this.$body = $(document.body) - this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) - this.options = $.extend({}, ScrollSpy.DEFAULTS, options) - this.selector = (this.options.target || '') + ' .nav li > a' - this.offsets = [] - this.targets = [] - this.activeTarget = null - this.scrollHeight = 0 - - this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) - this.refresh() - this.process() - } - - ScrollSpy.VERSION = '3.3.6' - - ScrollSpy.DEFAULTS = { - offset: 10 - } - - ScrollSpy.prototype.getScrollHeight = function () { - return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) - } - - ScrollSpy.prototype.refresh = function () { - var that = this - var offsetMethod = 'offset' - var offsetBase = 0 - - this.offsets = [] - this.targets = [] - this.scrollHeight = this.getScrollHeight() - - if (!$.isWindow(this.$scrollElement[0])) { - offsetMethod = 'position' - offsetBase = this.$scrollElement.scrollTop() - } - - this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - var href = $el.data('target') || $el.attr('href') - var $href = /^#./.test(href) && $(href) - - return ($href - && $href.length - && $href.is(':visible') - && [[$href[offsetMethod]().top + offsetBase, href]]) || null - }) - .sort(function (a, b) { return a[0] - b[0] }) - .each(function () { - that.offsets.push(this[0]) - that.targets.push(this[1]) - }) - } - - ScrollSpy.prototype.process = function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - var scrollHeight = this.getScrollHeight() - var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() - var offsets = this.offsets - var targets = this.targets - var activeTarget = this.activeTarget - var i - - if (this.scrollHeight != scrollHeight) { - this.refresh() - } - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) - } - - if (activeTarget && scrollTop < offsets[0]) { - this.activeTarget = null - return this.clear() - } - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) - && this.activate(targets[i]) - } - } - - ScrollSpy.prototype.activate = function (target) { - this.activeTarget = target - - this.clear() - - var selector = this.selector + - '[data-target="' + target + '"],' + - this.selector + '[href="' + target + '"]' - - var active = $(selector) - .parents('li') - .addClass('active') - - if (active.parent('.dropdown-menu').length) { - active = active - .closest('li.dropdown') - .addClass('active') - } - - active.trigger('activate.bs.scrollspy') - } - - ScrollSpy.prototype.clear = function () { - $(this.selector) - .parentsUntil(this.options.target, '.active') - .removeClass('active') - } - - - // SCROLLSPY PLUGIN DEFINITION - // =========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.scrollspy') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.scrollspy - - $.fn.scrollspy = Plugin - $.fn.scrollspy.Constructor = ScrollSpy - - - // SCROLLSPY NO CONFLICT - // ===================== - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - - - // SCROLLSPY DATA-API - // ================== - - $(window).on('load.bs.scrollspy.data-api', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - Plugin.call($spy, $spy.data()) - }) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: tab.js v3.3.6 - * http://getbootstrap.com/javascript/#tabs - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // TAB CLASS DEFINITION - // ==================== - - var Tab = function (element) { - // jscs:disable requireDollarBeforejQueryAssignment - this.element = $(element) - // jscs:enable requireDollarBeforejQueryAssignment - } - - Tab.VERSION = '3.3.6' - - Tab.TRANSITION_DURATION = 150 - - Tab.prototype.show = function () { - var $this = this.element - var $ul = $this.closest('ul:not(.dropdown-menu)') - var selector = $this.data('target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - if ($this.parent('li').hasClass('active')) return - - var $previous = $ul.find('.active:last a') - var hideEvent = $.Event('hide.bs.tab', { - relatedTarget: $this[0] - }) - var showEvent = $.Event('show.bs.tab', { - relatedTarget: $previous[0] - }) - - $previous.trigger(hideEvent) - $this.trigger(showEvent) - - if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return - - var $target = $(selector) - - this.activate($this.closest('li'), $ul) - this.activate($target, $target.parent(), function () { - $previous.trigger({ - type: 'hidden.bs.tab', - relatedTarget: $this[0] - }) - $this.trigger({ - type: 'shown.bs.tab', - relatedTarget: $previous[0] - }) - }) - } - - Tab.prototype.activate = function (element, container, callback) { - var $active = container.find('> .active') - var transition = callback - && $.support.transition - && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - .end() - .find('[data-toggle="tab"]') - .attr('aria-expanded', false) - - element - .addClass('active') - .find('[data-toggle="tab"]') - .attr('aria-expanded', true) - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if (element.parent('.dropdown-menu').length) { - element - .closest('li.dropdown') - .addClass('active') - .end() - .find('[data-toggle="tab"]') - .attr('aria-expanded', true) - } - - callback && callback() - } - - $active.length && transition ? - $active - .one('bsTransitionEnd', next) - .emulateTransitionEnd(Tab.TRANSITION_DURATION) : - next() - - $active.removeClass('in') - } - - - // TAB PLUGIN DEFINITION - // ===================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tab') - - if (!data) $this.data('bs.tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.tab - - $.fn.tab = Plugin - $.fn.tab.Constructor = Tab - - - // TAB NO CONFLICT - // =============== - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - // TAB DATA-API - // ============ - - var clickHandler = function (e) { - e.preventDefault() - Plugin.call($(this), 'show') - } - - $(document) - .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) - .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: affix.js v3.3.6 - * http://getbootstrap.com/javascript/#affix - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // AFFIX CLASS DEFINITION - // ====================== - - var Affix = function (element, options) { - this.options = $.extend({}, Affix.DEFAULTS, options) - - this.$target = $(this.options.target) - .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) - - this.$element = $(element) - this.affixed = null - this.unpin = null - this.pinnedOffset = null - - this.checkPosition() - } - - Affix.VERSION = '3.3.6' - - Affix.RESET = 'affix affix-top affix-bottom' - - Affix.DEFAULTS = { - offset: 0, - target: window - } - - Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { - var scrollTop = this.$target.scrollTop() - var position = this.$element.offset() - var targetHeight = this.$target.height() - - if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false - - if (this.affixed == 'bottom') { - if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' - return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' - } - - var initializing = this.affixed == null - var colliderTop = initializing ? scrollTop : position.top - var colliderHeight = initializing ? targetHeight : height - - if (offsetTop != null && scrollTop <= offsetTop) return 'top' - if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' - - return false - } - - Affix.prototype.getPinnedOffset = function () { - if (this.pinnedOffset) return this.pinnedOffset - this.$element.removeClass(Affix.RESET).addClass('affix') - var scrollTop = this.$target.scrollTop() - var position = this.$element.offset() - return (this.pinnedOffset = position.top - scrollTop) - } - - Affix.prototype.checkPositionWithEventLoop = function () { - setTimeout($.proxy(this.checkPosition, this), 1) - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var height = this.$element.height() - var offset = this.options.offset - var offsetTop = offset.top - var offsetBottom = offset.bottom - var scrollHeight = Math.max($(document).height(), $(document.body).height()) - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) - - var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) - - if (this.affixed != affix) { - if (this.unpin != null) this.$element.css('top', '') - - var affixType = 'affix' + (affix ? '-' + affix : '') - var e = $.Event(affixType + '.bs.affix') - - this.$element.trigger(e) - - if (e.isDefaultPrevented()) return - - this.affixed = affix - this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null - - this.$element - .removeClass(Affix.RESET) - .addClass(affixType) - .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') - } - - if (affix == 'bottom') { - this.$element.offset({ - top: scrollHeight - height - offsetBottom - }) - } - } - - - // AFFIX PLUGIN DEFINITION - // ======================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.affix') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.affix - - $.fn.affix = Plugin - $.fn.affix.Constructor = Affix - - - // AFFIX NO CONFLICT - // ================= - - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - - - // AFFIX DATA-API - // ============== - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - var data = $spy.data() - - data.offset = data.offset || {} - - if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom - if (data.offsetTop != null) data.offset.top = data.offsetTop - - Plugin.call($spy, data) - }) - }) - -}(jQuery); diff --git a/resources/static/bootstrap-3.3.6/js/bootstrap.min.js b/resources/static/bootstrap-3.3.6/js/bootstrap.min.js deleted file mode 100644 index e79c065..0000000 --- a/resources/static/bootstrap-3.3.6/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under the MIT license - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.6",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.6",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.6",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.6",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.6",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.6",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.6",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/resources/static/css/bootstrap.css b/resources/static/css/bootstrap.css new file mode 100644 index 0000000..1038ebc --- /dev/null +++ b/resources/static/css/bootstrap.css @@ -0,0 +1,9320 @@ +/*! + * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + line-height: 1.15; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +figcaption, +figure, +main { + display: block; +} + +figure { + margin: 1em 40px; +} + +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible; +} + +pre { + font-family: monospace, monospace; + font-size: 1em; +} + +a { + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +a:active, +a:hover { + outline-width: 0; +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; +} + +b, +strong { + font-weight: inherit; +} + +b, +strong { + font-weight: bolder; +} + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +dfn { + font-style: italic; +} + +mark { + background-color: #ff0; + color: #000; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +audio, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +img { + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +button, +input, +optgroup, +select, +textarea { + font-family: sans-serif; + font-size: 100%; + line-height: 1.15; + margin: 0; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} + +progress { + display: inline-block; + vertical-align: baseline; +} + +textarea { + overflow: auto; +} + +[type="checkbox"], +[type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +details, +menu { + display: block; +} + +summary { + display: list-item; +} + +canvas { + display: inline-block; +} + +template { + display: none; +} + +[hidden] { + display: none; +} + +@media print { + *, + *::before, + *::after, + p::first-letter, + div::first-letter, + blockquote::first-letter, + li::first-letter, + p::first-line, + div::first-line, + blockquote::first-line, + li::first-line { + text-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +*, +*::before, +*::after { + -webkit-box-sizing: inherit; + box-sizing: inherit; +} + +@-ms-viewport { + width: device-width; +} + +html { + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-size: 1rem; + font-weight: normal; + line-height: 1.5; + color: #292b2c; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: .5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: bold; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +a { + color: #0275d8; + text-decoration: none; +} + +a:focus, a:hover { + color: #014c8c; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; +} + +[role="button"] { + cursor: pointer; +} + +a, +area, +button, +[role="button"], +input, +label, +select, +summary, +textarea { + -ms-touch-action: manipulation; + touch-action: manipulation; +} + +table { + border-collapse: collapse; + background-color: transparent; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #636c72; + text-align: left; + caption-side: bottom; +} + +th { + text-align: left; +} + +label { + display: inline-block; + margin-bottom: .5rem; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +textarea { + line-height: inherit; +} + +input[type="radio"]:disabled, +input[type="checkbox"]:disabled { + cursor: not-allowed; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; +} + +input[type="search"] { + -webkit-appearance: none; +} + +output { + display: inline-block; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.1; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.1; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.1; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.1; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: normal; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 5px; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + padding: 0.5rem 1rem; + margin-bottom: 1rem; + font-size: 1.25rem; + border-left: 0.25rem solid #eceeef; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #636c72; +} + +.blockquote-footer::before { + content: "\2014 \00A0"; +} + +.blockquote-reverse { + padding-right: 1rem; + padding-left: 0; + text-align: right; + border-right: 0.25rem solid #eceeef; + border-left: 0; +} + +.blockquote-reverse .blockquote-footer::before { + content: ""; +} + +.blockquote-reverse .blockquote-footer::after { + content: "\00A0 \2014"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 0.25rem; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #636c72; +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +code { + padding: 0.2rem 0.4rem; + font-size: 90%; + color: #bd4147; + background-color: #f7f7f9; + border-radius: 0.25rem; +} + +a > code { + padding: 0; + color: inherit; + background-color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 90%; + color: #fff; + background-color: #292b2c; + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + font-size: 90%; + color: #292b2c; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + background-color: transparent; + border-radius: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + position: relative; + margin-left: auto; + margin-right: auto; + padding-right: 15px; + padding-left: 15px; +} + +@media (min-width: 576px) { + .container { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 768px) { + .container { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 992px) { + .container { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 1200px) { + .container { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 576px) { + .container { + width: 540px; + max-width: 100%; + } +} + +@media (min-width: 768px) { + .container { + width: 720px; + max-width: 100%; + } +} + +@media (min-width: 992px) { + .container { + width: 960px; + max-width: 100%; + } +} + +@media (min-width: 1200px) { + .container { + width: 1140px; + max-width: 100%; + } +} + +.container-fluid { + position: relative; + margin-left: auto; + margin-right: auto; + padding-right: 15px; + padding-left: 15px; +} + +@media (min-width: 576px) { + .container-fluid { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 768px) { + .container-fluid { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 992px) { + .container-fluid { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 1200px) { + .container-fluid { + padding-right: 15px; + padding-left: 15px; + } +} + +.row { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +@media (min-width: 576px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +@media (min-width: 768px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +@media (min-width: 992px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +@media (min-width: 1200px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +@media (min-width: 576px) { + .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 768px) { + .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 992px) { + .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 1200px) { + .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl { + padding-right: 15px; + padding-left: 15px; + } +} + +.col { + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +.col-auto { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; +} + +.col-1 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.333333%; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 58.333333%; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.pull-0 { + right: auto; +} + +.pull-1 { + right: 8.333333%; +} + +.pull-2 { + right: 16.666667%; +} + +.pull-3 { + right: 25%; +} + +.pull-4 { + right: 33.333333%; +} + +.pull-5 { + right: 41.666667%; +} + +.pull-6 { + right: 50%; +} + +.pull-7 { + right: 58.333333%; +} + +.pull-8 { + right: 66.666667%; +} + +.pull-9 { + right: 75%; +} + +.pull-10 { + right: 83.333333%; +} + +.pull-11 { + right: 91.666667%; +} + +.pull-12 { + right: 100%; +} + +.push-0 { + left: auto; +} + +.push-1 { + left: 8.333333%; +} + +.push-2 { + left: 16.666667%; +} + +.push-3 { + left: 25%; +} + +.push-4 { + left: 33.333333%; +} + +.push-5 { + left: 41.666667%; +} + +.push-6 { + left: 50%; +} + +.push-7 { + left: 58.333333%; +} + +.push-8 { + left: 66.666667%; +} + +.push-9 { + left: 75%; +} + +.push-10 { + left: 83.333333%; +} + +.push-11 { + left: 91.666667%; +} + +.push-12 { + left: 100%; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-sm-1 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.333333%; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 58.333333%; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .pull-sm-0 { + right: auto; + } + .pull-sm-1 { + right: 8.333333%; + } + .pull-sm-2 { + right: 16.666667%; + } + .pull-sm-3 { + right: 25%; + } + .pull-sm-4 { + right: 33.333333%; + } + .pull-sm-5 { + right: 41.666667%; + } + .pull-sm-6 { + right: 50%; + } + .pull-sm-7 { + right: 58.333333%; + } + .pull-sm-8 { + right: 66.666667%; + } + .pull-sm-9 { + right: 75%; + } + .pull-sm-10 { + right: 83.333333%; + } + .pull-sm-11 { + right: 91.666667%; + } + .pull-sm-12 { + right: 100%; + } + .push-sm-0 { + left: auto; + } + .push-sm-1 { + left: 8.333333%; + } + .push-sm-2 { + left: 16.666667%; + } + .push-sm-3 { + left: 25%; + } + .push-sm-4 { + left: 33.333333%; + } + .push-sm-5 { + left: 41.666667%; + } + .push-sm-6 { + left: 50%; + } + .push-sm-7 { + left: 58.333333%; + } + .push-sm-8 { + left: 66.666667%; + } + .push-sm-9 { + left: 75%; + } + .push-sm-10 { + left: 83.333333%; + } + .push-sm-11 { + left: 91.666667%; + } + .push-sm-12 { + left: 100%; + } + .offset-sm-0 { + margin-left: 0%; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-md-1 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.333333%; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 58.333333%; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .pull-md-0 { + right: auto; + } + .pull-md-1 { + right: 8.333333%; + } + .pull-md-2 { + right: 16.666667%; + } + .pull-md-3 { + right: 25%; + } + .pull-md-4 { + right: 33.333333%; + } + .pull-md-5 { + right: 41.666667%; + } + .pull-md-6 { + right: 50%; + } + .pull-md-7 { + right: 58.333333%; + } + .pull-md-8 { + right: 66.666667%; + } + .pull-md-9 { + right: 75%; + } + .pull-md-10 { + right: 83.333333%; + } + .pull-md-11 { + right: 91.666667%; + } + .pull-md-12 { + right: 100%; + } + .push-md-0 { + left: auto; + } + .push-md-1 { + left: 8.333333%; + } + .push-md-2 { + left: 16.666667%; + } + .push-md-3 { + left: 25%; + } + .push-md-4 { + left: 33.333333%; + } + .push-md-5 { + left: 41.666667%; + } + .push-md-6 { + left: 50%; + } + .push-md-7 { + left: 58.333333%; + } + .push-md-8 { + left: 66.666667%; + } + .push-md-9 { + left: 75%; + } + .push-md-10 { + left: 83.333333%; + } + .push-md-11 { + left: 91.666667%; + } + .push-md-12 { + left: 100%; + } + .offset-md-0 { + margin-left: 0%; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-lg-1 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.333333%; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 58.333333%; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .pull-lg-0 { + right: auto; + } + .pull-lg-1 { + right: 8.333333%; + } + .pull-lg-2 { + right: 16.666667%; + } + .pull-lg-3 { + right: 25%; + } + .pull-lg-4 { + right: 33.333333%; + } + .pull-lg-5 { + right: 41.666667%; + } + .pull-lg-6 { + right: 50%; + } + .pull-lg-7 { + right: 58.333333%; + } + .pull-lg-8 { + right: 66.666667%; + } + .pull-lg-9 { + right: 75%; + } + .pull-lg-10 { + right: 83.333333%; + } + .pull-lg-11 { + right: 91.666667%; + } + .pull-lg-12 { + right: 100%; + } + .push-lg-0 { + left: auto; + } + .push-lg-1 { + left: 8.333333%; + } + .push-lg-2 { + left: 16.666667%; + } + .push-lg-3 { + left: 25%; + } + .push-lg-4 { + left: 33.333333%; + } + .push-lg-5 { + left: 41.666667%; + } + .push-lg-6 { + left: 50%; + } + .push-lg-7 { + left: 58.333333%; + } + .push-lg-8 { + left: 66.666667%; + } + .push-lg-9 { + left: 75%; + } + .push-lg-10 { + left: 83.333333%; + } + .push-lg-11 { + left: 91.666667%; + } + .push-lg-12 { + left: 100%; + } + .offset-lg-0 { + margin-left: 0%; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-xl-1 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.333333%; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 58.333333%; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .pull-xl-0 { + right: auto; + } + .pull-xl-1 { + right: 8.333333%; + } + .pull-xl-2 { + right: 16.666667%; + } + .pull-xl-3 { + right: 25%; + } + .pull-xl-4 { + right: 33.333333%; + } + .pull-xl-5 { + right: 41.666667%; + } + .pull-xl-6 { + right: 50%; + } + .pull-xl-7 { + right: 58.333333%; + } + .pull-xl-8 { + right: 66.666667%; + } + .pull-xl-9 { + right: 75%; + } + .pull-xl-10 { + right: 83.333333%; + } + .pull-xl-11 { + right: 91.666667%; + } + .pull-xl-12 { + right: 100%; + } + .push-xl-0 { + left: auto; + } + .push-xl-1 { + left: 8.333333%; + } + .push-xl-2 { + left: 16.666667%; + } + .push-xl-3 { + left: 25%; + } + .push-xl-4 { + left: 33.333333%; + } + .push-xl-5 { + left: 41.666667%; + } + .push-xl-6 { + left: 50%; + } + .push-xl-7 { + left: 58.333333%; + } + .push-xl-8 { + left: 66.666667%; + } + .push-xl-9 { + left: 75%; + } + .push-xl-10 { + left: 83.333333%; + } + .push-xl-11 { + left: 91.666667%; + } + .push-xl-12 { + left: 100%; + } + .offset-xl-0 { + margin-left: 0%; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #eceeef; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #eceeef; +} + +.table tbody + tbody { + border-top: 2px solid #eceeef; +} + +.table .table { + background-color: #fff; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #eceeef; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #eceeef; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #dff0d8; +} + +.table-hover .table-success:hover { + background-color: #d0e9c6; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #d0e9c6; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #d9edf7; +} + +.table-hover .table-info:hover { + background-color: #c4e3f3; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #c4e3f3; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #fcf8e3; +} + +.table-hover .table-warning:hover { + background-color: #faf2cc; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #faf2cc; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f2dede; +} + +.table-hover .table-danger:hover { + background-color: #ebcccc; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #ebcccc; +} + +.thead-inverse th { + color: #fff; + background-color: #292b2c; +} + +.thead-default th { + color: #464a4c; + background-color: #eceeef; +} + +.table-inverse { + color: #fff; + background-color: #292b2c; +} + +.table-inverse th, +.table-inverse td, +.table-inverse thead th { + border-color: #fff; +} + +.table-inverse.table-bordered { + border: 0; +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -ms-overflow-style: -ms-autohiding-scrollbar; +} + +.table-responsive.table-bordered { + border: 0; +} + +.form-control { + display: block; + width: 100%; + padding: 0.5rem 0.75rem; + font-size: 1rem; + line-height: 1.25; + color: #464a4c; + background-color: #fff; + background-image: none; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; + -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + color: #464a4c; + background-color: #fff; + border-color: #5cb3fd; + outline: none; +} + +.form-control::-webkit-input-placeholder { + color: #636c72; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #636c72; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #636c72; + opacity: 1; +} + +.form-control::placeholder { + color: #636c72; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #eceeef; + opacity: 1; +} + +.form-control:disabled { + cursor: not-allowed; +} + +select.form-control:not([size]):not([multiple]) { + height: calc(2.25rem + 2px); +} + +select.form-control:focus::-ms-value { + color: #464a4c; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; +} + +.col-form-label { + padding-top: calc(0.5rem - 1px * 2); + padding-bottom: calc(0.5rem - 1px * 2); + margin-bottom: 0; +} + +.col-form-label-lg { + padding-top: calc(0.75rem - 1px * 2); + padding-bottom: calc(0.75rem - 1px * 2); + font-size: 1.25rem; +} + +.col-form-label-sm { + padding-top: calc(0.25rem - 1px * 2); + padding-bottom: calc(0.25rem - 1px * 2); + font-size: 0.875rem; +} + +.col-form-legend { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + margin-bottom: 0; + font-size: 1rem; +} + +.form-control-static { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + margin-bottom: 0; + line-height: 1.25; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-static.form-control-sm, .input-group-sm > .form-control-static.form-control, +.input-group-sm > .form-control-static.input-group-addon, +.input-group-sm > .input-group-btn > .form-control-static.btn, .form-control-static.form-control-lg, .input-group-lg > .form-control-static.form-control, +.input-group-lg > .form-control-static.input-group-addon, +.input-group-lg > .input-group-btn > .form-control-static.btn { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm, .input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), +.input-group-sm > select.input-group-addon:not([size]):not([multiple]), +.input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) { + height: 1.8125rem; +} + +.form-control-lg, .input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), +.input-group-lg > select.input-group-addon:not([size]):not([multiple]), +.input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) { + height: 3.166667rem; +} + +.form-group { + margin-bottom: 1rem; +} + +.form-text { + display: block; + margin-top: 0.25rem; +} + +.form-check { + position: relative; + display: block; + margin-bottom: 0.5rem; +} + +.form-check.disabled .form-check-label { + color: #636c72; + cursor: not-allowed; +} + +.form-check-label { + padding-left: 1.25rem; + margin-bottom: 0; + cursor: pointer; +} + +.form-check-input { + position: absolute; + margin-top: 0.25rem; + margin-left: -1.25rem; +} + +.form-check-input:only-child { + position: static; +} + +.form-check-inline { + display: inline-block; +} + +.form-check-inline .form-check-label { + vertical-align: middle; +} + +.form-check-inline + .form-check-inline { + margin-left: 0.75rem; +} + +.form-control-feedback { + margin-top: 0.25rem; +} + +.form-control-success, +.form-control-warning, +.form-control-danger { + padding-right: 2.25rem; + background-repeat: no-repeat; + background-position: center right 0.5625rem; + -webkit-background-size: 1.125rem 1.125rem; + background-size: 1.125rem 1.125rem; +} + +.has-success .form-control-feedback, +.has-success .form-control-label, +.has-success .col-form-label, +.has-success .form-check-label, +.has-success .custom-control { + color: #5cb85c; +} + +.has-success .form-control { + border-color: #5cb85c; +} + +.has-success .input-group-addon { + color: #5cb85c; + border-color: #5cb85c; + background-color: #eaf6ea; +} + +.has-success .form-control-success { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%235cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E"); +} + +.has-warning .form-control-feedback, +.has-warning .form-control-label, +.has-warning .col-form-label, +.has-warning .form-check-label, +.has-warning .custom-control { + color: #f0ad4e; +} + +.has-warning .form-control { + border-color: #f0ad4e; +} + +.has-warning .input-group-addon { + color: #f0ad4e; + border-color: #f0ad4e; + background-color: white; +} + +.has-warning .form-control-warning { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23f0ad4e' d='M4.4 5.324h-.8v-2.46h.8zm0 1.42h-.8V5.89h.8zM3.76.63L.04 7.075c-.115.2.016.425.26.426h7.397c.242 0 .372-.226.258-.426C6.726 4.924 5.47 2.79 4.253.63c-.113-.174-.39-.174-.494 0z'/%3E%3C/svg%3E"); +} + +.has-danger .form-control-feedback, +.has-danger .form-control-label, +.has-danger .col-form-label, +.has-danger .form-check-label, +.has-danger .custom-control { + color: #d9534f; +} + +.has-danger .form-control { + border-color: #d9534f; +} + +.has-danger .input-group-addon { + color: #d9534f; + border-color: #d9534f; + background-color: #fdf7f7; +} + +.has-danger .form-control-danger { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23d9534f' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E"); +} + +.form-inline { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.form-inline .form-check { + width: 100%; +} + +@media (min-width: 576px) { + .form-inline label { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + width: auto; + } + .form-inline .form-control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-check { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + margin-top: 0; + margin-bottom: 0; + } + .form-inline .form-check-label { + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + } + .form-inline .custom-control-indicator { + position: static; + display: inline-block; + margin-right: 0.25rem; + vertical-align: text-bottom; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} + +.btn { + display: inline-block; + font-weight: normal; + line-height: 1.25; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + padding: 0.5rem 1rem; + font-size: 1rem; + border-radius: 0.25rem; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.btn:focus, .btn:hover { + text-decoration: none; +} + +.btn:focus, .btn.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.25); + box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.25); +} + +.btn.disabled, .btn:disabled { + cursor: not-allowed; + opacity: .65; +} + +.btn:active, .btn.active { + background-image: none; +} + +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary:hover { + color: #fff; + background-color: #025aa5; + border-color: #01549b; +} + +.btn-primary:focus, .btn-primary.focus { + -webkit-box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5); + box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary:active, .btn-primary.active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #025aa5; + background-image: none; + border-color: #01549b; +} + +.btn-secondary { + color: #292b2c; + background-color: #fff; + border-color: #ccc; +} + +.btn-secondary:hover { + color: #292b2c; + background-color: #e6e6e6; + border-color: #adadad; +} + +.btn-secondary:focus, .btn-secondary.focus { + -webkit-box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5); + box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + background-color: #fff; + border-color: #ccc; +} + +.btn-secondary:active, .btn-secondary.active, +.show > .btn-secondary.dropdown-toggle { + color: #292b2c; + background-color: #e6e6e6; + background-image: none; + border-color: #adadad; +} + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #2aabd2; +} + +.btn-info:focus, .btn-info.focus { + -webkit-box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5); + box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info:active, .btn-info.active, +.show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #31b0d5; + background-image: none; + border-color: #2aabd2; +} + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #419641; +} + +.btn-success:focus, .btn-success.focus { + -webkit-box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5); + box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success:active, .btn-success.active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #449d44; + background-image: none; + border-color: #419641; +} + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #eb9316; +} + +.btn-warning:focus, .btn-warning.focus { + -webkit-box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5); + box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning:active, .btn-warning.active, +.show > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #ec971f; + background-image: none; + border-color: #eb9316; +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #c12e2a; +} + +.btn-danger:focus, .btn-danger.focus { + -webkit-box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5); + box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger:active, .btn-danger.active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #c9302c; + background-image: none; + border-color: #c12e2a; +} + +.btn-outline-primary { + color: #0275d8; + background-image: none; + background-color: transparent; + border-color: #0275d8; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + -webkit-box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5); + box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #0275d8; + background-color: transparent; +} + +.btn-outline-primary:active, .btn-outline-primary.active, +.show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-outline-secondary { + color: #ccc; + background-image: none; + background-color: transparent; + border-color: #ccc; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #ccc; + border-color: #ccc; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + -webkit-box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5); + box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #ccc; + background-color: transparent; +} + +.btn-outline-secondary:active, .btn-outline-secondary.active, +.show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #ccc; + border-color: #ccc; +} + +.btn-outline-info { + color: #5bc0de; + background-image: none; + background-color: transparent; + border-color: #5bc0de; +} + +.btn-outline-info:hover { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + -webkit-box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5); + box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5); +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #5bc0de; + background-color: transparent; +} + +.btn-outline-info:active, .btn-outline-info.active, +.show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-outline-success { + color: #5cb85c; + background-image: none; + background-color: transparent; + border-color: #5cb85c; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + -webkit-box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5); + box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5); +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #5cb85c; + background-color: transparent; +} + +.btn-outline-success:active, .btn-outline-success.active, +.show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-outline-warning { + color: #f0ad4e; + background-image: none; + background-color: transparent; + border-color: #f0ad4e; +} + +.btn-outline-warning:hover { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-outline-warning:focus, .btn-outline-warning.focus { + -webkit-box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5); + box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5); +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #f0ad4e; + background-color: transparent; +} + +.btn-outline-warning:active, .btn-outline-warning.active, +.show > .btn-outline-warning.dropdown-toggle { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-outline-danger { + color: #d9534f; + background-image: none; + background-color: transparent; + border-color: #d9534f; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + -webkit-box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5); + box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5); +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #d9534f; + background-color: transparent; +} + +.btn-outline-danger:active, .btn-outline-danger.active, +.show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-link { + font-weight: normal; + color: #0275d8; + border-radius: 0; +} + +.btn-link, .btn-link:active, .btn-link.active, .btn-link:disabled { + background-color: transparent; +} + +.btn-link, .btn-link:focus, .btn-link:active { + border-color: transparent; +} + +.btn-link:hover { + border-color: transparent; +} + +.btn-link:focus, .btn-link:hover { + color: #014c8c; + text-decoration: underline; + background-color: transparent; +} + +.btn-link:disabled { + color: #636c72; +} + +.btn-link:disabled:focus, .btn-link:disabled:hover { + text-decoration: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 0.5rem; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.show { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.show { + display: block; +} + +tr.collapse.show { + display: table-row; +} + +tbody.collapse.show { + display: table-row-group; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.3em; + vertical-align: middle; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-left: 0.3em solid transparent; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropup .dropdown-toggle::after { + border-top: 0; + border-bottom: 0.3em solid; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #292b2c; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.dropdown-divider { + height: 1px; + margin: 0.5rem 0; + overflow: hidden; + background-color: #eceeef; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 3px 1.5rem; + clear: both; + font-weight: normal; + color: #292b2c; + text-align: inherit; + white-space: nowrap; + background: none; + border: 0; +} + +.dropdown-item:focus, .dropdown-item:hover { + color: #1d1e1f; + text-decoration: none; + background-color: #f7f7f9; +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #0275d8; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #636c72; + cursor: not-allowed; + background-color: transparent; +} + +.show > .dropdown-menu { + display: block; +} + +.show > a { + outline: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #636c72; + white-space: nowrap; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 0.125rem; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + -webkit-box-flex: 0; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 2; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group, +.btn-group-vertical .btn + .btn, +.btn-group-vertical .btn + .btn-group, +.btn-group-vertical .btn-group + .btn, +.btn-group-vertical .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn + .dropdown-toggle-split::after { + margin-left: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 1.125rem; + padding-left: 1.125rem; +} + +.btn-group-vertical { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; +} + +.btn-group-vertical .btn, +.btn-group-vertical .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 100%; +} + +.input-group .form-control { + position: relative; + z-index: 2; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; +} + +.input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover { + z-index: 3; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: normal; + line-height: 1.25; + color: #464a4c; + text-align: center; + background-color: #eceeef; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.input-group-addon.form-control-sm, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .input-group-addon.btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.input-group-addon.form-control-lg, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .input-group-addon.btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:not(:last-child), +.input-group-addon:not(:last-child), +.input-group-btn:not(:last-child) > .btn, +.input-group-btn:not(:last-child) > .btn-group > .btn, +.input-group-btn:not(:last-child) > .dropdown-toggle, +.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.input-group-addon:not(:last-child) { + border-right: 0; +} + +.input-group .form-control:not(:first-child), +.input-group-addon:not(:first-child), +.input-group-btn:not(:first-child) > .btn, +.input-group-btn:not(:first-child) > .btn-group > .btn, +.input-group-btn:not(:first-child) > .dropdown-toggle, +.input-group-btn:not(:last-child) > .btn:not(:first-child), +.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.form-control + .input-group-addon:not(:first-child) { + border-left: 0; +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; + -webkit-box-flex: 1; + -webkit-flex: 1 1 0%; + -ms-flex: 1 1 0%; + flex: 1 1 0%; +} + +.input-group-btn > .btn + .btn { + margin-left: -1px; +} + +.input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover { + z-index: 3; +} + +.input-group-btn:not(:last-child) > .btn, +.input-group-btn:not(:last-child) > .btn-group { + margin-right: -1px; +} + +.input-group-btn:not(:first-child) > .btn, +.input-group-btn:not(:first-child) > .btn-group { + z-index: 2; + margin-left: -1px; +} + +.input-group-btn:not(:first-child) > .btn:focus, .input-group-btn:not(:first-child) > .btn:active, .input-group-btn:not(:first-child) > .btn:hover, +.input-group-btn:not(:first-child) > .btn-group:focus, +.input-group-btn:not(:first-child) > .btn-group:active, +.input-group-btn:not(:first-child) > .btn-group:hover { + z-index: 3; +} + +.custom-control { + position: relative; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + min-height: 1.5rem; + padding-left: 1.5rem; + margin-right: 1rem; + cursor: pointer; +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-indicator { + color: #fff; + background-color: #0275d8; +} + +.custom-control-input:focus ~ .custom-control-indicator { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 3px #0275d8; + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #0275d8; +} + +.custom-control-input:active ~ .custom-control-indicator { + color: #fff; + background-color: #8fcafe; +} + +.custom-control-input:disabled ~ .custom-control-indicator { + cursor: not-allowed; + background-color: #eceeef; +} + +.custom-control-input:disabled ~ .custom-control-description { + color: #636c72; + cursor: not-allowed; +} + +.custom-control-indicator { + position: absolute; + top: 0.25rem; + left: 0; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #ddd; + background-repeat: no-repeat; + background-position: center center; + -webkit-background-size: 50% 50%; + background-size: 50% 50%; +} + +.custom-checkbox .custom-control-indicator { + border-radius: 0.25rem; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator { + background-color: #0275d8; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); +} + +.custom-radio .custom-control-indicator { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); +} + +.custom-controls-stacked { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} + +.custom-controls-stacked .custom-control { + margin-bottom: 0.25rem; +} + +.custom-controls-stacked .custom-control + .custom-control { + margin-left: 0; +} + +.custom-select { + display: inline-block; + max-width: 100%; + height: calc(2.25rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + line-height: 1.25; + color: #464a4c; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; + -webkit-background-size: 8px 10px; + background-size: 8px 10px; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; + -moz-appearance: none; + -webkit-appearance: none; +} + +.custom-select:focus { + border-color: #5cb3fd; + outline: none; +} + +.custom-select:focus::-ms-value { + color: #464a4c; + background-color: #fff; +} + +.custom-select:disabled { + color: #636c72; + cursor: not-allowed; + background-color: #eceeef; +} + +.custom-select::-ms-expand { + opacity: 0; +} + +.custom-select-sm { + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 75%; +} + +.custom-file { + position: relative; + display: inline-block; + max-width: 100%; + height: 2.5rem; + margin-bottom: 0; + cursor: pointer; +} + +.custom-file-input { + min-width: 14rem; + max-width: 100%; + height: 2.5rem; + margin: 0; + filter: alpha(opacity=0); + opacity: 0; +} + +.custom-file-control { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 5; + height: 2.5rem; + padding: 0.5rem 1rem; + line-height: 1.5; + color: #464a4c; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.custom-file-control:lang(en)::after { + content: "Choose file..."; +} + +.custom-file-control::before { + position: absolute; + top: -1px; + right: -1px; + bottom: -1px; + z-index: 6; + display: block; + height: 2.5rem; + padding: 0.5rem 1rem; + line-height: 1.5; + color: #464a4c; + background-color: #eceeef; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0 0.25rem 0.25rem 0; +} + +.custom-file-control:lang(en)::before { + content: "Browse"; +} + +.nav { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5em 1em; +} + +.nav-link:focus, .nav-link:hover { + text-decoration: none; +} + +.nav-link.disabled { + color: #636c72; + cursor: not-allowed; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs .nav-item { + margin-bottom: -1px; +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover { + border-color: #eceeef #eceeef #ddd; +} + +.nav-tabs .nav-link.disabled { + color: #636c72; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #464a4c; + background-color: #fff; + border-color: #ddd #ddd #fff; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.nav-pills .nav-link { + border-radius: 0.25rem; +} + +.nav-pills .nav-link.active, +.nav-pills .nav-item.show .nav-link { + color: #fff; + cursor: default; + background-color: #0275d8; +} + +.nav-fill .nav-item { + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; +} + +.nav-justified .nav-item { + -webkit-box-flex: 1; + -webkit-flex: 1 1 100%; + -ms-flex: 1 1 100%; + flex: 1 1 100%; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 0.5rem 1rem; +} + +.navbar-brand { + display: inline-block; + padding-top: .25rem; + padding-bottom: .25rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; +} + +.navbar-brand:focus, .navbar-brand:hover { + text-decoration: none; +} + +.navbar-nav { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} + +.navbar-text { + display: inline-block; + padding-top: .425rem; + padding-bottom: .425rem; +} + +.navbar-toggler { + -webkit-align-self: flex-start; + -ms-flex-item-align: start; + align-self: flex-start; + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.navbar-toggler:focus, .navbar-toggler:hover { + text-decoration: none; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + -webkit-background-size: 100% 100%; + background-size: 100% 100%; +} + +.navbar-toggler-left { + position: absolute; + left: 1rem; +} + +.navbar-toggler-right { + position: absolute; + right: 1rem; +} + +@media (max-width: 575px) { + .navbar-toggleable .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .navbar-toggleable > .container { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-toggleable { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-toggleable .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-toggleable > .container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable .navbar-collapse { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + width: 100%; + } + .navbar-toggleable .navbar-toggler { + display: none; + } +} + +@media (max-width: 767px) { + .navbar-toggleable-sm .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .navbar-toggleable-sm > .container { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-toggleable-sm { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-sm .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-toggleable-sm .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-toggleable-sm > .container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-sm .navbar-collapse { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + width: 100%; + } + .navbar-toggleable-sm .navbar-toggler { + display: none; + } +} + +@media (max-width: 991px) { + .navbar-toggleable-md .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .navbar-toggleable-md > .container { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-toggleable-md { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-md .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-toggleable-md .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-toggleable-md > .container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-md .navbar-collapse { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + width: 100%; + } + .navbar-toggleable-md .navbar-toggler { + display: none; + } +} + +@media (max-width: 1199px) { + .navbar-toggleable-lg .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .navbar-toggleable-lg > .container { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1200px) { + .navbar-toggleable-lg { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-lg .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-toggleable-lg .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-toggleable-lg > .container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-lg .navbar-collapse { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + width: 100%; + } + .navbar-toggleable-lg .navbar-toggler { + display: none; + } +} + +.navbar-toggleable-xl { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.navbar-toggleable-xl .navbar-nav .dropdown-menu { + position: static; + float: none; +} + +.navbar-toggleable-xl > .container { + padding-right: 0; + padding-left: 0; +} + +.navbar-toggleable-xl .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; +} + +.navbar-toggleable-xl .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; +} + +.navbar-toggleable-xl > .container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.navbar-toggleable-xl .navbar-collapse { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + width: 100%; +} + +.navbar-toggleable-xl .navbar-toggler { + display: none; +} + +.navbar-light .navbar-brand, +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover, +.navbar-light .navbar-toggler:focus, +.navbar-light .navbar-toggler:hover { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .open > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.open, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-toggler { + color: white; +} + +.navbar-inverse .navbar-brand:focus, .navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-toggler:focus, +.navbar-inverse .navbar-toggler:hover { + color: white; +} + +.navbar-inverse .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-inverse .navbar-nav .nav-link:focus, .navbar-inverse .navbar-nav .nav-link:hover { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-inverse .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-inverse .navbar-nav .open > .nav-link, +.navbar-inverse .navbar-nav .active > .nav-link, +.navbar-inverse .navbar-nav .nav-link.open, +.navbar-inverse .navbar-nav .nav-link.active { + color: white; +} + +.navbar-inverse .navbar-toggler { + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-inverse .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); +} + +.navbar-inverse .navbar-text { + color: rgba(255, 255, 255, 0.5); +} + +.card { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} + +.card-block { + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; +} + +.card-title { + margin-bottom: 0.75rem; +} + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card > .list-group:first-child .list-group-item:first-child { + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: #f7f7f9; + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: #f7f7f9; + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.card-primary { + background-color: #0275d8; + border-color: #0275d8; +} + +.card-primary .card-header, +.card-primary .card-footer { + background-color: transparent; +} + +.card-success { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.card-success .card-header, +.card-success .card-footer { + background-color: transparent; +} + +.card-info { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.card-info .card-header, +.card-info .card-footer { + background-color: transparent; +} + +.card-warning { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.card-warning .card-header, +.card-warning .card-footer { + background-color: transparent; +} + +.card-danger { + background-color: #d9534f; + border-color: #d9534f; +} + +.card-danger .card-header, +.card-danger .card-footer { + background-color: transparent; +} + +.card-outline-primary { + background-color: transparent; + border-color: #0275d8; +} + +.card-outline-secondary { + background-color: transparent; + border-color: #ccc; +} + +.card-outline-info { + background-color: transparent; + border-color: #5bc0de; +} + +.card-outline-success { + background-color: transparent; + border-color: #5cb85c; +} + +.card-outline-warning { + background-color: transparent; + border-color: #f0ad4e; +} + +.card-outline-danger { + background-color: transparent; + border-color: #d9534f; +} + +.card-inverse { + color: rgba(255, 255, 255, 0.65); +} + +.card-inverse .card-header, +.card-inverse .card-footer { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} + +.card-inverse .card-header, +.card-inverse .card-footer, +.card-inverse .card-title, +.card-inverse .card-blockquote { + color: #fff; +} + +.card-inverse .card-link, +.card-inverse .card-text, +.card-inverse .card-subtitle, +.card-inverse .card-blockquote .blockquote-footer { + color: rgba(255, 255, 255, 0.65); +} + +.card-inverse .card-link:focus, .card-inverse .card-link:hover { + color: #fff; +} + +.card-blockquote { + padding: 0; + margin-bottom: 0; + border-left: 0; +} + +.card-img { + border-radius: calc(0.25rem - 1px); +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img-top { + border-top-right-radius: calc(0.25rem - 1px); + border-top-left-radius: calc(0.25rem - 1px); +} + +.card-img-bottom { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +@media (min-width: 576px) { + .card-deck { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-deck .card { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -webkit-flex: 1 0 0%; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } + .card-deck .card:not(:first-child) { + margin-left: 15px; + } + .card-deck .card:not(:last-child) { + margin-right: 15px; + } +} + +@media (min-width: 576px) { + .card-group { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-group .card { + -webkit-box-flex: 1; + -webkit-flex: 1 0 0%; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + } + .card-group .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group .card:first-child { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } + .card-group .card:first-child .card-img-top { + border-top-right-radius: 0; + } + .card-group .card:first-child .card-img-bottom { + border-bottom-right-radius: 0; + } + .card-group .card:last-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + } + .card-group .card:last-child .card-img-top { + border-top-left-radius: 0; + } + .card-group .card:last-child .card-img-bottom { + border-bottom-left-radius: 0; + } + .card-group .card:not(:first-child):not(:last-child) { + border-radius: 0; + } + .card-group .card:not(:first-child):not(:last-child) .card-img-top, + .card-group .card:not(:first-child):not(:last-child) .card-img-bottom { + border-radius: 0; + } +} + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + } + .card-columns .card { + display: inline-block; + width: 100%; + margin-bottom: 0.75rem; + } +} + +.breadcrumb { + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #eceeef; + border-radius: 0.25rem; +} + +.breadcrumb::after { + display: block; + content: ""; + clear: both; +} + +.breadcrumb-item { + float: left; +} + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + padding-left: 0.5rem; + color: #636c72; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #636c72; +} + +.pagination { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; +} + +.page-item:first-child .page-link { + margin-left: 0; + border-bottom-left-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.page-item:last-child .page-link { + border-bottom-right-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.page-item.active .page-link { + z-index: 2; + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.page-item.disabled .page-link { + color: #636c72; + pointer-events: none; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #0275d8; + background-color: #fff; + border: 1px solid #ddd; +} + +.page-link:focus, .page-link:hover { + color: #014c8c; + text-decoration: none; + background-color: #eceeef; + border-color: #ddd; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; +} + +.pagination-lg .page-item:first-child .page-link { + border-bottom-left-radius: 0.3rem; + border-top-left-radius: 0.3rem; +} + +.pagination-lg .page-item:last-child .page-link { + border-bottom-right-radius: 0.3rem; + border-top-right-radius: 0.3rem; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; +} + +.pagination-sm .page-item:first-child .page-link { + border-bottom-left-radius: 0.2rem; + border-top-left-radius: 0.2rem; +} + +.pagination-sm .page-item:last-child .page-link { + border-bottom-right-radius: 0.2rem; + border-top-right-radius: 0.2rem; +} + +.badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; +} + +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +a.badge:focus, a.badge:hover { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; +} + +.badge-default { + background-color: #636c72; +} + +.badge-default[href]:focus, .badge-default[href]:hover { + background-color: #4b5257; +} + +.badge-primary { + background-color: #0275d8; +} + +.badge-primary[href]:focus, .badge-primary[href]:hover { + background-color: #025aa5; +} + +.badge-success { + background-color: #5cb85c; +} + +.badge-success[href]:focus, .badge-success[href]:hover { + background-color: #449d44; +} + +.badge-info { + background-color: #5bc0de; +} + +.badge-info[href]:focus, .badge-info[href]:hover { + background-color: #31b0d5; +} + +.badge-warning { + background-color: #f0ad4e; +} + +.badge-warning[href]:focus, .badge-warning[href]:hover { + background-color: #ec971f; +} + +.badge-danger { + background-color: #d9534f; +} + +.badge-danger[href]:focus, .badge-danger[href]:hover { + background-color: #c9302c; +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #eceeef; + border-radius: 0.3rem; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-hr { + border-top-color: #d0d5d8; +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.alert { + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: bold; +} + +.alert-dismissible .close { + position: relative; + top: -0.75rem; + right: -1.25rem; + padding: 0.75rem 1.25rem; + color: inherit; +} + +.alert-success { + background-color: #dff0d8; + border-color: #d0e9c6; + color: #3c763d; +} + +.alert-success hr { + border-top-color: #c1e2b3; +} + +.alert-success .alert-link { + color: #2b542c; +} + +.alert-info { + background-color: #d9edf7; + border-color: #bcdff1; + color: #31708f; +} + +.alert-info hr { + border-top-color: #a6d5ec; +} + +.alert-info .alert-link { + color: #245269; +} + +.alert-warning { + background-color: #fcf8e3; + border-color: #faf2cc; + color: #8a6d3b; +} + +.alert-warning hr { + border-top-color: #f7ecb5; +} + +.alert-warning .alert-link { + color: #66512c; +} + +.alert-danger { + background-color: #f2dede; + border-color: #ebcccc; + color: #a94442; +} + +.alert-danger hr { + border-top-color: #e4b9b9; +} + +.alert-danger .alert-link { + color: #843534; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + overflow: hidden; + font-size: 0.75rem; + line-height: 1rem; + text-align: center; + background-color: #eceeef; + border-radius: 0.25rem; +} + +.progress-bar { + height: 1rem; + color: #fff; + background-color: #0275d8; +} + +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 1rem 1rem; + background-size: 1rem 1rem; +} + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + -o-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; +} + +.media { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; +} + +.media-body { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0%; + -ms-flex: 1 1 0%; + flex: 1 1 0%; +} + +.list-group { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item-action { + width: 100%; + color: #464a4c; + text-align: inherit; +} + +.list-group-item-action .list-group-item-heading { + color: #292b2c; +} + +.list-group-item-action:focus, .list-group-item-action:hover { + color: #464a4c; + text-decoration: none; + background-color: #f7f7f9; +} + +.list-group-item-action:active { + color: #292b2c; + background-color: #eceeef; +} + +.list-group-item { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item:first-child { + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.list-group-item:focus, .list-group-item:hover { + text-decoration: none; +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #636c72; + cursor: not-allowed; + background-color: #fff; +} + +.list-group-item.disabled .list-group-item-heading, .list-group-item:disabled .list-group-item-heading { + color: inherit; +} + +.list-group-item.disabled .list-group-item-text, .list-group-item:disabled .list-group-item-text { + color: #636c72; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small { + color: inherit; +} + +.list-group-item.active .list-group-item-text { + color: #daeeff; +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0; +} + +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} + +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} + +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} + +a.list-group-item-success:focus, a.list-group-item-success:hover, +button.list-group-item-success:focus, +button.list-group-item-success:hover { + color: #3c763d; + background-color: #d0e9c6; +} + +a.list-group-item-success.active, +button.list-group-item-success.active { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} + +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} + +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} + +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} + +a.list-group-item-info:focus, a.list-group-item-info:hover, +button.list-group-item-info:focus, +button.list-group-item-info:hover { + color: #31708f; + background-color: #c4e3f3; +} + +a.list-group-item-info.active, +button.list-group-item-info.active { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} + +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} + +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} + +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} + +a.list-group-item-warning:focus, a.list-group-item-warning:hover, +button.list-group-item-warning:focus, +button.list-group-item-warning:hover { + color: #8a6d3b; + background-color: #faf2cc; +} + +a.list-group-item-warning.active, +button.list-group-item-warning.active { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} + +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} + +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} + +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} + +a.list-group-item-danger:focus, a.list-group-item-danger:hover, +button.list-group-item-danger:focus, +button.list-group-item-danger:hover { + color: #a94442; + background-color: #ebcccc; +} + +a.list-group-item-danger.active, +button.list-group-item-danger.active { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; +} + +.embed-responsive::before { + display: block; + content: ""; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9::before { + padding-top: 42.857143%; +} + +.embed-responsive-16by9::before { + padding-top: 56.25%; +} + +.embed-responsive-4by3::before { + padding-top: 75%; +} + +.embed-responsive-1by1::before { + padding-top: 100%; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} + +.close:focus, .close:hover { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .75; +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0; +} + +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform 0.3s ease-out; + transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out, -o-transform 0.3s ease-out; + -webkit-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} + +.modal.show .modal-dialog { + -webkit-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +.modal-content { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 15px; + border-bottom: 1px solid #eceeef; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 15px; +} + +.modal-footer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 15px; + border-top: 1px solid #eceeef; +} + +.modal-footer > :not(:first-child) { + margin-left: .25rem; +} + +.modal-footer > :not(:last-child) { + margin-right: .25rem; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 30px auto; + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg { + max-width: 800px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip.tooltip-top, .tooltip.bs-tether-element-attached-bottom { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.tooltip-top .tooltip-inner::before, .tooltip.bs-tether-element-attached-bottom .tooltip-inner::before { + bottom: 0; + left: 50%; + margin-left: -5px; + content: ""; + border-width: 5px 5px 0; + border-top-color: #000; +} + +.tooltip.tooltip-right, .tooltip.bs-tether-element-attached-left { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.tooltip-right .tooltip-inner::before, .tooltip.bs-tether-element-attached-left .tooltip-inner::before { + top: 50%; + left: 0; + margin-top: -5px; + content: ""; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} + +.tooltip.tooltip-bottom, .tooltip.bs-tether-element-attached-top { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.tooltip-bottom .tooltip-inner::before, .tooltip.bs-tether-element-attached-top .tooltip-inner::before { + top: 0; + left: 50%; + margin-left: -5px; + content: ""; + border-width: 0 5px 5px; + border-bottom-color: #000; +} + +.tooltip.tooltip-left, .tooltip.bs-tether-element-attached-right { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip.tooltip-left .tooltip-inner::before, .tooltip.bs-tether-element-attached-right .tooltip-inner::before { + top: 50%; + right: 0; + margin-top: -5px; + content: ""; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.tooltip-inner::before { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + padding: 1px; + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} + +.popover.popover-top, .popover.bs-tether-element-attached-bottom { + margin-top: -10px; +} + +.popover.popover-top::before, .popover.popover-top::after, .popover.bs-tether-element-attached-bottom::before, .popover.bs-tether-element-attached-bottom::after { + left: 50%; + border-bottom-width: 0; +} + +.popover.popover-top::before, .popover.bs-tether-element-attached-bottom::before { + bottom: -11px; + margin-left: -11px; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-top::after, .popover.bs-tether-element-attached-bottom::after { + bottom: -10px; + margin-left: -10px; + border-top-color: #fff; +} + +.popover.popover-right, .popover.bs-tether-element-attached-left { + margin-left: 10px; +} + +.popover.popover-right::before, .popover.popover-right::after, .popover.bs-tether-element-attached-left::before, .popover.bs-tether-element-attached-left::after { + top: 50%; + border-left-width: 0; +} + +.popover.popover-right::before, .popover.bs-tether-element-attached-left::before { + left: -11px; + margin-top: -11px; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-right::after, .popover.bs-tether-element-attached-left::after { + left: -10px; + margin-top: -10px; + border-right-color: #fff; +} + +.popover.popover-bottom, .popover.bs-tether-element-attached-top { + margin-top: 10px; +} + +.popover.popover-bottom::before, .popover.popover-bottom::after, .popover.bs-tether-element-attached-top::before, .popover.bs-tether-element-attached-top::after { + left: 50%; + border-top-width: 0; +} + +.popover.popover-bottom::before, .popover.bs-tether-element-attached-top::before { + top: -11px; + margin-left: -11px; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-bottom::after, .popover.bs-tether-element-attached-top::after { + top: -10px; + margin-left: -10px; + border-bottom-color: #f7f7f7; +} + +.popover.popover-bottom .popover-title::before, .popover.bs-tether-element-attached-top .popover-title::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 20px; + margin-left: -10px; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.popover.popover-left, .popover.bs-tether-element-attached-right { + margin-left: -10px; +} + +.popover.popover-left::before, .popover.popover-left::after, .popover.bs-tether-element-attached-right::before, .popover.bs-tether-element-attached-right::after { + top: 50%; + border-right-width: 0; +} + +.popover.popover-left::before, .popover.bs-tether-element-attached-right::before { + right: -11px; + margin-top: -11px; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-left::after, .popover.bs-tether-element-attached-right::after { + right: -10px; + margin-top: -10px; + border-left-color: #fff; +} + +.popover-title { + padding: 8px 14px; + margin-bottom: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-right-radius: calc(0.3rem - 1px); + border-top-left-radius: calc(0.3rem - 1px); +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover::before, +.popover::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover::before { + content: ""; + border-width: 11px; +} + +.popover::after { + content: ""; + border-width: 10px; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-item { + position: relative; + display: none; + width: 100%; +} + +@media (-webkit-transform-3d) { + .carousel-item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + transition: -webkit-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } +} + +@supports ((-webkit-transform: translate3d(0, 0, 0)) or (transform: translate3d(0, 0, 0))) { + .carousel-item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + transition: -webkit-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.carousel-item-next, +.carousel-item-prev { + position: absolute; + top: 0; +} + +@media (-webkit-transform-3d) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@supports ((-webkit-transform: translate3d(0, 0, 0)) or (transform: translate3d(0, 0, 0))) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; +} + +.carousel-control-prev:focus, .carousel-control-prev:hover, +.carousel-control-next:focus, +.carousel-control-next:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + -webkit-background-size: 100% 100%; + background-size: 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M4 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M1.5 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + position: relative; + -webkit-box-flex: 1; + -webkit-flex: 1 0 auto; + -ms-flex: 1 0 auto; + flex: 1 0 auto; + max-width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: rgba(255, 255, 255, 0.5); +} + +.carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-faded { + background-color: #f7f7f7; +} + +.bg-primary { + background-color: #0275d8 !important; +} + +a.bg-primary:focus, a.bg-primary:hover { + background-color: #025aa5 !important; +} + +.bg-success { + background-color: #5cb85c !important; +} + +a.bg-success:focus, a.bg-success:hover { + background-color: #449d44 !important; +} + +.bg-info { + background-color: #5bc0de !important; +} + +a.bg-info:focus, a.bg-info:hover { + background-color: #31b0d5 !important; +} + +.bg-warning { + background-color: #f0ad4e !important; +} + +a.bg-warning:focus, a.bg-warning:hover { + background-color: #ec971f !important; +} + +.bg-danger { + background-color: #d9534f !important; +} + +a.bg-danger:focus, a.bg-danger:hover { + background-color: #c9302c !important; +} + +.bg-inverse { + background-color: #292b2c !important; +} + +a.bg-inverse:focus, a.bg-inverse:hover { + background-color: #101112 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-right-0 { + border-right: 0 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-left-0 { + border-left: 0 !important; +} + +.rounded { + border-radius: 0.25rem; +} + +.rounded-top { + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.rounded-right { + border-bottom-right-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.rounded-left { + border-bottom-left-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.rounded-circle { + border-radius: 50%; +} + +.rounded-0 { + border-radius: 0; +} + +.clearfix::after { + display: block; + content: ""; + clear: both; +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; +} + +.d-inline-flex { + display: -webkit-inline-box !important; + display: -webkit-inline-flex !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -webkit-inline-box !important; + display: -webkit-inline-flex !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -webkit-inline-box !important; + display: -webkit-inline-flex !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -webkit-inline-box !important; + display: -webkit-inline-flex !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -webkit-inline-box !important; + display: -webkit-inline-flex !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +.flex-first { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; +} + +.flex-last { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; +} + +.flex-unordered { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; +} + +.flex-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + -ms-flex-direction: row !important; + flex-direction: row !important; +} + +.flex-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: column !important; + -ms-flex-direction: column !important; + flex-direction: column !important; +} + +.flex-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: row-reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: column-reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} + +.flex-wrap { + -webkit-flex-wrap: wrap !important; + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} + +.flex-nowrap { + -webkit-flex-wrap: nowrap !important; + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + -webkit-flex-wrap: wrap-reverse !important; + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + -webkit-box-pack: start !important; + -webkit-justify-content: flex-start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} + +.justify-content-end { + -webkit-box-pack: end !important; + -webkit-justify-content: flex-end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} + +.justify-content-center { + -webkit-box-pack: center !important; + -webkit-justify-content: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; +} + +.justify-content-between { + -webkit-box-pack: justify !important; + -webkit-justify-content: space-between !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} + +.justify-content-around { + -webkit-justify-content: space-around !important; + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} + +.align-items-start { + -webkit-box-align: start !important; + -webkit-align-items: flex-start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; +} + +.align-items-end { + -webkit-box-align: end !important; + -webkit-align-items: flex-end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; +} + +.align-items-center { + -webkit-box-align: center !important; + -webkit-align-items: center !important; + -ms-flex-align: center !important; + align-items: center !important; +} + +.align-items-baseline { + -webkit-box-align: baseline !important; + -webkit-align-items: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; +} + +.align-items-stretch { + -webkit-box-align: stretch !important; + -webkit-align-items: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; +} + +.align-content-start { + -webkit-align-content: flex-start !important; + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} + +.align-content-end { + -webkit-align-content: flex-end !important; + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} + +.align-content-center { + -webkit-align-content: center !important; + -ms-flex-line-pack: center !important; + align-content: center !important; +} + +.align-content-between { + -webkit-align-content: space-between !important; + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} + +.align-content-around { + -webkit-align-content: space-around !important; + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} + +.align-content-stretch { + -webkit-align-content: stretch !important; + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} + +.align-self-auto { + -webkit-align-self: auto !important; + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; +} + +.align-self-start { + -webkit-align-self: flex-start !important; + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} + +.align-self-end { + -webkit-align-self: flex-end !important; + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} + +.align-self-center { + -webkit-align-self: center !important; + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; +} + +.align-self-baseline { + -webkit-align-self: baseline !important; + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} + +.align-self-stretch { + -webkit-align-self: stretch !important; + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-first { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; + } + .flex-sm-last { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + } + .flex-sm-unordered { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; + } + .flex-sm-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: column !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: row-reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: column-reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -webkit-flex-wrap: wrap !important; + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -webkit-flex-wrap: nowrap !important; + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -webkit-flex-wrap: wrap-reverse !important; + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .justify-content-sm-start { + -webkit-box-pack: start !important; + -webkit-justify-content: flex-start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -webkit-box-pack: end !important; + -webkit-justify-content: flex-end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -webkit-box-pack: center !important; + -webkit-justify-content: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -webkit-box-pack: justify !important; + -webkit-justify-content: space-between !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -webkit-justify-content: space-around !important; + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -webkit-box-align: start !important; + -webkit-align-items: flex-start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -webkit-box-align: end !important; + -webkit-align-items: flex-end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -webkit-box-align: center !important; + -webkit-align-items: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -webkit-box-align: baseline !important; + -webkit-align-items: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -webkit-box-align: stretch !important; + -webkit-align-items: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -webkit-align-content: flex-start !important; + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -webkit-align-content: flex-end !important; + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -webkit-align-content: center !important; + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -webkit-align-content: space-between !important; + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -webkit-align-content: space-around !important; + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -webkit-align-content: stretch !important; + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -webkit-align-self: auto !important; + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -webkit-align-self: flex-start !important; + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -webkit-align-self: flex-end !important; + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -webkit-align-self: center !important; + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -webkit-align-self: baseline !important; + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -webkit-align-self: stretch !important; + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-first { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; + } + .flex-md-last { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + } + .flex-md-unordered { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; + } + .flex-md-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: column !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: row-reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: column-reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -webkit-flex-wrap: wrap !important; + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -webkit-flex-wrap: nowrap !important; + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -webkit-flex-wrap: wrap-reverse !important; + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .justify-content-md-start { + -webkit-box-pack: start !important; + -webkit-justify-content: flex-start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -webkit-box-pack: end !important; + -webkit-justify-content: flex-end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -webkit-box-pack: center !important; + -webkit-justify-content: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -webkit-box-pack: justify !important; + -webkit-justify-content: space-between !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -webkit-justify-content: space-around !important; + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -webkit-box-align: start !important; + -webkit-align-items: flex-start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -webkit-box-align: end !important; + -webkit-align-items: flex-end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -webkit-box-align: center !important; + -webkit-align-items: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -webkit-box-align: baseline !important; + -webkit-align-items: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -webkit-box-align: stretch !important; + -webkit-align-items: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -webkit-align-content: flex-start !important; + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -webkit-align-content: flex-end !important; + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -webkit-align-content: center !important; + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -webkit-align-content: space-between !important; + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -webkit-align-content: space-around !important; + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -webkit-align-content: stretch !important; + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -webkit-align-self: auto !important; + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -webkit-align-self: flex-start !important; + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -webkit-align-self: flex-end !important; + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -webkit-align-self: center !important; + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -webkit-align-self: baseline !important; + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -webkit-align-self: stretch !important; + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-first { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; + } + .flex-lg-last { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + } + .flex-lg-unordered { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; + } + .flex-lg-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: column !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: row-reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: column-reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -webkit-flex-wrap: wrap !important; + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -webkit-flex-wrap: nowrap !important; + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -webkit-flex-wrap: wrap-reverse !important; + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .justify-content-lg-start { + -webkit-box-pack: start !important; + -webkit-justify-content: flex-start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -webkit-box-pack: end !important; + -webkit-justify-content: flex-end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -webkit-box-pack: center !important; + -webkit-justify-content: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -webkit-box-pack: justify !important; + -webkit-justify-content: space-between !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -webkit-justify-content: space-around !important; + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -webkit-box-align: start !important; + -webkit-align-items: flex-start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -webkit-box-align: end !important; + -webkit-align-items: flex-end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -webkit-box-align: center !important; + -webkit-align-items: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -webkit-box-align: baseline !important; + -webkit-align-items: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -webkit-box-align: stretch !important; + -webkit-align-items: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -webkit-align-content: flex-start !important; + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -webkit-align-content: flex-end !important; + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -webkit-align-content: center !important; + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -webkit-align-content: space-between !important; + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -webkit-align-content: space-around !important; + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -webkit-align-content: stretch !important; + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -webkit-align-self: auto !important; + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -webkit-align-self: flex-start !important; + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -webkit-align-self: flex-end !important; + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -webkit-align-self: center !important; + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -webkit-align-self: baseline !important; + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -webkit-align-self: stretch !important; + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-first { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; + } + .flex-xl-last { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + } + .flex-xl-unordered { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; + } + .flex-xl-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: column !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: row-reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: column-reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -webkit-flex-wrap: wrap !important; + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -webkit-flex-wrap: nowrap !important; + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -webkit-flex-wrap: wrap-reverse !important; + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .justify-content-xl-start { + -webkit-box-pack: start !important; + -webkit-justify-content: flex-start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -webkit-box-pack: end !important; + -webkit-justify-content: flex-end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -webkit-box-pack: center !important; + -webkit-justify-content: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -webkit-box-pack: justify !important; + -webkit-justify-content: space-between !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -webkit-justify-content: space-around !important; + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -webkit-box-align: start !important; + -webkit-align-items: flex-start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -webkit-box-align: end !important; + -webkit-align-items: flex-end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -webkit-box-align: center !important; + -webkit-align-items: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -webkit-box-align: baseline !important; + -webkit-align-items: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -webkit-box-align: stretch !important; + -webkit-align-items: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -webkit-align-content: flex-start !important; + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -webkit-align-content: flex-end !important; + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -webkit-align-content: center !important; + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -webkit-align-content: space-between !important; + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -webkit-align-content: space-around !important; + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -webkit-align-content: stretch !important; + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -webkit-align-self: auto !important; + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -webkit-align-self: flex-start !important; + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -webkit-align-self: flex-end !important; + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -webkit-align-self: center !important; + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -webkit-align-self: baseline !important; + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -webkit-align-self: stretch !important; + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.float-none { + float: none !important; +} + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } +} + +@media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } +} + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } +} + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1030; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.m-0 { + margin: 0 0 !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mr-0 { + margin-right: 0 !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.ml-0 { + margin-left: 0 !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.m-1 { + margin: 0.25rem 0.25rem !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mr-1 { + margin-right: 0.25rem !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.ml-1 { + margin-left: 0.25rem !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem 0.5rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mr-2 { + margin-right: 0.5rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.ml-2 { + margin-left: 0.5rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.m-3 { + margin: 1rem 1rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mr-3 { + margin-right: 1rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.ml-3 { + margin-left: 1rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.m-4 { + margin: 1.5rem 1.5rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mr-4 { + margin-right: 1.5rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.ml-4 { + margin-left: 1.5rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.m-5 { + margin: 3rem 3rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mr-5 { + margin-right: 3rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.ml-5 { + margin-left: 3rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.p-0 { + padding: 0 0 !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pr-0 { + padding-right: 0 !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pl-0 { + padding-left: 0 !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.p-1 { + padding: 0.25rem 0.25rem !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pr-1 { + padding-right: 0.25rem !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pl-1 { + padding-left: 0.25rem !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem 0.5rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pr-2 { + padding-right: 0.5rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pl-2 { + padding-left: 0.5rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.p-3 { + padding: 1rem 1rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pr-3 { + padding-right: 1rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pl-3 { + padding-left: 1rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.p-4 { + padding: 1.5rem 1.5rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pr-4 { + padding-right: 1.5rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pl-4 { + padding-left: 1.5rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.p-5 { + padding: 3rem 3rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pr-5 { + padding-right: 3rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.pl-5 { + padding-left: 3rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.mr-auto { + margin-right: auto !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ml-auto { + margin-left: auto !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 0 !important; + } + .mt-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0 { + margin-left: 0 !important; + } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .m-sm-1 { + margin: 0.25rem 0.25rem !important; + } + .mt-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1 { + margin-left: 0.25rem !important; + } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem 0.5rem !important; + } + .mt-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2 { + margin-left: 0.5rem !important; + } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem 1rem !important; + } + .mt-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3 { + margin-left: 1rem !important; + } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem 1.5rem !important; + } + .mt-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4 { + margin-left: 1.5rem !important; + } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem 3rem !important; + } + .mt-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5 { + margin-left: 3rem !important; + } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .p-sm-0 { + padding: 0 0 !important; + } + .pt-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0 { + padding-left: 0 !important; + } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .p-sm-1 { + padding: 0.25rem 0.25rem !important; + } + .pt-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1 { + padding-left: 0.25rem !important; + } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem 0.5rem !important; + } + .pt-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2 { + padding-left: 0.5rem !important; + } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem 1rem !important; + } + .pt-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3 { + padding-left: 1rem !important; + } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem 1.5rem !important; + } + .pt-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4 { + padding-left: 1.5rem !important; + } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem 3rem !important; + } + .pt-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5 { + padding-left: 3rem !important; + } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto { + margin-left: auto !important; + } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 0 !important; + } + .mt-md-0 { + margin-top: 0 !important; + } + .mr-md-0 { + margin-right: 0 !important; + } + .mb-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0 { + margin-left: 0 !important; + } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .m-md-1 { + margin: 0.25rem 0.25rem !important; + } + .mt-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1 { + margin-left: 0.25rem !important; + } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem 0.5rem !important; + } + .mt-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2 { + margin-left: 0.5rem !important; + } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .m-md-3 { + margin: 1rem 1rem !important; + } + .mt-md-3 { + margin-top: 1rem !important; + } + .mr-md-3 { + margin-right: 1rem !important; + } + .mb-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3 { + margin-left: 1rem !important; + } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .m-md-4 { + margin: 1.5rem 1.5rem !important; + } + .mt-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4 { + margin-left: 1.5rem !important; + } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .m-md-5 { + margin: 3rem 3rem !important; + } + .mt-md-5 { + margin-top: 3rem !important; + } + .mr-md-5 { + margin-right: 3rem !important; + } + .mb-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5 { + margin-left: 3rem !important; + } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .p-md-0 { + padding: 0 0 !important; + } + .pt-md-0 { + padding-top: 0 !important; + } + .pr-md-0 { + padding-right: 0 !important; + } + .pb-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0 { + padding-left: 0 !important; + } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .p-md-1 { + padding: 0.25rem 0.25rem !important; + } + .pt-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1 { + padding-left: 0.25rem !important; + } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem 0.5rem !important; + } + .pt-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2 { + padding-left: 0.5rem !important; + } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .p-md-3 { + padding: 1rem 1rem !important; + } + .pt-md-3 { + padding-top: 1rem !important; + } + .pr-md-3 { + padding-right: 1rem !important; + } + .pb-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3 { + padding-left: 1rem !important; + } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .p-md-4 { + padding: 1.5rem 1.5rem !important; + } + .pt-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4 { + padding-left: 1.5rem !important; + } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .p-md-5 { + padding: 3rem 3rem !important; + } + .pt-md-5 { + padding-top: 3rem !important; + } + .pr-md-5 { + padding-right: 3rem !important; + } + .pb-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5 { + padding-left: 3rem !important; + } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto { + margin-top: auto !important; + } + .mr-md-auto { + margin-right: auto !important; + } + .mb-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto { + margin-left: auto !important; + } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 0 !important; + } + .mt-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0 { + margin-left: 0 !important; + } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .m-lg-1 { + margin: 0.25rem 0.25rem !important; + } + .mt-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1 { + margin-left: 0.25rem !important; + } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem 0.5rem !important; + } + .mt-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2 { + margin-left: 0.5rem !important; + } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem 1rem !important; + } + .mt-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3 { + margin-left: 1rem !important; + } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem 1.5rem !important; + } + .mt-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4 { + margin-left: 1.5rem !important; + } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem 3rem !important; + } + .mt-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5 { + margin-left: 3rem !important; + } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .p-lg-0 { + padding: 0 0 !important; + } + .pt-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0 { + padding-left: 0 !important; + } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .p-lg-1 { + padding: 0.25rem 0.25rem !important; + } + .pt-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1 { + padding-left: 0.25rem !important; + } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem 0.5rem !important; + } + .pt-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2 { + padding-left: 0.5rem !important; + } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem 1rem !important; + } + .pt-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3 { + padding-left: 1rem !important; + } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem 1.5rem !important; + } + .pt-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4 { + padding-left: 1.5rem !important; + } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem 3rem !important; + } + .pt-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5 { + padding-left: 3rem !important; + } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto { + margin-left: auto !important; + } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 0 !important; + } + .mt-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0 { + margin-left: 0 !important; + } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .m-xl-1 { + margin: 0.25rem 0.25rem !important; + } + .mt-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1 { + margin-left: 0.25rem !important; + } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem 0.5rem !important; + } + .mt-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2 { + margin-left: 0.5rem !important; + } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem 1rem !important; + } + .mt-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3 { + margin-left: 1rem !important; + } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem 1.5rem !important; + } + .mt-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4 { + margin-left: 1.5rem !important; + } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem 3rem !important; + } + .mt-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5 { + margin-left: 3rem !important; + } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .p-xl-0 { + padding: 0 0 !important; + } + .pt-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0 { + padding-left: 0 !important; + } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .p-xl-1 { + padding: 0.25rem 0.25rem !important; + } + .pt-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1 { + padding-left: 0.25rem !important; + } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem 0.5rem !important; + } + .pt-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2 { + padding-left: 0.5rem !important; + } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem 1rem !important; + } + .pt-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3 { + padding-left: 1rem !important; + } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem 1.5rem !important; + } + .pt-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4 { + padding-left: 1.5rem !important; + } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem 3rem !important; + } + .pt-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5 { + padding-left: 3rem !important; + } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto { + margin-left: auto !important; + } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } +} + +.text-justify { + text-align: justify !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-normal { + font-weight: normal; +} + +.font-weight-bold { + font-weight: bold; +} + +.font-italic { + font-style: italic; +} + +.text-white { + color: #fff !important; +} + +.text-muted { + color: #636c72 !important; +} + +a.text-muted:focus, a.text-muted:hover { + color: #4b5257 !important; +} + +.text-primary { + color: #0275d8 !important; +} + +a.text-primary:focus, a.text-primary:hover { + color: #025aa5 !important; +} + +.text-success { + color: #5cb85c !important; +} + +a.text-success:focus, a.text-success:hover { + color: #449d44 !important; +} + +.text-info { + color: #5bc0de !important; +} + +a.text-info:focus, a.text-info:hover { + color: #31b0d5 !important; +} + +.text-warning { + color: #f0ad4e !important; +} + +a.text-warning:focus, a.text-warning:hover { + color: #ec971f !important; +} + +.text-danger { + color: #d9534f !important; +} + +a.text-danger:focus, a.text-danger:hover { + color: #c9302c !important; +} + +.text-gray-dark { + color: #292b2c !important; +} + +a.text-gray-dark:focus, a.text-gray-dark:hover { + color: #101112 !important; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.invisible { + visibility: hidden !important; +} + +.hidden-xs-up { + display: none !important; +} + +@media (max-width: 575px) { + .hidden-xs-down { + display: none !important; + } +} + +@media (min-width: 576px) { + .hidden-sm-up { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-sm-down { + display: none !important; + } +} + +@media (min-width: 768px) { + .hidden-md-up { + display: none !important; + } +} + +@media (max-width: 991px) { + .hidden-md-down { + display: none !important; + } +} + +@media (min-width: 992px) { + .hidden-lg-up { + display: none !important; + } +} + +@media (max-width: 1199px) { + .hidden-lg-down { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-xl-up { + display: none !important; + } +} + +.hidden-xl-down { + display: none !important; +} + +.visible-print-block { + display: none !important; +} + +@media print { + .visible-print-block { + display: block !important; + } +} + +.visible-print-inline { + display: none !important; +} + +@media print { + .visible-print-inline { + display: inline !important; + } +} + +.visible-print-inline-block { + display: none !important; +} + +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} + +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/resources/static/css/bootstrap.min.css b/resources/static/css/bootstrap.min.css new file mode 100644 index 0000000..a8da074 --- /dev/null +++ b/resources/static/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}@media print{*,::after,::before,blockquote::first-letter,blockquote::first-line,div::first-letter,div::first-line,li::first-letter,li::first-line,p::first-letter,p::first-line{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}@-ms-viewport{width:device-width}html{-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#292b2c;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{cursor:help}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}a{color:#0275d8;text-decoration:none}a:focus,a:hover{color:#014c8c;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle}[role=button]{cursor:pointer}[role=button],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#636c72;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,select,textarea{line-height:inherit}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}input[type=search]{-webkit-appearance:none}output{display:inline-block}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.1}.display-2{font-size:5.5rem;font-weight:300;line-height:1.1}.display-3{font-size:4.5rem;font-weight:300;line-height:1.1}.display-4{font-size:3.5rem;font-weight:300;line-height:1.1}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:5px}.initialism{font-size:90%;text-transform:uppercase}.blockquote{padding:.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:.25rem solid #eceeef}.blockquote-footer{display:block;font-size:80%;color:#636c72}.blockquote-footer::before{content:"\2014 \00A0"}.blockquote-reverse{padding-right:1rem;padding-left:0;text-align:right;border-right:.25rem solid #eceeef;border-left:0}.blockquote-reverse .blockquote-footer::before{content:""}.blockquote-reverse .blockquote-footer::after{content:"\00A0 \2014"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #ddd;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#636c72}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{padding:.2rem .4rem;font-size:90%;color:#bd4147;background-color:#f7f7f9;border-radius:.25rem}a>code{padding:0;color:inherit;background-color:inherit}kbd{padding:.2rem .4rem;font-size:90%;color:#fff;background-color:#292b2c;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;margin-top:0;margin-bottom:1rem;font-size:90%;color:#292b2c}pre code{padding:0;font-size:inherit;color:inherit;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{position:relative;margin-left:auto;margin-right:auto;padding-right:15px;padding-left:15px}@media (min-width:576px){.container{padding-right:15px;padding-left:15px}}@media (min-width:768px){.container{padding-right:15px;padding-left:15px}}@media (min-width:992px){.container{padding-right:15px;padding-left:15px}}@media (min-width:1200px){.container{padding-right:15px;padding-left:15px}}@media (min-width:576px){.container{width:540px;max-width:100%}}@media (min-width:768px){.container{width:720px;max-width:100%}}@media (min-width:992px){.container{width:960px;max-width:100%}}@media (min-width:1200px){.container{width:1140px;max-width:100%}}.container-fluid{position:relative;margin-left:auto;margin-right:auto;padding-right:15px;padding-left:15px}@media (min-width:576px){.container-fluid{padding-right:15px;padding-left:15px}}@media (min-width:768px){.container-fluid{padding-right:15px;padding-left:15px}}@media (min-width:992px){.container-fluid{padding-right:15px;padding-left:15px}}@media (min-width:1200px){.container-fluid{padding-right:15px;padding-left:15px}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}@media (min-width:576px){.row{margin-right:-15px;margin-left:-15px}}@media (min-width:768px){.row{margin-right:-15px;margin-left:-15px}}@media (min-width:992px){.row{margin-right:-15px;margin-left:-15px}}@media (min-width:1200px){.row{margin-right:-15px;margin-left:-15px}}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width:576px){.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{padding-right:15px;padding-left:15px}}@media (min-width:768px){.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{padding-right:15px;padding-left:15px}}@media (min-width:992px){.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{padding-right:15px;padding-left:15px}}@media (min-width:1200px){.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{padding-right:15px;padding-left:15px}}.col{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-1{-webkit-box-flex:0;-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.pull-0{right:auto}.pull-1{right:8.333333%}.pull-2{right:16.666667%}.pull-3{right:25%}.pull-4{right:33.333333%}.pull-5{right:41.666667%}.pull-6{right:50%}.pull-7{right:58.333333%}.pull-8{right:66.666667%}.pull-9{right:75%}.pull-10{right:83.333333%}.pull-11{right:91.666667%}.pull-12{right:100%}.push-0{left:auto}.push-1{left:8.333333%}.push-2{left:16.666667%}.push-3{left:25%}.push-4{left:33.333333%}.push-5{left:41.666667%}.push-6{left:50%}.push-7{left:58.333333%}.push-8{left:66.666667%}.push-9{left:75%}.push-10{left:83.333333%}.push-11{left:91.666667%}.push-12{left:100%}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-sm-1{-webkit-box-flex:0;-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.pull-sm-0{right:auto}.pull-sm-1{right:8.333333%}.pull-sm-2{right:16.666667%}.pull-sm-3{right:25%}.pull-sm-4{right:33.333333%}.pull-sm-5{right:41.666667%}.pull-sm-6{right:50%}.pull-sm-7{right:58.333333%}.pull-sm-8{right:66.666667%}.pull-sm-9{right:75%}.pull-sm-10{right:83.333333%}.pull-sm-11{right:91.666667%}.pull-sm-12{right:100%}.push-sm-0{left:auto}.push-sm-1{left:8.333333%}.push-sm-2{left:16.666667%}.push-sm-3{left:25%}.push-sm-4{left:33.333333%}.push-sm-5{left:41.666667%}.push-sm-6{left:50%}.push-sm-7{left:58.333333%}.push-sm-8{left:66.666667%}.push-sm-9{left:75%}.push-sm-10{left:83.333333%}.push-sm-11{left:91.666667%}.push-sm-12{left:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-md-1{-webkit-box-flex:0;-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.pull-md-0{right:auto}.pull-md-1{right:8.333333%}.pull-md-2{right:16.666667%}.pull-md-3{right:25%}.pull-md-4{right:33.333333%}.pull-md-5{right:41.666667%}.pull-md-6{right:50%}.pull-md-7{right:58.333333%}.pull-md-8{right:66.666667%}.pull-md-9{right:75%}.pull-md-10{right:83.333333%}.pull-md-11{right:91.666667%}.pull-md-12{right:100%}.push-md-0{left:auto}.push-md-1{left:8.333333%}.push-md-2{left:16.666667%}.push-md-3{left:25%}.push-md-4{left:33.333333%}.push-md-5{left:41.666667%}.push-md-6{left:50%}.push-md-7{left:58.333333%}.push-md-8{left:66.666667%}.push-md-9{left:75%}.push-md-10{left:83.333333%}.push-md-11{left:91.666667%}.push-md-12{left:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-lg-1{-webkit-box-flex:0;-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.pull-lg-0{right:auto}.pull-lg-1{right:8.333333%}.pull-lg-2{right:16.666667%}.pull-lg-3{right:25%}.pull-lg-4{right:33.333333%}.pull-lg-5{right:41.666667%}.pull-lg-6{right:50%}.pull-lg-7{right:58.333333%}.pull-lg-8{right:66.666667%}.pull-lg-9{right:75%}.pull-lg-10{right:83.333333%}.pull-lg-11{right:91.666667%}.pull-lg-12{right:100%}.push-lg-0{left:auto}.push-lg-1{left:8.333333%}.push-lg-2{left:16.666667%}.push-lg-3{left:25%}.push-lg-4{left:33.333333%}.push-lg-5{left:41.666667%}.push-lg-6{left:50%}.push-lg-7{left:58.333333%}.push-lg-8{left:66.666667%}.push-lg-9{left:75%}.push-lg-10{left:83.333333%}.push-lg-11{left:91.666667%}.push-lg-12{left:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-xl-1{-webkit-box-flex:0;-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.pull-xl-0{right:auto}.pull-xl-1{right:8.333333%}.pull-xl-2{right:16.666667%}.pull-xl-3{right:25%}.pull-xl-4{right:33.333333%}.pull-xl-5{right:41.666667%}.pull-xl-6{right:50%}.pull-xl-7{right:58.333333%}.pull-xl-8{right:66.666667%}.pull-xl-9{right:75%}.pull-xl-10{right:83.333333%}.pull-xl-11{right:91.666667%}.pull-xl-12{right:100%}.push-xl-0{left:auto}.push-xl-1{left:8.333333%}.push-xl-2{left:16.666667%}.push-xl-3{left:25%}.push-xl-4{left:33.333333%}.push-xl-5{left:41.666667%}.push-xl-6{left:50%}.push-xl-7{left:58.333333%}.push-xl-8{left:66.666667%}.push-xl-9{left:75%}.push-xl-10{left:83.333333%}.push-xl-11{left:91.666667%}.push-xl-12{left:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #eceeef}.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.table tbody+tbody{border-top:2px solid #eceeef}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #eceeef}.table-bordered td,.table-bordered th{border:1px solid #eceeef}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table-success,.table-success>td,.table-success>th{background-color:#dff0d8}.table-hover .table-success:hover{background-color:#d0e9c6}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#d0e9c6}.table-info,.table-info>td,.table-info>th{background-color:#d9edf7}.table-hover .table-info:hover{background-color:#c4e3f3}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c4e3f3}.table-warning,.table-warning>td,.table-warning>th{background-color:#fcf8e3}.table-hover .table-warning:hover{background-color:#faf2cc}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#faf2cc}.table-danger,.table-danger>td,.table-danger>th{background-color:#f2dede}.table-hover .table-danger:hover{background-color:#ebcccc}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ebcccc}.thead-inverse th{color:#fff;background-color:#292b2c}.thead-default th{color:#464a4c;background-color:#eceeef}.table-inverse{color:#fff;background-color:#292b2c}.table-inverse td,.table-inverse th,.table-inverse thead th{border-color:#fff}.table-inverse.table-bordered{border:0}.table-responsive{display:block;width:100%;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive.table-bordered{border:0}.form-control{display:block;width:100%;padding:.5rem .75rem;font-size:1rem;line-height:1.25;color:#464a4c;background-color:#fff;background-image:none;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#464a4c;background-color:#fff;border-color:#5cb3fd;outline:0}.form-control::-webkit-input-placeholder{color:#636c72;opacity:1}.form-control::-moz-placeholder{color:#636c72;opacity:1}.form-control:-ms-input-placeholder{color:#636c72;opacity:1}.form-control::placeholder{color:#636c72;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eceeef;opacity:1}.form-control:disabled{cursor:not-allowed}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#464a4c;background-color:#fff}.form-control-file,.form-control-range{display:block}.col-form-label{padding-top:calc(.5rem - 1px * 2);padding-bottom:calc(.5rem - 1px * 2);margin-bottom:0}.col-form-label-lg{padding-top:calc(.75rem - 1px * 2);padding-bottom:calc(.75rem - 1px * 2);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem - 1px * 2);padding-bottom:calc(.25rem - 1px * 2);font-size:.875rem}.col-form-legend{padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0;font-size:1rem}.form-control-static{padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0;line-height:1.25;border:solid transparent;border-width:1px 0}.form-control-static.form-control-lg,.form-control-static.form-control-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-sm>.input-group-btn>select.btn:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),.input-group-sm>select.input-group-addon:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:1.8125rem}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}.input-group-lg>.input-group-btn>select.btn:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),.input-group-lg>select.input-group-addon:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:3.166667rem}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-check{position:relative;display:block;margin-bottom:.5rem}.form-check.disabled .form-check-label{color:#636c72;cursor:not-allowed}.form-check-label{padding-left:1.25rem;margin-bottom:0;cursor:pointer}.form-check-input{position:absolute;margin-top:.25rem;margin-left:-1.25rem}.form-check-input:only-child{position:static}.form-check-inline{display:inline-block}.form-check-inline .form-check-label{vertical-align:middle}.form-check-inline+.form-check-inline{margin-left:.75rem}.form-control-feedback{margin-top:.25rem}.form-control-danger,.form-control-success,.form-control-warning{padding-right:2.25rem;background-repeat:no-repeat;background-position:center right .5625rem;-webkit-background-size:1.125rem 1.125rem;background-size:1.125rem 1.125rem}.has-success .col-form-label,.has-success .custom-control,.has-success .form-check-label,.has-success .form-control-feedback,.has-success .form-control-label{color:#5cb85c}.has-success .form-control{border-color:#5cb85c}.has-success .input-group-addon{color:#5cb85c;border-color:#5cb85c;background-color:#eaf6ea}.has-success .form-control-success{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%235cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E")}.has-warning .col-form-label,.has-warning .custom-control,.has-warning .form-check-label,.has-warning .form-control-feedback,.has-warning .form-control-label{color:#f0ad4e}.has-warning .form-control{border-color:#f0ad4e}.has-warning .input-group-addon{color:#f0ad4e;border-color:#f0ad4e;background-color:#fff}.has-warning .form-control-warning{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23f0ad4e' d='M4.4 5.324h-.8v-2.46h.8zm0 1.42h-.8V5.89h.8zM3.76.63L.04 7.075c-.115.2.016.425.26.426h7.397c.242 0 .372-.226.258-.426C6.726 4.924 5.47 2.79 4.253.63c-.113-.174-.39-.174-.494 0z'/%3E%3C/svg%3E")}.has-danger .col-form-label,.has-danger .custom-control,.has-danger .form-check-label,.has-danger .form-control-feedback,.has-danger .form-control-label{color:#d9534f}.has-danger .form-control{border-color:#d9534f}.has-danger .input-group-addon{color:#d9534f;border-color:#d9534f;background-color:#fdf7f7}.has-danger .form-control-danger{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23d9534f' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E")}.form-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-control-label{margin-bottom:0;vertical-align:middle}.form-inline .form-check{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:auto;margin-top:0;margin-bottom:0}.form-inline .form-check-label{padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-left:0}.form-inline .custom-control-indicator{position:static;display:inline-block;margin-right:.25rem;vertical-align:text-bottom}.form-inline .has-feedback .form-control-feedback{top:0}}.btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.25);box-shadow:0 0 0 2px rgba(2,117,216,.25)}.btn.disabled,.btn:disabled{cursor:not-allowed;opacity:.65}.btn.active,.btn:active{background-image:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary:hover{color:#fff;background-color:#025aa5;border-color:#01549b}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.btn-primary.disabled,.btn-primary:disabled{background-color:#0275d8;border-color:#0275d8}.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.btn-secondary{color:#292b2c;background-color:#fff;border-color:#ccc}.btn-secondary:hover{color:#292b2c;background-color:#e6e6e6;border-color:#adadad}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.btn-secondary.disabled,.btn-secondary:disabled{background-color:#fff;border-color:#ccc}.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#292b2c;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.btn-info.disabled,.btn-info:disabled{background-color:#5bc0de;border-color:#5bc0de}.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;background-image:none;border-color:#2aabd2}.btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#419641}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.btn-success.disabled,.btn-success:disabled{background-color:#5cb85c;border-color:#5cb85c}.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;background-image:none;border-color:#419641}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#eb9316}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.btn-warning.disabled,.btn-warning:disabled{background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;background-image:none;border-color:#eb9316}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#c12e2a}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.btn-danger.disabled,.btn-danger:disabled{background-color:#d9534f;border-color:#d9534f}.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;background-image:none;border-color:#c12e2a}.btn-outline-primary{color:#0275d8;background-image:none;background-color:transparent;border-color:#0275d8}.btn-outline-primary:hover{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0275d8;background-color:transparent}.btn-outline-primary.active,.btn-outline-primary:active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-outline-secondary{color:#ccc;background-image:none;background-color:transparent;border-color:#ccc}.btn-outline-secondary:hover{color:#fff;background-color:#ccc;border-color:#ccc}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#ccc;background-color:transparent}.btn-outline-secondary.active,.btn-outline-secondary:active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.btn-outline-info{color:#5bc0de;background-image:none;background-color:transparent;border-color:#5bc0de}.btn-outline-info:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#5bc0de;background-color:transparent}.btn-outline-info.active,.btn-outline-info:active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-outline-success{color:#5cb85c;background-image:none;background-color:transparent;border-color:#5cb85c}.btn-outline-success:hover{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#5cb85c;background-color:transparent}.btn-outline-success.active,.btn-outline-success:active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-outline-warning{color:#f0ad4e;background-image:none;background-color:transparent;border-color:#f0ad4e}.btn-outline-warning:hover{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f0ad4e;background-color:transparent}.btn-outline-warning.active,.btn-outline-warning:active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-outline-danger{color:#d9534f;background-image:none;background-color:transparent;border-color:#d9534f}.btn-outline-danger:hover{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#d9534f;background-color:transparent}.btn-outline-danger.active,.btn-outline-danger:active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-link{font-weight:400;color:#0275d8;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link:disabled{background-color:transparent}.btn-link,.btn-link:active,.btn-link:focus{border-color:transparent}.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#014c8c;text-decoration:underline;background-color:transparent}.btn-link:disabled{color:#636c72}.btn-link:disabled:focus,.btn-link:disabled:hover{text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.3em;vertical-align:middle;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-toggle:focus{outline:0}.dropup .dropdown-toggle::after{border-top:0;border-bottom:.3em solid}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#292b2c;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-divider{height:1px;margin:.5rem 0;overflow:hidden;background-color:#eceeef}.dropdown-item{display:block;width:100%;padding:3px 1.5rem;clear:both;font-weight:400;color:#292b2c;text-align:inherit;white-space:nowrap;background:0 0;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1d1e1f;text-decoration:none;background-color:#f7f7f9}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0275d8}.dropdown-item.disabled,.dropdown-item:disabled{color:#636c72;cursor:not-allowed;background-color:transparent}.show>.dropdown-menu{display:block}.show>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#636c72;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.dropup .dropdown-menu{top:auto;bottom:100%;margin-bottom:.125rem}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:2}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn+.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:1.125rem;padding-left:1.125rem}.btn-group-vertical{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%}.input-group .form-control{position:relative;z-index:2;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group .form-control:active,.input-group .form-control:focus,.input-group .form-control:hover{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{white-space:nowrap;vertical-align:middle}.input-group-addon{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.25;color:#464a4c;text-align:center;background-color:#eceeef;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.input-group-addon.form-control-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-addon.form-control-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:not(:last-child),.input-group-addon:not(:last-child),.input-group-btn:not(:first-child)>.btn-group:not(:last-child)>.btn,.input-group-btn:not(:first-child)>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:not(:last-child)>.btn,.input-group-btn:not(:last-child)>.btn-group>.btn,.input-group-btn:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:not(:last-child){border-right:0}.input-group .form-control:not(:first-child),.input-group-addon:not(:first-child),.input-group-btn:not(:first-child)>.btn,.input-group-btn:not(:first-child)>.btn-group>.btn,.input-group-btn:not(:first-child)>.dropdown-toggle,.input-group-btn:not(:last-child)>.btn-group:not(:first-child)>.btn,.input-group-btn:not(:last-child)>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.form-control+.input-group-addon:not(:first-child){border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 0%;-ms-flex:1 1 0%;flex:1 1 0%}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:3}.input-group-btn:not(:last-child)>.btn,.input-group-btn:not(:last-child)>.btn-group{margin-right:-1px}.input-group-btn:not(:first-child)>.btn,.input-group-btn:not(:first-child)>.btn-group{z-index:2;margin-left:-1px}.input-group-btn:not(:first-child)>.btn-group:active,.input-group-btn:not(:first-child)>.btn-group:focus,.input-group-btn:not(:first-child)>.btn-group:hover,.input-group-btn:not(:first-child)>.btn:active,.input-group-btn:not(:first-child)>.btn:focus,.input-group-btn:not(:first-child)>.btn:hover{z-index:3}.custom-control{position:relative;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;min-height:1.5rem;padding-left:1.5rem;margin-right:1rem;cursor:pointer}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-indicator{color:#fff;background-color:#0275d8}.custom-control-input:focus~.custom-control-indicator{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #0275d8;box-shadow:0 0 0 1px #fff,0 0 0 3px #0275d8}.custom-control-input:active~.custom-control-indicator{color:#fff;background-color:#8fcafe}.custom-control-input:disabled~.custom-control-indicator{cursor:not-allowed;background-color:#eceeef}.custom-control-input:disabled~.custom-control-description{color:#636c72;cursor:not-allowed}.custom-control-indicator{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#ddd;background-repeat:no-repeat;background-position:center center;-webkit-background-size:50% 50%;background-size:50% 50%}.custom-checkbox .custom-control-indicator{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-indicator{background-color:#0275d8;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-radio .custom-control-indicator{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-controls-stacked{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.custom-controls-stacked .custom-control{margin-bottom:.25rem}.custom-controls-stacked .custom-control+.custom-control{margin-left:0}.custom-select{display:inline-block;max-width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.25;color:#464a4c;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;-webkit-background-size:8px 10px;background-size:8px 10px;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-moz-appearance:none;-webkit-appearance:none}.custom-select:focus{border-color:#5cb3fd;outline:0}.custom-select:focus::-ms-value{color:#464a4c;background-color:#fff}.custom-select:disabled{color:#636c72;cursor:not-allowed;background-color:#eceeef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-file{position:relative;display:inline-block;max-width:100%;height:2.5rem;margin-bottom:0;cursor:pointer}.custom-file-input{min-width:14rem;max-width:100%;height:2.5rem;margin:0;filter:alpha(opacity=0);opacity:0}.custom-file-control{position:absolute;top:0;right:0;left:0;z-index:5;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#464a4c;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.custom-file-control:lang(en)::after{content:"Choose file..."}.custom-file-control::before{position:absolute;top:-1px;right:-1px;bottom:-1px;z-index:6;display:block;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#464a4c;background-color:#eceeef;border:1px solid rgba(0,0,0,.15);border-radius:0 .25rem .25rem 0}.custom-file-control:lang(en)::before{content:"Browse"}.nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5em 1em}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#636c72;cursor:not-allowed}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-right-radius:.25rem;border-top-left-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#eceeef #eceeef #ddd}.nav-tabs .nav-link.disabled{color:#636c72;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#464a4c;background-color:#fff;border-color:#ddd #ddd #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-item.show .nav-link,.nav-pills .nav-link.active{color:#fff;cursor:default;background-color:#0275d8}.nav-fill .nav-item{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-webkit-box-flex:1;-webkit-flex:1 1 100%;-ms-flex:1 1 100%;flex:1 1 100%;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:.5rem 1rem}.navbar-brand{display:inline-block;padding-top:.25rem;padding-bottom:.25rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-text{display:inline-block;padding-top:.425rem;padding-bottom:.425rem}.navbar-toggler{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding:.25rem .75rem;font-size:1.25rem;line-height:1;background:0 0;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;-webkit-background-size:100% 100%;background-size:100% 100%}.navbar-toggler-left{position:absolute;left:1rem}.navbar-toggler-right{position:absolute;right:1rem}@media (max-width:575px){.navbar-toggleable .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable>.container{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-toggleable{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;width:100%}.navbar-toggleable .navbar-toggler{display:none}}@media (max-width:767px){.navbar-toggleable-sm .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-sm>.container{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-toggleable-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-sm>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-sm .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;width:100%}.navbar-toggleable-sm .navbar-toggler{display:none}}@media (max-width:991px){.navbar-toggleable-md .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-md>.container{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-toggleable-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-md>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-md .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;width:100%}.navbar-toggleable-md .navbar-toggler{display:none}}@media (max-width:1199px){.navbar-toggleable-lg .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-lg>.container{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-toggleable-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-lg>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-lg .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;width:100%}.navbar-toggleable-lg .navbar-toggler{display:none}}.navbar-toggleable-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-xl .navbar-nav .dropdown-menu{position:static;float:none}.navbar-toggleable-xl>.container{padding-right:0;padding-left:0}.navbar-toggleable-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-toggleable-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-toggleable-xl>.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggleable-xl .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;width:100%}.navbar-toggleable-xl .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-toggler{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover,.navbar-light .navbar-toggler:focus,.navbar-light .navbar-toggler:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.open,.navbar-light .navbar-nav .open>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-toggler{color:#fff}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-toggler:focus,.navbar-inverse .navbar-toggler:hover{color:#fff}.navbar-inverse .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-inverse .navbar-nav .nav-link:focus,.navbar-inverse .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-inverse .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-inverse .navbar-nav .active>.nav-link,.navbar-inverse .navbar-nav .nav-link.active,.navbar-inverse .navbar-nav .nav-link.open,.navbar-inverse .navbar-nav .open>.nav-link{color:#fff}.navbar-inverse .navbar-toggler{border-color:rgba(255,255,255,.1)}.navbar-inverse .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E")}.navbar-inverse .navbar-text{color:rgba(255,255,255,.5)}.card{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card-block{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card>.list-group:first-child .list-group-item:first-child{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#f7f7f9;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:#f7f7f9;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-primary{background-color:#0275d8;border-color:#0275d8}.card-primary .card-footer,.card-primary .card-header{background-color:transparent}.card-success{background-color:#5cb85c;border-color:#5cb85c}.card-success .card-footer,.card-success .card-header{background-color:transparent}.card-info{background-color:#5bc0de;border-color:#5bc0de}.card-info .card-footer,.card-info .card-header{background-color:transparent}.card-warning{background-color:#f0ad4e;border-color:#f0ad4e}.card-warning .card-footer,.card-warning .card-header{background-color:transparent}.card-danger{background-color:#d9534f;border-color:#d9534f}.card-danger .card-footer,.card-danger .card-header{background-color:transparent}.card-outline-primary{background-color:transparent;border-color:#0275d8}.card-outline-secondary{background-color:transparent;border-color:#ccc}.card-outline-info{background-color:transparent;border-color:#5bc0de}.card-outline-success{background-color:transparent;border-color:#5cb85c}.card-outline-warning{background-color:transparent;border-color:#f0ad4e}.card-outline-danger{background-color:transparent;border-color:#d9534f}.card-inverse{color:rgba(255,255,255,.65)}.card-inverse .card-footer,.card-inverse .card-header{background-color:transparent;border-color:rgba(255,255,255,.2)}.card-inverse .card-blockquote,.card-inverse .card-footer,.card-inverse .card-header,.card-inverse .card-title{color:#fff}.card-inverse .card-blockquote .blockquote-footer,.card-inverse .card-link,.card-inverse .card-subtitle,.card-inverse .card-text{color:rgba(255,255,255,.65)}.card-inverse .card-link:focus,.card-inverse .card-link:hover{color:#fff}.card-blockquote{padding:0;margin-bottom:0;border-left:0}.card-img{border-radius:calc(.25rem - 1px)}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img-top{border-top-right-radius:calc(.25rem - 1px);border-top-left-radius:calc(.25rem - 1px)}.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}@media (min-width:576px){.card-deck{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-deck .card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1 0 0%;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.card-deck .card:not(:first-child){margin-left:15px}.card-deck .card:not(:last-child){margin-right:15px}}@media (min-width:576px){.card-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group .card{-webkit-box-flex:1;-webkit-flex:1 0 0%;-ms-flex:1 0 0%;flex:1 0 0%}.card-group .card+.card{margin-left:0;border-left:0}.card-group .card:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.card-group .card:first-child .card-img-top{border-top-right-radius:0}.card-group .card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group .card:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.card-group .card:last-child .card-img-top{border-top-left-radius:0}.card-group .card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group .card:not(:first-child):not(:last-child){border-radius:0}.card-group .card:not(:first-child):not(:last-child) .card-img-bottom,.card-group .card:not(:first-child):not(:last-child) .card-img-top{border-radius:0}}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%;margin-bottom:.75rem}}.breadcrumb{padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#eceeef;border-radius:.25rem}.breadcrumb::after{display:block;content:"";clear:both}.breadcrumb-item{float:left}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#636c72;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#636c72}.pagination{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-item:first-child .page-link{margin-left:0;border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.page-item:last-child .page-link{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.page-item.active .page-link{z-index:2;color:#fff;background-color:#0275d8;border-color:#0275d8}.page-item.disabled .page-link{color:#636c72;pointer-events:none;cursor:not-allowed;background-color:#fff;border-color:#ddd}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#0275d8;background-color:#fff;border:1px solid #ddd}.page-link:focus,.page-link:hover{color:#014c8c;text-decoration:none;background-color:#eceeef;border-color:#ddd}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:.3rem;border-top-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:.3rem;border-top-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.2rem;border-top-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.2rem;border-top-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-default{background-color:#636c72}.badge-default[href]:focus,.badge-default[href]:hover{background-color:#4b5257}.badge-primary{background-color:#0275d8}.badge-primary[href]:focus,.badge-primary[href]:hover{background-color:#025aa5}.badge-success{background-color:#5cb85c}.badge-success[href]:focus,.badge-success[href]:hover{background-color:#449d44}.badge-info{background-color:#5bc0de}.badge-info[href]:focus,.badge-info[href]:hover{background-color:#31b0d5}.badge-warning{background-color:#f0ad4e}.badge-warning[href]:focus,.badge-warning[href]:hover{background-color:#ec971f}.badge-danger{background-color:#d9534f}.badge-danger[href]:focus,.badge-danger[href]:hover{background-color:#c9302c}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#eceeef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-hr{border-top-color:#d0d5d8}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible .close{position:relative;top:-.75rem;right:-1.25rem;padding:.75rem 1.25rem;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d0e9c6;color:#3c763d}.alert-success hr{border-top-color:#c1e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bcdff1;color:#31708f}.alert-info hr{border-top-color:#a6d5ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faf2cc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7ecb5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebcccc;color:#a94442}.alert-danger hr{border-top-color:#e4b9b9}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;font-size:.75rem;line-height:1rem;text-align:center;background-color:#eceeef;border-radius:.25rem}.progress-bar{height:1rem;color:#fff;background-color:#0275d8}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;-o-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-webkit-flex:1 1 0%;-ms-flex:1 1 0%;flex:1 1 0%}.list-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#464a4c;text-align:inherit}.list-group-item-action .list-group-item-heading{color:#292b2c}.list-group-item-action:focus,.list-group-item-action:hover{color:#464a4c;text-decoration:none;background-color:#f7f7f9}.list-group-item-action:active{color:#292b2c;background-color:#eceeef}.list-group-item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#636c72;cursor:not-allowed;background-color:#fff}.list-group-item.disabled .list-group-item-heading,.list-group-item:disabled .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item:disabled .list-group-item-text{color:#636c72}.list-group-item.active{z-index:2;color:#fff;background-color:#0275d8;border-color:#0275d8}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text{color:#daeeff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active{color:#fff;background-color:#a94442;border-color:#a94442}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.75}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:15px;border-bottom:1px solid #eceeef}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:15px}.modal-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding:15px;border-top:1px solid #eceeef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:30px auto}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip.bs-tether-element-attached-bottom,.tooltip.tooltip-top{padding:5px 0;margin-top:-3px}.tooltip.bs-tether-element-attached-bottom .tooltip-inner::before,.tooltip.tooltip-top .tooltip-inner::before{bottom:0;left:50%;margin-left:-5px;content:"";border-width:5px 5px 0;border-top-color:#000}.tooltip.bs-tether-element-attached-left,.tooltip.tooltip-right{padding:0 5px;margin-left:3px}.tooltip.bs-tether-element-attached-left .tooltip-inner::before,.tooltip.tooltip-right .tooltip-inner::before{top:50%;left:0;margin-top:-5px;content:"";border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.bs-tether-element-attached-top,.tooltip.tooltip-bottom{padding:5px 0;margin-top:3px}.tooltip.bs-tether-element-attached-top .tooltip-inner::before,.tooltip.tooltip-bottom .tooltip-inner::before{top:0;left:50%;margin-left:-5px;content:"";border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bs-tether-element-attached-right,.tooltip.tooltip-left{padding:0 5px;margin-left:-3px}.tooltip.bs-tether-element-attached-right .tooltip-inner::before,.tooltip.tooltip-left .tooltip-inner::before{top:50%;right:0;margin-top:-5px;content:"";border-width:5px 0 5px 5px;border-left-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.tooltip-inner::before{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;padding:1px;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;font-size:.875rem;word-wrap:break-word;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover.bs-tether-element-attached-bottom,.popover.popover-top{margin-top:-10px}.popover.bs-tether-element-attached-bottom::after,.popover.bs-tether-element-attached-bottom::before,.popover.popover-top::after,.popover.popover-top::before{left:50%;border-bottom-width:0}.popover.bs-tether-element-attached-bottom::before,.popover.popover-top::before{bottom:-11px;margin-left:-11px;border-top-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-bottom::after,.popover.popover-top::after{bottom:-10px;margin-left:-10px;border-top-color:#fff}.popover.bs-tether-element-attached-left,.popover.popover-right{margin-left:10px}.popover.bs-tether-element-attached-left::after,.popover.bs-tether-element-attached-left::before,.popover.popover-right::after,.popover.popover-right::before{top:50%;border-left-width:0}.popover.bs-tether-element-attached-left::before,.popover.popover-right::before{left:-11px;margin-top:-11px;border-right-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-left::after,.popover.popover-right::after{left:-10px;margin-top:-10px;border-right-color:#fff}.popover.bs-tether-element-attached-top,.popover.popover-bottom{margin-top:10px}.popover.bs-tether-element-attached-top::after,.popover.bs-tether-element-attached-top::before,.popover.popover-bottom::after,.popover.popover-bottom::before{left:50%;border-top-width:0}.popover.bs-tether-element-attached-top::before,.popover.popover-bottom::before{top:-11px;margin-left:-11px;border-bottom-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-top::after,.popover.popover-bottom::after{top:-10px;margin-left:-10px;border-bottom-color:#f7f7f7}.popover.bs-tether-element-attached-top .popover-title::before,.popover.popover-bottom .popover-title::before{position:absolute;top:0;left:50%;display:block;width:20px;margin-left:-10px;content:"";border-bottom:1px solid #f7f7f7}.popover.bs-tether-element-attached-right,.popover.popover-left{margin-left:-10px}.popover.bs-tether-element-attached-right::after,.popover.bs-tether-element-attached-right::before,.popover.popover-left::after,.popover.popover-left::before{top:50%;border-right-width:0}.popover.bs-tether-element-attached-right::before,.popover.popover-left::before{right:-11px;margin-top:-11px;border-left-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-right::after,.popover.popover-left::after{right:-10px;margin-top:-10px;border-left-color:#fff}.popover-title{padding:8px 14px;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-right-radius:calc(.3rem - 1px);border-top-left-radius:calc(.3rem - 1px)}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover::after,.popover::before{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover::before{content:"";border-width:11px}.popover::after{content:"";border-width:10px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;width:100%}@media (-webkit-transform-3d){.carousel-item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}}@supports ((-webkit-transform:translate3d(0,0,0)) or (transform:translate3d(0,0,0))){.carousel-item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}@media (-webkit-transform-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@supports ((-webkit-transform:translate3d(0,0,0)) or (transform:translate3d(0,0,0))){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;-webkit-background-size:100% 100%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M4 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M1.5 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;max-width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-faded{background-color:#f7f7f7}.bg-primary{background-color:#0275d8!important}a.bg-primary:focus,a.bg-primary:hover{background-color:#025aa5!important}.bg-success{background-color:#5cb85c!important}a.bg-success:focus,a.bg-success:hover{background-color:#449d44!important}.bg-info{background-color:#5bc0de!important}a.bg-info:focus,a.bg-info:hover{background-color:#31b0d5!important}.bg-warning{background-color:#f0ad4e!important}a.bg-warning:focus,a.bg-warning:hover{background-color:#ec971f!important}.bg-danger{background-color:#d9534f!important}a.bg-danger:focus,a.bg-danger:hover{background-color:#c9302c!important}.bg-inverse{background-color:#292b2c!important}a.bg-inverse:focus,a.bg-inverse:hover{background-color:#101112!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.rounded{border-radius:.25rem}.rounded-top{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.rounded-right{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.rounded-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-left{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.rounded-circle{border-radius:50%}.rounded-0{border-radius:0}.clearfix::after{display:block;content:"";clear:both}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.flex-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.flex-last{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.flex-unordered{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.flex-sm-last{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.flex-sm-unordered{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-sm-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-sm-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.flex-md-last{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.flex-md-unordered{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-md-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-md-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.flex-lg-last{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.flex-lg-unordered{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-lg-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-lg-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.flex-xl-last{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.flex-xl-unordered{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-xl-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-xl-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1030}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0 0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-right:0!important;margin-left:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem .25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem .5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:1rem 1rem!important}.mt-3{margin-top:1rem!important}.mr-3{margin-right:1rem!important}.mb-3{margin-bottom:1rem!important}.ml-3{margin-left:1rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-4{margin:1.5rem 1.5rem!important}.mt-4{margin-top:1.5rem!important}.mr-4{margin-right:1.5rem!important}.mb-4{margin-bottom:1.5rem!important}.ml-4{margin-left:1.5rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-5{margin:3rem 3rem!important}.mt-5{margin-top:3rem!important}.mr-5{margin-right:3rem!important}.mb-5{margin-bottom:3rem!important}.ml-5{margin-left:3rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-0{padding:0 0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-right:0!important;padding-left:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem .25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem .5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:1rem 1rem!important}.pt-3{padding-top:1rem!important}.pr-3{padding-right:1rem!important}.pb-3{padding-bottom:1rem!important}.pl-3{padding-left:1rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-4{padding:1.5rem 1.5rem!important}.pt-4{padding-top:1.5rem!important}.pr-4{padding-right:1.5rem!important}.pb-4{padding-bottom:1.5rem!important}.pl-4{padding-left:1.5rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-5{padding:3rem 3rem!important}.pt-5{padding-top:3rem!important}.pr-5{padding-right:3rem!important}.pb-5{padding-bottom:3rem!important}.pl-5{padding-left:3rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}@media (min-width:576px){.m-sm-0{margin:0 0!important}.mt-sm-0{margin-top:0!important}.mr-sm-0{margin-right:0!important}.mb-sm-0{margin-bottom:0!important}.ml-sm-0{margin-left:0!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.m-sm-1{margin:.25rem .25rem!important}.mt-sm-1{margin-top:.25rem!important}.mr-sm-1{margin-right:.25rem!important}.mb-sm-1{margin-bottom:.25rem!important}.ml-sm-1{margin-left:.25rem!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-sm-2{margin:.5rem .5rem!important}.mt-sm-2{margin-top:.5rem!important}.mr-sm-2{margin-right:.5rem!important}.mb-sm-2{margin-bottom:.5rem!important}.ml-sm-2{margin-left:.5rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-sm-3{margin:1rem 1rem!important}.mt-sm-3{margin-top:1rem!important}.mr-sm-3{margin-right:1rem!important}.mb-sm-3{margin-bottom:1rem!important}.ml-sm-3{margin-left:1rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-sm-4{margin:1.5rem 1.5rem!important}.mt-sm-4{margin-top:1.5rem!important}.mr-sm-4{margin-right:1.5rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.ml-sm-4{margin-left:1.5rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-sm-5{margin:3rem 3rem!important}.mt-sm-5{margin-top:3rem!important}.mr-sm-5{margin-right:3rem!important}.mb-sm-5{margin-bottom:3rem!important}.ml-sm-5{margin-left:3rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-sm-0{padding:0 0!important}.pt-sm-0{padding-top:0!important}.pr-sm-0{padding-right:0!important}.pb-sm-0{padding-bottom:0!important}.pl-sm-0{padding-left:0!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.p-sm-1{padding:.25rem .25rem!important}.pt-sm-1{padding-top:.25rem!important}.pr-sm-1{padding-right:.25rem!important}.pb-sm-1{padding-bottom:.25rem!important}.pl-sm-1{padding-left:.25rem!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-sm-2{padding:.5rem .5rem!important}.pt-sm-2{padding-top:.5rem!important}.pr-sm-2{padding-right:.5rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pl-sm-2{padding-left:.5rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-sm-3{padding:1rem 1rem!important}.pt-sm-3{padding-top:1rem!important}.pr-sm-3{padding-right:1rem!important}.pb-sm-3{padding-bottom:1rem!important}.pl-sm-3{padding-left:1rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-sm-4{padding:1.5rem 1.5rem!important}.pt-sm-4{padding-top:1.5rem!important}.pr-sm-4{padding-right:1.5rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pl-sm-4{padding-left:1.5rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-sm-5{padding:3rem 3rem!important}.pt-sm-5{padding-top:3rem!important}.pr-sm-5{padding-right:3rem!important}.pb-sm-5{padding-bottom:3rem!important}.pl-sm-5{padding-left:3rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto{margin-top:auto!important}.mr-sm-auto{margin-right:auto!important}.mb-sm-auto{margin-bottom:auto!important}.ml-sm-auto{margin-left:auto!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:768px){.m-md-0{margin:0 0!important}.mt-md-0{margin-top:0!important}.mr-md-0{margin-right:0!important}.mb-md-0{margin-bottom:0!important}.ml-md-0{margin-left:0!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.m-md-1{margin:.25rem .25rem!important}.mt-md-1{margin-top:.25rem!important}.mr-md-1{margin-right:.25rem!important}.mb-md-1{margin-bottom:.25rem!important}.ml-md-1{margin-left:.25rem!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-md-2{margin:.5rem .5rem!important}.mt-md-2{margin-top:.5rem!important}.mr-md-2{margin-right:.5rem!important}.mb-md-2{margin-bottom:.5rem!important}.ml-md-2{margin-left:.5rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-md-3{margin:1rem 1rem!important}.mt-md-3{margin-top:1rem!important}.mr-md-3{margin-right:1rem!important}.mb-md-3{margin-bottom:1rem!important}.ml-md-3{margin-left:1rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-md-4{margin:1.5rem 1.5rem!important}.mt-md-4{margin-top:1.5rem!important}.mr-md-4{margin-right:1.5rem!important}.mb-md-4{margin-bottom:1.5rem!important}.ml-md-4{margin-left:1.5rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-md-5{margin:3rem 3rem!important}.mt-md-5{margin-top:3rem!important}.mr-md-5{margin-right:3rem!important}.mb-md-5{margin-bottom:3rem!important}.ml-md-5{margin-left:3rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-md-0{padding:0 0!important}.pt-md-0{padding-top:0!important}.pr-md-0{padding-right:0!important}.pb-md-0{padding-bottom:0!important}.pl-md-0{padding-left:0!important}.px-md-0{padding-right:0!important;padding-left:0!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.p-md-1{padding:.25rem .25rem!important}.pt-md-1{padding-top:.25rem!important}.pr-md-1{padding-right:.25rem!important}.pb-md-1{padding-bottom:.25rem!important}.pl-md-1{padding-left:.25rem!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-md-2{padding:.5rem .5rem!important}.pt-md-2{padding-top:.5rem!important}.pr-md-2{padding-right:.5rem!important}.pb-md-2{padding-bottom:.5rem!important}.pl-md-2{padding-left:.5rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-md-3{padding:1rem 1rem!important}.pt-md-3{padding-top:1rem!important}.pr-md-3{padding-right:1rem!important}.pb-md-3{padding-bottom:1rem!important}.pl-md-3{padding-left:1rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-md-4{padding:1.5rem 1.5rem!important}.pt-md-4{padding-top:1.5rem!important}.pr-md-4{padding-right:1.5rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pl-md-4{padding-left:1.5rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-md-5{padding:3rem 3rem!important}.pt-md-5{padding-top:3rem!important}.pr-md-5{padding-right:3rem!important}.pb-md-5{padding-bottom:3rem!important}.pl-md-5{padding-left:3rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto{margin-top:auto!important}.mr-md-auto{margin-right:auto!important}.mb-md-auto{margin-bottom:auto!important}.ml-md-auto{margin-left:auto!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:992px){.m-lg-0{margin:0 0!important}.mt-lg-0{margin-top:0!important}.mr-lg-0{margin-right:0!important}.mb-lg-0{margin-bottom:0!important}.ml-lg-0{margin-left:0!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.m-lg-1{margin:.25rem .25rem!important}.mt-lg-1{margin-top:.25rem!important}.mr-lg-1{margin-right:.25rem!important}.mb-lg-1{margin-bottom:.25rem!important}.ml-lg-1{margin-left:.25rem!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-lg-2{margin:.5rem .5rem!important}.mt-lg-2{margin-top:.5rem!important}.mr-lg-2{margin-right:.5rem!important}.mb-lg-2{margin-bottom:.5rem!important}.ml-lg-2{margin-left:.5rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-lg-3{margin:1rem 1rem!important}.mt-lg-3{margin-top:1rem!important}.mr-lg-3{margin-right:1rem!important}.mb-lg-3{margin-bottom:1rem!important}.ml-lg-3{margin-left:1rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-lg-4{margin:1.5rem 1.5rem!important}.mt-lg-4{margin-top:1.5rem!important}.mr-lg-4{margin-right:1.5rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.ml-lg-4{margin-left:1.5rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-lg-5{margin:3rem 3rem!important}.mt-lg-5{margin-top:3rem!important}.mr-lg-5{margin-right:3rem!important}.mb-lg-5{margin-bottom:3rem!important}.ml-lg-5{margin-left:3rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-lg-0{padding:0 0!important}.pt-lg-0{padding-top:0!important}.pr-lg-0{padding-right:0!important}.pb-lg-0{padding-bottom:0!important}.pl-lg-0{padding-left:0!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.p-lg-1{padding:.25rem .25rem!important}.pt-lg-1{padding-top:.25rem!important}.pr-lg-1{padding-right:.25rem!important}.pb-lg-1{padding-bottom:.25rem!important}.pl-lg-1{padding-left:.25rem!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-lg-2{padding:.5rem .5rem!important}.pt-lg-2{padding-top:.5rem!important}.pr-lg-2{padding-right:.5rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pl-lg-2{padding-left:.5rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-lg-3{padding:1rem 1rem!important}.pt-lg-3{padding-top:1rem!important}.pr-lg-3{padding-right:1rem!important}.pb-lg-3{padding-bottom:1rem!important}.pl-lg-3{padding-left:1rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-lg-4{padding:1.5rem 1.5rem!important}.pt-lg-4{padding-top:1.5rem!important}.pr-lg-4{padding-right:1.5rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pl-lg-4{padding-left:1.5rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-lg-5{padding:3rem 3rem!important}.pt-lg-5{padding-top:3rem!important}.pr-lg-5{padding-right:3rem!important}.pb-lg-5{padding-bottom:3rem!important}.pl-lg-5{padding-left:3rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto{margin-top:auto!important}.mr-lg-auto{margin-right:auto!important}.mb-lg-auto{margin-bottom:auto!important}.ml-lg-auto{margin-left:auto!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0 0!important}.mt-xl-0{margin-top:0!important}.mr-xl-0{margin-right:0!important}.mb-xl-0{margin-bottom:0!important}.ml-xl-0{margin-left:0!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.m-xl-1{margin:.25rem .25rem!important}.mt-xl-1{margin-top:.25rem!important}.mr-xl-1{margin-right:.25rem!important}.mb-xl-1{margin-bottom:.25rem!important}.ml-xl-1{margin-left:.25rem!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-xl-2{margin:.5rem .5rem!important}.mt-xl-2{margin-top:.5rem!important}.mr-xl-2{margin-right:.5rem!important}.mb-xl-2{margin-bottom:.5rem!important}.ml-xl-2{margin-left:.5rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-xl-3{margin:1rem 1rem!important}.mt-xl-3{margin-top:1rem!important}.mr-xl-3{margin-right:1rem!important}.mb-xl-3{margin-bottom:1rem!important}.ml-xl-3{margin-left:1rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-xl-4{margin:1.5rem 1.5rem!important}.mt-xl-4{margin-top:1.5rem!important}.mr-xl-4{margin-right:1.5rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.ml-xl-4{margin-left:1.5rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-xl-5{margin:3rem 3rem!important}.mt-xl-5{margin-top:3rem!important}.mr-xl-5{margin-right:3rem!important}.mb-xl-5{margin-bottom:3rem!important}.ml-xl-5{margin-left:3rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-xl-0{padding:0 0!important}.pt-xl-0{padding-top:0!important}.pr-xl-0{padding-right:0!important}.pb-xl-0{padding-bottom:0!important}.pl-xl-0{padding-left:0!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.p-xl-1{padding:.25rem .25rem!important}.pt-xl-1{padding-top:.25rem!important}.pr-xl-1{padding-right:.25rem!important}.pb-xl-1{padding-bottom:.25rem!important}.pl-xl-1{padding-left:.25rem!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-xl-2{padding:.5rem .5rem!important}.pt-xl-2{padding-top:.5rem!important}.pr-xl-2{padding-right:.5rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pl-xl-2{padding-left:.5rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-xl-3{padding:1rem 1rem!important}.pt-xl-3{padding-top:1rem!important}.pr-xl-3{padding-right:1rem!important}.pb-xl-3{padding-bottom:1rem!important}.pl-xl-3{padding-left:1rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-xl-4{padding:1.5rem 1.5rem!important}.pt-xl-4{padding-top:1.5rem!important}.pr-xl-4{padding-right:1.5rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pl-xl-4{padding-left:1.5rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-xl-5{padding:3rem 3rem!important}.pt-xl-5{padding-top:3rem!important}.pr-xl-5{padding-right:3rem!important}.pb-xl-5{padding-bottom:3rem!important}.pl-xl-5{padding-left:3rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto{margin-top:auto!important}.mr-xl-auto{margin-right:auto!important}.mb-xl-auto{margin-bottom:auto!important}.ml-xl-auto{margin-left:auto!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-normal{font-weight:400}.font-weight-bold{font-weight:700}.font-italic{font-style:italic}.text-white{color:#fff!important}.text-muted{color:#636c72!important}a.text-muted:focus,a.text-muted:hover{color:#4b5257!important}.text-primary{color:#0275d8!important}a.text-primary:focus,a.text-primary:hover{color:#025aa5!important}.text-success{color:#5cb85c!important}a.text-success:focus,a.text-success:hover{color:#449d44!important}.text-info{color:#5bc0de!important}a.text-info:focus,a.text-info:hover{color:#31b0d5!important}.text-warning{color:#f0ad4e!important}a.text-warning:focus,a.text-warning:hover{color:#ec971f!important}.text-danger{color:#d9534f!important}a.text-danger:focus,a.text-danger:hover{color:#c9302c!important}.text-gray-dark{color:#292b2c!important}a.text-gray-dark:focus,a.text-gray-dark:hover{color:#101112!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.invisible{visibility:hidden!important}.hidden-xs-up{display:none!important}@media (max-width:575px){.hidden-xs-down{display:none!important}}@media (min-width:576px){.hidden-sm-up{display:none!important}}@media (max-width:767px){.hidden-sm-down{display:none!important}}@media (min-width:768px){.hidden-md-up{display:none!important}}@media (max-width:991px){.hidden-md-down{display:none!important}}@media (min-width:992px){.hidden-lg-up{display:none!important}}@media (max-width:1199px){.hidden-lg-down{display:none!important}}@media (min-width:1200px){.hidden-xl-up{display:none!important}}.hidden-xl-down{display:none!important}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/resources/static/css/font-awesome.css b/resources/static/css/font-awesome.css new file mode 100644 index 0000000..ee906a8 --- /dev/null +++ b/resources/static/css/font-awesome.css @@ -0,0 +1,2337 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper-pp:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/resources/static/css/font-awesome.min.css b/resources/static/css/font-awesome.min.css new file mode 100644 index 0000000..248ea7a --- /dev/null +++ b/resources/static/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} .fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%} .fa-2x{font-size:2em} .fa-3x{font-size:3em} .fa-4x{font-size:4em} .fa-5x{font-size:5em} .fa-fw{width:1.28571429em;text-align:center} .fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none} .fa-ul>li{position:relative} .fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center} .fa-li.fa-lg{left:-1.85714286em} .fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em} .fa-pull-left{float:left} .fa-pull-right{float:right} .fa.fa-pull-left{margin-right:.3em} .fa.fa-pull-right{margin-left:.3em} .pull-right{float:right} .pull-left{float:left} .fa.pull-left{margin-right:.3em} .fa.pull-right{margin-left:.3em} .fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear} .fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)} @-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} @keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} .fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)} .fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)} .fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)} .fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)} .fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)} :root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none} .fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle} .fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center} .fa-stack-1x{line-height:inherit} .fa-stack-2x{font-size:2em} .fa-inverse{color:#fff} .fa-glass:before{content:"\f000"} .fa-music:before{content:"\f001"} .fa-search:before{content:"\f002"} .fa-envelope-o:before{content:"\f003"} .fa-heart:before{content:"\f004"} .fa-star:before{content:"\f005"} .fa-star-o:before{content:"\f006"} .fa-user:before{content:"\f007"} .fa-film:before{content:"\f008"} .fa-th-large:before{content:"\f009"} .fa-th:before{content:"\f00a"} .fa-th-list:before{content:"\f00b"} .fa-check:before{content:"\f00c"} .fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"} .fa-search-plus:before{content:"\f00e"} .fa-search-minus:before{content:"\f010"} .fa-power-off:before{content:"\f011"} .fa-signal:before{content:"\f012"} .fa-gear:before,.fa-cog:before{content:"\f013"} .fa-trash-o:before{content:"\f014"} .fa-home:before{content:"\f015"} .fa-file-o:before{content:"\f016"} .fa-clock-o:before{content:"\f017"} .fa-road:before{content:"\f018"} .fa-download:before{content:"\f019"} .fa-arrow-circle-o-down:before{content:"\f01a"} .fa-arrow-circle-o-up:before{content:"\f01b"} .fa-inbox:before{content:"\f01c"} .fa-play-circle-o:before{content:"\f01d"} .fa-rotate-right:before,.fa-repeat:before{content:"\f01e"} .fa-refresh:before{content:"\f021"} .fa-list-alt:before{content:"\f022"} .fa-lock:before{content:"\f023"} .fa-flag:before{content:"\f024"} .fa-headphones:before{content:"\f025"} .fa-volume-off:before{content:"\f026"} .fa-volume-down:before{content:"\f027"} .fa-volume-up:before{content:"\f028"} .fa-qrcode:before{content:"\f029"} .fa-barcode:before{content:"\f02a"} .fa-tag:before{content:"\f02b"} .fa-tags:before{content:"\f02c"} .fa-book:before{content:"\f02d"} .fa-bookmark:before{content:"\f02e"} .fa-print:before{content:"\f02f"} .fa-camera:before{content:"\f030"} .fa-font:before{content:"\f031"} .fa-bold:before{content:"\f032"} .fa-italic:before{content:"\f033"} .fa-text-height:before{content:"\f034"} .fa-text-width:before{content:"\f035"} .fa-align-left:before{content:"\f036"} .fa-align-center:before{content:"\f037"} .fa-align-right:before{content:"\f038"} .fa-align-justify:before{content:"\f039"} .fa-list:before{content:"\f03a"} .fa-dedent:before,.fa-outdent:before{content:"\f03b"} .fa-indent:before{content:"\f03c"} .fa-video-camera:before{content:"\f03d"} .fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"} .fa-pencil:before{content:"\f040"} .fa-map-marker:before{content:"\f041"} .fa-adjust:before{content:"\f042"} .fa-tint:before{content:"\f043"} .fa-edit:before,.fa-pencil-square-o:before{content:"\f044"} .fa-share-square-o:before{content:"\f045"} .fa-check-square-o:before{content:"\f046"} .fa-arrows:before{content:"\f047"} .fa-step-backward:before{content:"\f048"} .fa-fast-backward:before{content:"\f049"} .fa-backward:before{content:"\f04a"} .fa-play:before{content:"\f04b"} .fa-pause:before{content:"\f04c"} .fa-stop:before{content:"\f04d"} .fa-forward:before{content:"\f04e"} .fa-fast-forward:before{content:"\f050"} .fa-step-forward:before{content:"\f051"} .fa-eject:before{content:"\f052"} .fa-chevron-left:before{content:"\f053"} .fa-chevron-right:before{content:"\f054"} .fa-plus-circle:before{content:"\f055"} .fa-minus-circle:before{content:"\f056"} .fa-times-circle:before{content:"\f057"} .fa-check-circle:before{content:"\f058"} .fa-question-circle:before{content:"\f059"} .fa-info-circle:before{content:"\f05a"} .fa-crosshairs:before{content:"\f05b"} .fa-times-circle-o:before{content:"\f05c"} .fa-check-circle-o:before{content:"\f05d"} .fa-ban:before{content:"\f05e"} .fa-arrow-left:before{content:"\f060"} .fa-arrow-right:before{content:"\f061"} .fa-arrow-up:before{content:"\f062"} .fa-arrow-down:before{content:"\f063"} .fa-mail-forward:before,.fa-share:before{content:"\f064"} .fa-expand:before{content:"\f065"} .fa-compress:before{content:"\f066"} .fa-plus:before{content:"\f067"} .fa-minus:before{content:"\f068"} .fa-asterisk:before{content:"\f069"} .fa-exclamation-circle:before{content:"\f06a"} .fa-gift:before{content:"\f06b"} .fa-leaf:before{content:"\f06c"} .fa-fire:before{content:"\f06d"} .fa-eye:before{content:"\f06e"} .fa-eye-slash:before{content:"\f070"} .fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"} .fa-plane:before{content:"\f072"} .fa-calendar:before{content:"\f073"} .fa-random:before{content:"\f074"} .fa-comment:before{content:"\f075"} .fa-magnet:before{content:"\f076"} .fa-chevron-up:before{content:"\f077"} .fa-chevron-down:before{content:"\f078"} .fa-retweet:before{content:"\f079"} .fa-shopping-cart:before{content:"\f07a"} .fa-folder:before{content:"\f07b"} .fa-folder-open:before{content:"\f07c"} .fa-arrows-v:before{content:"\f07d"} .fa-arrows-h:before{content:"\f07e"} .fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"} .fa-twitter-square:before{content:"\f081"} .fa-facebook-square:before{content:"\f082"} .fa-camera-retro:before{content:"\f083"} .fa-key:before{content:"\f084"} .fa-gears:before,.fa-cogs:before{content:"\f085"} .fa-comments:before{content:"\f086"} .fa-thumbs-o-up:before{content:"\f087"} .fa-thumbs-o-down:before{content:"\f088"} .fa-star-half:before{content:"\f089"} .fa-heart-o:before{content:"\f08a"} .fa-sign-out:before{content:"\f08b"} .fa-linkedin-square:before{content:"\f08c"} .fa-thumb-tack:before{content:"\f08d"} .fa-external-link:before{content:"\f08e"} .fa-sign-in:before{content:"\f090"} .fa-trophy:before{content:"\f091"} .fa-github-square:before{content:"\f092"} .fa-upload:before{content:"\f093"} .fa-lemon-o:before{content:"\f094"} .fa-phone:before{content:"\f095"} .fa-square-o:before{content:"\f096"} .fa-bookmark-o:before{content:"\f097"} .fa-phone-square:before{content:"\f098"} .fa-twitter:before{content:"\f099"} .fa-facebook-f:before,.fa-facebook:before{content:"\f09a"} .fa-github:before{content:"\f09b"} .fa-unlock:before{content:"\f09c"} .fa-credit-card:before{content:"\f09d"} .fa-feed:before,.fa-rss:before{content:"\f09e"} .fa-hdd-o:before{content:"\f0a0"} .fa-bullhorn:before{content:"\f0a1"} .fa-bell:before{content:"\f0f3"} .fa-certificate:before{content:"\f0a3"} .fa-hand-o-right:before{content:"\f0a4"} .fa-hand-o-left:before{content:"\f0a5"} .fa-hand-o-up:before{content:"\f0a6"} .fa-hand-o-down:before{content:"\f0a7"} .fa-arrow-circle-left:before{content:"\f0a8"} .fa-arrow-circle-right:before{content:"\f0a9"} .fa-arrow-circle-up:before{content:"\f0aa"} .fa-arrow-circle-down:before{content:"\f0ab"} .fa-globe:before{content:"\f0ac"} .fa-wrench:before{content:"\f0ad"} .fa-tasks:before{content:"\f0ae"} .fa-filter:before{content:"\f0b0"} .fa-briefcase:before{content:"\f0b1"} .fa-arrows-alt:before{content:"\f0b2"} .fa-group:before,.fa-users:before{content:"\f0c0"} .fa-chain:before,.fa-link:before{content:"\f0c1"} .fa-cloud:before{content:"\f0c2"} .fa-flask:before{content:"\f0c3"} .fa-cut:before,.fa-scissors:before{content:"\f0c4"} .fa-copy:before,.fa-files-o:before{content:"\f0c5"} .fa-paperclip:before{content:"\f0c6"} .fa-save:before,.fa-floppy-o:before{content:"\f0c7"} .fa-square:before{content:"\f0c8"} .fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"} .fa-list-ul:before{content:"\f0ca"} .fa-list-ol:before{content:"\f0cb"} .fa-strikethrough:before{content:"\f0cc"} .fa-underline:before{content:"\f0cd"} .fa-table:before{content:"\f0ce"} .fa-magic:before{content:"\f0d0"} .fa-truck:before{content:"\f0d1"} .fa-pinterest:before{content:"\f0d2"} .fa-pinterest-square:before{content:"\f0d3"} .fa-google-plus-square:before{content:"\f0d4"} .fa-google-plus:before{content:"\f0d5"} .fa-money:before{content:"\f0d6"} .fa-caret-down:before{content:"\f0d7"} .fa-caret-up:before{content:"\f0d8"} .fa-caret-left:before{content:"\f0d9"} .fa-caret-right:before{content:"\f0da"} .fa-columns:before{content:"\f0db"} .fa-unsorted:before,.fa-sort:before{content:"\f0dc"} .fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"} .fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"} .fa-envelope:before{content:"\f0e0"} .fa-linkedin:before{content:"\f0e1"} .fa-rotate-left:before,.fa-undo:before{content:"\f0e2"} .fa-legal:before,.fa-gavel:before{content:"\f0e3"} .fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"} .fa-comment-o:before{content:"\f0e5"} .fa-comments-o:before{content:"\f0e6"} .fa-flash:before,.fa-bolt:before{content:"\f0e7"} .fa-sitemap:before{content:"\f0e8"} .fa-umbrella:before{content:"\f0e9"} .fa-paste:before,.fa-clipboard:before{content:"\f0ea"} .fa-lightbulb-o:before{content:"\f0eb"} .fa-exchange:before{content:"\f0ec"} .fa-cloud-download:before{content:"\f0ed"} .fa-cloud-upload:before{content:"\f0ee"} .fa-user-md:before{content:"\f0f0"} .fa-stethoscope:before{content:"\f0f1"} .fa-suitcase:before{content:"\f0f2"} .fa-bell-o:before{content:"\f0a2"} .fa-coffee:before{content:"\f0f4"} .fa-cutlery:before{content:"\f0f5"} .fa-file-text-o:before{content:"\f0f6"} .fa-building-o:before{content:"\f0f7"} .fa-hospital-o:before{content:"\f0f8"} .fa-ambulance:before{content:"\f0f9"} .fa-medkit:before{content:"\f0fa"} .fa-fighter-jet:before{content:"\f0fb"} .fa-beer:before{content:"\f0fc"} .fa-h-square:before{content:"\f0fd"} .fa-plus-square:before{content:"\f0fe"} .fa-angle-double-left:before{content:"\f100"} .fa-angle-double-right:before{content:"\f101"} .fa-angle-double-up:before{content:"\f102"} .fa-angle-double-down:before{content:"\f103"} .fa-angle-left:before{content:"\f104"} .fa-angle-right:before{content:"\f105"} .fa-angle-up:before{content:"\f106"} .fa-angle-down:before{content:"\f107"} .fa-desktop:before{content:"\f108"} .fa-laptop:before{content:"\f109"} .fa-tablet:before{content:"\f10a"} .fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"} .fa-circle-o:before{content:"\f10c"} .fa-quote-left:before{content:"\f10d"} .fa-quote-right:before{content:"\f10e"} .fa-spinner:before{content:"\f110"} .fa-circle:before{content:"\f111"} .fa-mail-reply:before,.fa-reply:before{content:"\f112"} .fa-github-alt:before{content:"\f113"} .fa-folder-o:before{content:"\f114"} .fa-folder-open-o:before{content:"\f115"} .fa-smile-o:before{content:"\f118"} .fa-frown-o:before{content:"\f119"} .fa-meh-o:before{content:"\f11a"} .fa-gamepad:before{content:"\f11b"} .fa-keyboard-o:before{content:"\f11c"} .fa-flag-o:before{content:"\f11d"} .fa-flag-checkered:before{content:"\f11e"} .fa-terminal:before{content:"\f120"} .fa-code:before{content:"\f121"} .fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"} .fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"} .fa-location-arrow:before{content:"\f124"} .fa-crop:before{content:"\f125"} .fa-code-fork:before{content:"\f126"} .fa-unlink:before,.fa-chain-broken:before{content:"\f127"} .fa-question:before{content:"\f128"} .fa-info:before{content:"\f129"} .fa-exclamation:before{content:"\f12a"} .fa-superscript:before{content:"\f12b"} .fa-subscript:before{content:"\f12c"} .fa-eraser:before{content:"\f12d"} .fa-puzzle-piece:before{content:"\f12e"} .fa-microphone:before{content:"\f130"} .fa-microphone-slash:before{content:"\f131"} .fa-shield:before{content:"\f132"} .fa-calendar-o:before{content:"\f133"} .fa-fire-extinguisher:before{content:"\f134"} .fa-rocket:before{content:"\f135"} .fa-maxcdn:before{content:"\f136"} .fa-chevron-circle-left:before{content:"\f137"} .fa-chevron-circle-right:before{content:"\f138"} .fa-chevron-circle-up:before{content:"\f139"} .fa-chevron-circle-down:before{content:"\f13a"} .fa-html5:before{content:"\f13b"} .fa-css3:before{content:"\f13c"} .fa-anchor:before{content:"\f13d"} .fa-unlock-alt:before{content:"\f13e"} .fa-bullseye:before{content:"\f140"} .fa-ellipsis-h:before{content:"\f141"} .fa-ellipsis-v:before{content:"\f142"} .fa-rss-square:before{content:"\f143"} .fa-play-circle:before{content:"\f144"} .fa-ticket:before{content:"\f145"} .fa-minus-square:before{content:"\f146"} .fa-minus-square-o:before{content:"\f147"} .fa-level-up:before{content:"\f148"} .fa-level-down:before{content:"\f149"} .fa-check-square:before{content:"\f14a"} .fa-pencil-square:before{content:"\f14b"} .fa-external-link-square:before{content:"\f14c"} .fa-share-square:before{content:"\f14d"} .fa-compass:before{content:"\f14e"} .fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"} .fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"} .fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"} .fa-euro:before,.fa-eur:before{content:"\f153"} .fa-gbp:before{content:"\f154"} .fa-dollar:before,.fa-usd:before{content:"\f155"} .fa-rupee:before,.fa-inr:before{content:"\f156"} .fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"} .fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"} .fa-won:before,.fa-krw:before{content:"\f159"} .fa-bitcoin:before,.fa-btc:before{content:"\f15a"} .fa-file:before{content:"\f15b"} .fa-file-text:before{content:"\f15c"} .fa-sort-alpha-asc:before{content:"\f15d"} .fa-sort-alpha-desc:before{content:"\f15e"} .fa-sort-amount-asc:before{content:"\f160"} .fa-sort-amount-desc:before{content:"\f161"} .fa-sort-numeric-asc:before{content:"\f162"} .fa-sort-numeric-desc:before{content:"\f163"} .fa-thumbs-up:before{content:"\f164"} .fa-thumbs-down:before{content:"\f165"} .fa-youtube-square:before{content:"\f166"} .fa-youtube:before{content:"\f167"} .fa-xing:before{content:"\f168"} .fa-xing-square:before{content:"\f169"} .fa-youtube-play:before{content:"\f16a"} .fa-dropbox:before{content:"\f16b"} .fa-stack-overflow:before{content:"\f16c"} .fa-instagram:before{content:"\f16d"} .fa-flickr:before{content:"\f16e"} .fa-adn:before{content:"\f170"} .fa-bitbucket:before{content:"\f171"} .fa-bitbucket-square:before{content:"\f172"} .fa-tumblr:before{content:"\f173"} .fa-tumblr-square:before{content:"\f174"} .fa-long-arrow-down:before{content:"\f175"} .fa-long-arrow-up:before{content:"\f176"} .fa-long-arrow-left:before{content:"\f177"} .fa-long-arrow-right:before{content:"\f178"} .fa-apple:before{content:"\f179"} .fa-windows:before{content:"\f17a"} .fa-android:before{content:"\f17b"} .fa-linux:before{content:"\f17c"} .fa-dribbble:before{content:"\f17d"} .fa-skype:before{content:"\f17e"} .fa-foursquare:before{content:"\f180"} .fa-trello:before{content:"\f181"} .fa-female:before{content:"\f182"} .fa-male:before{content:"\f183"} .fa-gittip:before,.fa-gratipay:before{content:"\f184"} .fa-sun-o:before{content:"\f185"} .fa-moon-o:before{content:"\f186"} .fa-archive:before{content:"\f187"} .fa-bug:before{content:"\f188"} .fa-vk:before{content:"\f189"} .fa-weibo:before{content:"\f18a"} .fa-renren:before{content:"\f18b"} .fa-pagelines:before{content:"\f18c"} .fa-stack-exchange:before{content:"\f18d"} .fa-arrow-circle-o-right:before{content:"\f18e"} .fa-arrow-circle-o-left:before{content:"\f190"} .fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"} .fa-dot-circle-o:before{content:"\f192"} .fa-wheelchair:before{content:"\f193"} .fa-vimeo-square:before{content:"\f194"} .fa-turkish-lira:before,.fa-try:before{content:"\f195"} .fa-plus-square-o:before{content:"\f196"} .fa-space-shuttle:before{content:"\f197"} .fa-slack:before{content:"\f198"} .fa-envelope-square:before{content:"\f199"} .fa-wordpress:before{content:"\f19a"} .fa-openid:before{content:"\f19b"} .fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"} .fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"} .fa-yahoo:before{content:"\f19e"} .fa-google:before{content:"\f1a0"} .fa-reddit:before{content:"\f1a1"} .fa-reddit-square:before{content:"\f1a2"} .fa-stumbleupon-circle:before{content:"\f1a3"} .fa-stumbleupon:before{content:"\f1a4"} .fa-delicious:before{content:"\f1a5"} .fa-digg:before{content:"\f1a6"} .fa-pied-piper-pp:before{content:"\f1a7"} .fa-pied-piper-alt:before{content:"\f1a8"} .fa-drupal:before{content:"\f1a9"} .fa-joomla:before{content:"\f1aa"} .fa-language:before{content:"\f1ab"} .fa-fax:before{content:"\f1ac"} .fa-building:before{content:"\f1ad"} .fa-child:before{content:"\f1ae"} .fa-paw:before{content:"\f1b0"} .fa-spoon:before{content:"\f1b1"} .fa-cube:before{content:"\f1b2"} .fa-cubes:before{content:"\f1b3"} .fa-behance:before{content:"\f1b4"} .fa-behance-square:before{content:"\f1b5"} .fa-steam:before{content:"\f1b6"} .fa-steam-square:before{content:"\f1b7"} .fa-recycle:before{content:"\f1b8"} .fa-automobile:before,.fa-car:before{content:"\f1b9"} .fa-cab:before,.fa-taxi:before{content:"\f1ba"} .fa-tree:before{content:"\f1bb"} .fa-spotify:before{content:"\f1bc"} .fa-deviantart:before{content:"\f1bd"} .fa-soundcloud:before{content:"\f1be"} .fa-database:before{content:"\f1c0"} .fa-file-pdf-o:before{content:"\f1c1"} .fa-file-word-o:before{content:"\f1c2"} .fa-file-excel-o:before{content:"\f1c3"} .fa-file-powerpoint-o:before{content:"\f1c4"} .fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"} .fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"} .fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"} .fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"} .fa-file-code-o:before{content:"\f1c9"} .fa-vine:before{content:"\f1ca"} .fa-codepen:before{content:"\f1cb"} .fa-jsfiddle:before{content:"\f1cc"} .fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"} .fa-circle-o-notch:before{content:"\f1ce"} .fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"} .fa-ge:before,.fa-empire:before{content:"\f1d1"} .fa-git-square:before{content:"\f1d2"} .fa-git:before{content:"\f1d3"} .fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"} .fa-tencent-weibo:before{content:"\f1d5"} .fa-qq:before{content:"\f1d6"} .fa-wechat:before,.fa-weixin:before{content:"\f1d7"} .fa-send:before,.fa-paper-plane:before{content:"\f1d8"} .fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"} .fa-history:before{content:"\f1da"} .fa-circle-thin:before{content:"\f1db"} .fa-header:before{content:"\f1dc"} .fa-paragraph:before{content:"\f1dd"} .fa-sliders:before{content:"\f1de"} .fa-share-alt:before{content:"\f1e0"} .fa-share-alt-square:before{content:"\f1e1"} .fa-bomb:before{content:"\f1e2"} .fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"} .fa-tty:before{content:"\f1e4"} .fa-binoculars:before{content:"\f1e5"} .fa-plug:before{content:"\f1e6"} .fa-slideshare:before{content:"\f1e7"} .fa-twitch:before{content:"\f1e8"} .fa-yelp:before{content:"\f1e9"} .fa-newspaper-o:before{content:"\f1ea"} .fa-wifi:before{content:"\f1eb"} .fa-calculator:before{content:"\f1ec"} .fa-paypal:before{content:"\f1ed"} .fa-google-wallet:before{content:"\f1ee"} .fa-cc-visa:before{content:"\f1f0"} .fa-cc-mastercard:before{content:"\f1f1"} .fa-cc-discover:before{content:"\f1f2"} .fa-cc-amex:before{content:"\f1f3"} .fa-cc-paypal:before{content:"\f1f4"} .fa-cc-stripe:before{content:"\f1f5"} .fa-bell-slash:before{content:"\f1f6"} .fa-bell-slash-o:before{content:"\f1f7"} .fa-trash:before{content:"\f1f8"} .fa-copyright:before{content:"\f1f9"} .fa-at:before{content:"\f1fa"} .fa-eyedropper:before{content:"\f1fb"} .fa-paint-brush:before{content:"\f1fc"} .fa-birthday-cake:before{content:"\f1fd"} .fa-area-chart:before{content:"\f1fe"} .fa-pie-chart:before{content:"\f200"} .fa-line-chart:before{content:"\f201"} .fa-lastfm:before{content:"\f202"} .fa-lastfm-square:before{content:"\f203"} .fa-toggle-off:before{content:"\f204"} .fa-toggle-on:before{content:"\f205"} .fa-bicycle:before{content:"\f206"} .fa-bus:before{content:"\f207"} .fa-ioxhost:before{content:"\f208"} .fa-angellist:before{content:"\f209"} .fa-cc:before{content:"\f20a"} .fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"} .fa-meanpath:before{content:"\f20c"} .fa-buysellads:before{content:"\f20d"} .fa-connectdevelop:before{content:"\f20e"} .fa-dashcube:before{content:"\f210"} .fa-forumbee:before{content:"\f211"} .fa-leanpub:before{content:"\f212"} .fa-sellsy:before{content:"\f213"} .fa-shirtsinbulk:before{content:"\f214"} .fa-simplybuilt:before{content:"\f215"} .fa-skyatlas:before{content:"\f216"} .fa-cart-plus:before{content:"\f217"} .fa-cart-arrow-down:before{content:"\f218"} .fa-diamond:before{content:"\f219"} .fa-ship:before{content:"\f21a"} .fa-user-secret:before{content:"\f21b"} .fa-motorcycle:before{content:"\f21c"} .fa-street-view:before{content:"\f21d"} .fa-heartbeat:before{content:"\f21e"} .fa-venus:before{content:"\f221"} .fa-mars:before{content:"\f222"} .fa-mercury:before{content:"\f223"} .fa-intersex:before,.fa-transgender:before{content:"\f224"} .fa-transgender-alt:before{content:"\f225"} .fa-venus-double:before{content:"\f226"} .fa-mars-double:before{content:"\f227"} .fa-venus-mars:before{content:"\f228"} .fa-mars-stroke:before{content:"\f229"} .fa-mars-stroke-v:before{content:"\f22a"} .fa-mars-stroke-h:before{content:"\f22b"} .fa-neuter:before{content:"\f22c"} .fa-genderless:before{content:"\f22d"} .fa-facebook-official:before{content:"\f230"} .fa-pinterest-p:before{content:"\f231"} .fa-whatsapp:before{content:"\f232"} .fa-server:before{content:"\f233"} .fa-user-plus:before{content:"\f234"} .fa-user-times:before{content:"\f235"} .fa-hotel:before,.fa-bed:before{content:"\f236"} .fa-viacoin:before{content:"\f237"} .fa-train:before{content:"\f238"} .fa-subway:before{content:"\f239"} .fa-medium:before{content:"\f23a"} .fa-yc:before,.fa-y-combinator:before{content:"\f23b"} .fa-optin-monster:before{content:"\f23c"} .fa-opencart:before{content:"\f23d"} .fa-expeditedssl:before{content:"\f23e"} .fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"} .fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"} .fa-battery-2:before,.fa-battery-half:before{content:"\f242"} .fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"} .fa-battery-0:before,.fa-battery-empty:before{content:"\f244"} .fa-mouse-pointer:before{content:"\f245"} .fa-i-cursor:before{content:"\f246"} .fa-object-group:before{content:"\f247"} .fa-object-ungroup:before{content:"\f248"} .fa-sticky-note:before{content:"\f249"} .fa-sticky-note-o:before{content:"\f24a"} .fa-cc-jcb:before{content:"\f24b"} .fa-cc-diners-club:before{content:"\f24c"} .fa-clone:before{content:"\f24d"} .fa-balance-scale:before{content:"\f24e"} .fa-hourglass-o:before{content:"\f250"} .fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"} .fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"} .fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"} .fa-hourglass:before{content:"\f254"} .fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"} .fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"} .fa-hand-scissors-o:before{content:"\f257"} .fa-hand-lizard-o:before{content:"\f258"} .fa-hand-spock-o:before{content:"\f259"} .fa-hand-pointer-o:before{content:"\f25a"} .fa-hand-peace-o:before{content:"\f25b"} .fa-trademark:before{content:"\f25c"} .fa-registered:before{content:"\f25d"} .fa-creative-commons:before{content:"\f25e"} .fa-gg:before{content:"\f260"} .fa-gg-circle:before{content:"\f261"} .fa-tripadvisor:before{content:"\f262"} .fa-odnoklassniki:before{content:"\f263"} .fa-odnoklassniki-square:before{content:"\f264"} .fa-get-pocket:before{content:"\f265"} .fa-wikipedia-w:before{content:"\f266"} .fa-safari:before{content:"\f267"} .fa-chrome:before{content:"\f268"} .fa-firefox:before{content:"\f269"} .fa-opera:before{content:"\f26a"} .fa-internet-explorer:before{content:"\f26b"} .fa-tv:before,.fa-television:before{content:"\f26c"} .fa-contao:before{content:"\f26d"} .fa-500px:before{content:"\f26e"} .fa-amazon:before{content:"\f270"} .fa-calendar-plus-o:before{content:"\f271"} .fa-calendar-minus-o:before{content:"\f272"} .fa-calendar-times-o:before{content:"\f273"} .fa-calendar-check-o:before{content:"\f274"} .fa-industry:before{content:"\f275"} .fa-map-pin:before{content:"\f276"} .fa-map-signs:before{content:"\f277"} .fa-map-o:before{content:"\f278"} .fa-map:before{content:"\f279"} .fa-commenting:before{content:"\f27a"} .fa-commenting-o:before{content:"\f27b"} .fa-houzz:before{content:"\f27c"} .fa-vimeo:before{content:"\f27d"} .fa-black-tie:before{content:"\f27e"} .fa-fonticons:before{content:"\f280"} .fa-reddit-alien:before{content:"\f281"} .fa-edge:before{content:"\f282"} .fa-credit-card-alt:before{content:"\f283"} .fa-codiepie:before{content:"\f284"} .fa-modx:before{content:"\f285"} .fa-fort-awesome:before{content:"\f286"} .fa-usb:before{content:"\f287"} .fa-product-hunt:before{content:"\f288"} .fa-mixcloud:before{content:"\f289"} .fa-scribd:before{content:"\f28a"} .fa-pause-circle:before{content:"\f28b"} .fa-pause-circle-o:before{content:"\f28c"} .fa-stop-circle:before{content:"\f28d"} .fa-stop-circle-o:before{content:"\f28e"} .fa-shopping-bag:before{content:"\f290"} .fa-shopping-basket:before{content:"\f291"} .fa-hashtag:before{content:"\f292"} .fa-bluetooth:before{content:"\f293"} .fa-bluetooth-b:before{content:"\f294"} .fa-percent:before{content:"\f295"} .fa-gitlab:before{content:"\f296"} .fa-wpbeginner:before{content:"\f297"} .fa-wpforms:before{content:"\f298"} .fa-envira:before{content:"\f299"} .fa-universal-access:before{content:"\f29a"} .fa-wheelchair-alt:before{content:"\f29b"} .fa-question-circle-o:before{content:"\f29c"} .fa-blind:before{content:"\f29d"} .fa-audio-description:before{content:"\f29e"} .fa-volume-control-phone:before{content:"\f2a0"} .fa-braille:before{content:"\f2a1"} .fa-assistive-listening-systems:before{content:"\f2a2"} .fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"} .fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"} .fa-glide:before{content:"\f2a5"} .fa-glide-g:before{content:"\f2a6"} .fa-signing:before,.fa-sign-language:before{content:"\f2a7"} .fa-low-vision:before{content:"\f2a8"} .fa-viadeo:before{content:"\f2a9"} .fa-viadeo-square:before{content:"\f2aa"} .fa-snapchat:before{content:"\f2ab"} .fa-snapchat-ghost:before{content:"\f2ac"} .fa-snapchat-square:before{content:"\f2ad"} .fa-pied-piper:before{content:"\f2ae"} .fa-first-order:before{content:"\f2b0"} .fa-yoast:before{content:"\f2b1"} .fa-themeisle:before{content:"\f2b2"} .fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"} .fa-fa:before,.fa-font-awesome:before{content:"\f2b4"} .fa-handshake-o:before{content:"\f2b5"} .fa-envelope-open:before{content:"\f2b6"} .fa-envelope-open-o:before{content:"\f2b7"} .fa-linode:before{content:"\f2b8"} .fa-address-book:before{content:"\f2b9"} .fa-address-book-o:before{content:"\f2ba"} .fa-vcard:before,.fa-address-card:before{content:"\f2bb"} .fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"} .fa-user-circle:before{content:"\f2bd"} .fa-user-circle-o:before{content:"\f2be"} .fa-user-o:before{content:"\f2c0"} .fa-id-badge:before{content:"\f2c1"} .fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"} .fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"} .fa-quora:before{content:"\f2c4"} .fa-free-code-camp:before{content:"\f2c5"} .fa-telegram:before{content:"\f2c6"} .fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"} .fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"} .fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"} .fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"} .fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"} .fa-shower:before{content:"\f2cc"} .fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"} .fa-podcast:before{content:"\f2ce"} .fa-window-maximize:before{content:"\f2d0"} .fa-window-minimize:before{content:"\f2d1"} .fa-window-restore:before{content:"\f2d2"} .fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"} .fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"} .fa-bandcamp:before{content:"\f2d5"} .fa-grav:before{content:"\f2d6"} .fa-etsy:before{content:"\f2d7"} .fa-imdb:before{content:"\f2d8"} .fa-ravelry:before{content:"\f2d9"} .fa-eercast:before{content:"\f2da"} .fa-microchip:before{content:"\f2db"} .fa-snowflake-o:before{content:"\f2dc"} .fa-superpowers:before{content:"\f2dd"} .fa-wpexplorer:before{content:"\f2de"} .fa-meetup:before{content:"\f2e0"} .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0} .sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/resources/static/css/mdb.css b/resources/static/css/mdb.css new file mode 100644 index 0000000..4189fbc --- /dev/null +++ b/resources/static/css/mdb.css @@ -0,0 +1,6582 @@ +/*! + * Material Design for Bootstrap 4 + * Version: MDB Free 4.3.2 + * + * + * Copyright: Material Design for Bootstrap + * http://mdbootstrap.com/ + * + * Read the license: http://mdbootstrap.com/license/ + * + * + * Documentation: http://mdbootstrap.com/ + * + * Getting started: http://mdbootstrap.com/getting-started/ + * + * Tutorials: http://mdbootstrap.com/bootstrap-tutorial/ + * + * Templates: http://mdbootstrap.com/templates/ + * + * Support: http://mdbootstrap.com/forums/forum/support/ + * + * Contact: office@mdbootstrap.com + * + * Atribution: Animate CSS, Twitter Bootstrap, Materialize CSS, Normalize CSS, Waves JS, WOW JS, Toastr, Chart.js , Hammer.js + * + */ +/********************* + Mixins +**********************/ +.mdb-color.lighten-5 { + background-color: #D0D6E2 !important; } + +.mdb-color-text.text-lighten-5 { + color: #D0D6E2 !important; } + +.mdb-color.lighten-4 { + background-color: #B1BACE !important; } + +.mdb-color-text.text-lighten-4 { + color: #B1BACE !important; } + +.mdb-color.lighten-3 { + background-color: #929FBA !important; } + +.mdb-color-text.text-lighten-3 { + color: #929FBA !important; } + +.mdb-color.lighten-2 { + background-color: #7283A7 !important; } + +.mdb-color-text.text-lighten-2 { + color: #7283A7 !important; } + +.mdb-color.lighten-1 { + background-color: #59698D !important; } + +.mdb-color-text.text-lighten-1 { + color: #59698D !important; } + +.mdb-color { + background-color: #45526E !important; } + +.mdb-color-text { + color: #45526E !important; } + +.mdb-color.darken-1 { + background-color: #3B465E !important; } + +.mdb-color-text.text-darken-1 { + color: #3B465E !important; } + +.mdb-color.darken-2 { + background-color: #2E3951 !important; } + +.mdb-color-text.text-darken-2 { + color: #2E3951 !important; } + +.mdb-color.darken-3 { + background-color: #1C2A48 !important; } + +.mdb-color-text.text-darken-3 { + color: #1C2A48 !important; } + +.mdb-color.darken-4 { + background-color: #1C2331 !important; } + +.mdb-color-text.text-darken-4 { + color: #1C2331 !important; } + +.red.lighten-5 { + background-color: #FFEBEE !important; } + +.red-text.text-lighten-5 { + color: #FFEBEE !important; } + +.red.lighten-4 { + background-color: #FFCDD2 !important; } + +.red-text.text-lighten-4 { + color: #FFCDD2 !important; } + +.red.lighten-3 { + background-color: #EF9A9A !important; } + +.red-text.text-lighten-3 { + color: #EF9A9A !important; } + +.red.lighten-2 { + background-color: #E57373 !important; } + +.red-text.text-lighten-2 { + color: #E57373 !important; } + +.red.lighten-1 { + background-color: #EF5350 !important; } + +.red-text.text-lighten-1 { + color: #EF5350 !important; } + +.red { + background-color: #F44336 !important; } + +.red-text { + color: #F44336 !important; } + +.red.darken-1 { + background-color: #E53935 !important; } + +.red-text.text-darken-1 { + color: #E53935 !important; } + +.red.darken-2 { + background-color: #D32F2F !important; } + +.red-text.text-darken-2 { + color: #D32F2F !important; } + +.red.darken-3 { + background-color: #C62828 !important; } + +.red-text.text-darken-3 { + color: #C62828 !important; } + +.red.darken-4 { + background-color: #B71C1C !important; } + +.red-text.text-darken-4 { + color: #B71C1C !important; } + +.red.accent-1 { + background-color: #FF8A80 !important; } + +.red-text.text-accent-1 { + color: #FF8A80 !important; } + +.red.accent-2 { + background-color: #FF5252 !important; } + +.red-text.text-accent-2 { + color: #FF5252 !important; } + +.red.accent-3 { + background-color: #FF1744 !important; } + +.red-text.text-accent-3 { + color: #FF1744 !important; } + +.red.accent-4 { + background-color: #D50000 !important; } + +.red-text.text-accent-4 { + color: #D50000 !important; } + +.pink.lighten-5 { + background-color: #fce4ec !important; } + +.pink-text.text-lighten-5 { + color: #fce4ec !important; } + +.pink.lighten-4 { + background-color: #f8bbd0 !important; } + +.pink-text.text-lighten-4 { + color: #f8bbd0 !important; } + +.pink.lighten-3 { + background-color: #f48fb1 !important; } + +.pink-text.text-lighten-3 { + color: #f48fb1 !important; } + +.pink.lighten-2 { + background-color: #f06292 !important; } + +.pink-text.text-lighten-2 { + color: #f06292 !important; } + +.pink.lighten-1 { + background-color: #ec407a !important; } + +.pink-text.text-lighten-1 { + color: #ec407a !important; } + +.pink { + background-color: #e91e63 !important; } + +.pink-text { + color: #e91e63 !important; } + +.pink.darken-1 { + background-color: #d81b60 !important; } + +.pink-text.text-darken-1 { + color: #d81b60 !important; } + +.pink.darken-2 { + background-color: #c2185b !important; } + +.pink-text.text-darken-2 { + color: #c2185b !important; } + +.pink.darken-3 { + background-color: #ad1457 !important; } + +.pink-text.text-darken-3 { + color: #ad1457 !important; } + +.pink.darken-4 { + background-color: #880e4f !important; } + +.pink-text.text-darken-4 { + color: #880e4f !important; } + +.pink.accent-1 { + background-color: #ff80ab !important; } + +.pink-text.text-accent-1 { + color: #ff80ab !important; } + +.pink.accent-2 { + background-color: #ff4081 !important; } + +.pink-text.text-accent-2 { + color: #ff4081 !important; } + +.pink.accent-3 { + background-color: #f50057 !important; } + +.pink-text.text-accent-3 { + color: #f50057 !important; } + +.pink.accent-4 { + background-color: #c51162 !important; } + +.pink-text.text-accent-4 { + color: #c51162 !important; } + +.purple.lighten-5 { + background-color: #f3e5f5 !important; } + +.purple-text.text-lighten-5 { + color: #f3e5f5 !important; } + +.purple.lighten-4 { + background-color: #e1bee7 !important; } + +.purple-text.text-lighten-4 { + color: #e1bee7 !important; } + +.purple.lighten-3 { + background-color: #ce93d8 !important; } + +.purple-text.text-lighten-3 { + color: #ce93d8 !important; } + +.purple.lighten-2 { + background-color: #ba68c8 !important; } + +.purple-text.text-lighten-2 { + color: #ba68c8 !important; } + +.purple.lighten-1 { + background-color: #ab47bc !important; } + +.purple-text.text-lighten-1 { + color: #ab47bc !important; } + +.purple { + background-color: #9c27b0 !important; } + +.purple-text { + color: #9c27b0 !important; } + +.purple.darken-1 { + background-color: #8e24aa !important; } + +.purple-text.text-darken-1 { + color: #8e24aa !important; } + +.purple.darken-2 { + background-color: #7b1fa2 !important; } + +.purple-text.text-darken-2 { + color: #7b1fa2 !important; } + +.purple.darken-3 { + background-color: #6a1b9a !important; } + +.purple-text.text-darken-3 { + color: #6a1b9a !important; } + +.purple.darken-4 { + background-color: #4a148c !important; } + +.purple-text.text-darken-4 { + color: #4a148c !important; } + +.purple.accent-1 { + background-color: #ea80fc !important; } + +.purple-text.text-accent-1 { + color: #ea80fc !important; } + +.purple.accent-2 { + background-color: #e040fb !important; } + +.purple-text.text-accent-2 { + color: #e040fb !important; } + +.purple.accent-3 { + background-color: #d500f9 !important; } + +.purple-text.text-accent-3 { + color: #d500f9 !important; } + +.purple.accent-4 { + background-color: #aa00ff !important; } + +.purple-text.text-accent-4 { + color: #aa00ff !important; } + +.deep-purple.lighten-5 { + background-color: #ede7f6 !important; } + +.deep-purple-text.text-lighten-5 { + color: #ede7f6 !important; } + +.deep-purple.lighten-4 { + background-color: #d1c4e9 !important; } + +.deep-purple-text.text-lighten-4 { + color: #d1c4e9 !important; } + +.deep-purple.lighten-3 { + background-color: #b39ddb !important; } + +.deep-purple-text.text-lighten-3 { + color: #b39ddb !important; } + +.deep-purple.lighten-2 { + background-color: #9575cd !important; } + +.deep-purple-text.text-lighten-2 { + color: #9575cd !important; } + +.deep-purple.lighten-1 { + background-color: #7e57c2 !important; } + +.deep-purple-text.text-lighten-1 { + color: #7e57c2 !important; } + +.deep-purple { + background-color: #673ab7 !important; } + +.deep-purple-text { + color: #673ab7 !important; } + +.deep-purple.darken-1 { + background-color: #5e35b1 !important; } + +.deep-purple-text.text-darken-1 { + color: #5e35b1 !important; } + +.deep-purple.darken-2 { + background-color: #512da8 !important; } + +.deep-purple-text.text-darken-2 { + color: #512da8 !important; } + +.deep-purple.darken-3 { + background-color: #4527a0 !important; } + +.deep-purple-text.text-darken-3 { + color: #4527a0 !important; } + +.deep-purple.darken-4 { + background-color: #311b92 !important; } + +.deep-purple-text.text-darken-4 { + color: #311b92 !important; } + +.deep-purple.accent-1 { + background-color: #b388ff !important; } + +.deep-purple-text.text-accent-1 { + color: #b388ff !important; } + +.deep-purple.accent-2 { + background-color: #7c4dff !important; } + +.deep-purple-text.text-accent-2 { + color: #7c4dff !important; } + +.deep-purple.accent-3 { + background-color: #651fff !important; } + +.deep-purple-text.text-accent-3 { + color: #651fff !important; } + +.deep-purple.accent-4 { + background-color: #6200ea !important; } + +.deep-purple-text.text-accent-4 { + color: #6200ea !important; } + +.indigo.lighten-5 { + background-color: #e8eaf6 !important; } + +.indigo-text.text-lighten-5 { + color: #e8eaf6 !important; } + +.indigo.lighten-4 { + background-color: #c5cae9 !important; } + +.indigo-text.text-lighten-4 { + color: #c5cae9 !important; } + +.indigo.lighten-3 { + background-color: #9fa8da !important; } + +.indigo-text.text-lighten-3 { + color: #9fa8da !important; } + +.indigo.lighten-2 { + background-color: #7986cb !important; } + +.indigo-text.text-lighten-2 { + color: #7986cb !important; } + +.indigo.lighten-1 { + background-color: #5c6bc0 !important; } + +.indigo-text.text-lighten-1 { + color: #5c6bc0 !important; } + +.indigo { + background-color: #3f51b5 !important; } + +.indigo-text { + color: #3f51b5 !important; } + +.indigo.darken-1 { + background-color: #3949ab !important; } + +.indigo-text.text-darken-1 { + color: #3949ab !important; } + +.indigo.darken-2 { + background-color: #303f9f !important; } + +.indigo-text.text-darken-2 { + color: #303f9f !important; } + +.indigo.darken-3 { + background-color: #283593 !important; } + +.indigo-text.text-darken-3 { + color: #283593 !important; } + +.indigo.darken-4 { + background-color: #1a237e !important; } + +.indigo-text.text-darken-4 { + color: #1a237e !important; } + +.indigo.accent-1 { + background-color: #8c9eff !important; } + +.indigo-text.text-accent-1 { + color: #8c9eff !important; } + +.indigo.accent-2 { + background-color: #536dfe !important; } + +.indigo-text.text-accent-2 { + color: #536dfe !important; } + +.indigo.accent-3 { + background-color: #3d5afe !important; } + +.indigo-text.text-accent-3 { + color: #3d5afe !important; } + +.indigo.accent-4 { + background-color: #304ffe !important; } + +.indigo-text.text-accent-4 { + color: #304ffe !important; } + +.blue.lighten-5 { + background-color: #E3F2FD !important; } + +.blue-text.text-lighten-5 { + color: #E3F2FD !important; } + +.blue.lighten-4 { + background-color: #BBDEFB !important; } + +.blue-text.text-lighten-4 { + color: #BBDEFB !important; } + +.blue.lighten-3 { + background-color: #90CAF9 !important; } + +.blue-text.text-lighten-3 { + color: #90CAF9 !important; } + +.blue.lighten-2 { + background-color: #64B5F6 !important; } + +.blue-text.text-lighten-2 { + color: #64B5F6 !important; } + +.blue.lighten-1 { + background-color: #42A5F5 !important; } + +.blue-text.text-lighten-1 { + color: #42A5F5 !important; } + +.blue { + background-color: #2196F3 !important; } + +.blue-text { + color: #2196F3 !important; } + +.blue.darken-1 { + background-color: #1E88E5 !important; } + +.blue-text.text-darken-1 { + color: #1E88E5 !important; } + +.blue.darken-2 { + background-color: #1976D2 !important; } + +.blue-text.text-darken-2 { + color: #1976D2 !important; } + +.blue.darken-3 { + background-color: #1565C0 !important; } + +.blue-text.text-darken-3 { + color: #1565C0 !important; } + +.blue.darken-4 { + background-color: #0D47A1 !important; } + +.blue-text.text-darken-4 { + color: #0D47A1 !important; } + +.blue.accent-1 { + background-color: #82B1FF !important; } + +.blue-text.text-accent-1 { + color: #82B1FF !important; } + +.blue.accent-2 { + background-color: #448AFF !important; } + +.blue-text.text-accent-2 { + color: #448AFF !important; } + +.blue.accent-3 { + background-color: #2979FF !important; } + +.blue-text.text-accent-3 { + color: #2979FF !important; } + +.blue.accent-4 { + background-color: #2962FF !important; } + +.blue-text.text-accent-4 { + color: #2962FF !important; } + +.light-blue.lighten-5 { + background-color: #e1f5fe !important; } + +.light-blue-text.text-lighten-5 { + color: #e1f5fe !important; } + +.light-blue.lighten-4 { + background-color: #b3e5fc !important; } + +.light-blue-text.text-lighten-4 { + color: #b3e5fc !important; } + +.light-blue.lighten-3 { + background-color: #81d4fa !important; } + +.light-blue-text.text-lighten-3 { + color: #81d4fa !important; } + +.light-blue.lighten-2 { + background-color: #4fc3f7 !important; } + +.light-blue-text.text-lighten-2 { + color: #4fc3f7 !important; } + +.light-blue.lighten-1 { + background-color: #29b6f6 !important; } + +.light-blue-text.text-lighten-1 { + color: #29b6f6 !important; } + +.light-blue { + background-color: #03a9f4 !important; } + +.light-blue-text { + color: #03a9f4 !important; } + +.light-blue.darken-1 { + background-color: #039be5 !important; } + +.light-blue-text.text-darken-1 { + color: #039be5 !important; } + +.light-blue.darken-2 { + background-color: #0288d1 !important; } + +.light-blue-text.text-darken-2 { + color: #0288d1 !important; } + +.light-blue.darken-3 { + background-color: #0277bd !important; } + +.light-blue-text.text-darken-3 { + color: #0277bd !important; } + +.light-blue.darken-4 { + background-color: #01579b !important; } + +.light-blue-text.text-darken-4 { + color: #01579b !important; } + +.light-blue.accent-1 { + background-color: #80d8ff !important; } + +.light-blue-text.text-accent-1 { + color: #80d8ff !important; } + +.light-blue.accent-2 { + background-color: #40c4ff !important; } + +.light-blue-text.text-accent-2 { + color: #40c4ff !important; } + +.light-blue.accent-3 { + background-color: #00b0ff !important; } + +.light-blue-text.text-accent-3 { + color: #00b0ff !important; } + +.light-blue.accent-4 { + background-color: #0091ea !important; } + +.light-blue-text.text-accent-4 { + color: #0091ea !important; } + +.cyan.lighten-5 { + background-color: #e0f7fa !important; } + +.cyan-text.text-lighten-5 { + color: #e0f7fa !important; } + +.cyan.lighten-4 { + background-color: #b2ebf2 !important; } + +.cyan-text.text-lighten-4 { + color: #b2ebf2 !important; } + +.cyan.lighten-3 { + background-color: #80deea !important; } + +.cyan-text.text-lighten-3 { + color: #80deea !important; } + +.cyan.lighten-2 { + background-color: #4dd0e1 !important; } + +.cyan-text.text-lighten-2 { + color: #4dd0e1 !important; } + +.cyan.lighten-1 { + background-color: #26c6da !important; } + +.cyan-text.text-lighten-1 { + color: #26c6da !important; } + +.cyan { + background-color: #00bcd4 !important; } + +.cyan-text { + color: #00bcd4 !important; } + +.cyan.darken-1 { + background-color: #00acc1 !important; } + +.cyan-text.text-darken-1 { + color: #00acc1 !important; } + +.cyan.darken-2 { + background-color: #0097a7 !important; } + +.cyan-text.text-darken-2 { + color: #0097a7 !important; } + +.cyan.darken-3 { + background-color: #00838f !important; } + +.cyan-text.text-darken-3 { + color: #00838f !important; } + +.cyan.darken-4 { + background-color: #006064 !important; } + +.cyan-text.text-darken-4 { + color: #006064 !important; } + +.cyan.accent-1 { + background-color: #84ffff !important; } + +.cyan-text.text-accent-1 { + color: #84ffff !important; } + +.cyan.accent-2 { + background-color: #18ffff !important; } + +.cyan-text.text-accent-2 { + color: #18ffff !important; } + +.cyan.accent-3 { + background-color: #00e5ff !important; } + +.cyan-text.text-accent-3 { + color: #00e5ff !important; } + +.cyan.accent-4 { + background-color: #00b8d4 !important; } + +.cyan-text.text-accent-4 { + color: #00b8d4 !important; } + +.teal.lighten-5 { + background-color: #e0f2f1 !important; } + +.teal-text.text-lighten-5 { + color: #e0f2f1 !important; } + +.teal.lighten-4 { + background-color: #b2dfdb !important; } + +.teal-text.text-lighten-4 { + color: #b2dfdb !important; } + +.teal.lighten-3 { + background-color: #80cbc4 !important; } + +.teal-text.text-lighten-3 { + color: #80cbc4 !important; } + +.teal.lighten-2 { + background-color: #4db6ac !important; } + +.teal-text.text-lighten-2 { + color: #4db6ac !important; } + +.teal.lighten-1 { + background-color: #26a69a !important; } + +.teal-text.text-lighten-1 { + color: #26a69a !important; } + +.teal { + background-color: #009688 !important; } + +.teal-text { + color: #009688 !important; } + +.teal.darken-1 { + background-color: #00897b !important; } + +.teal-text.text-darken-1 { + color: #00897b !important; } + +.teal.darken-2 { + background-color: #00796b !important; } + +.teal-text.text-darken-2 { + color: #00796b !important; } + +.teal.darken-3 { + background-color: #00695c !important; } + +.teal-text.text-darken-3 { + color: #00695c !important; } + +.teal.darken-4 { + background-color: #004d40 !important; } + +.teal-text.text-darken-4 { + color: #004d40 !important; } + +.teal.accent-1 { + background-color: #a7ffeb !important; } + +.teal-text.text-accent-1 { + color: #a7ffeb !important; } + +.teal.accent-2 { + background-color: #64ffda !important; } + +.teal-text.text-accent-2 { + color: #64ffda !important; } + +.teal.accent-3 { + background-color: #1de9b6 !important; } + +.teal-text.text-accent-3 { + color: #1de9b6 !important; } + +.teal.accent-4 { + background-color: #00bfa5 !important; } + +.teal-text.text-accent-4 { + color: #00bfa5 !important; } + +.green.lighten-5 { + background-color: #E8F5E9 !important; } + +.green-text.text-lighten-5 { + color: #E8F5E9 !important; } + +.green.lighten-4 { + background-color: #C8E6C9 !important; } + +.green-text.text-lighten-4 { + color: #C8E6C9 !important; } + +.green.lighten-3 { + background-color: #A5D6A7 !important; } + +.green-text.text-lighten-3 { + color: #A5D6A7 !important; } + +.green.lighten-2 { + background-color: #81C784 !important; } + +.green-text.text-lighten-2 { + color: #81C784 !important; } + +.green.lighten-1 { + background-color: #66BB6A !important; } + +.green-text.text-lighten-1 { + color: #66BB6A !important; } + +.green { + background-color: #4CAF50 !important; } + +.green-text { + color: #4CAF50 !important; } + +.green.darken-1 { + background-color: #43A047 !important; } + +.green-text.text-darken-1 { + color: #43A047 !important; } + +.green.darken-2 { + background-color: #388E3C !important; } + +.green-text.text-darken-2 { + color: #388E3C !important; } + +.green.darken-3 { + background-color: #2E7D32 !important; } + +.green-text.text-darken-3 { + color: #2E7D32 !important; } + +.green.darken-4 { + background-color: #1B5E20 !important; } + +.green-text.text-darken-4 { + color: #1B5E20 !important; } + +.green.accent-1 { + background-color: #B9F6CA !important; } + +.green-text.text-accent-1 { + color: #B9F6CA !important; } + +.green.accent-2 { + background-color: #69F0AE !important; } + +.green-text.text-accent-2 { + color: #69F0AE !important; } + +.green.accent-3 { + background-color: #00E676 !important; } + +.green-text.text-accent-3 { + color: #00E676 !important; } + +.green.accent-4 { + background-color: #00C853 !important; } + +.green-text.text-accent-4 { + color: #00C853 !important; } + +.light-green.lighten-5 { + background-color: #f1f8e9 !important; } + +.light-green-text.text-lighten-5 { + color: #f1f8e9 !important; } + +.light-green.lighten-4 { + background-color: #dcedc8 !important; } + +.light-green-text.text-lighten-4 { + color: #dcedc8 !important; } + +.light-green.lighten-3 { + background-color: #c5e1a5 !important; } + +.light-green-text.text-lighten-3 { + color: #c5e1a5 !important; } + +.light-green.lighten-2 { + background-color: #aed581 !important; } + +.light-green-text.text-lighten-2 { + color: #aed581 !important; } + +.light-green.lighten-1 { + background-color: #9ccc65 !important; } + +.light-green-text.text-lighten-1 { + color: #9ccc65 !important; } + +.light-green { + background-color: #8bc34a !important; } + +.light-green-text { + color: #8bc34a !important; } + +.light-green.darken-1 { + background-color: #7cb342 !important; } + +.light-green-text.text-darken-1 { + color: #7cb342 !important; } + +.light-green.darken-2 { + background-color: #689f38 !important; } + +.light-green-text.text-darken-2 { + color: #689f38 !important; } + +.light-green.darken-3 { + background-color: #558b2f !important; } + +.light-green-text.text-darken-3 { + color: #558b2f !important; } + +.light-green.darken-4 { + background-color: #33691e !important; } + +.light-green-text.text-darken-4 { + color: #33691e !important; } + +.light-green.accent-1 { + background-color: #ccff90 !important; } + +.light-green-text.text-accent-1 { + color: #ccff90 !important; } + +.light-green.accent-2 { + background-color: #b2ff59 !important; } + +.light-green-text.text-accent-2 { + color: #b2ff59 !important; } + +.light-green.accent-3 { + background-color: #76ff03 !important; } + +.light-green-text.text-accent-3 { + color: #76ff03 !important; } + +.light-green.accent-4 { + background-color: #64dd17 !important; } + +.light-green-text.text-accent-4 { + color: #64dd17 !important; } + +.lime.lighten-5 { + background-color: #f9fbe7 !important; } + +.lime-text.text-lighten-5 { + color: #f9fbe7 !important; } + +.lime.lighten-4 { + background-color: #f0f4c3 !important; } + +.lime-text.text-lighten-4 { + color: #f0f4c3 !important; } + +.lime.lighten-3 { + background-color: #e6ee9c !important; } + +.lime-text.text-lighten-3 { + color: #e6ee9c !important; } + +.lime.lighten-2 { + background-color: #dce775 !important; } + +.lime-text.text-lighten-2 { + color: #dce775 !important; } + +.lime.lighten-1 { + background-color: #d4e157 !important; } + +.lime-text.text-lighten-1 { + color: #d4e157 !important; } + +.lime { + background-color: #cddc39 !important; } + +.lime-text { + color: #cddc39 !important; } + +.lime.darken-1 { + background-color: #c0ca33 !important; } + +.lime-text.text-darken-1 { + color: #c0ca33 !important; } + +.lime.darken-2 { + background-color: #afb42b !important; } + +.lime-text.text-darken-2 { + color: #afb42b !important; } + +.lime.darken-3 { + background-color: #9e9d24 !important; } + +.lime-text.text-darken-3 { + color: #9e9d24 !important; } + +.lime.darken-4 { + background-color: #827717 !important; } + +.lime-text.text-darken-4 { + color: #827717 !important; } + +.lime.accent-1 { + background-color: #f4ff81 !important; } + +.lime-text.text-accent-1 { + color: #f4ff81 !important; } + +.lime.accent-2 { + background-color: #eeff41 !important; } + +.lime-text.text-accent-2 { + color: #eeff41 !important; } + +.lime.accent-3 { + background-color: #c6ff00 !important; } + +.lime-text.text-accent-3 { + color: #c6ff00 !important; } + +.lime.accent-4 { + background-color: #aeea00 !important; } + +.lime-text.text-accent-4 { + color: #aeea00 !important; } + +.yellow.lighten-5 { + background-color: #fffde7 !important; } + +.yellow-text.text-lighten-5 { + color: #fffde7 !important; } + +.yellow.lighten-4 { + background-color: #fff9c4 !important; } + +.yellow-text.text-lighten-4 { + color: #fff9c4 !important; } + +.yellow.lighten-3 { + background-color: #fff59d !important; } + +.yellow-text.text-lighten-3 { + color: #fff59d !important; } + +.yellow.lighten-2 { + background-color: #fff176 !important; } + +.yellow-text.text-lighten-2 { + color: #fff176 !important; } + +.yellow.lighten-1 { + background-color: #ffee58 !important; } + +.yellow-text.text-lighten-1 { + color: #ffee58 !important; } + +.yellow { + background-color: #ffeb3b !important; } + +.yellow-text { + color: #ffeb3b !important; } + +.yellow.darken-1 { + background-color: #fdd835 !important; } + +.yellow-text.text-darken-1 { + color: #fdd835 !important; } + +.yellow.darken-2 { + background-color: #fbc02d !important; } + +.yellow-text.text-darken-2 { + color: #fbc02d !important; } + +.yellow.darken-3 { + background-color: #f9a825 !important; } + +.yellow-text.text-darken-3 { + color: #f9a825 !important; } + +.yellow.darken-4 { + background-color: #f57f17 !important; } + +.yellow-text.text-darken-4 { + color: #f57f17 !important; } + +.yellow.accent-1 { + background-color: #ffff8d !important; } + +.yellow-text.text-accent-1 { + color: #ffff8d !important; } + +.yellow.accent-2 { + background-color: #ffff00 !important; } + +.yellow-text.text-accent-2 { + color: #ffff00 !important; } + +.yellow.accent-3 { + background-color: #ffea00 !important; } + +.yellow-text.text-accent-3 { + color: #ffea00 !important; } + +.yellow.accent-4 { + background-color: #ffd600 !important; } + +.yellow-text.text-accent-4 { + color: #ffd600 !important; } + +.amber.lighten-5 { + background-color: #fff8e1 !important; } + +.amber-text.text-lighten-5 { + color: #fff8e1 !important; } + +.amber.lighten-4 { + background-color: #ffecb3 !important; } + +.amber-text.text-lighten-4 { + color: #ffecb3 !important; } + +.amber.lighten-3 { + background-color: #ffe082 !important; } + +.amber-text.text-lighten-3 { + color: #ffe082 !important; } + +.amber.lighten-2 { + background-color: #ffd54f !important; } + +.amber-text.text-lighten-2 { + color: #ffd54f !important; } + +.amber.lighten-1 { + background-color: #ffca28 !important; } + +.amber-text.text-lighten-1 { + color: #ffca28 !important; } + +.amber { + background-color: #ffc107 !important; } + +.amber-text { + color: #ffc107 !important; } + +.amber.darken-1 { + background-color: #ffb300 !important; } + +.amber-text.text-darken-1 { + color: #ffb300 !important; } + +.amber.darken-2 { + background-color: #ffa000 !important; } + +.amber-text.text-darken-2 { + color: #ffa000 !important; } + +.amber.darken-3 { + background-color: #ff8f00 !important; } + +.amber-text.text-darken-3 { + color: #ff8f00 !important; } + +.amber.darken-4 { + background-color: #ff6f00 !important; } + +.amber-text.text-darken-4 { + color: #ff6f00 !important; } + +.amber.accent-1 { + background-color: #ffe57f !important; } + +.amber-text.text-accent-1 { + color: #ffe57f !important; } + +.amber.accent-2 { + background-color: #ffd740 !important; } + +.amber-text.text-accent-2 { + color: #ffd740 !important; } + +.amber.accent-3 { + background-color: #ffc400 !important; } + +.amber-text.text-accent-3 { + color: #ffc400 !important; } + +.amber.accent-4 { + background-color: #ffab00 !important; } + +.amber-text.text-accent-4 { + color: #ffab00 !important; } + +.orange.lighten-5 { + background-color: #fff3e0 !important; } + +.orange-text.text-lighten-5 { + color: #fff3e0 !important; } + +.orange.lighten-4 { + background-color: #ffe0b2 !important; } + +.orange-text.text-lighten-4 { + color: #ffe0b2 !important; } + +.orange.lighten-3 { + background-color: #ffcc80 !important; } + +.orange-text.text-lighten-3 { + color: #ffcc80 !important; } + +.orange.lighten-2 { + background-color: #ffb74d !important; } + +.orange-text.text-lighten-2 { + color: #ffb74d !important; } + +.orange.lighten-1 { + background-color: #ffa726 !important; } + +.orange-text.text-lighten-1 { + color: #ffa726 !important; } + +.orange { + background-color: #ff9800 !important; } + +.orange-text { + color: #ff9800 !important; } + +.orange.darken-1 { + background-color: #fb8c00 !important; } + +.orange-text.text-darken-1 { + color: #fb8c00 !important; } + +.orange.darken-2 { + background-color: #f57c00 !important; } + +.orange-text.text-darken-2 { + color: #f57c00 !important; } + +.orange.darken-3 { + background-color: #ef6c00 !important; } + +.orange-text.text-darken-3 { + color: #ef6c00 !important; } + +.orange.darken-4 { + background-color: #e65100 !important; } + +.orange-text.text-darken-4 { + color: #e65100 !important; } + +.orange.accent-1 { + background-color: #ffd180 !important; } + +.orange-text.text-accent-1 { + color: #ffd180 !important; } + +.orange.accent-2 { + background-color: #ffab40 !important; } + +.orange-text.text-accent-2 { + color: #ffab40 !important; } + +.orange.accent-3 { + background-color: #ff9100 !important; } + +.orange-text.text-accent-3 { + color: #ff9100 !important; } + +.orange.accent-4 { + background-color: #ff6d00 !important; } + +.orange-text.text-accent-4 { + color: #ff6d00 !important; } + +.deep-orange.lighten-5 { + background-color: #fbe9e7 !important; } + +.deep-orange-text.text-lighten-5 { + color: #fbe9e7 !important; } + +.deep-orange.lighten-4 { + background-color: #ffccbc !important; } + +.deep-orange-text.text-lighten-4 { + color: #ffccbc !important; } + +.deep-orange.lighten-3 { + background-color: #ffab91 !important; } + +.deep-orange-text.text-lighten-3 { + color: #ffab91 !important; } + +.deep-orange.lighten-2 { + background-color: #ff8a65 !important; } + +.deep-orange-text.text-lighten-2 { + color: #ff8a65 !important; } + +.deep-orange.lighten-1 { + background-color: #ff7043 !important; } + +.deep-orange-text.text-lighten-1 { + color: #ff7043 !important; } + +.deep-orange { + background-color: #ff5722 !important; } + +.deep-orange-text { + color: #ff5722 !important; } + +.deep-orange.darken-1 { + background-color: #f4511e !important; } + +.deep-orange-text.text-darken-1 { + color: #f4511e !important; } + +.deep-orange.darken-2 { + background-color: #e64a19 !important; } + +.deep-orange-text.text-darken-2 { + color: #e64a19 !important; } + +.deep-orange.darken-3 { + background-color: #d84315 !important; } + +.deep-orange-text.text-darken-3 { + color: #d84315 !important; } + +.deep-orange.darken-4 { + background-color: #bf360c !important; } + +.deep-orange-text.text-darken-4 { + color: #bf360c !important; } + +.deep-orange.accent-1 { + background-color: #ff9e80 !important; } + +.deep-orange-text.text-accent-1 { + color: #ff9e80 !important; } + +.deep-orange.accent-2 { + background-color: #ff6e40 !important; } + +.deep-orange-text.text-accent-2 { + color: #ff6e40 !important; } + +.deep-orange.accent-3 { + background-color: #ff3d00 !important; } + +.deep-orange-text.text-accent-3 { + color: #ff3d00 !important; } + +.deep-orange.accent-4 { + background-color: #dd2c00 !important; } + +.deep-orange-text.text-accent-4 { + color: #dd2c00 !important; } + +.brown.lighten-5 { + background-color: #efebe9 !important; } + +.brown-text.text-lighten-5 { + color: #efebe9 !important; } + +.brown.lighten-4 { + background-color: #d7ccc8 !important; } + +.brown-text.text-lighten-4 { + color: #d7ccc8 !important; } + +.brown.lighten-3 { + background-color: #bcaaa4 !important; } + +.brown-text.text-lighten-3 { + color: #bcaaa4 !important; } + +.brown.lighten-2 { + background-color: #a1887f !important; } + +.brown-text.text-lighten-2 { + color: #a1887f !important; } + +.brown.lighten-1 { + background-color: #8d6e63 !important; } + +.brown-text.text-lighten-1 { + color: #8d6e63 !important; } + +.brown { + background-color: #795548 !important; } + +.brown-text { + color: #795548 !important; } + +.brown.darken-1 { + background-color: #6d4c41 !important; } + +.brown-text.text-darken-1 { + color: #6d4c41 !important; } + +.brown.darken-2 { + background-color: #5d4037 !important; } + +.brown-text.text-darken-2 { + color: #5d4037 !important; } + +.brown.darken-3 { + background-color: #4e342e !important; } + +.brown-text.text-darken-3 { + color: #4e342e !important; } + +.brown.darken-4 { + background-color: #3e2723 !important; } + +.brown-text.text-darken-4 { + color: #3e2723 !important; } + +.blue-grey.lighten-5 { + background-color: #eceff1 !important; } + +.blue-grey-text.text-lighten-5 { + color: #eceff1 !important; } + +.blue-grey.lighten-4 { + background-color: #cfd8dc !important; } + +.blue-grey-text.text-lighten-4 { + color: #cfd8dc !important; } + +.blue-grey.lighten-3 { + background-color: #b0bec5 !important; } + +.blue-grey-text.text-lighten-3 { + color: #b0bec5 !important; } + +.blue-grey.lighten-2 { + background-color: #90a4ae !important; } + +.blue-grey-text.text-lighten-2 { + color: #90a4ae !important; } + +.blue-grey.lighten-1 { + background-color: #78909c !important; } + +.blue-grey-text.text-lighten-1 { + color: #78909c !important; } + +.blue-grey { + background-color: #607d8b !important; } + +.blue-grey-text { + color: #607d8b !important; } + +.blue-grey.darken-1 { + background-color: #546e7a !important; } + +.blue-grey-text.text-darken-1 { + color: #546e7a !important; } + +.blue-grey.darken-2 { + background-color: #455a64 !important; } + +.blue-grey-text.text-darken-2 { + color: #455a64 !important; } + +.blue-grey.darken-3 { + background-color: #37474f !important; } + +.blue-grey-text.text-darken-3 { + color: #37474f !important; } + +.blue-grey.darken-4 { + background-color: #263238 !important; } + +.blue-grey-text.text-darken-4 { + color: #263238 !important; } + +.grey.lighten-5 { + background-color: #fafafa !important; } + +.grey-text.text-lighten-5 { + color: #fafafa !important; } + +.grey.lighten-4 { + background-color: #f5f5f5 !important; } + +.grey-text.text-lighten-4 { + color: #f5f5f5 !important; } + +.grey.lighten-3 { + background-color: #eeeeee !important; } + +.grey-text.text-lighten-3 { + color: #eeeeee !important; } + +.grey.lighten-2 { + background-color: #e0e0e0 !important; } + +.grey-text.text-lighten-2 { + color: #e0e0e0 !important; } + +.grey.lighten-1 { + background-color: #bdbdbd !important; } + +.grey-text.text-lighten-1 { + color: #bdbdbd !important; } + +.grey { + background-color: #9e9e9e !important; } + +.grey-text { + color: #9e9e9e !important; } + +.grey.darken-1 { + background-color: #757575 !important; } + +.grey-text.text-darken-1 { + color: #757575 !important; } + +.grey.darken-2 { + background-color: #616161 !important; } + +.grey-text.text-darken-2 { + color: #616161 !important; } + +.grey.darken-3 { + background-color: #424242 !important; } + +.grey-text.text-darken-3 { + color: #424242 !important; } + +.grey.darken-4 { + background-color: #212121 !important; } + +.grey-text.text-darken-4 { + color: #212121 !important; } + +.shades.black { + background-color: #000000 !important; } + +.shades-text.text-black { + color: #000000 !important; } + +.shades.white { + background-color: #FFFFFF !important; } + +.shades-text.text-white { + color: #FFFFFF !important; } + +.shades.transparent { + background-color: transparent !important; } + +.shades-text.text-transparent { + color: transparent !important; } + +.black { + background-color: #000000 !important; } + +.black-text { + color: #000000 !important; } + +.white { + background-color: #FFFFFF !important; } + +.white-text { + color: #FFFFFF !important; } + +.transparent { + background-color: transparent !important; } + +.transparent-text { + color: transparent !important; } + +.danger-color { + background-color: #ff4444 !important; } + +.danger-color-dark { + background-color: #CC0000 !important; } + +.warning-color { + background-color: #ffbb33 !important; } + +.warning-color-dark { + background-color: #FF8800 !important; } + +.success-color { + background-color: #00C851 !important; } + +.success-color-dark { + background-color: #007E33 !important; } + +.info-color { + background-color: #33b5e5 !important; } + +.info-color-dark { + background-color: #0099CC !important; } + +.default-color { + background-color: #2BBBAD !important; } + +.default-color-dark { + background-color: #00695c !important; } + +.primary-color { + background-color: #4285F4 !important; } + +.primary-color-dark { + background-color: #0d47a1 !important; } + +.secondary-color { + background-color: #aa66cc !important; } + +.secondary-color-dark { + background-color: #9933CC !important; } + +.elegant-color { + background-color: #2E2E2E !important; } + +.elegant-color-dark { + background-color: #212121 !important; } + +.stylish-color { + background-color: #4B515D !important; } + +.stylish-color-dark { + background-color: #3E4551 !important; } + +.special-color { + background-color: #37474F !important; } + +.special-color-dark { + background-color: #263238 !important; } + +.unique-color { + background-color: #3F729B !important; } + +.nav-bg { + background-color: #1C2331 !important; } + +.mdb-color { + background-color: #45526E !important; } + +.rgba-blue-light { + background-color: rgba(3, 169, 244, 0.3) !important; } + +.rgba-red-light { + background-color: rgba(244, 67, 54, 0.3) !important; } + +.rgba-pink-light { + background-color: rgba(233, 30, 99, 0.3) !important; } + +.rgba-purple-light { + background-color: rgba(156, 39, 176, 0.3) !important; } + +.rgba-indigo-light { + background-color: rgba(63, 81, 181, 0.3) !important; } + +.rgba-cyan-light { + background-color: rgba(0, 188, 212, 0.3) !important; } + +.rgba-teal-light { + background-color: rgba(0, 150, 136, 0.3) !important; } + +.rgba-green-light { + background-color: rgba(76, 175, 80, 0.3) !important; } + +.rgba-lime-light { + background-color: rgba(205, 220, 57, 0.3) !important; } + +.rgba-yellow-light { + background-color: rgba(255, 235, 59, 0.3) !important; } + +.rgba-orange-light { + background-color: rgba(255, 152, 0, 0.3) !important; } + +.rgba-brown-light { + background-color: rgba(121, 85, 72, 0.3) !important; } + +.rgba-grey-light { + background-color: rgba(158, 158, 158, 0.3) !important; } + +.rgba-bluegrey-light { + background-color: rgba(96, 125, 139, 0.3) !important; } + +.rgba-black-light { + background-color: rgba(0, 0, 0, 0.3) !important; } + +.rgba-stylish-light { + background-color: rgba(62, 69, 81, 0.3) !important; } + +.rgba-white-light { + background-color: rgba(255, 255, 255, 0.3) !important; } + +.rgba-blue-strong { + background-color: rgba(3, 169, 244, 0.7) !important; } + +.rgba-red-strong { + background-color: rgba(244, 67, 54, 0.7) !important; } + +.rgba-pink-strong { + background-color: rgba(233, 30, 99, 0.7) !important; } + +.rgba-purple-strong { + background-color: rgba(156, 39, 176, 0.7) !important; } + +.rgba-indigo-strong { + background-color: rgba(63, 81, 181, 0.7) !important; } + +.rgba-cyan-strong { + background-color: rgba(0, 188, 212, 0.7) !important; } + +.rgba-teal-strong { + background-color: rgba(0, 150, 136, 0.7) !important; } + +.rgba-green-strong { + background-color: rgba(76, 175, 80, 0.7) !important; } + +.rgba-lime-strong { + background-color: rgba(205, 220, 57, 0.7) !important; } + +.rgba-yellow-strong { + background-color: rgba(255, 235, 59, 0.7) !important; } + +.rgba-orange-strong { + background-color: rgba(255, 152, 0, 0.7) !important; } + +.rgba-brown-strong { + background-color: rgba(121, 85, 72, 0.7) !important; } + +.rgba-grey-strong { + background-color: rgba(158, 158, 158, 0.7) !important; } + +.rgba-bluegrey-strong { + background-color: rgba(96, 125, 139, 0.7) !important; } + +.rgba-black-strong { + background-color: rgba(0, 0, 0, 0.7) !important; } + +.rgba-stylish-strong { + background-color: rgba(62, 69, 81, 0.7) !important; } + +.rgba-white-strong { + background-color: rgba(255, 255, 255, 0.7) !important; } + +.rgba-blue-slight { + background-color: rgba(3, 169, 244, 0.1) !important; } + +.rgba-red-slight { + background-color: rgba(244, 67, 54, 0.1) !important; } + +.rgba-pink-slight { + background-color: rgba(233, 30, 99, 0.1) !important; } + +.rgba-purple-slight { + background-color: rgba(156, 39, 176, 0.1) !important; } + +.rgba-indigo-slight { + background-color: rgba(63, 81, 181, 0.1) !important; } + +.rgba-cyan-slight { + background-color: rgba(0, 188, 212, 0.1) !important; } + +.rgba-teal-slight { + background-color: rgba(0, 150, 136, 0.1) !important; } + +.rgba-green-slight { + background-color: rgba(76, 175, 80, 0.1) !important; } + +.rgba-lime-slight { + background-color: rgba(205, 220, 57, 0.1) !important; } + +.rgba-yellow-slight { + background-color: rgba(255, 235, 59, 0.1) !important; } + +.rgba-orange-slight { + background-color: rgba(255, 152, 0, 0.1) !important; } + +.rgba-brown-slight { + background-color: rgba(121, 85, 72, 0.1) !important; } + +.rgba-grey-slight { + background-color: rgba(158, 158, 158, 0.1) !important; } + +.rgba-bluegrey-slight { + background-color: rgba(96, 125, 139, 0.1) !important; } + +.rgba-black-slight { + background-color: rgba(0, 0, 0, 0.1) !important; } + +.rgba-stylish-slight { + background-color: rgba(62, 69, 81, 0.1) !important; } + +.rgba-white-slight { + background-color: rgba(255, 255, 255, 0.1) !important; } + +.blue-gradient { + background: #000000; + /* Old browsers */ + background: -moz-linear-gradient(-45deg, #000000 0%, #062a64 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(-45deg, #000000 0%, #062a64 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(135deg, #000000 0%, #062a64 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#062a64',GradientType=1 ); + /* IE6-9 fallback on horizontal gradient */ } + +.red-gradient { + background: #000000; + /* Old browsers */ + background: -moz-linear-gradient(-45deg, #000000 0%, #7d0000 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(-45deg, #000000 0%, #7d0000 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(135deg, #000000 0%, #7d0000 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#7d0000',GradientType=1 ); + /* IE6-9 fallback on horizontal gradient */ } + +.green-gradient { + background: #000000; + /* Old browsers */ + background: -moz-linear-gradient(-45deg, #000000 0%, #003830 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(-45deg, #000000 0%, #003830 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(135deg, #000000 0%, #003830 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#003830',GradientType=1 ); + /* IE6-9 fallback on horizontal gradient */ } + +.purple-gradient { + background: #000000; + /* Old browsers */ + background: -moz-linear-gradient(-45deg, #000000 0%, #650696 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(-45deg, #000000 0%, #650696 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(135deg, #000000 0%, #650696 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#650696',GradientType=1 ); + /* IE6-9 fallback on horizontal gradient */ } + +.dark-gradient { + background: #000000; + /* Old browsers */ + background: -moz-linear-gradient(-45deg, #000000 0%, #2e2e2e 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(-45deg, #000000 0%, #2e2e2e 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(135deg, #000000 0%, #2e2e2e 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#2e2e2e',GradientType=1 ); + /* IE6-9 fallback on horizontal gradient */ } + +.grey-gradient { + background: #000000; + /* Old browsers */ + background: -moz-linear-gradient(-45deg, #000000 0%, #4b515d 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(-45deg, #000000 0%, #4b515d 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(135deg, #000000 0%, #4b515d 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#4b515d',GradientType=1 ); + /* IE6-9 fallback on horizontal gradient */ } + +.mdb-gradient { + background: #000000; + /* Old browsers */ + background: -moz-linear-gradient(-45deg, #000000 0%, #3f729b 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(-45deg, #000000 0%, #3f729b 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(135deg, #000000 0%, #3f729b 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#3f729b',GradientType=1 ); + /* IE6-9 fallback on horizontal gradient */ } + +.deep-orange-gradient { + background: #000000; + /* Old browsers */ + background: -moz-linear-gradient(-45deg, #000000 0%, #8a1a00 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(-45deg, #000000 0%, #8a1a00 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(135deg, #000000 0%, #8a1a00 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#8a1a00',GradientType=1 ); + /* IE6-9 fallback on horizontal gradient */ } + +.graphite-gradient { + background: #000000; + /* Old browsers */ + background: -moz-linear-gradient(-45deg, #000000 0%, #37474f 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(-45deg, #000000 0%, #37474f 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(135deg, #000000 0%, #37474f 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#37474f',GradientType=1 ); + /* IE6-9 fallback on horizontal gradient */ } + +.pink-gradient { + background: #000000; + /* Old browsers */ + background: -moz-linear-gradient(-45deg, #000000 0%, #880e4f 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(-45deg, #000000 0%, #880e4f 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(135deg, #000000 0%, #880e4f 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#880e4f',GradientType=1 ); + /* IE6-9 fallback on horizontal gradient */ } + +/*** Colors ***/ +/*** Fonts ***/ +/*** Typography ***/ +/*** Cards ***/ +/*** Global ***/ +/*** Forms ***/ +/*** Buttons ***/ +/*** Dropdown ***/ +/*** Tabs ***/ +.z-depth-0, .section .map-container img, .modal-dialog.cascading-modal.modal-avatar .modal-header { + box-shadow: none !important; } + +.z-depth-1, .jumbotron, +.card, +.list-group, +.popover, +.navbar, +.dropdown-menu, +.badge, +.chip, .pagination .active .page-link, .btn, .pager li a, .modal-dialog.cascading-modal .modal-c-tabs .nav-tabs, .modal-dialog.modal-notify .modal-header { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); } + +.z-depth-1-half, .media .media-left img, .tooltip .tooltip-inner, .section img, +.section .view, .btn:hover, .btn:active, .btn:focus, .btn.active, .btn-secondary.active, .btn-secondary.dropdown-toggle, .btn-primary.active, .btn-default.active, .btn-success.active, .btn-info.active, .btn-warning.active, .btn-danger.active, .pager li a:hover, .btn-elegant.active, .btn-unique.active, .btn-pink.active, .btn-purple.active, .btn-deep-purple.active, .btn-indigo.active, .btn-cyan.active, .btn-light-green.active, .btn-dark-green.active, .btn-lime.active, .btn-yellow.active, .btn-amber.active, .btn-orange.active, .btn-deep-orange.active, .btn-brown.active, .btn-blue-grey.active, .btn-mdb.active, .card .form-header, ul.instagram-photos li img, .modal-dialog .modal-content, .modal-dialog.cascading-modal .modal-header, .modal-dialog.modal-notify.modal-info .btn-primary-modal.active, .modal-dialog.modal-notify.modal-warning .btn-primary-modal.active, .modal-dialog.modal-notify.modal-success .btn-primary-modal.active, .modal-dialog.modal-notify.modal-danger .btn-primary-modal.active { + box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); } + +.z-depth-2, .section .jumbotron, .modal-dialog.cascading-modal.modal-avatar .modal-header img { + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); } + +.z-depth-3 { + box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19); } + +.z-depth-4 { + box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21); } + +.z-depth-5 { + box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22); } + +.hoverable { + transition: box-shadow .55s; + box-shadow: 0; } + +.hoverable:hover { + transition: box-shadow .45s; + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); } + +a { + color: #0275d8; + text-decoration: none; + cursor: pointer; + -webkit-tap-highlight-color: transparent; } + a:hover, a:focus { + text-decoration: none; } + +.jumbotron, +.card, +.badge, +.alert, +.nav .nav-link, +.navbar-toggler, +.navbar, +.breadcrumb, +.page-item:last-child .page-link, +.page-item:first-child .page-link, +.pagination-lg .page-item:last-child .page-link, +.pagination-lg .page-item:first-child .page-link, +.pagination-sm .page-item:first-child .page-link, +.pagination-sm .page-item:last-child .page-link, +.list-group .list-group-item, +.tooltip-inner, +.popover, +.dropdown-menu, +.input-group-addon, +.file-custom, +.card .card-header, +.nav-tabs, +img { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; } + +.popover, +.input-group-addon, +.dropdown-menu, +.pagination .page-item .page-link { + border: 0; } + +.pagination .active .page-link { + border-radius: 2px; + transition: all 0.2s linear; } + +.pagination .page-link { + transition: all 0.3s linear; } + .pagination .page-link:hover { + transition: all 0.3s linear; } + .pagination .page-link:focus { + background-color: transparent; } + +.pagination.pg-blue .active .page-link { + background-color: #4285F4; } + +.pagination.pg-red .active .page-link { + background-color: #ff4444; } + +.pagination.pg-teal .active .page-link { + background-color: #2BBBAD; } + +.pagination.pg-darkgrey .active .page-link { + background-color: #37474F; } + +.pagination.pg-dark .active .page-link { + background-color: #2E2E2E; } + +.pagination.pg-bluegrey .active .page-link { + background-color: #3F729B; } + +.pagination.pg-amber .active .page-link { + background-color: #ff6f00; } + +.pagination.pg-purple .active .page-link { + background-color: #5e35b1; } + +.pager a, +.pager .disabled > a { + color: #fff; } + +.pager.pg-blue li a { + background-color: #4285F4; } + .pager.pg-blue li a:focus { + background-color: #4285F4; + color: #fff; } + .pager.pg-blue li a:hover { + background-color: #4285F4; + color: #fff; } + +.pager.pg-red li a { + background-color: #ff4444; } + .pager.pg-red li a:focus { + background-color: #ff4444; + color: #fff; } + .pager.pg-red li a:hover { + background-color: #ff4444; + color: #fff; } + +.pager.pg-teal li a { + background-color: #2BBBAD; } + .pager.pg-teal li a:focus { + background-color: #2BBBAD; + color: #fff; } + .pager.pg-teal li a:hover { + background-color: #2BBBAD; + color: #fff; } + +.pager.pg-darkgrey li a { + background-color: #37474F; } + .pager.pg-darkgrey li a:focus { + background-color: #37474F; + color: #fff; } + .pager.pg-darkgrey li a:hover { + background-color: #37474F; + color: #fff; } + +.pager.pg-dark li a { + background-color: #2E2E2E; } + .pager.pg-dark li a:focus { + background-color: #2E2E2E; + color: #fff; } + .pager.pg-dark li a:hover { + background-color: #2E2E2E; + color: #fff; } + +.pager.pg-bluegrey li a { + background-color: #3F729B; } + .pager.pg-bluegrey li a:focus { + background-color: #3F729B; + color: #fff; } + .pager.pg-bluegrey li a:hover { + background-color: #3F729B; + color: #fff; } + +.pager.pg-amber li a { + background-color: #ff6f00; } + .pager.pg-amber li a:focus { + background-color: #ff6f00; + color: #fff; } + .pager.pg-amber li a:hover { + background-color: #ff6f00; + color: #fff; } + +.pager.pg-purple li a { + background-color: #5e35b1; } + .pager.pg-purple li a:focus { + background-color: #5e35b1; + color: #fff; } + .pager.pg-purple li a:hover { + background-color: #5e35b1; + color: #fff; } + +.pager .disabled > a, +.pager .disabled > a:focus, +.pager .disabled > a:hover { + background-color: inerhit !important; } + +.modal-footer .btn + .btn { + margin-bottom: 6px; } + +body.modal-open { + overflow: inherit; + padding-right: 0 !important; } + +body { + overflow: auto !important; } + +.card-columns .card { + margin: 2px; } + +.parallax { + background-repeat: no-repeat; + background-size: cover; + background-attachment: fixed; + position: relative; + padding-top: 3em; + padding-bottom: 3em; } + +.nav-pills.horizontal-spy .nav-item .active { + border-bottom: 2px solid #45526E; + border-left: none; } + +.nav-pills.horizontal-spy .nav-item:hover { + background-color: transparent; + color: #45526E; + font-weight: 500; + border-left: none; } + +.nav-pills .nav-item.open .nav-link, +.nav-pills .nav-item.open .nav-link:focus, +.nav-pills .nav-item.open .nav-link:hover, +.nav-pills .nav-link.active, +.nav-pills .nav-link.active:focus, +.nav-pills .nav-link.active:hover { + background-color: transparent; + color: #000; } + +.disabled { + cursor: not-allowed !important; } + +.video-fluid { + height: auto; + width: 100%; } + +.video-full { + position: fixed; + top: 50%; + left: 50%; + min-width: 100%; + min-height: 100%; + width: auto; + height: auto; + z-index: -100; + -ms-transform: translateX(-50%) translateY(-50%); + -moz-transform: translateX(-50%) translateY(-50%); + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + background-size: cover; } + +.media .media-left { + padding: 0 10px 10px 0; } + +.card-block h5 { + margin-bottom: 1rem; + font-size: 1rem; + font-weight: 400; } + +.card-block h3 { + margin-bottom: 1rem; + font-weight: 400; } + +.card-block p { + margin-bottom: 1rem; } + +.tooltip .tooltip-inner { + padding: 0.4rem 0.8rem; } + +section { + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; } + +.breadcrumb .breadcrumb-item.active { + color: #818a91; } + +.dropdown-menu .dropdown-item:active { + background: #f7f7f9; } + +.dropdown-menu { + transition: all 0.2s cubic-bezier(0.72, 1.2, 0.71, 0.72); } + +@font-face { + font-family: "Roboto"; + src: local(Roboto Thin), url("../fonts/roboto/Roboto-Thin.eot"); + src: url("../fonts/roboto/Roboto-Thin.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Thin.woff2") format("woff2"), url("../fonts/roboto/Roboto-Thin.woff") format("woff"), url("../fonts/roboto/Roboto-Thin.ttf") format("truetype"); + font-weight: 200; } + +@font-face { + font-family: "Roboto"; + src: local(Roboto Light), url("../fonts/roboto/Roboto-Light.eot"); + src: url("../fonts/roboto/Roboto-Light.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Light.woff2") format("woff2"), url("../fonts/roboto/Roboto-Light.woff") format("woff"), url("../fonts/roboto/Roboto-Light.ttf") format("truetype"); + font-weight: 300; } + +@font-face { + font-family: "Roboto"; + src: local(Roboto Regular), url("../fonts/roboto/Roboto-Regular.eot"); + src: url("../fonts/roboto/Roboto-Regular.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Regular.woff2") format("woff2"), url("../fonts/roboto/Roboto-Regular.woff") format("woff"), url("../fonts/roboto/Roboto-Regular.ttf") format("truetype"); + font-weight: 400; } + +@font-face { + font-family: "Roboto"; + src: url("../fonts/roboto/Roboto-Medium.eot"); + src: url("../fonts/roboto/Roboto-Medium.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Medium.woff2") format("woff2"), url("../fonts/roboto/Roboto-Medium.woff") format("woff"), url("../fonts/roboto/Roboto-Medium.ttf") format("truetype"); + font-weight: 500; } + +@font-face { + font-family: "Roboto"; + src: url("../fonts/roboto/Roboto-Bold.eot"); + src: url("../fonts/roboto/Roboto-Bold.eot?#iefix") format("embedded-opentype"), url("../fonts/roboto/Roboto-Bold.woff2") format("woff2"), url("../fonts/roboto/Roboto-Bold.woff") format("woff"), url("../fonts/roboto/Roboto-Bold.ttf") format("truetype"); + font-weight: 700; } + +body { + font-family: "Roboto", sans-serif; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 400; } + +@media only screen and (min-width: 0) { + html { + font-size: 15px; } } + +@media only screen and (min-width: 992px) { + html { + font-size: 15.5px; } } + +@media only screen and (min-width: 1200px) { + html { + font-size: 16px; } } + +.text-fluid { + font-weight: 300; } + @media only screen and (min-width: 360px) { + .text-fluid { + font-size: 1.2rem; } } + @media only screen and (min-width: 390px) { + .text-fluid { + font-size: 1.224rem; } } + @media only screen and (min-width: 420px) { + .text-fluid { + font-size: 1.248rem; } } + @media only screen and (min-width: 450px) { + .text-fluid { + font-size: 1.272rem; } } + @media only screen and (min-width: 480px) { + .text-fluid { + font-size: 1.296rem; } } + @media only screen and (min-width: 510px) { + .text-fluid { + font-size: 1.32rem; } } + @media only screen and (min-width: 540px) { + .text-fluid { + font-size: 1.344rem; } } + @media only screen and (min-width: 570px) { + .text-fluid { + font-size: 1.368rem; } } + @media only screen and (min-width: 600px) { + .text-fluid { + font-size: 1.392rem; } } + @media only screen and (min-width: 630px) { + .text-fluid { + font-size: 1.416rem; } } + @media only screen and (min-width: 660px) { + .text-fluid { + font-size: 1.44rem; } } + @media only screen and (min-width: 690px) { + .text-fluid { + font-size: 1.464rem; } } + @media only screen and (min-width: 720px) { + .text-fluid { + font-size: 1.488rem; } } + @media only screen and (min-width: 750px) { + .text-fluid { + font-size: 1.512rem; } } + @media only screen and (min-width: 780px) { + .text-fluid { + font-size: 1.536rem; } } + @media only screen and (min-width: 810px) { + .text-fluid { + font-size: 1.56rem; } } + @media only screen and (min-width: 840px) { + .text-fluid { + font-size: 1.584rem; } } + @media only screen and (min-width: 870px) { + .text-fluid { + font-size: 1.608rem; } } + @media only screen and (min-width: 900px) { + .text-fluid { + font-size: 1.632rem; } } + @media only screen and (min-width: 930px) { + .text-fluid { + font-size: 1.656rem; } } + @media only screen and (min-width: 960px) { + .text-fluid { + font-size: 1.68rem; } } + @media only screen and (max-width: 360px) { + .text-fluid { + font-size: 1.2rem; } } + +p.lead { + font-weight: 400; } + +/* Responsive Headings */ +/* Extra Small Devices, Phones */ +@media only screen and (max-width: 768px) { + .h1-responsive, .section .section-heading { + font-size: 150%; + font-weight: 500; } + .h2-responsive { + font-size: 145%; } + .h3-responsive { + font-size: 135%; } + .h4-responsive { + font-size: 135%; } + .h5-responsive { + font-size: 135%; } } + +/* Small Devices, Tablets */ +@media only screen and (min-width: 768px) { + .h1-responsive, .section .section-heading { + font-size: 170%; } + .h2-responsive { + font-size: 140%; } + .h3-responsive { + font-size: 125%; } + .h4-responsive { + font-size: 125%; } + .h5-responsive { + font-size: 125%; } } + +/* Medium Devices, Desktops */ +@media only screen and (min-width: 992px) { + .h1-responsive, .section .section-heading { + font-size: 200%; } + .h2-responsive { + font-size: 170%; } + .h3-responsive { + font-size: 140%; } + .h4-responsive { + font-size: 125%; } + .h5-responsive { + font-size: 125%; } } + +/* Large Devices, Wide Screens */ +@media only screen and (min-width: 1200px) { + .h1-responsive, .section .section-heading { + font-size: 250%; } + .h2-responsive { + font-size: 200%; } + .h3-responsive { + font-size: 170%; } + .h4-responsive { + font-size: 140%; } + .h5-responsive { + font-size: 125%; } } + +.section { + margin-bottom: 2rem; } + .section .section-heading { + margin-top: 2rem; + margin-bottom: 4rem; } + .section .section-description { + color: #757575; + margin-bottom: 4rem; + margin-left: 15%; + margin-right: 15%; + text-align: center; } + @media (max-width: 992px) { + .section .section-description { + margin-left: 5%; + margin-right: 5%; } } + .section h4 { + font-weight: 400; } + .section h5 .fa { + margin-right: 8px; } + .section hr { + margin-top: 1rem; + margin-bottom: 3rem; } + .section .contact-icons { + text-align: center; } + .section .contact-icons li { + margin-bottom: 2.2rem; } + .section .contact-icons .fa { + font-size: 2.2rem; + margin-bottom: 0.6rem; + color: #424242; } + +.between-sections { + margin-bottom: 4rem; } + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.5.1 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2016 Daniel Eden + */ +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; } + +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; } + +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; } + +.animated.flipOutX, +.animated.flipOutY, +.animated.bounceIn, +.animated.bounceOut { + -webkit-animation-duration: .75s; + animation-duration: .75s; } + +@-webkit-keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); } + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); } + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0); } } + +@keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); } + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); } + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0); } } + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + -ms-transform-origin: center bottom; + transform-origin: center bottom; } + +@-webkit-keyframes flash { + from, 50%, to { + opacity: 1; } + 25%, 75% { + opacity: 0; } } + +@keyframes flash { + from, 50%, to { + opacity: 1; } + 25%, 75% { + opacity: 0; } } + +.flash { + -webkit-animation-name: flash; + animation-name: flash; } + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ +@-webkit-keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); } + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } } + +@keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); } + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } } + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; } + +@-webkit-keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); } + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); } + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); } + 65% { + -webkit-transform: scale3d(0.95, 1.05, 1); + transform: scale3d(0.95, 1.05, 1); } + 75% { + -webkit-transform: scale3d(1.05, 0.95, 1); + transform: scale3d(1.05, 0.95, 1); } + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } } + +@keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); } + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); } + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); } + 65% { + -webkit-transform: scale3d(0.95, 1.05, 1); + transform: scale3d(0.95, 1.05, 1); } + 75% { + -webkit-transform: scale3d(1.05, 0.95, 1); + transform: scale3d(1.05, 0.95, 1); } + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } } + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; } + +@-webkit-keyframes shake { + from, to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); } + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); } } + +@keyframes shake { + from, to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); } + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); } } + +.shake { + -webkit-animation-name: shake; + animation-name: shake; } + +@-webkit-keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); } + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); } + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); } + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); } + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); } + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); } } + +@keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); } + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); } + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); } + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); } + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); } + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); } } + +.headShake { + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + -webkit-animation-name: headShake; + animation-name: headShake; } + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); } + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); } + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); } + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); } + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); } } + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); } + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); } + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); } + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); } + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); } } + +.swing { + -webkit-transform-origin: top center; + -ms-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; } + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } + 10%, 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); } + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); } + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); } + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } } + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } + 10%, 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); } + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); } + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); } + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } } + +.tada { + -webkit-animation-name: tada; + animation-name: tada; } + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ +@-webkit-keyframes wobble { + from { + -webkit-transform: none; + transform: none; } + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); } + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); } + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); } + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); } + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); } + to { + -webkit-transform: none; + transform: none; } } + +@keyframes wobble { + from { + -webkit-transform: none; + transform: none; } + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); } + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); } + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); } + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); } + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); } + to { + -webkit-transform: none; + transform: none; } } + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; } + +@-webkit-keyframes jello { + from, 11.1%, to { + -webkit-transform: none; + transform: none; } + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); } + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); } + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); } + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); } + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); } + 77.7% { + -webkit-transform: skewX(0.39063deg) skewY(0.39063deg); + transform: skewX(0.39063deg) skewY(0.39063deg); } + 88.8% { + -webkit-transform: skewX(-0.19531deg) skewY(-0.19531deg); + transform: skewX(-0.19531deg) skewY(-0.19531deg); } } + +@keyframes jello { + from, 11.1%, to { + -webkit-transform: none; + transform: none; } + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); } + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); } + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); } + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); } + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); } + 77.7% { + -webkit-transform: skewX(0.39063deg) skewY(0.39063deg); + transform: skewX(0.39063deg) skewY(0.39063deg); } + 88.8% { + -webkit-transform: skewX(-0.19531deg) skewY(-0.19531deg); + transform: skewX(-0.19531deg) skewY(-0.19531deg); } } + +.jello { + -webkit-animation-name: jello; + animation-name: jello; + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; } + +@-webkit-keyframes bounceIn { + from, 20%, 40%, 60%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); } + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); } + 40% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); } + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); } + 80% { + -webkit-transform: scale3d(0.97, 0.97, 0.97); + transform: scale3d(0.97, 0.97, 0.97); } + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } } + +@keyframes bounceIn { + from, 20%, 40%, 60%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); } + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); } + 40% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); } + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); } + 80% { + -webkit-transform: scale3d(0.97, 0.97, 0.97); + transform: scale3d(0.97, 0.97, 0.97); } + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } } + +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; } + +@-webkit-keyframes bounceInDown { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); } + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); } + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); } + to { + -webkit-transform: none; + transform: none; } } + +@keyframes bounceInDown { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); } + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); } + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); } + to { + -webkit-transform: none; + transform: none; } } + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; } + +@-webkit-keyframes bounceInLeft { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); } + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); } + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); } + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); } + to { + -webkit-transform: none; + transform: none; } } + +@keyframes bounceInLeft { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); } + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); } + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); } + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); } + to { + -webkit-transform: none; + transform: none; } } + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; } + +@-webkit-keyframes bounceInRight { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); } + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); } + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); } + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); } + to { + -webkit-transform: none; + transform: none; } } + +@keyframes bounceInRight { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); } + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); } + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); } + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); } + to { + -webkit-transform: none; + transform: none; } } + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; } + +@-webkit-keyframes bounceInUp { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); } + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); } + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +@keyframes bounceInUp { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); } + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); } + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); } + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); } + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; } + +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); } + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); } + to { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); } } + +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); } + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); } + to { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); } } + +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; } + +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); } + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); } + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); } } + +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); } + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); } + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); } } + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; } + +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); } + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); } } + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); } + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); } } + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; } + +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); } + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); } } + +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); } + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); } } + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; } + +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); } + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); } + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); } } + +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); } + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); } + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); } } + +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp; } + +@-webkit-keyframes fadeIn { + from { + opacity: 0; } + to { + opacity: 1; } } + +@keyframes fadeIn { + from { + opacity: 0; } + to { + opacity: 1; } } + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; } + +@-webkit-keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +@keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; } + +@-webkit-keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +@keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; } + +@-webkit-keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +@keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; } + +@-webkit-keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +@keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; } + +@-webkit-keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +@keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; } + +@-webkit-keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +@keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; } + +@-webkit-keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +@keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; } + +@-webkit-keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +@keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; } + +@-webkit-keyframes fadeOut { + from { + opacity: 1; } + to { + opacity: 0; } } + +@keyframes fadeOut { + from { + opacity: 1; } + to { + opacity: 0; } } + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; } + +@-webkit-keyframes fadeOutDown { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); } } + +@keyframes fadeOutDown { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); } } + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; } + +@-webkit-keyframes fadeOutDownBig { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); } } + +@keyframes fadeOutDownBig { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); } } + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; } + +@-webkit-keyframes fadeOutLeft { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); } } + +@keyframes fadeOutLeft { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); } } + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; } + +@-webkit-keyframes fadeOutLeftBig { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); } } + +@keyframes fadeOutLeftBig { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); } } + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; } + +@-webkit-keyframes fadeOutRight { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); } } + +@keyframes fadeOutRight { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); } } + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; } + +@-webkit-keyframes fadeOutRightBig { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); } } + +@keyframes fadeOutRightBig { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); } } + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; } + +@-webkit-keyframes fadeOutUp { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); } } + +@keyframes fadeOutUp { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); } } + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; } + +@-webkit-keyframes fadeOutUpBig { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); } } + +@keyframes fadeOutUpBig { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); } } + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; } + +@-webkit-keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; } + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; } + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + 80% { + -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } } + +@keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; } + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; } + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + 80% { + -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } } + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; } + +@-webkit-keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); } } + +@keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); } } + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; } + +@-webkit-keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; } + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; } + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); } } + +@keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; } + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; } + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); } } + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; } + +@-webkit-keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; } + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; } } + +@keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; } + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; } } + +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; } + +@-webkit-keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); } + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; } + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; } } + +@keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); } + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; } + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; } } + +.flipOutY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; } + +@-webkit-keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; } + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; } + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; } + to { + -webkit-transform: none; + transform: none; + opacity: 1; } } + +@keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; } + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; } + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; } + to { + -webkit-transform: none; + transform: none; + opacity: 1; } } + +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; } + +@-webkit-keyframes lightSpeedOut { + from { + opacity: 1; } + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; } } + +@keyframes lightSpeedOut { + from { + opacity: 1; } + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; } } + +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; } + +@-webkit-keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; } + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; } } + +@keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; } + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; } } + +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn; } + +@-webkit-keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; } + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; } } + +@keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; } + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; } } + +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft; } + +@-webkit-keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; } + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; } } + +@keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; } + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; } } + +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight; } + +@-webkit-keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; } + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; } } + +@keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; } + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; } } + +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft; } + +@-webkit-keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; } + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; } } + +@keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; } + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; } } + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; } + +@-webkit-keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; } + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; } } + +@keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; } + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; } } + +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut; } + +@-webkit-keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; } + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; } } + +@keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; } + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; } } + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; } + +@-webkit-keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; } + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; } } + +@keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; } + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; } } + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; } + +@-webkit-keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; } + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; } } + +@keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; } + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; } } + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; } + +@-webkit-keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; } + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; } } + +@keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; } + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; } } + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; } + +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; } + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; } + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; } + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; } } + +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; } + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; } + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; } + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; } } + +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge; } + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ +@-webkit-keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +@keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); } + to { + opacity: 1; + -webkit-transform: none; + transform: none; } } + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; } + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ +@-webkit-keyframes rollOut { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } } + +@keyframes rollOut { + from { + opacity: 1; } + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } } + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; } + +@-webkit-keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); } + 50% { + opacity: 1; } } + +@keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); } + 50% { + opacity: 1; } } + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; } + +@-webkit-keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +@keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown; } + +@-webkit-keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +@keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft; } + +@-webkit-keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +@keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight; } + +@-webkit-keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +@keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp; } + +@-webkit-keyframes zoomOut { + from { + opacity: 1; } + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); } + to { + opacity: 0; } } + +@keyframes zoomOut { + from { + opacity: 1; } + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); } + to { + opacity: 0; } } + +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; } + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown; } + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); } + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); + transform: scale(0.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; } } + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); } + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); + transform: scale(0.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; } } + +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft; } + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); } + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); + transform: scale(0.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; } } + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); } + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); + transform: scale(0.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; } } + +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight; } + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); } + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } } + +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp; } + +@-webkit-keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +@keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; } + +@-webkit-keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +@keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; } + +@-webkit-keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +@keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; } + +@-webkit-keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +@keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp; } + +@-webkit-keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); } } + +@keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); } } + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; } + +@-webkit-keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); } } + +@keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); } } + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; } + +@-webkit-keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); } } + +@keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); } } + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; } + +@-webkit-keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); } } + +@keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); } } + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; } + +/*! + * Waves v0.7.5 + * http://fian.my.id/Waves + * + * Copyright 2014-2016 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE + */ +.waves-effect { + position: relative; + cursor: pointer; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: transparent; + z-index: 1; } + .waves-effect .waves-ripple { + position: absolute; + border-radius: 50%; + width: 100px; + height: 100px; + margin-top: -50px; + margin-left: -50px; + opacity: 0; + background: rgba(0, 0, 0, 0.2); + background: -webkit-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); + background: -o-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); + background: -moz-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); + background: radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%); + -webkit-transition: all 0.5s ease-out; + -moz-transition: all 0.5s ease-out; + -o-transition: all 0.5s ease-out; + transition: all 0.5s ease-out; + -webkit-transition-property: -webkit-transform, opacity; + -moz-transition-property: -moz-transform, opacity; + -o-transition-property: -o-transform, opacity; + transition-property: opacity, -webkit-transform; + transition-property: transform, opacity; + transition-property: transform, opacity, -webkit-transform; + -webkit-transform: scale(0) translate(0, 0); + -moz-transform: scale(0) translate(0, 0); + -ms-transform: scale(0) translate(0, 0); + -o-transform: scale(0) translate(0, 0); + transform: scale(0) translate(0, 0); + pointer-events: none; } + .waves-effect.waves-light .waves-ripple { + background: rgba(255, 255, 255, 0.4); + background: -webkit-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); + background: -o-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); + background: -moz-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); + background: radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%); } + .waves-effect.waves-classic .waves-ripple { + background: rgba(0, 0, 0, 0.2); } + .waves-effect.waves-classic.waves-light .waves-ripple { + background: rgba(255, 255, 255, 0.4); } + +.waves-notransition { + -webkit-transition: none !important; + -moz-transition: none !important; + -o-transition: none !important; + transition: none !important; } + +.waves-button, +.waves-circle { + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -ms-transform: translateZ(0); + -o-transform: translateZ(0); + transform: translateZ(0); + -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); } + +.waves-button, +.waves-button:hover, +.waves-button:visited, +.waves-button-input { + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + border: none; + outline: none; + color: inherit; + background-color: transparent; + font-size: 1em; + line-height: 1em; + text-align: center; + text-decoration: none; + z-index: 1; } + +.waves-button { + padding: 0.85em 1.1em; + border-radius: 0.2em; } + +.waves-button-input { + margin: 0; + padding: 0.85em 1.1em; } + +.waves-input-wrapper { + border-radius: 0.2em; + vertical-align: bottom; } + .waves-input-wrapper.waves-button { + padding: 0; } + .waves-input-wrapper .waves-button-input { + position: relative; + top: 0; + left: 0; + z-index: 1; } + +.waves-circle { + text-align: center; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; + border-radius: 50%; } + +.waves-float { + -webkit-mask-image: none; + -webkit-box-shadow: 0px 1px 1.5px 1px rgba(0, 0, 0, 0.12); + box-shadow: 0px 1px 1.5px 1px rgba(0, 0, 0, 0.12); + -webkit-transition: all 300ms; + -moz-transition: all 300ms; + -o-transition: all 300ms; + transition: all 300ms; } + .waves-float:active { + -webkit-box-shadow: 0px 8px 20px 1px rgba(0, 0, 0, 0.3); + box-shadow: 0px 8px 20px 1px rgba(0, 0, 0, 0.3); } + +.waves-block { + display: block; } + +@media only screen and (max-width: 992px) { + .center-on-small-only { + text-align: center; } + .center-on-small-only .img-fluid, .center-on-small-only .section img, .section .center-on-small-only img, .center-on-small-only + .section .view, + .section .center-on-small-only .view, .center-on-small-only .card img, .card .center-on-small-only img, .center-on-small-only .modal-dialog.cascading-modal.modal-avatar .modal-header, .modal-dialog.cascading-modal.modal-avatar .center-on-small-only .modal-header { + display: inline; } } + +.flex-center { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 100%; } + .flex-center p { + margin: 0; } + .flex-center ul { + text-align: center; } + .flex-center ul li { + margin-bottom: 1rem; } + +.vertical-center { + position: relative; + top: 50%; + -webkit-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); } + +.img-fluid, .section img, +.section .view, .card img, .modal-dialog.cascading-modal.modal-avatar .modal-header { + display: block; + max-width: 100%; + height: auto; } + +.inline-ul > li { + display: inline; } + +.list-inline-div > div { + display: inline-block; } + +.hr-light { + background-color: #fff; + height: 0.5px; } + +.hr-dark { + background-color: #666; + height: 0.5px; } + +.divider-new { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + font-weight: 300; + margin-top: 45px; + margin-bottom: 45px; } + .divider-new h2 { + margin-top: 5px; } + .divider-new:before { + content: ''; + height: 1.5px; + background: #666; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + margin: 0 .45em 0 0; } + .divider-new:after { + content: ''; + height: 1.5px; + background: #666; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + margin: 0 0 0 .45em; } + +@media (min-width: 992px) { + .hr-mobile { + display: none !important; } } + +.section-title { + text-transform: uppercase; + margin-top: 0; + margin-bottom: 3rem; + padding: 0.7rem; } + .section-title small { + text-transform: none; + padding-left: 7px; + margin-left: 10px; } + +.st-indigo { + border-left: 4px solid blue; } + .st-indigo small { + border-left: 2px solid blue; } + +.st-red { + border-left: 4px solid red; } + .st-red small { + border-left: 2px solid red; } + +.st-teal { + border-left: 4px solid #009688; } + .st-teal small { + border-left: 2px solid #009688; } + +.st-orange { + border-left: 4px solid #ff6f00; } + .st-orange small { + border-left: 2px solid #ff6f00; } + +.st-blue { + border-left: 4px solid #2196f3; } + .st-blue small { + border-left: 2px solid #2196f3; } + +.st-mdb { + border-left: 4px solid #45526E; } + .st-mdb small { + border-left: 2px solid #45526E; } + +.divider-short { + max-width: 50px; + border-color: #4285F4; + border-width: 3px; } + +.bq-primary { + border-left: 3px solid #4285F4; } + .bq-primary .bq-title { + color: #4285F4; } + +.bq-warning { + border-left: 3px solid #ffbb33; } + .bq-warning .bq-title { + color: #ffbb33; } + +.bq-danger { + border-left: 3px solid #ff4444; } + .bq-danger .bq-title { + color: #ff4444; } + +.bq-success { + border-left: 3px solid #00C851; } + .bq-success .bq-title { + color: #00C851; } + +.mt-0 { + margin-top: 0 !important; } + +.mb-0 { + margin-bottom: 0 !important; } + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + +.mt-1 { + margin-top: 1rem !important; } + +.mb-1 { + margin-bottom: 1rem !important; } + +.my-1 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + +.mt-2 { + margin-top: 1.5rem !important; } + +.mb-2 { + margin-bottom: 1.5rem !important; } + +.my-2 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + +.mt-3 { + margin-top: 3rem !important; } + +.mb-3 { + margin-bottom: 3rem !important; } + +.my-3 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + +.mt-4 { + margin-top: 4rem !important; } + +.mb-4 { + margin-bottom: 4rem !important; } + +.my-4 { + margin-top: 4rem !important; + margin-bottom: 4rem !important; } + +.mt-5 { + margin-top: 5rem !important; } + +.mb-5 { + margin-bottom: 5rem !important; } + +.my-5 { + margin-top: 5rem !important; + margin-bottom: 5rem !important; } + +.pt-0 { + padding-top: 0 !important; } + +.pb-0 { + padding-bottom: 0 !important; } + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + +.pt-1 { + padding-top: 1rem !important; } + +.pb-1 { + padding-bottom: 1rem !important; } + +.py-1 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + +.pt-2 { + padding-top: 1.5rem !important; } + +.pb-2 { + padding-bottom: 1.5rem !important; } + +.py-2 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + +.pt-3 { + padding-top: 3rem !important; } + +.pb-3 { + padding-bottom: 3rem !important; } + +.py-3 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + +.pt-4 { + padding-top: 4rem !important; } + +.pb-4 { + padding-bottom: 4rem !important; } + +.py-4 { + padding-top: 4rem !important; + padding-bottom: 4rem !important; } + +.pt-5 { + padding-top: 5rem !important; } + +.pb-5 { + padding-bottom: 5rem !important; } + +.py-5 { + padding-top: 5rem !important; + padding-bottom: 5rem !important; } + +@media (max-width: 992px) { + .mb-r { + margin-bottom: 2rem !important; } } + +@media (min-width: 992px) { + .mb-r { + margin-bottom: 3rem !important; } } + +.mb-m { + margin-bottom: 1rem; } + @media (min-width: 62em) { + .mb-m { + margin-bottom: 0; } } + +.no-height { + height: 0; } + +.sharp-corners { + border-radius: 0; } + +button:focus { + outline: none !important; } + +.btn { + font-size: 0.8rem; + padding: 0.85rem 2.13rem; } + .btn.btn-lg { + font-size: 0.9rem; + padding: 1rem 2.4rem; } + .btn.btn-md { + font-size: 0.7rem; + padding: 0.7rem 1.6rem; } + .btn.btn-sm { + font-size: 0.6rem; + padding: 0.5rem 1.6rem; } + .btn.btn-sm.btn-table { + padding: 0.5rem 0.9rem; } + .btn.btn-sm .fa { + font-size: 0.8rem; } + +.btn { + border-radius: 2px; + border: 0; + transition: .2s ease-out; + color: #fff !important; + margin: 6px; + white-space: normal !important; + word-wrap: break-word; + text-transform: uppercase; } + .btn:hover { + color: #fff; } + .btn:active, .btn:focus, .btn.active { + outline: 0; + color: #fff; } + .btn .fa { + font-size: 1.1rem; + position: relative; + vertical-align: middle; + margin-top: -2px; } + .btn .fa.right { + margin-left: 3px; } + .btn .fa.left { + margin-right: 3px; } + +.btn-group .btn { + margin: 0; } + +.btn-block { + margin: inherit; } + +.btn-secondary { + background-color: #aa66cc; } + .btn-secondary:hover, .btn-secondary:focus, .btn-secondary:active { + background-color: #b579d2 !important; + color: #fff; } + .btn-secondary.active { + background-color: #773399 !important; } + .btn-secondary.active:hover { + color: #fff; } + .btn-secondary.active:focus { + color: #fff; } + .btn-secondary.dropdown-toggle { + color: #fff !important; + background-color: #aa66cc !important; } + .btn-secondary.dropdown-toggle:hover { + color: #fff; + background-color: #b579d2 !important; } + .btn-secondary.dropdown-toggle:focus { + color: #fff; + background-color: #aa66cc; } + +.btn-secondary:active:hover { + background-color: #b579d2 !important; } + +.btn-primary { + background: #4285F4; } + .btn-primary:hover, .btn-primary:focus, .btn-primary:active { + background-color: #5a95f5 !important; } + .btn-primary.active { + background-color: #0b51c5 !important; } + +.btn-default { + background: #2BBBAD; } + .btn-default:hover, .btn-default:focus, .btn-default:active { + background-color: #30cfc0 !important; } + .btn-default.active { + background-color: #186860 !important; } + +.btn-success { + background: #00C851; } + .btn-success:hover, .btn-success:focus, .btn-success:active { + background-color: #00d255 !important; } + .btn-success.active { + background-color: #006228 !important; } + +.btn-info { + background: #33b5e5; } + .btn-info:hover, .btn-info:focus { + background-color: #4abde8 !important; } + .btn-info.active { + background-color: #14799e !important; } + +.btn-warning { + background: #FF8800; } + .btn-warning:hover, .btn-warning:focus { + background-color: #ff961f !important; } + .btn-warning.active { + background-color: #cc8800 !important; } + +.btn-danger { + background: #CC0000; } + .btn-danger:hover, .btn-danger:focus { + background-color: #db0000 !important; } + .btn-danger.active { + background-color: maroon !important; } + +.btn-link { + background-color: transparent; + color: #000 !important; } + .btn-link:hover, .btn-link:focus { + background-color: transparent; + color: #000; } + +.btn-outline-primary { + border: 2px solid #4285F4; + color: #0d47a1 !important; + background-color: transparent; } + .btn-outline-primary:hover, .btn-outline-primary:focus, .btn-outline-primary:active, .btn-outline-primary:active:focus { + color: #4285F4; + border-color: #4285F4; + background-color: transparent; } + +.btn-outline-secondary { + border: 2px solid #aa66cc; + color: #9933CC !important; + background-color: transparent; } + .btn-outline-secondary:hover, .btn-outline-secondary:focus, .btn-outline-secondary:active, .btn-outline-secondary:active:focus { + color: #aa66cc; + border: 2px solid #aa66cc; + background-color: transparent; } + +.btn-outline-default { + background-color: transparent; + border: 2px solid #2BBBAD; + color: #00695c !important; + background-color: transparent; } + .btn-outline-default:hover, .btn-outline-default:focus, .btn-outline-default:active, .btn-outline-default:active:focus { + color: #2BBBAD; + border-color: #2BBBAD; + background-color: transparent; } + +.btn-outline-success { + border: 2px solid #00C851; + color: #007E33 !important; + background-color: transparent; } + .btn-outline-success:hover, .btn-outline-success:focus, .btn-outline-success:active, .btn-outline-success:active:focus { + color: #00C851; + border-color: #00C851; + background-color: transparent; } + +.btn-outline-info { + border: 2px solid #33b5e5; + color: #0099CC !important; + background-color: transparent; } + .btn-outline-info:hover, .btn-outline-info:focus, .btn-outline-info:active, .btn-outline-info:active:focus { + color: #33b5e5; + border-color: #33b5e5; + background-color: transparent; } + +.btn-outline-warning { + border: 2px solid #ffbb33; + color: #FF8800 !important; + background-color: transparent; } + .btn-outline-warning:hover, .btn-outline-warning:focus, .btn-outline-warning:active, .btn-outline-warning:active:focus { + border-color: #ffbb33; + color: #ffbb33; + background-color: transparent; } + +.btn-outline-danger { + border: 2px solid #ff4444; + color: #CC0000 !important; + background-color: transparent; } + .btn-outline-danger:hover, .btn-outline-danger:focus, .btn-outline-danger:active, .btn-outline-danger:active:focus { + color: #ff4444; + border-color: #ff4444; + background-color: transparent; } + +.btn-outline-white { + border: 2px solid #fff; + color: #fff !important; + background-color: transparent; } + .btn-outline-white:hover, .btn-outline-white:focus, .btn-outline-white:active, .btn-outline-white:active:focus { + color: #e6e6e6; + border-color: #fff; + background-color: transparent; } + +.btn-outline-black { + border: 2px solid #000; + color: #000 !important; + background-color: transparent; } + .btn-outline-black:hover, .btn-outline-black:focus, .btn-outline-black:active, .btn-outline-black:active:focus { + color: #000; + border-color: #000; + background-color: transparent; } + +.pager li a { + border: 0; + transition: .2s ease-out; } + +.btn-elegant { + background: #2E2E2E; } + .btn-elegant:hover, .btn-elegant:focus { + background-color: #3b3b3b !important; } + .btn-elegant.active { + background-color: black !important; } + +.btn-unique { + background: #1C2331; } + .btn-unique:hover, .btn-unique:focus { + background-color: #252f41 !important; } + .btn-unique.active { + background-color: black !important; } + +.btn-pink { + background: #e91e63; } + .btn-pink:hover, .btn-pink:focus { + background-color: #eb3573 !important; } + .btn-pink.active { + background-color: #930e3b !important; } + +.btn-purple { + background: #4a148c; } + .btn-purple:hover, .btn-purple:focus { + background-color: #5617a2 !important; } + .btn-purple.active { + background-color: #1b0733 !important; } + +.btn-deep-purple { + background: #311b92; } + .btn-deep-purple:hover, .btn-deep-purple:focus { + background-color: #381fa8 !important; } + .btn-deep-purple.active { + background-color: #140b3c !important; } + +.btn-indigo { + background: #1a237e; } + .btn-indigo:hover, .btn-indigo:focus { + background-color: #1e2993 !important; } + .btn-indigo.active { + background-color: #090c29 !important; } + +.btn-cyan { + background: #00acc1; } + .btn-cyan:hover, .btn-cyan:focus { + background-color: #00c3db !important; } + .btn-cyan.active { + background-color: #00515b !important; } + +.btn-light-green { + background: #7cb342; } + .btn-light-green:hover, .btn-light-green:focus { + background-color: #89be50 !important; } + .btn-light-green.active { + background-color: #486827 !important; } + +.btn-dark-green { + background: #007E33; } + .btn-dark-green:hover, .btn-dark-green:focus { + background-color: #00983d !important; } + .btn-dark-green.active { + background-color: #00180a !important; } + +.btn-lime { + background: #afb42b; } + .btn-lime:hover, .btn-lime:focus { + background-color: #c3c930 !important; } + .btn-lime.active { + background-color: #5f6217 !important; } + +.btn-yellow { + background: #fbc02d; } + .btn-yellow:hover, .btn-yellow:focus { + background-color: #fbc846 !important; } + .btn-yellow.active { + background-color: #be8904 !important; } + +.btn-amber { + background: #ff6f00; } + .btn-amber:hover, .btn-amber:focus { + background-color: #ff7d1a !important; } + .btn-amber.active { + background-color: #994300 !important; } + +.btn-orange { + background: #e65100; } + .btn-orange:hover, .btn-orange:focus { + background-color: #ff5a01 !important; } + .btn-orange.active { + background-color: #802d00 !important; } + +.btn-deep-orange { + background: #bf360c; } + .btn-deep-orange:hover, .btn-deep-orange:focus { + background-color: #d73d0e !important; } + .btn-deep-orange.active { + background-color: #5f1b06 !important; } + +.btn-brown { + background: #6d4c41; } + .btn-brown:hover, .btn-brown:focus { + background-color: #7d574b !important; } + .btn-brown.active { + background-color: #2d1f1b !important; } + +.btn-blue-grey { + background: #607d8b; } + .btn-blue-grey:hover, .btn-blue-grey:focus { + background-color: #6b8a99 !important; } + .btn-blue-grey.active { + background-color: #36474f !important; } + +.btn-mdb { + background: #45526E; } + .btn-mdb:hover, .btn-mdb:focus { + background-color: #4f5e7e !important; } + .btn-mdb.active { + background-color: #1e232f !important; } + +.btn-secondary.disabled, .btn-secondary:disabled { + background-color: #aa66cc; + cursor: not-allowed; + pointer-events: auto !important; } + +.btn-split { + padding-left: 0.85rem; + padding-right: 1.25rem; } + +i.btn-primary { + background: #4285F4 !important; } + +i.btn-default { + background: #2BBBAD !important; } + +i.btn-success { + background: #00C851 !important; } + +i.btn-info { + background: #33b5e5 !important; } + +i.btn-warning { + background: #FF8800 !important; } + +i.btn-danger { + background: #CC0000 !important; } + +.card { + border: 0; } + .card .card-title a { + color: #424242; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + -ms-transition: 0.4s; + transition: 0.4s; } + .card .card-title a:hover { + color: #616161; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + -ms-transition: 0.4s; + transition: 0.4s; } + .card img { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + .card .card-block { + position: relative; } + .card .card-footer { + padding-bottom: 0; + font-size: 1.2rem; } + .card .card-footer:after { + display: block; + content: ""; + clear: both; } + .card .card-footer .card-link { + color: inherit; } + +.jumbotron { + background-color: #fff; + padding: 2rem; } + .jumbotron.m-1, .jumbotron.m-2, .jumbotron.m-3 { + z-index: 50; + position: relative; + margin-left: 3%; + margin-right: 3%; } + .jumbotron.m-1 { + margin-top: -20px; } + .jumbotron.m-2 { + margin-top: -30px; } + .jumbotron.m-3 { + margin-top: -40px; } + +.list-group-item { + width: 100%; } + +.edge-header { + display: block; + height: 278px; + background-color: #ccc; } + +.free-bird { + margin-top: -100px; } + +.card .form-header { + color: #fff; + text-align: center; + margin-top: -50px; + margin-bottom: 3rem; + padding: 1rem; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; } + .card .form-header h3 { + margin: 0; + padding: 0.7rem; } + +.call .fa { + margin-right: 5px; } + +.navbar { + font-weight: 300; } + .navbar form input { + margin: 0; + height: 1rem; + margin-right: 5px; + margin-left: 8px; + margin-bottom: 1px; } + .navbar .navbar-brand { + -webkit-align-self: flex-start; + -ms-flex-item-align: start; + align-self: flex-start; + overflow: visible; } + .navbar .breadcrumb { + margin: 0; + background-color: inherit; + font-weight: 300; } + .navbar.navbar-dark .navbar-brand { + color: #fff; } + .navbar.navbar-dark .navbar-brand:hover { + color: #fff; } + .navbar.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.9)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); + cursor: pointer; } + .navbar.navbar-dark .breadcrumb a, + .navbar.navbar-dark .navbar-nav .nav-item a { + color: #fff; + transition: .35s; } + .navbar.navbar-dark .breadcrumb a:hover, + .navbar.navbar-dark .navbar-nav .nav-item a:hover { + color: rgba(255, 255, 255, 0.75); } + .navbar.navbar-dark .breadcrumb.active, + .navbar.navbar-dark .navbar-nav .nav-item.active { + background-color: rgba(255, 255, 255, 0.1); } + .navbar.navbar-dark .breadcrumb .dropdown-menu a, + .navbar.navbar-dark .navbar-nav .nav-item .dropdown-menu a { + color: #212121; } + .navbar.navbar-dark .breadcrumb .dropdown-menu a:hover, .navbar.navbar-dark .breadcrumb .dropdown-menu a:focus, .navbar.navbar-dark .breadcrumb .dropdown-menu a:active, + .navbar.navbar-dark .navbar-nav .nav-item .dropdown-menu a:hover, + .navbar.navbar-dark .navbar-nav .nav-item .dropdown-menu a:focus, + .navbar.navbar-dark .navbar-nav .nav-item .dropdown-menu a:active { + color: #212121; } + .navbar.navbar-dark .nav-link { + color: #fff; } + .navbar.navbar-dark .navbar-toggler { + color: #fff; } + .navbar.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.9)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); } + .navbar.navbar-light .breadcrumb a, + .navbar.navbar-light .nav-item a { + color: #212121; + transition: .35s; } + .navbar.navbar-light .breadcrumb a:hover, + .navbar.navbar-light .nav-item a:hover { + transition: .35s; + color: #212121; } + .navbar.navbar-light .breadcrumb.active, + .navbar.navbar-light .nav-item.active { + background-color: rgba(158, 158, 158, 0.2); } + .navbar.navbar-light .breadcrumb .dropdown-menu a, + .navbar.navbar-light .nav-item .dropdown-menu a { + color: #000; + padding: 1rem; } + .navbar.navbar-light .navbar-toggler { + color: #000; } + .navbar .dropdown-menu a { + font-size: 0.9375rem; + font-weight: 300; + padding: 10px; } + .navbar .navbar-toggler { + border-width: 0; } + .navbar .nav-flex-icons { + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + @media (max-width: 991px) { + .navbar .container { + width: 100%; } + .navbar .container .navbar-toggler-right { + right: 0; } } + .navbar .dropdown-menu { + position: absolute !important; } + .navbar.double-nav { + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + +.navbar-dark form input[type=text] { + border-bottom: 1px solid #fff; } + +.navbar-dark form .form-control { + color: #fff; } + .navbar-dark form .form-control::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.65) !important; + font-weight: 300; } + .navbar-dark form .form-control:-moz-placeholder { + color: rgba(255, 255, 255, 0.65) !important; + font-weight: 300; } + .navbar-dark form .form-control::-moz-placeholder { + color: rgba(255, 255, 255, 0.65) !important; + font-weight: 300; } + .navbar-dark form .form-control::-ms-placeholder { + color: rgba(255, 255, 255, 0.65) !important; + font-weight: 300; } + .navbar-dark form .form-control::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.65) !important; + font-weight: 300; } + .navbar-dark form .form-control::-moz-placeholder { + color: rgba(255, 255, 255, 0.65) !important; + font-weight: 300; } + .navbar-dark form .form-control:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.65) !important; + font-weight: 300; } + .navbar-dark form .form-control::placeholder { + color: rgba(255, 255, 255, 0.65) !important; + font-weight: 300; } + +.navbar-light form input[type=text] { + border-bottom: 1px solid #1C2331; } + +.navbar-light form .form-control { + color: #1C2331; } + .navbar-light form .form-control::-webkit-input-placeholder { + color: #1C2331 !important; + font-weight: 300; } + .navbar-light form .form-control:-moz-placeholder { + color: #1C2331 !important; + font-weight: 300; } + .navbar-light form .form-control::-moz-placeholder { + color: #1C2331 !important; + font-weight: 300; } + .navbar-light form .form-control::-ms-placeholder { + color: #1C2331 !important; + font-weight: 300; } + .navbar-light form .form-control::-webkit-input-placeholder { + color: #1C2331 !important; + font-weight: 300; } + .navbar-light form .form-control::-moz-placeholder { + color: #1C2331 !important; + font-weight: 300; } + .navbar-light form .form-control:-ms-input-placeholder { + color: #1C2331 !important; + font-weight: 300; } + .navbar-light form .form-control::placeholder { + color: #1C2331 !important; + font-weight: 300; } + +/* MDB HOVER EFFECTS */ +.view { + overflow: hidden; + position: relative; + cursor: default; } + .view .mask, + .view .content { + width: 100%; + height: 100%; + position: absolute; + overflow: hidden; + top: 0; + left: 0; } + .view img, .view video { + display: block; + position: relative; } + +.view .mask { + background-attachment: fixed; } + +.full-bg-img { + height: 100%; + width: 100%; + position: absolute; + overflow: hidden; + top: 0; + left: 0; } + +header .view { + position: relative; + width: 100%; + height: auto; + background-repeat: no-repeat; + background-position: center center; + background-size: cover; } + +.overlay:hover .mask { + opacity: 1; } + +.overlay img, .overlay video { + transition: all 0.2s linear; } + +.overlay .mask { + opacity: 0; + transition: all 0.4s ease-in-out; } + +.pattern-1 { + background: url(../img/overlays/01.png); } + +.pattern-2 { + background: url(../img/overlays/02.png); } + +.pattern-3 { + background: url(../img/overlays/03.png); } + +.pattern-4 { + background: url(../img/overlays/04.png); } + +.pattern-5 { + background: url(../img/overlays/05.png); } + +.pattern-6 { + background: url(../img/overlays/06.png); } + +.pattern-7 { + background: url(../img/overlays/07.png); } + +.pattern-8 { + background: url(../img/overlays/08.png); } + +.pattern-9 { + background: url(../img/overlays/09.png); } + +.hm-blue-light .mask, +.hm-blue-light .full-bg-img { + background-color: rgba(3, 169, 244, 0.3); } + +.hm-red-light .mask, +.hm-red-light .full-bg-img { + background-color: rgba(244, 67, 54, 0.3); } + +.hm-pink-light .mask, +.hm-pink-light .full-bg-img { + background-color: rgba(233, 30, 99, 0.3); } + +.hm-purple-light .mask, +.hm-purple-light .full-bg-img { + background-color: rgba(156, 39, 176, 0.3); } + +.hm-indigo-light .mask, +.hm-indigo-light .full-bg-img { + background-color: rgba(63, 81, 181, 0.3); } + +.hm-cyan-light .mask, +.hm-cyan-light .full-bg-img { + background-color: rgba(0, 188, 212, 0.3); } + +.hm-teal-light .mask, +.hm-teal-light .full-bg-img { + background-color: rgba(0, 150, 136, 0.3); } + +.hm-green-light .mask, +.hm-green-light .full-bg-img { + background-color: rgba(76, 175, 80, 0.3); } + +.hm-lime-light .mask, +.hm-lime-light .full-bg-img { + background-color: rgba(205, 220, 57, 0.3); } + +.hm-yellow-light .mask, +.hm-yellow-light .full-bg-img { + background-color: rgba(255, 235, 59, 0.3); } + +.hm-orange-light .mask, +.hm-orange-light .full-bg-img { + background-color: rgba(255, 152, 0, 0.3); } + +.hm-brown-light .mask, +.hm-brown-light .full-bg-img { + background-color: rgba(121, 85, 72, 0.3); } + +.hm-grey-light .mask, +.hm-grey-light .full-bg-img { + background-color: rgba(158, 158, 158, 0.3); } + +.hm-bluegrey-light .mask, +.hm-bluegrey-light .full-bg-img { + background-color: rgba(96, 125, 139, 0.3); } + +.hm-black-light .mask, +.hm-black-light .full-bg-img { + background-color: rgba(0, 0, 0, 0.3); } + +.hm-stylish-light .mask, +.hm-stylish-light .full-bg-img { + background-color: rgba(62, 69, 81, 0.3); } + +.hm-white-light .mask, +.hm-white-light .full-bg-img { + background-color: rgba(255, 255, 255, 0.3); } + +.hm-blue-strong .mask, +.hm-blue-strong .full-bg-img { + background-color: rgba(3, 169, 244, 0.7); } + +.hm-red-strong .mask, +.hm-red-strong .full-bg-img { + background-color: rgba(244, 67, 54, 0.7); } + +.hm-pink-strong .mask, +.hm-pink-strong .full-bg-img { + background-color: rgba(233, 30, 99, 0.7); } + +.hm-purple-strong .mask, +.hm-purple-strong .full-bg-img { + background-color: rgba(156, 39, 176, 0.7); } + +.hm-indigo-strong .mask, +.hm-indigo-strong .full-bg-img { + background-color: rgba(63, 81, 181, 0.7); } + +.hm-cyan-strong .mask, +.hm-cyan-strong .full-bg-img { + background-color: rgba(0, 188, 212, 0.7); } + +.hm-teal-strong .mask, +.hm-teal-strong .full-bg-img { + background-color: rgba(0, 150, 136, 0.7); } + +.hm-green-strong .mask, +.hm-green-strong .full-bg-img { + background-color: rgba(76, 175, 80, 0.7); } + +.hm-lime-strong .mask, +.hm-lime-strong .full-bg-img { + background-color: rgba(205, 220, 57, 0.7); } + +.hm-yellow-strong .mask, +.hm-yellow-strong .full-bg-img { + background-color: rgba(255, 235, 59, 0.7); } + +.hm-orange-strong .mask, +.hm-orange-strong .full-bg-img { + background-color: rgba(255, 152, 0, 0.7); } + +.hm-brown-strong .mask, +.hm-brown-strong .full-bg-img { + background-color: rgba(121, 85, 72, 0.7); } + +.hm-grey-strong .mask, +.hm-grey-strong .full-bg-img { + background-color: rgba(158, 158, 158, 0.7); } + +.hm-bluegrey-strong .mask, +.hm-bluegrey-strong .full-bg-img { + background-color: rgba(96, 125, 139, 0.7); } + +.hm-black-strong .mask, +.hm-black-strong .full-bg-img { + background-color: rgba(0, 0, 0, 0.7); } + +.hm-stylish-strong .mask, +.hm-stylish-strong .full-bg-img { + background-color: rgba(62, 69, 81, 0.7); } + +.hm-white-strong .mask, +.hm-white-strong .full-bg-img { + background-color: rgba(255, 255, 255, 0.7); } + +.hm-blue-slight .mask, +.hm-blue-slight .full-bg-img { + background-color: rgba(3, 169, 244, 0.1); } + +.hm-red-slight .mask, +.hm-red-slight .full-bg-img { + background-color: rgba(244, 67, 54, 0.1); } + +.hm-pink-slight .mask, +.hm-pink-slight .full-bg-img { + background-color: rgba(233, 30, 99, 0.1); } + +.hm-purple-slight .mask, +.hm-purple-slight .full-bg-img { + background-color: rgba(156, 39, 176, 0.1); } + +.hm-indigo-slight .mask, +.hm-indigo-slight .full-bg-img { + background-color: rgba(63, 81, 181, 0.1); } + +.hm-cyan-slight .mask, +.hm-cyan-slight .full-bg-img { + background-color: rgba(0, 188, 212, 0.1); } + +.hm-teal-slight .mask, +.hm-teal-slight .full-bg-img { + background-color: rgba(0, 150, 136, 0.1); } + +.hm-green-slight .mask, +.hm-green-slight .full-bg-img { + background-color: rgba(76, 175, 80, 0.1); } + +.hm-lime-slight .mask, +.hm-lime-slight .full-bg-img { + background-color: rgba(205, 220, 57, 0.1); } + +.hm-yellow-slight .mask, +.hm-yellow-slight .full-bg-img { + background-color: rgba(255, 235, 59, 0.1); } + +.hm-orange-slight .mask, +.hm-orange-slight .full-bg-img { + background-color: rgba(255, 152, 0, 0.1); } + +.hm-brown-slight .mask, +.hm-brown-slight .full-bg-img { + background-color: rgba(121, 85, 72, 0.1); } + +.hm-grey-slight .mask, +.hm-grey-slight .full-bg-img { + background-color: rgba(158, 158, 158, 0.1); } + +.hm-bluegrey-slight .mask, +.hm-bluegrey-slight .full-bg-img { + background-color: rgba(96, 125, 139, 0.1); } + +.hm-black-slight .mask, +.hm-black-slight .full-bg-img { + background-color: rgba(0, 0, 0, 0.1); } + +.hm-stylish-slight .mask, +.hm-stylish-slight .full-bg-img { + background-color: rgba(62, 69, 81, 0.1); } + +.hm-white-slight .mask, +.hm-white-slight .full-bg-img { + background-color: rgba(255, 255, 255, 0.1); } + +.hm-zoom img { + transition: all 0.2s linear; } + +.hm-zoom:hover img { + -webkit-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); } + +.hm-zoom:hover .mask { + opacity: 1; } + +.img-overlay { + position: relative; } + .img-overlay:after { + content: ''; + display: block; + position: absolute; + height: 100%; + width: 100%; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: rgba(0, 0, 0, 0.17); + transition: background 0.4s; } + .img-overlay:hover:after { + background: rgba(0, 0, 0, 0.35); } + .img-overlay.light:after { + background: rgba(255, 255, 255, 0.17); } + .img-overlay.light:hover:after { + background: rgba(255, 255, 255, 0.35); } + .img-overlay.blue:after { + background: rgba(0, 145, 234, 0.17); } + .img-overlay.blue:hover:after { + background: rgba(0, 145, 234, 0.35); } + .img-overlay.green:after { + background: rgba(76, 175, 80, 0.17); } + .img-overlay.green:hover:after { + background: rgba(76, 175, 80, 0.35); } + .img-overlay.red:after { + background: rgba(213, 0, 0, 0.17); } + .img-overlay.red:hover:after { + background: rgba(213, 0, 0, 0.35); } + +footer.page-footer { + margin-top: 20px; + padding-top: 20px; + background-color: #3E4551; + color: #fff; } + footer.page-footer .footer-copyright { + overflow: hidden; + height: 50px; + line-height: 50px; + color: rgba(255, 255, 255, 0.8); + background-color: rgba(0, 0, 0, 0.2); + text-align: center; } + footer.page-footer a { + color: #fff; } + footer.page-footer .title { + text-transform: uppercase; } + footer.page-footer .call-to-action { + text-align: center; + padding-top: 1.3rem; + padding-bottom: 0.5rem; } + footer.page-footer .call-to-action ul li { + display: inline-block; + padding-right: 10px; } + footer.page-footer .social-section { + text-align: center; } + footer.page-footer .social-section ul li { + display: inline-block; } + +/* Instagram photos */ +ul.instagram-photos li { + display: inline-block; + max-width: 100px; + margin: 4px; } + ul.instagram-photos li img { + margin: 0; } + +.carousel-control:hover { + -webkit-transition-duration: 400ms; + -moz-transition-duration: 400ms; + -o-transition-duration: 400ms; + -ms-transition-duration: 400ms; + transition-duration: 400ms; } + +.carousel-fade .carousel-inner .carousel-item { + opacity: 0; + transition-property: opacity; } + +.carousel-fade .carousel-inner .active { + opacity: 1; } + +.carousel-fade .carousel-inner .active.left, +.carousel-fade .carousel-inner .active.right { + left: 0; + opacity: 0; + z-index: 1; } + +.carousel-fade .carousel-inner .next.left, +.carousel-fade .carousel-inner .prev.right { + opacity: 1; } + +.carousel-fade .carousel-control { + z-index: 2; } + +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-fade .carousel-inner > .carousel-item.next, + .carousel-fade .carousel-inner > .carousel-item.active.right { + opacity: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + .carousel-fade .carousel-inner > .carousel-item.prev, + .carousel-fade .carousel-inner > .carousel-item.active.left { + opacity: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + .carousel-fade .carousel-inner > .carousel-item.next.left, + .carousel-fade .carousel-inner > .carousel-item.prev.right, + .carousel-fade .carousel-inner > .carousel-item.active { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +.carousel .carousel-control-prev-icon, +.carousel .carousel-control-next-icon { + width: 36px; + height: 36px; } + +.carousel .carousel-control-prev-icon { + background-image: url(../img/svg/arrow_left.svg); } + +.carousel .carousel-control-next-icon { + background-image: url(../img/svg/arrow_right.svg); } + +.carousel .carousel-indicators li { + max-width: 10px; + height: 10px; + border-radius: 50%; } + +.carousel .video-fluid { + height: 100%; } + +.carousel.no-flex .carousel-item.active, +.carousel.no-flex .carousel-item-next, +.carousel.no-flex .carousel-item-prev { + display: block; } + +body.modal-open { + padding-right: 0 !important; } + +body.scrollable { + overflow-y: auto; } + +.modal-dialog .modal-content { + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; + border: 0; } + +.modal .modal-dialog.modal-top { + top: 0; } + +.modal .modal-dialog.modal-left { + left: 0; } + +.modal .modal-dialog.modal-right { + right: 0; } + +.modal .modal-dialog.modal-bottom { + bottom: 0; } + +.modal .modal-dialog.modal-top-left { + top: 10px; + left: 10px; } + +.modal .modal-dialog.modal-top-right { + top: 10px; + right: 10px; } + +.modal .modal-dialog.modal-bottom-left { + left: 10px; + bottom: 10px; } + +.modal .modal-dialog.modal-bottom-right { + right: 10px; + bottom: 10px; } + +.modal.fade.top:not(.show) .modal-dialog { + -webkit-transform: translate3d(0, -25%, 0); + transform: translate3d(0, -25%, 0); } + +.modal.fade.left:not(.show) .modal-dialog { + -webkit-transform: translate3d(-25%, 0, 0); + transform: translate3d(-25%, 0, 0); } + +.modal.fade.right:not(.show) .modal-dialog { + -webkit-transform: translate3d(25%, 0, 0); + transform: translate3d(25%, 0, 0); } + +.modal.fade.bottom:not(.show) .modal-dialog { + -webkit-transform: translate3d(0, 25%, 0); + transform: translate3d(0, 25%, 0); } + +.modal.modal-scrolling { + position: relative; } + .modal.modal-scrolling .modal-dialog { + position: fixed; + z-index: 1050; } + +.modal.modal-content-clickable { + top: auto; + bottom: auto; } + .modal.modal-content-clickable .modal-dialog { + position: fixed; } + +.modal .modal-fluid { + width: 100%; + max-width: 100%; } + .modal .modal-fluid .modal-content { + width: 100%; } + +.modal .modal-frame { + position: absolute; + width: 100%; + max-width: 100%; + margin: 0; } + .modal .modal-frame.modal-bottom { + bottom: 0; } + +.modal .modal-full-height { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + position: absolute; + width: 400px; + height: 100%; + margin: 0; + top: 0; + right: 0; } + .modal .modal-full-height.modal-top, .modal .modal-full-height.modal-bottom { + display: block; + width: 100%; + max-width: 100%; + height: auto; } + .modal .modal-full-height.modal-top { + bottom: auto; } + .modal .modal-full-height.modal-bottom { + top: auto; } + .modal .modal-full-height .modal-content { + width: 100%; } + .modal .modal-full-height.modal-lg { + max-width: 90%; + width: 90%; } + @media (min-width: 992px) { + .modal .modal-full-height.modal-lg { + max-width: 800px; + width: 800px; } } + @media (min-width: 1200px) { + .modal .modal-full-height.modal-lg { + max-width: 1000px; + width: 1000px; } } + +.modal .modal-side { + position: absolute; + right: 10px; + bottom: 10px; + margin: 0; + width: 400px; } + +.modal-dialog .btn .fa { + color: #fff !important; } + +.modal-dialog [class*="btn-outline-"] .fa { + color: inherit !important; } + +.modal-dialog.cascading-modal { + margin-top: 10%; } + .modal-dialog.cascading-modal .modal-header { + text-align: center; + margin: -2rem 1rem 1rem 1rem; + padding: 1.5rem; + border: none; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; } + .modal-dialog.cascading-modal .modal-header .close { + margin-right: 2.5rem; } + .modal-dialog.cascading-modal .modal-header.white-text .close { + color: #fff; + opacity: 1; } + .modal-dialog.cascading-modal .modal-header .title { + width: 100%; + margin-bottom: 0; + font-size: 1.25rem; } + .modal-dialog.cascading-modal .modal-header .title .fa { + margin-right: 9px; } + .modal-dialog.cascading-modal .modal-header .social-buttons { + margin-top: 1.5rem; } + .modal-dialog.cascading-modal .modal-header .social-buttons a { + font-size: 1rem; } + .modal-dialog.cascading-modal .modal-c-tabs .nav-tabs { + margin: -1.5rem 1rem 0 1rem; } + .modal-dialog.cascading-modal .modal-c-tabs .tab-content { + padding: 1.7rem 0 0 0; } + .modal-dialog.cascading-modal .modal-body, + .modal-dialog.cascading-modal .modal-footer { + color: #616161; + padding-right: 2rem; + padding-left: 2rem; } + .modal-dialog.cascading-modal .modal-body .additional-option, + .modal-dialog.cascading-modal .modal-footer .additional-option { + text-align: center; + margin-top: 1rem; } + .modal-dialog.cascading-modal.modal-avatar { + margin-top: 6rem; } + .modal-dialog.cascading-modal.modal-avatar .modal-header { + margin: -6rem 2rem -1rem 2rem; } + .modal-dialog.cascading-modal.modal-avatar .modal-header img { + width: 130px; } + +.modal-dialog.modal-notify .heading { + margin: 0; + padding: 0.3rem; + color: #fff; + font-size: 1.15rem; } + +.modal-dialog.modal-notify .modal-header { + border: 0; } + +.modal-dialog.modal-notify .close { + opacity: 1; } + +.modal-dialog.modal-notify .modal-body { + padding: 1.5rem; + color: #616161; } + +.modal-dialog.modal-notify .btn-outline-secondary-modal { + background-color: transparent; } + +.modal-dialog.modal-notify.modal-info .modal-header { + background-color: #5394ff; } + +.modal-dialog.modal-notify.modal-info .fa { + color: #5394ff; } + +.modal-dialog.modal-notify.modal-info .badge { + background-color: #5394ff; } + +.modal-dialog.modal-notify.modal-info .btn-primary-modal { + background: #5394ff; } + .modal-dialog.modal-notify.modal-info .btn-primary-modal:hover, .modal-dialog.modal-notify.modal-info .btn-primary-modal:focus, .modal-dialog.modal-notify.modal-info .btn-primary-modal:active { + background-color: #6da4ff !important; } + .modal-dialog.modal-notify.modal-info .btn-primary-modal.active { + background-color: #0059ec !important; } + +.modal-dialog.modal-notify.modal-info .btn-outline-secondary-modal { + border: 2px solid #5394ff; + color: #5394ff !important; } + +.modal-dialog.modal-notify.modal-warning .modal-header { + background-color: #ff8e38; } + +.modal-dialog.modal-notify.modal-warning .fa { + color: #ff8e38; } + +.modal-dialog.modal-notify.modal-warning .badge { + background-color: #ff8e38; } + +.modal-dialog.modal-notify.modal-warning .btn-primary-modal { + background: #ff8e38; } + .modal-dialog.modal-notify.modal-warning .btn-primary-modal:hover, .modal-dialog.modal-notify.modal-warning .btn-primary-modal:focus, .modal-dialog.modal-notify.modal-warning .btn-primary-modal:active { + background-color: #ff9c52 !important; } + .modal-dialog.modal-notify.modal-warning .btn-primary-modal.active { + background-color: #d15a00 !important; } + +.modal-dialog.modal-notify.modal-warning .btn-outline-secondary-modal { + border: 2px solid #ff8e38; + color: #ff8e38 !important; } + +.modal-dialog.modal-notify.modal-success .modal-header { + background-color: #01d36b; } + +.modal-dialog.modal-notify.modal-success .fa { + color: #01d36b; } + +.modal-dialog.modal-notify.modal-success .badge { + background-color: #01d36b; } + +.modal-dialog.modal-notify.modal-success .btn-primary-modal { + background: #01d36b; } + .modal-dialog.modal-notify.modal-success .btn-primary-modal:hover, .modal-dialog.modal-notify.modal-success .btn-primary-modal:focus, .modal-dialog.modal-notify.modal-success .btn-primary-modal:active { + background-color: #01ec78 !important; } + .modal-dialog.modal-notify.modal-success .btn-primary-modal.active { + background-color: #016d38 !important; } + +.modal-dialog.modal-notify.modal-success .btn-outline-secondary-modal { + border: 2px solid #01d36b; + color: #01d36b !important; } + +.modal-dialog.modal-notify.modal-danger .modal-header { + background-color: #ff4b4b; } + +.modal-dialog.modal-notify.modal-danger .fa { + color: #ff4b4b; } + +.modal-dialog.modal-notify.modal-danger .badge { + background-color: #ff4b4b; } + +.modal-dialog.modal-notify.modal-danger .btn-primary-modal { + background: #ff4b4b; } + .modal-dialog.modal-notify.modal-danger .btn-primary-modal:hover, .modal-dialog.modal-notify.modal-danger .btn-primary-modal:focus, .modal-dialog.modal-notify.modal-danger .btn-primary-modal:active { + background-color: #ff6565 !important; } + .modal-dialog.modal-notify.modal-danger .btn-primary-modal.active { + background-color: #e40000 !important; } + +.modal-dialog.modal-notify.modal-danger .btn-outline-secondary-modal { + border: 2px solid #ff4b4b; + color: #ff4b4b !important; } diff --git a/resources/static/css/mdb.min.css b/resources/static/css/mdb.min.css new file mode 100644 index 0000000..48a4bbc --- /dev/null +++ b/resources/static/css/mdb.min.css @@ -0,0 +1,26 @@ +/*! + * Material Design for Bootstrap 4 + * Version: MDB Free 4.3.2 + * + * + * Copyright: Material Design for Bootstrap + * http://mdbootstrap.com/ + * + * Read the license: http://mdbootstrap.com/license/ + * + * + * Documentation: http://mdbootstrap.com/ + * + * Getting started: http://mdbootstrap.com/getting-started/ + * + * Tutorials: http://mdbootstrap.com/bootstrap-tutorial/ + * + * Templates: http://mdbootstrap.com/templates/ + * + * Support: http://mdbootstrap.com/forums/forum/support/ + * + * Contact: office@mdbootstrap.com + * + * Atribution: Animate CSS, Twitter Bootstrap, Materialize CSS, Normalize CSS, Waves JS, WOW JS, Toastr, Chart.js , Hammer.js + * + */.waves-effect,a{-webkit-tap-highlight-color:transparent}a,a:focus,a:hover{text-decoration:none}.btn,.hiddendiv{word-wrap:break-word}.mdb-color.lighten-5{background-color:#D0D6E2!important}.mdb-color-text.text-lighten-5{color:#D0D6E2!important}.mdb-color.lighten-4{background-color:#B1BACE!important}.mdb-color-text.text-lighten-4{color:#B1BACE!important}.mdb-color.lighten-3{background-color:#929FBA!important}.mdb-color-text.text-lighten-3{color:#929FBA!important}.mdb-color.lighten-2{background-color:#7283A7!important}.mdb-color-text.text-lighten-2{color:#7283A7!important}.mdb-color.lighten-1{background-color:#59698D!important}.mdb-color-text.text-lighten-1{color:#59698D!important}.mdb-color-text{color:#45526E!important}.mdb-color.darken-1{background-color:#3B465E!important}.mdb-color-text.text-darken-1{color:#3B465E!important}.mdb-color.darken-2{background-color:#2E3951!important}.mdb-color-text.text-darken-2{color:#2E3951!important}.mdb-color.darken-3{background-color:#1C2A48!important}.mdb-color-text.text-darken-3{color:#1C2A48!important}.mdb-color.darken-4{background-color:#1C2331!important}.mdb-color-text.text-darken-4{color:#1C2331!important}.red.lighten-5{background-color:#FFEBEE!important}.red-text.text-lighten-5{color:#FFEBEE!important}.red.lighten-4{background-color:#FFCDD2!important}.red-text.text-lighten-4{color:#FFCDD2!important}.red.lighten-3{background-color:#EF9A9A!important}.red-text.text-lighten-3{color:#EF9A9A!important}.red.lighten-2{background-color:#E57373!important}.red-text.text-lighten-2{color:#E57373!important}.red.lighten-1{background-color:#EF5350!important}.red-text.text-lighten-1{color:#EF5350!important}.red{background-color:#F44336!important}.red-text{color:#F44336!important}.red.darken-1{background-color:#E53935!important}.red-text.text-darken-1{color:#E53935!important}.red.darken-2{background-color:#D32F2F!important}.red-text.text-darken-2{color:#D32F2F!important}.red.darken-3{background-color:#C62828!important}.red-text.text-darken-3{color:#C62828!important}.red.darken-4{background-color:#B71C1C!important}.red-text.text-darken-4{color:#B71C1C!important}.red.accent-1{background-color:#FF8A80!important}.red-text.text-accent-1{color:#FF8A80!important}.red.accent-2{background-color:#FF5252!important}.red-text.text-accent-2{color:#FF5252!important}.red.accent-3{background-color:#FF1744!important}.red-text.text-accent-3{color:#FF1744!important}.red.accent-4{background-color:#D50000!important}.red-text.text-accent-4{color:#D50000!important}.pink.lighten-5{background-color:#fce4ec!important}.pink-text.text-lighten-5{color:#fce4ec!important}.pink.lighten-4{background-color:#f8bbd0!important}.pink-text.text-lighten-4{color:#f8bbd0!important}.pink.lighten-3{background-color:#f48fb1!important}.pink-text.text-lighten-3{color:#f48fb1!important}.pink.lighten-2{background-color:#f06292!important}.pink-text.text-lighten-2{color:#f06292!important}.pink.lighten-1{background-color:#ec407a!important}.pink-text.text-lighten-1{color:#ec407a!important}.pink{background-color:#e91e63!important}.pink-text{color:#e91e63!important}.pink.darken-1{background-color:#d81b60!important}.pink-text.text-darken-1{color:#d81b60!important}.pink.darken-2{background-color:#c2185b!important}.pink-text.text-darken-2{color:#c2185b!important}.pink.darken-3{background-color:#ad1457!important}.pink-text.text-darken-3{color:#ad1457!important}.pink.darken-4{background-color:#880e4f!important}.pink-text.text-darken-4{color:#880e4f!important}.pink.accent-1{background-color:#ff80ab!important}.pink-text.text-accent-1{color:#ff80ab!important}.pink.accent-2{background-color:#ff4081!important}.pink-text.text-accent-2{color:#ff4081!important}.pink.accent-3{background-color:#f50057!important}.pink-text.text-accent-3{color:#f50057!important}.pink.accent-4{background-color:#c51162!important}.pink-text.text-accent-4{color:#c51162!important}.purple.lighten-5{background-color:#f3e5f5!important}.purple-text.text-lighten-5{color:#f3e5f5!important}.purple.lighten-4{background-color:#e1bee7!important}.purple-text.text-lighten-4{color:#e1bee7!important}.purple.lighten-3{background-color:#ce93d8!important}.purple-text.text-lighten-3{color:#ce93d8!important}.purple.lighten-2{background-color:#ba68c8!important}.purple-text.text-lighten-2{color:#ba68c8!important}.purple.lighten-1{background-color:#ab47bc!important}.purple-text.text-lighten-1{color:#ab47bc!important}.purple{background-color:#9c27b0!important}.purple-text{color:#9c27b0!important}.purple.darken-1{background-color:#8e24aa!important}.purple-text.text-darken-1{color:#8e24aa!important}.purple.darken-2{background-color:#7b1fa2!important}.purple-text.text-darken-2{color:#7b1fa2!important}.purple.darken-3{background-color:#6a1b9a!important}.purple-text.text-darken-3{color:#6a1b9a!important}.purple.darken-4{background-color:#4a148c!important}.purple-text.text-darken-4{color:#4a148c!important}.purple.accent-1{background-color:#ea80fc!important}.purple-text.text-accent-1{color:#ea80fc!important}.purple.accent-2{background-color:#e040fb!important}.purple-text.text-accent-2{color:#e040fb!important}.purple.accent-3{background-color:#d500f9!important}.purple-text.text-accent-3{color:#d500f9!important}.purple.accent-4{background-color:#a0f!important}.purple-text.text-accent-4{color:#a0f!important}.deep-purple.lighten-5{background-color:#ede7f6!important}.deep-purple-text.text-lighten-5{color:#ede7f6!important}.deep-purple.lighten-4{background-color:#d1c4e9!important}.deep-purple-text.text-lighten-4{color:#d1c4e9!important}.deep-purple.lighten-3{background-color:#b39ddb!important}.deep-purple-text.text-lighten-3{color:#b39ddb!important}.deep-purple.lighten-2{background-color:#9575cd!important}.deep-purple-text.text-lighten-2{color:#9575cd!important}.deep-purple.lighten-1{background-color:#7e57c2!important}.deep-purple-text.text-lighten-1{color:#7e57c2!important}.deep-purple{background-color:#673ab7!important}.deep-purple-text{color:#673ab7!important}.deep-purple.darken-1{background-color:#5e35b1!important}.deep-purple-text.text-darken-1{color:#5e35b1!important}.deep-purple.darken-2{background-color:#512da8!important}.deep-purple-text.text-darken-2{color:#512da8!important}.deep-purple.darken-3{background-color:#4527a0!important}.deep-purple-text.text-darken-3{color:#4527a0!important}.deep-purple.darken-4{background-color:#311b92!important}.deep-purple-text.text-darken-4{color:#311b92!important}.deep-purple.accent-1{background-color:#b388ff!important}.deep-purple-text.text-accent-1{color:#b388ff!important}.deep-purple.accent-2{background-color:#7c4dff!important}.deep-purple-text.text-accent-2{color:#7c4dff!important}.deep-purple.accent-3{background-color:#651fff!important}.deep-purple-text.text-accent-3{color:#651fff!important}.deep-purple.accent-4{background-color:#6200ea!important}.deep-purple-text.text-accent-4{color:#6200ea!important}.indigo.lighten-5{background-color:#e8eaf6!important}.indigo-text.text-lighten-5{color:#e8eaf6!important}.indigo.lighten-4{background-color:#c5cae9!important}.indigo-text.text-lighten-4{color:#c5cae9!important}.indigo.lighten-3{background-color:#9fa8da!important}.indigo-text.text-lighten-3{color:#9fa8da!important}.indigo.lighten-2{background-color:#7986cb!important}.indigo-text.text-lighten-2{color:#7986cb!important}.indigo.lighten-1{background-color:#5c6bc0!important}.indigo-text.text-lighten-1{color:#5c6bc0!important}.indigo{background-color:#3f51b5!important}.indigo-text{color:#3f51b5!important}.indigo.darken-1{background-color:#3949ab!important}.indigo-text.text-darken-1{color:#3949ab!important}.indigo.darken-2{background-color:#303f9f!important}.indigo-text.text-darken-2{color:#303f9f!important}.indigo.darken-3{background-color:#283593!important}.indigo-text.text-darken-3{color:#283593!important}.indigo.darken-4{background-color:#1a237e!important}.indigo-text.text-darken-4{color:#1a237e!important}.indigo.accent-1{background-color:#8c9eff!important}.indigo-text.text-accent-1{color:#8c9eff!important}.indigo.accent-2{background-color:#536dfe!important}.indigo-text.text-accent-2{color:#536dfe!important}.indigo.accent-3{background-color:#3d5afe!important}.indigo-text.text-accent-3{color:#3d5afe!important}.indigo.accent-4{background-color:#304ffe!important}.indigo-text.text-accent-4{color:#304ffe!important}.blue.lighten-5{background-color:#E3F2FD!important}.blue-text.text-lighten-5{color:#E3F2FD!important}.blue.lighten-4{background-color:#BBDEFB!important}.blue-text.text-lighten-4{color:#BBDEFB!important}.blue.lighten-3{background-color:#90CAF9!important}.blue-text.text-lighten-3{color:#90CAF9!important}.blue.lighten-2{background-color:#64B5F6!important}.blue-text.text-lighten-2{color:#64B5F6!important}.blue.lighten-1{background-color:#42A5F5!important}.blue-text.text-lighten-1{color:#42A5F5!important}.blue{background-color:#2196F3!important}.blue-text{color:#2196F3!important}.blue.darken-1{background-color:#1E88E5!important}.blue-text.text-darken-1{color:#1E88E5!important}.blue.darken-2{background-color:#1976D2!important}.blue-text.text-darken-2{color:#1976D2!important}.blue.darken-3{background-color:#1565C0!important}.blue-text.text-darken-3{color:#1565C0!important}.blue.darken-4{background-color:#0D47A1!important}.blue-text.text-darken-4{color:#0D47A1!important}.blue.accent-1{background-color:#82B1FF!important}.blue-text.text-accent-1{color:#82B1FF!important}.blue.accent-2{background-color:#448AFF!important}.blue-text.text-accent-2{color:#448AFF!important}.blue.accent-3{background-color:#2979FF!important}.blue-text.text-accent-3{color:#2979FF!important}.blue.accent-4{background-color:#2962FF!important}.blue-text.text-accent-4{color:#2962FF!important}.light-blue.lighten-5{background-color:#e1f5fe!important}.light-blue-text.text-lighten-5{color:#e1f5fe!important}.light-blue.lighten-4{background-color:#b3e5fc!important}.light-blue-text.text-lighten-4{color:#b3e5fc!important}.light-blue.lighten-3{background-color:#81d4fa!important}.light-blue-text.text-lighten-3{color:#81d4fa!important}.light-blue.lighten-2{background-color:#4fc3f7!important}.light-blue-text.text-lighten-2{color:#4fc3f7!important}.light-blue.lighten-1{background-color:#29b6f6!important}.light-blue-text.text-lighten-1{color:#29b6f6!important}.light-blue{background-color:#03a9f4!important}.light-blue-text{color:#03a9f4!important}.light-blue.darken-1{background-color:#039be5!important}.light-blue-text.text-darken-1{color:#039be5!important}.light-blue.darken-2{background-color:#0288d1!important}.light-blue-text.text-darken-2{color:#0288d1!important}.light-blue.darken-3{background-color:#0277bd!important}.light-blue-text.text-darken-3{color:#0277bd!important}.light-blue.darken-4{background-color:#01579b!important}.light-blue-text.text-darken-4{color:#01579b!important}.light-blue.accent-1{background-color:#80d8ff!important}.light-blue-text.text-accent-1{color:#80d8ff!important}.light-blue.accent-2{background-color:#40c4ff!important}.light-blue-text.text-accent-2{color:#40c4ff!important}.light-blue.accent-3{background-color:#00b0ff!important}.light-blue-text.text-accent-3{color:#00b0ff!important}.light-blue.accent-4{background-color:#0091ea!important}.light-blue-text.text-accent-4{color:#0091ea!important}.cyan.lighten-5{background-color:#e0f7fa!important}.cyan-text.text-lighten-5{color:#e0f7fa!important}.cyan.lighten-4{background-color:#b2ebf2!important}.cyan-text.text-lighten-4{color:#b2ebf2!important}.cyan.lighten-3{background-color:#80deea!important}.cyan-text.text-lighten-3{color:#80deea!important}.cyan.lighten-2{background-color:#4dd0e1!important}.cyan-text.text-lighten-2{color:#4dd0e1!important}.cyan.lighten-1{background-color:#26c6da!important}.cyan-text.text-lighten-1{color:#26c6da!important}.cyan{background-color:#00bcd4!important}.cyan-text{color:#00bcd4!important}.cyan.darken-1{background-color:#00acc1!important}.cyan-text.text-darken-1{color:#00acc1!important}.cyan.darken-2{background-color:#0097a7!important}.cyan-text.text-darken-2{color:#0097a7!important}.cyan.darken-3{background-color:#00838f!important}.cyan-text.text-darken-3{color:#00838f!important}.cyan.darken-4{background-color:#006064!important}.cyan-text.text-darken-4{color:#006064!important}.cyan.accent-1{background-color:#84ffff!important}.cyan-text.text-accent-1{color:#84ffff!important}.cyan.accent-2{background-color:#18ffff!important}.cyan-text.text-accent-2{color:#18ffff!important}.cyan.accent-3{background-color:#00e5ff!important}.cyan-text.text-accent-3{color:#00e5ff!important}.cyan.accent-4{background-color:#00b8d4!important}.cyan-text.text-accent-4{color:#00b8d4!important}.teal.lighten-5{background-color:#e0f2f1!important}.teal-text.text-lighten-5{color:#e0f2f1!important}.teal.lighten-4{background-color:#b2dfdb!important}.teal-text.text-lighten-4{color:#b2dfdb!important}.teal.lighten-3{background-color:#80cbc4!important}.teal-text.text-lighten-3{color:#80cbc4!important}.teal.lighten-2{background-color:#4db6ac!important}.teal-text.text-lighten-2{color:#4db6ac!important}.teal.lighten-1{background-color:#26a69a!important}.teal-text.text-lighten-1{color:#26a69a!important}.teal{background-color:#009688!important}.teal-text{color:#009688!important}.teal.darken-1{background-color:#00897b!important}.teal-text.text-darken-1{color:#00897b!important}.teal.darken-2{background-color:#00796b!important}.teal-text.text-darken-2{color:#00796b!important}.teal.darken-3{background-color:#00695c!important}.teal-text.text-darken-3{color:#00695c!important}.teal.darken-4{background-color:#004d40!important}.teal-text.text-darken-4{color:#004d40!important}.teal.accent-1{background-color:#a7ffeb!important}.teal-text.text-accent-1{color:#a7ffeb!important}.teal.accent-2{background-color:#64ffda!important}.teal-text.text-accent-2{color:#64ffda!important}.teal.accent-3{background-color:#1de9b6!important}.teal-text.text-accent-3{color:#1de9b6!important}.teal.accent-4{background-color:#00bfa5!important}.teal-text.text-accent-4{color:#00bfa5!important}.green.lighten-5{background-color:#E8F5E9!important}.green-text.text-lighten-5{color:#E8F5E9!important}.green.lighten-4{background-color:#C8E6C9!important}.green-text.text-lighten-4{color:#C8E6C9!important}.green.lighten-3{background-color:#A5D6A7!important}.green-text.text-lighten-3{color:#A5D6A7!important}.green.lighten-2{background-color:#81C784!important}.green-text.text-lighten-2{color:#81C784!important}.green.lighten-1{background-color:#66BB6A!important}.green-text.text-lighten-1{color:#66BB6A!important}.green{background-color:#4CAF50!important}.green-text{color:#4CAF50!important}.green.darken-1{background-color:#43A047!important}.green-text.text-darken-1{color:#43A047!important}.green.darken-2{background-color:#388E3C!important}.green-text.text-darken-2{color:#388E3C!important}.green.darken-3{background-color:#2E7D32!important}.green-text.text-darken-3{color:#2E7D32!important}.green.darken-4{background-color:#1B5E20!important}.green-text.text-darken-4{color:#1B5E20!important}.green.accent-1{background-color:#B9F6CA!important}.green-text.text-accent-1{color:#B9F6CA!important}.green.accent-2{background-color:#69F0AE!important}.green-text.text-accent-2{color:#69F0AE!important}.green.accent-3{background-color:#00E676!important}.green-text.text-accent-3{color:#00E676!important}.green.accent-4{background-color:#00C853!important}.green-text.text-accent-4{color:#00C853!important}.light-green.lighten-5{background-color:#f1f8e9!important}.light-green-text.text-lighten-5{color:#f1f8e9!important}.light-green.lighten-4{background-color:#dcedc8!important}.light-green-text.text-lighten-4{color:#dcedc8!important}.light-green.lighten-3{background-color:#c5e1a5!important}.light-green-text.text-lighten-3{color:#c5e1a5!important}.light-green.lighten-2{background-color:#aed581!important}.light-green-text.text-lighten-2{color:#aed581!important}.light-green.lighten-1{background-color:#9ccc65!important}.light-green-text.text-lighten-1{color:#9ccc65!important}.light-green{background-color:#8bc34a!important}.light-green-text{color:#8bc34a!important}.light-green.darken-1{background-color:#7cb342!important}.light-green-text.text-darken-1{color:#7cb342!important}.light-green.darken-2{background-color:#689f38!important}.light-green-text.text-darken-2{color:#689f38!important}.light-green.darken-3{background-color:#558b2f!important}.light-green-text.text-darken-3{color:#558b2f!important}.light-green.darken-4{background-color:#33691e!important}.light-green-text.text-darken-4{color:#33691e!important}.light-green.accent-1{background-color:#ccff90!important}.light-green-text.text-accent-1{color:#ccff90!important}.light-green.accent-2{background-color:#b2ff59!important}.light-green-text.text-accent-2{color:#b2ff59!important}.light-green.accent-3{background-color:#76ff03!important}.light-green-text.text-accent-3{color:#76ff03!important}.light-green.accent-4{background-color:#64dd17!important}.light-green-text.text-accent-4{color:#64dd17!important}.lime.lighten-5{background-color:#f9fbe7!important}.lime-text.text-lighten-5{color:#f9fbe7!important}.lime.lighten-4{background-color:#f0f4c3!important}.lime-text.text-lighten-4{color:#f0f4c3!important}.lime.lighten-3{background-color:#e6ee9c!important}.lime-text.text-lighten-3{color:#e6ee9c!important}.lime.lighten-2{background-color:#dce775!important}.lime-text.text-lighten-2{color:#dce775!important}.lime.lighten-1{background-color:#d4e157!important}.lime-text.text-lighten-1{color:#d4e157!important}.lime{background-color:#cddc39!important}.lime-text{color:#cddc39!important}.lime.darken-1{background-color:#c0ca33!important}.lime-text.text-darken-1{color:#c0ca33!important}.lime.darken-2{background-color:#afb42b!important}.lime-text.text-darken-2{color:#afb42b!important}.lime.darken-3{background-color:#9e9d24!important}.lime-text.text-darken-3{color:#9e9d24!important}.lime.darken-4{background-color:#827717!important}.lime-text.text-darken-4{color:#827717!important}.lime.accent-1{background-color:#f4ff81!important}.lime-text.text-accent-1{color:#f4ff81!important}.lime.accent-2{background-color:#eeff41!important}.lime-text.text-accent-2{color:#eeff41!important}.lime.accent-3{background-color:#c6ff00!important}.lime-text.text-accent-3{color:#c6ff00!important}.lime.accent-4{background-color:#aeea00!important}.lime-text.text-accent-4{color:#aeea00!important}.yellow.lighten-5{background-color:#fffde7!important}.yellow-text.text-lighten-5{color:#fffde7!important}.yellow.lighten-4{background-color:#fff9c4!important}.yellow-text.text-lighten-4{color:#fff9c4!important}.yellow.lighten-3{background-color:#fff59d!important}.yellow-text.text-lighten-3{color:#fff59d!important}.yellow.lighten-2{background-color:#fff176!important}.yellow-text.text-lighten-2{color:#fff176!important}.yellow.lighten-1{background-color:#ffee58!important}.yellow-text.text-lighten-1{color:#ffee58!important}.yellow{background-color:#ffeb3b!important}.yellow-text{color:#ffeb3b!important}.yellow.darken-1{background-color:#fdd835!important}.yellow-text.text-darken-1{color:#fdd835!important}.yellow.darken-2{background-color:#fbc02d!important}.yellow-text.text-darken-2{color:#fbc02d!important}.yellow.darken-3{background-color:#f9a825!important}.yellow-text.text-darken-3{color:#f9a825!important}.yellow.darken-4{background-color:#f57f17!important}.yellow-text.text-darken-4{color:#f57f17!important}.yellow.accent-1{background-color:#ffff8d!important}.yellow-text.text-accent-1{color:#ffff8d!important}.yellow.accent-2{background-color:#ff0!important}.yellow-text.text-accent-2{color:#ff0!important}.yellow.accent-3{background-color:#ffea00!important}.yellow-text.text-accent-3{color:#ffea00!important}.yellow.accent-4{background-color:#ffd600!important}.yellow-text.text-accent-4{color:#ffd600!important}.amber.lighten-5{background-color:#fff8e1!important}.amber-text.text-lighten-5{color:#fff8e1!important}.amber.lighten-4{background-color:#ffecb3!important}.amber-text.text-lighten-4{color:#ffecb3!important}.amber.lighten-3{background-color:#ffe082!important}.amber-text.text-lighten-3{color:#ffe082!important}.amber.lighten-2{background-color:#ffd54f!important}.amber-text.text-lighten-2{color:#ffd54f!important}.amber.lighten-1{background-color:#ffca28!important}.amber-text.text-lighten-1{color:#ffca28!important}.amber{background-color:#ffc107!important}.amber-text{color:#ffc107!important}.amber.darken-1{background-color:#ffb300!important}.amber-text.text-darken-1{color:#ffb300!important}.amber.darken-2{background-color:#ffa000!important}.amber-text.text-darken-2{color:#ffa000!important}.amber.darken-3{background-color:#ff8f00!important}.amber-text.text-darken-3{color:#ff8f00!important}.amber.darken-4{background-color:#ff6f00!important}.amber-text.text-darken-4{color:#ff6f00!important}.amber.accent-1{background-color:#ffe57f!important}.amber-text.text-accent-1{color:#ffe57f!important}.amber.accent-2{background-color:#ffd740!important}.amber-text.text-accent-2{color:#ffd740!important}.amber.accent-3{background-color:#ffc400!important}.amber-text.text-accent-3{color:#ffc400!important}.amber.accent-4{background-color:#ffab00!important}.amber-text.text-accent-4{color:#ffab00!important}.orange.lighten-5{background-color:#fff3e0!important}.orange-text.text-lighten-5{color:#fff3e0!important}.orange.lighten-4{background-color:#ffe0b2!important}.orange-text.text-lighten-4{color:#ffe0b2!important}.orange.lighten-3{background-color:#ffcc80!important}.orange-text.text-lighten-3{color:#ffcc80!important}.orange.lighten-2{background-color:#ffb74d!important}.orange-text.text-lighten-2{color:#ffb74d!important}.orange.lighten-1{background-color:#ffa726!important}.orange-text.text-lighten-1{color:#ffa726!important}.orange{background-color:#ff9800!important}.orange-text{color:#ff9800!important}.orange.darken-1{background-color:#fb8c00!important}.orange-text.text-darken-1{color:#fb8c00!important}.orange.darken-2{background-color:#f57c00!important}.orange-text.text-darken-2{color:#f57c00!important}.orange.darken-3{background-color:#ef6c00!important}.orange-text.text-darken-3{color:#ef6c00!important}.orange.darken-4{background-color:#e65100!important}.orange-text.text-darken-4{color:#e65100!important}.orange.accent-1{background-color:#ffd180!important}.orange-text.text-accent-1{color:#ffd180!important}.orange.accent-2{background-color:#ffab40!important}.orange-text.text-accent-2{color:#ffab40!important}.orange.accent-3{background-color:#ff9100!important}.orange-text.text-accent-3{color:#ff9100!important}.orange.accent-4{background-color:#ff6d00!important}.orange-text.text-accent-4{color:#ff6d00!important}.deep-orange.lighten-5{background-color:#fbe9e7!important}.deep-orange-text.text-lighten-5{color:#fbe9e7!important}.deep-orange.lighten-4{background-color:#ffccbc!important}.deep-orange-text.text-lighten-4{color:#ffccbc!important}.deep-orange.lighten-3{background-color:#ffab91!important}.deep-orange-text.text-lighten-3{color:#ffab91!important}.deep-orange.lighten-2{background-color:#ff8a65!important}.deep-orange-text.text-lighten-2{color:#ff8a65!important}.deep-orange.lighten-1{background-color:#ff7043!important}.deep-orange-text.text-lighten-1{color:#ff7043!important}.deep-orange{background-color:#ff5722!important}.deep-orange-text{color:#ff5722!important}.deep-orange.darken-1{background-color:#f4511e!important}.deep-orange-text.text-darken-1{color:#f4511e!important}.deep-orange.darken-2{background-color:#e64a19!important}.deep-orange-text.text-darken-2{color:#e64a19!important}.deep-orange.darken-3{background-color:#d84315!important}.deep-orange-text.text-darken-3{color:#d84315!important}.deep-orange.darken-4{background-color:#bf360c!important}.deep-orange-text.text-darken-4{color:#bf360c!important}.deep-orange.accent-1{background-color:#ff9e80!important}.deep-orange-text.text-accent-1{color:#ff9e80!important}.deep-orange.accent-2{background-color:#ff6e40!important}.deep-orange-text.text-accent-2{color:#ff6e40!important}.deep-orange.accent-3{background-color:#ff3d00!important}.deep-orange-text.text-accent-3{color:#ff3d00!important}.deep-orange.accent-4{background-color:#dd2c00!important}.deep-orange-text.text-accent-4{color:#dd2c00!important}.brown.lighten-5{background-color:#efebe9!important}.brown-text.text-lighten-5{color:#efebe9!important}.brown.lighten-4{background-color:#d7ccc8!important}.brown-text.text-lighten-4{color:#d7ccc8!important}.brown.lighten-3{background-color:#bcaaa4!important}.brown-text.text-lighten-3{color:#bcaaa4!important}.brown.lighten-2{background-color:#a1887f!important}.brown-text.text-lighten-2{color:#a1887f!important}.brown.lighten-1{background-color:#8d6e63!important}.brown-text.text-lighten-1{color:#8d6e63!important}.brown{background-color:#795548!important}.brown-text{color:#795548!important}.brown.darken-1{background-color:#6d4c41!important}.brown-text.text-darken-1{color:#6d4c41!important}.brown.darken-2{background-color:#5d4037!important}.brown-text.text-darken-2{color:#5d4037!important}.brown.darken-3{background-color:#4e342e!important}.brown-text.text-darken-3{color:#4e342e!important}.brown.darken-4{background-color:#3e2723!important}.brown-text.text-darken-4{color:#3e2723!important}.blue-grey.lighten-5{background-color:#eceff1!important}.blue-grey-text.text-lighten-5{color:#eceff1!important}.blue-grey.lighten-4{background-color:#cfd8dc!important}.blue-grey-text.text-lighten-4{color:#cfd8dc!important}.blue-grey.lighten-3{background-color:#b0bec5!important}.blue-grey-text.text-lighten-3{color:#b0bec5!important}.blue-grey.lighten-2{background-color:#90a4ae!important}.blue-grey-text.text-lighten-2{color:#90a4ae!important}.blue-grey.lighten-1{background-color:#78909c!important}.blue-grey-text.text-lighten-1{color:#78909c!important}.blue-grey{background-color:#607d8b!important}.blue-grey-text{color:#607d8b!important}.blue-grey.darken-1{background-color:#546e7a!important}.blue-grey-text.text-darken-1{color:#546e7a!important}.blue-grey.darken-2{background-color:#455a64!important}.blue-grey-text.text-darken-2{color:#455a64!important}.blue-grey.darken-3{background-color:#37474f!important}.blue-grey-text.text-darken-3{color:#37474f!important}.blue-grey.darken-4{background-color:#263238!important}.blue-grey-text.text-darken-4{color:#263238!important}.grey.lighten-5{background-color:#fafafa!important}.grey-text.text-lighten-5{color:#fafafa!important}.grey.lighten-4{background-color:#f5f5f5!important}.grey-text.text-lighten-4{color:#f5f5f5!important}.grey.lighten-3{background-color:#eee!important}.grey-text.text-lighten-3{color:#eee!important}.grey.lighten-2{background-color:#e0e0e0!important}.grey-text.text-lighten-2{color:#e0e0e0!important}.grey.lighten-1{background-color:#bdbdbd!important}.grey-text.text-lighten-1{color:#bdbdbd!important}.grey{background-color:#9e9e9e!important}.grey-text{color:#9e9e9e!important}.grey.darken-1{background-color:#757575!important}.grey-text.text-darken-1{color:#757575!important}.grey.darken-2{background-color:#616161!important}.grey-text.text-darken-2{color:#616161!important}.grey.darken-3{background-color:#424242!important}.grey-text.text-darken-3{color:#424242!important}.grey.darken-4{background-color:#212121!important}.grey-text.text-darken-4{color:#212121!important}.shades.black{background-color:#000!important}.shades-text.text-black{color:#000!important}.shades.white{background-color:#FFF!important}.shades-text.text-white{color:#FFF!important}.shades.transparent{background-color:transparent!important}.shades-text.text-transparent{color:transparent!important}.black{background-color:#000!important}.black-text{color:#000!important}.white{background-color:#FFF!important}.white-text{color:#FFF!important}.transparent{background-color:transparent!important}.transparent-text{color:transparent!important}.danger-color{background-color:#f44!important}.danger-color-dark{background-color:#C00!important}.warning-color{background-color:#fb3!important}.warning-color-dark{background-color:#F80!important}.success-color{background-color:#00C851!important}.success-color-dark{background-color:#007E33!important}.info-color{background-color:#33b5e5!important}.info-color-dark{background-color:#09C!important}.default-color{background-color:#2BBBAD!important}.default-color-dark{background-color:#00695c!important}.primary-color{background-color:#4285F4!important}.primary-color-dark{background-color:#0d47a1!important}.secondary-color{background-color:#a6c!important}.secondary-color-dark{background-color:#93C!important}.elegant-color{background-color:#2E2E2E!important}.elegant-color-dark{background-color:#212121!important}.stylish-color{background-color:#4B515D!important}.stylish-color-dark{background-color:#3E4551!important}.special-color{background-color:#37474F!important}.special-color-dark{background-color:#263238!important}.unique-color{background-color:#3F729B!important}.nav-bg{background-color:#1C2331!important}.mdb-color{background-color:#45526E!important}.rgba-blue-light{background-color:rgba(3,169,244,.3)!important}.rgba-red-light{background-color:rgba(244,67,54,.3)!important}.rgba-pink-light{background-color:rgba(233,30,99,.3)!important}.rgba-purple-light{background-color:rgba(156,39,176,.3)!important}.rgba-indigo-light{background-color:rgba(63,81,181,.3)!important}.rgba-cyan-light{background-color:rgba(0,188,212,.3)!important}.rgba-teal-light{background-color:rgba(0,150,136,.3)!important}.rgba-green-light{background-color:rgba(76,175,80,.3)!important}.rgba-lime-light{background-color:rgba(205,220,57,.3)!important}.rgba-yellow-light{background-color:rgba(255,235,59,.3)!important}.rgba-orange-light{background-color:rgba(255,152,0,.3)!important}.rgba-brown-light{background-color:rgba(121,85,72,.3)!important}.rgba-grey-light{background-color:rgba(158,158,158,.3)!important}.rgba-bluegrey-light{background-color:rgba(96,125,139,.3)!important}.rgba-black-light{background-color:rgba(0,0,0,.3)!important}.rgba-stylish-light{background-color:rgba(62,69,81,.3)!important}.rgba-white-light{background-color:rgba(255,255,255,.3)!important}.rgba-blue-strong{background-color:rgba(3,169,244,.7)!important}.rgba-red-strong{background-color:rgba(244,67,54,.7)!important}.rgba-pink-strong{background-color:rgba(233,30,99,.7)!important}.rgba-purple-strong{background-color:rgba(156,39,176,.7)!important}.rgba-indigo-strong{background-color:rgba(63,81,181,.7)!important}.rgba-cyan-strong{background-color:rgba(0,188,212,.7)!important}.rgba-teal-strong{background-color:rgba(0,150,136,.7)!important}.rgba-green-strong{background-color:rgba(76,175,80,.7)!important}.rgba-lime-strong{background-color:rgba(205,220,57,.7)!important}.rgba-yellow-strong{background-color:rgba(255,235,59,.7)!important}.rgba-orange-strong{background-color:rgba(255,152,0,.7)!important}.rgba-brown-strong{background-color:rgba(121,85,72,.7)!important}.rgba-grey-strong{background-color:rgba(158,158,158,.7)!important}.rgba-bluegrey-strong{background-color:rgba(96,125,139,.7)!important}.rgba-black-strong{background-color:rgba(0,0,0,.7)!important}.rgba-stylish-strong{background-color:rgba(62,69,81,.7)!important}.rgba-white-strong{background-color:rgba(255,255,255,.7)!important}.rgba-blue-slight{background-color:rgba(3,169,244,.1)!important}.rgba-red-slight{background-color:rgba(244,67,54,.1)!important}.rgba-pink-slight{background-color:rgba(233,30,99,.1)!important}.rgba-purple-slight{background-color:rgba(156,39,176,.1)!important}.rgba-indigo-slight{background-color:rgba(63,81,181,.1)!important}.rgba-cyan-slight{background-color:rgba(0,188,212,.1)!important}.rgba-teal-slight{background-color:rgba(0,150,136,.1)!important}.rgba-green-slight{background-color:rgba(76,175,80,.1)!important}.rgba-lime-slight{background-color:rgba(205,220,57,.1)!important}.rgba-yellow-slight{background-color:rgba(255,235,59,.1)!important}.rgba-orange-slight{background-color:rgba(255,152,0,.1)!important}.rgba-brown-slight{background-color:rgba(121,85,72,.1)!important}.rgba-grey-slight{background-color:rgba(158,158,158,.1)!important}.rgba-bluegrey-slight{background-color:rgba(96,125,139,.1)!important}.rgba-black-slight{background-color:rgba(0,0,0,.1)!important}.rgba-stylish-slight{background-color:rgba(62,69,81,.1)!important}.rgba-white-slight{background-color:rgba(255,255,255,.1)!important}.blue-gradient{background:#000;background:-moz-linear-gradient(-45deg,#000 0,#062a64 100%);background:-webkit-linear-gradient(-45deg,#000 0,#062a64 100%);background:linear-gradient(135deg,#000 0,#062a64 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#062a64', GradientType=1 )}.red-gradient{background:#000;background:-moz-linear-gradient(-45deg,#000 0,#7d0000 100%);background:-webkit-linear-gradient(-45deg,#000 0,#7d0000 100%);background:linear-gradient(135deg,#000 0,#7d0000 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#7d0000', GradientType=1 )}.green-gradient{background:#000;background:-moz-linear-gradient(-45deg,#000 0,#003830 100%);background:-webkit-linear-gradient(-45deg,#000 0,#003830 100%);background:linear-gradient(135deg,#000 0,#003830 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#003830', GradientType=1 )}.purple-gradient{background:#000;background:-moz-linear-gradient(-45deg,#000 0,#650696 100%);background:-webkit-linear-gradient(-45deg,#000 0,#650696 100%);background:linear-gradient(135deg,#000 0,#650696 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#650696', GradientType=1 )}.dark-gradient{background:#000;background:-moz-linear-gradient(-45deg,#000 0,#2e2e2e 100%);background:-webkit-linear-gradient(-45deg,#000 0,#2e2e2e 100%);background:linear-gradient(135deg,#000 0,#2e2e2e 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#2e2e2e', GradientType=1 )}.grey-gradient{background:#000;background:-moz-linear-gradient(-45deg,#000 0,#4b515d 100%);background:-webkit-linear-gradient(-45deg,#000 0,#4b515d 100%);background:linear-gradient(135deg,#000 0,#4b515d 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#4b515d', GradientType=1 )}.mdb-gradient{background:#000;background:-moz-linear-gradient(-45deg,#000 0,#3f729b 100%);background:-webkit-linear-gradient(-45deg,#000 0,#3f729b 100%);background:linear-gradient(135deg,#000 0,#3f729b 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#3f729b', GradientType=1 )}.deep-orange-gradient{background:#000;background:-moz-linear-gradient(-45deg,#000 0,#8a1a00 100%);background:-webkit-linear-gradient(-45deg,#000 0,#8a1a00 100%);background:linear-gradient(135deg,#000 0,#8a1a00 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#8a1a00', GradientType=1 )}.graphite-gradient{background:#000;background:-moz-linear-gradient(-45deg,#000 0,#37474f 100%);background:-webkit-linear-gradient(-45deg,#000 0,#37474f 100%);background:linear-gradient(135deg,#000 0,#37474f 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#37474f', GradientType=1 )}.pink-gradient{background:#000;background:-moz-linear-gradient(-45deg,#000 0,#880e4f 100%);background:-webkit-linear-gradient(-45deg,#000 0,#880e4f 100%);background:linear-gradient(135deg,#000 0,#880e4f 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#000000', endColorstr='#880e4f', GradientType=1 )}.parallax,.video-full{background-size:cover}.modal-dialog.cascading-modal.modal-avatar .modal-header,.section .map-container img,.z-depth-0{box-shadow:none!important}.badge,.btn,.card,.chip,.dropdown-menu,.jumbotron,.list-group,.modal-dialog.cascading-modal .modal-c-tabs .nav-tabs,.modal-dialog.modal-notify .modal-header,.navbar,.pager li a,.pagination .active .page-link,.popover,.z-depth-1{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}.btn-amber.active,.btn-blue-grey.active,.btn-brown.active,.btn-cyan.active,.btn-danger.active,.btn-dark-green.active,.btn-deep-orange.active,.btn-deep-purple.active,.btn-default.active,.btn-elegant.active,.btn-indigo.active,.btn-info.active,.btn-light-green.active,.btn-lime.active,.btn-mdb.active,.btn-orange.active,.btn-pink.active,.btn-primary.active,.btn-purple.active,.btn-secondary.active,.btn-secondary.dropdown-toggle,.btn-success.active,.btn-unique.active,.btn-warning.active,.btn-yellow.active,.btn.active,.btn:active,.btn:focus,.btn:hover,.card .form-header,.media .media-left img,.modal-dialog .modal-content,.modal-dialog.cascading-modal .modal-header,.modal-dialog.modal-notify.modal-danger .btn-primary-modal.active,.modal-dialog.modal-notify.modal-info .btn-primary-modal.active,.modal-dialog.modal-notify.modal-success .btn-primary-modal.active,.modal-dialog.modal-notify.modal-warning .btn-primary-modal.active,.pager li a:hover,.section .view,.section img,.tooltip .tooltip-inner,.z-depth-1-half,ul.instagram-photos li img{box-shadow:0 5px 11px 0 rgba(0,0,0,.18),0 4px 15px 0 rgba(0,0,0,.15)}.modal-dialog.cascading-modal.modal-avatar .modal-header img,.section .jumbotron,.z-depth-2{box-shadow:0 8px 17px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.z-depth-3{box-shadow:0 12px 15px 0 rgba(0,0,0,.24),0 17px 50px 0 rgba(0,0,0,.19)}.z-depth-4{box-shadow:0 16px 28px 0 rgba(0,0,0,.22),0 25px 55px 0 rgba(0,0,0,.21)}.z-depth-5{box-shadow:0 27px 24px 0 rgba(0,0,0,.2),0 40px 77px 0 rgba(0,0,0,.22)}.hoverable{transition:box-shadow .55s;box-shadow:0}.hoverable:hover{transition:box-shadow .45s;box-shadow:0 8px 17px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}a{color:#0275d8;cursor:pointer}.alert,.badge,.breadcrumb,.card,.card .card-header,.dropdown-menu,.file-custom,.input-group-addon,.jumbotron,.list-group .list-group-item,.nav .nav-link,.nav-tabs,.navbar,.navbar-toggler,.page-item:first-child .page-link,.page-item:last-child .page-link,.pagination-lg .page-item:first-child .page-link,.pagination-lg .page-item:last-child .page-link,.pagination-sm .page-item:first-child .page-link,.pagination-sm .page-item:last-child .page-link,.popover,.tooltip-inner,img{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px}.dropdown-menu,.input-group-addon,.pagination .page-item .page-link,.popover{border:0}.pagination .active .page-link{border-radius:2px;transition:all .2s linear}.pagination .page-link,.pagination .page-link:hover{transition:all .3s linear}.pagination .page-link:focus{background-color:transparent}.pagination.pg-blue .active .page-link{background-color:#4285F4}.pagination.pg-red .active .page-link{background-color:#f44}.pagination.pg-teal .active .page-link{background-color:#2BBBAD}.pagination.pg-darkgrey .active .page-link{background-color:#37474F}.pagination.pg-dark .active .page-link{background-color:#2E2E2E}.pagination.pg-bluegrey .active .page-link{background-color:#3F729B}.pagination.pg-amber .active .page-link{background-color:#ff6f00}.pagination.pg-purple .active .page-link{background-color:#5e35b1}.pager .disabled>a,.pager a{color:#fff}.pager.pg-blue li a{background-color:#4285F4}.pager.pg-blue li a:focus,.pager.pg-blue li a:hover{background-color:#4285F4;color:#fff}.pager.pg-red li a{background-color:#f44}.pager.pg-red li a:focus,.pager.pg-red li a:hover{background-color:#f44;color:#fff}.pager.pg-teal li a{background-color:#2BBBAD}.pager.pg-teal li a:focus,.pager.pg-teal li a:hover{background-color:#2BBBAD;color:#fff}.pager.pg-darkgrey li a{background-color:#37474F}.pager.pg-darkgrey li a:focus,.pager.pg-darkgrey li a:hover{background-color:#37474F;color:#fff}.pager.pg-dark li a{background-color:#2E2E2E}.pager.pg-dark li a:focus,.pager.pg-dark li a:hover{background-color:#2E2E2E;color:#fff}.pager.pg-bluegrey li a{background-color:#3F729B}.pager.pg-bluegrey li a:focus,.pager.pg-bluegrey li a:hover{background-color:#3F729B;color:#fff}.pager.pg-amber li a{background-color:#ff6f00}.pager.pg-amber li a:focus,.pager.pg-amber li a:hover{background-color:#ff6f00;color:#fff}.pager.pg-purple li a{background-color:#5e35b1}.pager.pg-purple li a:focus,.pager.pg-purple li a:hover{background-color:#5e35b1;color:#fff}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover{background-color:inerhit!important}.modal-footer .btn+.btn{margin-bottom:6px}body.modal-open{overflow:inherit;padding-right:0!important}body{overflow:auto!important;font-family:Roboto,sans-serif}.card-columns .card{margin:2px}.parallax{background-repeat:no-repeat;background-attachment:fixed;position:relative;padding-top:3em;padding-bottom:3em}.nav-pills.horizontal-spy .nav-item .active{border-bottom:2px solid #45526E;border-left:none}.nav-pills.horizontal-spy .nav-item:hover{background-color:transparent;color:#45526E;font-weight:500;border-left:none}.card-block h3,.card-block h5{font-weight:400;margin-bottom:1rem}.nav-pills .nav-item.open .nav-link,.nav-pills .nav-item.open .nav-link:focus,.nav-pills .nav-item.open .nav-link:hover,.nav-pills .nav-link.active,.nav-pills .nav-link.active:focus,.nav-pills .nav-link.active:hover{background-color:transparent;color:#000}.disabled{cursor:not-allowed!important}.video-fluid{height:auto;width:100%}.video-full{position:fixed;top:50%;left:50%;min-width:100%;min-height:100%;width:auto;height:auto;z-index:-100;-ms-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.media .media-left{padding:0 10px 10px 0}.card-block h5{font-size:1rem}.divider-new,.text-fluid,h1,h2,h3,h4,h5,h6{font-weight:400}.card-block p{margin-bottom:1rem}.tooltip .tooltip-inner{padding:.4rem .8rem}section{-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%}.breadcrumb .breadcrumb-item.active{color:#818a91}.dropdown-menu .dropdown-item:active{background:#f7f7f9}.dropdown-menu{transition:all .2s cubic-bezier(.72,1.2,.71,.72)}@font-face{font-family:Roboto;src:local(Roboto Thin),url(../fonts/roboto/Roboto-Thin.eot);src:url(../fonts/roboto/Roboto-Thin.eot?#iefix) format("embedded-opentype"),url(../fonts/roboto/Roboto-Thin.woff2) format("woff2"),url(../fonts/roboto/Roboto-Thin.woff) format("woff"),url(../fonts/roboto/Roboto-Thin.ttf) format("truetype");font-weight:200}@font-face{font-family:Roboto;src:local(Roboto Light),url(../fonts/roboto/Roboto-Light.eot);src:url(../fonts/roboto/Roboto-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/roboto/Roboto-Light.woff2) format("woff2"),url(../fonts/roboto/Roboto-Light.woff) format("woff"),url(../fonts/roboto/Roboto-Light.ttf) format("truetype");font-weight:300}@font-face{font-family:Roboto;src:local(Roboto Regular),url(../fonts/roboto/Roboto-Regular.eot);src:url(../fonts/roboto/Roboto-Regular.eot?#iefix) format("embedded-opentype"),url(../fonts/roboto/Roboto-Regular.woff2) format("woff2"),url(../fonts/roboto/Roboto-Regular.woff) format("woff"),url(../fonts/roboto/Roboto-Regular.ttf) format("truetype");font-weight:400}@font-face{font-family:Roboto;src:url(../fonts/roboto/Roboto-Medium.eot);src:url(../fonts/roboto/Roboto-Medium.eot?#iefix) format("embedded-opentype"),url(../fonts/roboto/Roboto-Medium.woff2) format("woff2"),url(../fonts/roboto/Roboto-Medium.woff) format("woff"),url(../fonts/roboto/Roboto-Medium.ttf) format("truetype");font-weight:500}@font-face{font-family:Roboto;src:url(../fonts/roboto/Roboto-Bold.eot);src:url(../fonts/roboto/Roboto-Bold.eot?#iefix) format("embedded-opentype"),url(../fonts/roboto/Roboto-Bold.woff2) format("woff2"),url(../fonts/roboto/Roboto-Bold.woff) format("woff"),url(../fonts/roboto/Roboto-Bold.ttf) format("truetype");font-weight:700}@media only screen and (min-width:0){html{font-size:15px}}@media only screen and (min-width:992px){html{font-size:15.5px}}@media only screen and (min-width:1200px){html{font-size:16px}}@media only screen and (min-width:360px){.text-fluid{font-size:1.2rem}}@media only screen and (min-width:390px){.text-fluid{font-size:1.224rem}}@media only screen and (min-width:420px){.text-fluid{font-size:1.248rem}}@media only screen and (min-width:450px){.text-fluid{font-size:1.272rem}}@media only screen and (min-width:480px){.text-fluid{font-size:1.296rem}}@media only screen and (min-width:510px){.text-fluid{font-size:1.32rem}}@media only screen and (min-width:540px){.text-fluid{font-size:1.344rem}}@media only screen and (min-width:570px){.text-fluid{font-size:1.368rem}}@media only screen and (min-width:600px){.text-fluid{font-size:1.392rem}}@media only screen and (min-width:630px){.text-fluid{font-size:1.416rem}}@media only screen and (min-width:660px){.text-fluid{font-size:1.44rem}}@media only screen and (min-width:690px){.text-fluid{font-size:1.464rem}}@media only screen and (min-width:720px){.text-fluid{font-size:1.488rem}}@media only screen and (min-width:750px){.text-fluid{font-size:1.512rem}}@media only screen and (min-width:780px){.text-fluid{font-size:1.536rem}}@media only screen and (min-width:810px){.text-fluid{font-size:1.56rem}}@media only screen and (min-width:840px){.text-fluid{font-size:1.584rem}}@media only screen and (min-width:870px){.text-fluid{font-size:1.608rem}}@media only screen and (min-width:900px){.text-fluid{font-size:1.632rem}}@media only screen and (min-width:930px){.text-fluid{font-size:1.656rem}}@media only screen and (min-width:960px){.text-fluid{font-size:1.68rem}}@media only screen and (max-width:360px){.text-fluid{font-size:1.2rem}}p.lead{font-weight:400}@media only screen and (max-width:768px){.h1-responsive,.section .section-heading{font-size:150%;font-weight:500}.h2-responsive{font-size:145%}.h3-responsive,.h4-responsive,.h5-responsive{font-size:135%}}@media only screen and (min-width:768px){.h1-responsive,.section .section-heading{font-size:170%}.h2-responsive{font-size:140%}.h3-responsive,.h4-responsive,.h5-responsive{font-size:125%}}@media only screen and (min-width:992px){.h1-responsive,.section .section-heading{font-size:200%}.h2-responsive{font-size:170%}.h3-responsive{font-size:140%}.h4-responsive,.h5-responsive{font-size:125%}}@media only screen and (min-width:1200px){.h1-responsive,.section .section-heading{font-size:250%}.h2-responsive{font-size:200%}.h3-responsive{font-size:170%}.h4-responsive{font-size:140%}.h5-responsive{font-size:125%}}.section{margin-bottom:2rem}.section .section-heading{margin-top:2rem;margin-bottom:4rem}.section .section-description{color:#757575;margin-bottom:4rem;margin-left:15%;margin-right:15%;text-align:center}@media (max-width:992px){.section .section-description{margin-left:5%;margin-right:5%}}.section h4{font-weight:400}.section h5 .fa{margin-right:8px}.section hr{margin-top:1rem;margin-bottom:3rem}.section .contact-icons{text-align:center}.section .contact-icons li{margin-bottom:2.2rem}.section .contact-icons .fa{font-size:2.2rem;margin-bottom:.6rem;color:#424242}.between-sections{margin-bottom:4rem}.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{from,to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{from,to{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39063deg) skewY(.39063deg);transform:skewX(.39063deg) skewY(.39063deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.39063deg) skewY(.39063deg);transform:skewX(.39063deg) skewY(.39063deg)}88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.flipInY,.flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.waves-effect{position:relative;cursor:pointer;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1}.waves-effect .waves-ripple{position:absolute;border-radius:50%;width:100px;height:100px;margin-top:-50px;margin-left:-50px;opacity:0;background:rgba(0,0,0,.2);background:-webkit-radial-gradient(rgba(0,0,0,.2) 0,rgba(0,0,0,.3) 40%,rgba(0,0,0,.4) 50%,rgba(0,0,0,.5) 60%,rgba(255,255,255,0) 70%);background:-o-radial-gradient(rgba(0,0,0,.2) 0,rgba(0,0,0,.3) 40%,rgba(0,0,0,.4) 50%,rgba(0,0,0,.5) 60%,rgba(255,255,255,0) 70%);background:-moz-radial-gradient(rgba(0,0,0,.2) 0,rgba(0,0,0,.3) 40%,rgba(0,0,0,.4) 50%,rgba(0,0,0,.5) 60%,rgba(255,255,255,0) 70%);background:radial-gradient(rgba(0,0,0,.2) 0,rgba(0,0,0,.3) 40%,rgba(0,0,0,.4) 50%,rgba(0,0,0,.5) 60%,rgba(255,255,255,0) 70%);-webkit-transition:all .5s ease-out;-moz-transition:all .5s ease-out;-o-transition:all .5s ease-out;transition:all .5s ease-out;-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform,opacity;-o-transition-property:-o-transform,opacity;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transform:scale(0) translate(0,0);-moz-transform:scale(0) translate(0,0);-ms-transform:scale(0) translate(0,0);-o-transform:scale(0) translate(0,0);transform:scale(0) translate(0,0);pointer-events:none}.waves-effect.waves-light .waves-ripple{background:rgba(255,255,255,.4);background:-webkit-radial-gradient(rgba(255,255,255,.2) 0,rgba(255,255,255,.3) 40%,rgba(255,255,255,.4) 50%,rgba(255,255,255,.5) 60%,rgba(255,255,255,0) 70%);background:-o-radial-gradient(rgba(255,255,255,.2) 0,rgba(255,255,255,.3) 40%,rgba(255,255,255,.4) 50%,rgba(255,255,255,.5) 60%,rgba(255,255,255,0) 70%);background:-moz-radial-gradient(rgba(255,255,255,.2) 0,rgba(255,255,255,.3) 40%,rgba(255,255,255,.4) 50%,rgba(255,255,255,.5) 60%,rgba(255,255,255,0) 70%);background:radial-gradient(rgba(255,255,255,.2) 0,rgba(255,255,255,.3) 40%,rgba(255,255,255,.4) 50%,rgba(255,255,255,.5) 60%,rgba(255,255,255,0) 70%)}.waves-effect.waves-classic .waves-ripple{background:rgba(0,0,0,.2)}.waves-effect.waves-classic.waves-light .waves-ripple{background:rgba(255,255,255,.4)}.waves-notransition{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.waves-button,.waves-circle{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.waves-button,.waves-button-input,.waves-button:hover,.waves-button:visited{white-space:nowrap;vertical-align:middle;cursor:pointer;border:none;outline:0;color:inherit;background-color:transparent;font-size:1em;line-height:1em;text-align:center;text-decoration:none;z-index:1}.waves-button{padding:.85em 1.1em;border-radius:.2em}.waves-button-input{margin:0;padding:.85em 1.1em}.waves-input-wrapper{border-radius:.2em;vertical-align:bottom}.waves-input-wrapper.waves-button{padding:0}.waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.waves-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%}.waves-float{-webkit-mask-image:none;-webkit-box-shadow:0 1px 1.5px 1px rgba(0,0,0,.12);box-shadow:0 1px 1.5px 1px rgba(0,0,0,.12);-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;transition:all .3s}.btn,.pager li a{transition:.2s ease-out}.waves-float:active{-webkit-box-shadow:0 8px 20px 1px rgba(0,0,0,.3);box-shadow:0 8px 20px 1px rgba(0,0,0,.3)}.waves-block{display:block}@media only screen and (max-width:992px){.center-on-small-only{text-align:center}.card .center-on-small-only img,.center-on-small-only .card img,.center-on-small-only .img-fluid,.center-on-small-only .modal-dialog.cascading-modal.modal-avatar .modal-header,.center-on-small-only .section .view,.center-on-small-only .section img,.modal-dialog.cascading-modal.modal-avatar .center-on-small-only .modal-header,.section .center-on-small-only .view,.section .center-on-small-only img{display:inline}}.flex-center{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%}.flex-center p{margin:0}.flex-center ul{text-align:center}.flex-center ul li{margin-bottom:1rem}.vertical-center{position:relative;top:50%;-webkit-transform:translateY(-50%);-o-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.card img,.img-fluid,.modal-dialog.cascading-modal.modal-avatar .modal-header,.section .view,.section img{display:block;max-width:100%;height:auto}.inline-ul>li{display:inline}.list-inline-div>div{display:inline-block}.hr-light{background-color:#fff;height:.5px}.hr-dark{background-color:#666;height:.5px}.divider-new:after,.divider-new:before{content:'';height:1.5px;background:#666}.divider-new{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-top:45px;margin-bottom:45px}.divider-new h2{margin-top:5px}.divider-new:before{-webkit-flex:1;-ms-flex:1;flex:1;margin:0 .45em 0 0}.divider-new:after{-webkit-flex:1;-ms-flex:1;flex:1;margin:0 0 0 .45em}.section-title{text-transform:uppercase;margin-top:0;margin-bottom:3rem;padding:.7rem}.mt-0,.my-0{margin-top:0!important}.pt-0,.py-0{padding-top:0!important}.pb-0,.py-0{padding-bottom:0!important}.section-title small{text-transform:none;padding-left:7px;margin-left:10px}.btn,footer.page-footer .title{text-transform:uppercase}.st-indigo{border-left:4px solid #00f}.st-indigo small{border-left:2px solid #00f}.st-red{border-left:4px solid red}.st-red small{border-left:2px solid red}.st-teal{border-left:4px solid #009688}.st-teal small{border-left:2px solid #009688}.st-orange{border-left:4px solid #ff6f00}.st-orange small{border-left:2px solid #ff6f00}.st-blue{border-left:4px solid #2196f3}.st-blue small{border-left:2px solid #2196f3}.st-mdb{border-left:4px solid #45526E}.st-mdb small{border-left:2px solid #45526E}.divider-short{max-width:50px;border-color:#4285F4;border-width:3px}.bq-title{font-weight:400;font-size:1.5rem;margin-bottom:0}.mb-0,.my-0{margin-bottom:0!important}.bq-primary{border-left:3px solid #4285F4}.bq-primary .bq-title{color:#4285F4}.bq-warning{border-left:3px solid #fb3}.bq-warning .bq-title{color:#fb3}.bq-danger{border-left:3px solid #f44}.bq-danger .bq-title{color:#f44}.bq-success{border-left:3px solid #00C851}.bq-success .bq-title{color:#00C851}.mt-1,.my-1{margin-top:1rem!important}.mb-1,.my-1{margin-bottom:1rem!important}.mt-2,.my-2{margin-top:1.5rem!important}.mb-2,.my-2{margin-bottom:1.5rem!important}.mt-3,.my-3{margin-top:3rem!important}.mb-3,.my-3{margin-bottom:3rem!important}.mt-4,.my-4{margin-top:4rem!important}.mb-4,.my-4{margin-bottom:4rem!important}.mt-5,.my-5{margin-top:5rem!important}.mb-5,.my-5{margin-bottom:5rem!important}.pt-1,.py-1{padding-top:1rem!important}.pb-1,.py-1{padding-bottom:1rem!important}.pt-2,.py-2{padding-top:1.5rem!important}.pb-2,.py-2{padding-bottom:1.5rem!important}.pt-3,.py-3{padding-top:3rem!important}.pb-3,.py-3{padding-bottom:3rem!important}.pt-4,.py-4{padding-top:4rem!important}.pb-4,.py-4{padding-bottom:4rem!important}.pt-5,.py-5{padding-top:5rem!important}.pb-5,.py-5{padding-bottom:5rem!important}@media (max-width:992px){.mb-r{margin-bottom:2rem!important}}@media (min-width:992px){.hr-mobile{display:none!important}.mb-r{margin-bottom:3rem!important}}.mb-m{margin-bottom:1rem}@media (min-width:62em){.mb-m{margin-bottom:0}}.no-height{height:0}.sharp-corners{border-radius:0}button:focus{outline:0!important}.btn{font-size:.8rem;padding:.85rem 2.13rem;border-radius:2px;border:0;color:#fff!important;margin:6px;white-space:normal!important}.btn.btn-lg{font-size:.9rem;padding:1rem 2.4rem}.btn.btn-md{font-size:.7rem;padding:.7rem 1.6rem}.btn.btn-sm{font-size:.6rem;padding:.5rem 1.6rem}.btn.btn-sm.btn-table{padding:.5rem .9rem}.btn.btn-sm .fa{font-size:.8rem}.btn:hover{color:#fff}.btn.active,.btn:active,.btn:focus{outline:0;color:#fff}.btn .fa{font-size:1.1rem;position:relative;vertical-align:middle;margin-top:-2px}.btn .fa.right{margin-left:3px}.btn .fa.left{margin-right:3px}.btn-group .btn{margin:0}.btn-block{margin:inherit}.btn-secondary{background-color:#a6c}.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover{background-color:#b579d2!important;color:#fff}.btn-secondary.active{background-color:#739!important}.btn-secondary.active:focus,.btn-secondary.active:hover{color:#fff}.btn-secondary.dropdown-toggle{color:#fff!important;background-color:#a6c!important}.btn-secondary.dropdown-toggle:hover{color:#fff;background-color:#b579d2!important}.btn-secondary.dropdown-toggle:focus{color:#fff;background-color:#a6c}.btn-secondary:active:hover{background-color:#b579d2!important}.btn-primary{background:#4285F4}.btn-primary:active,.btn-primary:focus,.btn-primary:hover{background-color:#5a95f5!important}.btn-primary.active{background-color:#0b51c5!important}.btn-default{background:#2BBBAD}.btn-default:active,.btn-default:focus,.btn-default:hover{background-color:#30cfc0!important}.btn-default.active{background-color:#186860!important}.btn-success{background:#00C851}.btn-success:active,.btn-success:focus,.btn-success:hover{background-color:#00d255!important}.btn-success.active{background-color:#006228!important}.btn-info{background:#33b5e5}.btn-info:focus,.btn-info:hover{background-color:#4abde8!important}.btn-info.active{background-color:#14799e!important}.btn-warning{background:#F80}.btn-warning:focus,.btn-warning:hover{background-color:#ff961f!important}.btn-warning.active{background-color:#c80!important}.btn-danger{background:#C00}.btn-danger:focus,.btn-danger:hover{background-color:#db0000!important}.btn-danger.active{background-color:maroon!important}.btn-link{background-color:transparent;color:#000!important}.btn-link:focus,.btn-link:hover{background-color:transparent;color:#000}.btn-outline-primary{border:2px solid #4285F4;color:#0d47a1!important;background-color:transparent}.btn-outline-primary:active,.btn-outline-primary:active:focus,.btn-outline-primary:focus,.btn-outline-primary:hover{color:#4285F4;border-color:#4285F4;background-color:transparent}.btn-outline-secondary{border:2px solid #a6c;color:#93C!important;background-color:transparent}.btn-outline-secondary:active,.btn-outline-secondary:active:focus,.btn-outline-secondary:focus,.btn-outline-secondary:hover{color:#a6c;border:2px solid #a6c;background-color:transparent}.btn-outline-default{border:2px solid #2BBBAD;color:#00695c!important;background-color:transparent}.btn-outline-default:active,.btn-outline-default:active:focus,.btn-outline-default:focus,.btn-outline-default:hover{color:#2BBBAD;border-color:#2BBBAD;background-color:transparent}.btn-outline-success{border:2px solid #00C851;color:#007E33!important;background-color:transparent}.btn-outline-success:active,.btn-outline-success:active:focus,.btn-outline-success:focus,.btn-outline-success:hover{color:#00C851;border-color:#00C851;background-color:transparent}.btn-outline-info{border:2px solid #33b5e5;color:#09C!important;background-color:transparent}.btn-outline-info:active,.btn-outline-info:active:focus,.btn-outline-info:focus,.btn-outline-info:hover{color:#33b5e5;border-color:#33b5e5;background-color:transparent}.btn-outline-warning{border:2px solid #fb3;color:#F80!important;background-color:transparent}.btn-outline-warning:active,.btn-outline-warning:active:focus,.btn-outline-warning:focus,.btn-outline-warning:hover{border-color:#fb3;color:#fb3;background-color:transparent}.btn-outline-danger{border:2px solid #f44;color:#C00!important;background-color:transparent}.btn-outline-danger:active,.btn-outline-danger:active:focus,.btn-outline-danger:focus,.btn-outline-danger:hover{color:#f44;border-color:#f44;background-color:transparent}.btn-outline-white{border:2px solid #fff;color:#fff!important;background-color:transparent}.btn-outline-white:active,.btn-outline-white:active:focus,.btn-outline-white:focus,.btn-outline-white:hover{color:#e6e6e6;border-color:#fff;background-color:transparent}.btn-outline-black{border:2px solid #000;color:#000!important;background-color:transparent}.btn-outline-black:active,.btn-outline-black:active:focus,.btn-outline-black:focus,.btn-outline-black:hover{color:#000;border-color:#000;background-color:transparent}.pager li a{border:0}.btn-elegant{background:#2E2E2E}.btn-elegant:focus,.btn-elegant:hover{background-color:#3b3b3b!important}.btn-elegant.active{background-color:#000!important}.btn-unique{background:#1C2331}.btn-unique:focus,.btn-unique:hover{background-color:#252f41!important}.btn-unique.active{background-color:#000!important}.btn-pink{background:#e91e63}.btn-pink:focus,.btn-pink:hover{background-color:#eb3573!important}.btn-pink.active{background-color:#930e3b!important}.btn-purple{background:#4a148c}.btn-purple:focus,.btn-purple:hover{background-color:#5617a2!important}.btn-purple.active{background-color:#1b0733!important}.btn-deep-purple{background:#311b92}.btn-deep-purple:focus,.btn-deep-purple:hover{background-color:#381fa8!important}.btn-deep-purple.active{background-color:#140b3c!important}.btn-indigo{background:#1a237e}.btn-indigo:focus,.btn-indigo:hover{background-color:#1e2993!important}.btn-indigo.active{background-color:#090c29!important}.btn-cyan{background:#00acc1}.btn-cyan:focus,.btn-cyan:hover{background-color:#00c3db!important}.btn-cyan.active{background-color:#00515b!important}.btn-light-green{background:#7cb342}.btn-light-green:focus,.btn-light-green:hover{background-color:#89be50!important}.btn-light-green.active{background-color:#486827!important}.btn-dark-green{background:#007E33}.btn-dark-green:focus,.btn-dark-green:hover{background-color:#00983d!important}.btn-dark-green.active{background-color:#00180a!important}.btn-lime{background:#afb42b}.btn-lime:focus,.btn-lime:hover{background-color:#c3c930!important}.btn-lime.active{background-color:#5f6217!important}.btn-yellow{background:#fbc02d}.btn-yellow:focus,.btn-yellow:hover{background-color:#fbc846!important}.btn-yellow.active{background-color:#be8904!important}.btn-amber{background:#ff6f00}.btn-amber:focus,.btn-amber:hover{background-color:#ff7d1a!important}.btn-amber.active{background-color:#994300!important}.btn-orange{background:#e65100}.btn-orange:focus,.btn-orange:hover{background-color:#ff5a01!important}.btn-orange.active{background-color:#802d00!important}.btn-deep-orange{background:#bf360c}.btn-deep-orange:focus,.btn-deep-orange:hover{background-color:#d73d0e!important}.btn-deep-orange.active{background-color:#5f1b06!important}.btn-brown{background:#6d4c41}.btn-brown:focus,.btn-brown:hover{background-color:#7d574b!important}.btn-brown.active{background-color:#2d1f1b!important}.btn-blue-grey{background:#607d8b}.btn-blue-grey:focus,.btn-blue-grey:hover{background-color:#6b8a99!important}.btn-blue-grey.active{background-color:#36474f!important}.btn-mdb{background:#45526E}.btn-mdb:focus,.btn-mdb:hover{background-color:#4f5e7e!important}.btn-mdb.active{background-color:#1e232f!important}.btn-secondary.disabled,.btn-secondary:disabled{background-color:#a6c;cursor:not-allowed;pointer-events:auto!important}.btn-split{padding-left:.85rem;padding-right:1.25rem}i.btn-primary{background:#4285F4!important}i.btn-default{background:#2BBBAD!important}i.btn-success{background:#00C851!important}i.btn-info{background:#33b5e5!important}i.btn-warning{background:#F80!important}i.btn-danger{background:#C00!important}.card{border:0}.card .card-title a{color:#424242;-webkit-transition:.4s;-moz-transition:.4s;-o-transition:.4s;-ms-transition:.4s;transition:.4s}.card .card-title a:hover{color:#616161;-webkit-transition:.4s;-moz-transition:.4s;-o-transition:.4s;-ms-transition:.4s;transition:.4s}.card img{border-bottom-left-radius:0;border-bottom-right-radius:0}.card .card-block{position:relative}.card .card-footer{padding-bottom:0;font-size:1.2rem}.card .card-footer:after{display:block;content:"";clear:both}.card .card-footer .card-link{color:inherit}.jumbotron{background-color:#fff;padding:2rem}.jumbotron.m-1,.jumbotron.m-2,.jumbotron.m-3{z-index:50;position:relative;margin-left:3%;margin-right:3%}.jumbotron.m-1{margin-top:-20px}.jumbotron.m-2{margin-top:-30px}.jumbotron.m-3{margin-top:-40px}.list-group-item{width:100%}.edge-header{display:block;height:278px;background-color:#ccc}.free-bird{margin-top:-100px}.card .form-header{color:#fff;text-align:center;margin-top:-50px;margin-bottom:3rem;padding:1rem;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px}.card .form-header h3{margin:0;padding:.7rem}.call .fa{margin-right:5px}.navbar{font-weight:300}.navbar form input{margin:0 5px 1px 8px;height:1rem}.navbar .navbar-brand{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;overflow:visible}.navbar .breadcrumb{margin:0;background-color:inherit;font-weight:300}.navbar.navbar-dark .navbar-brand,.navbar.navbar-dark .navbar-brand:hover{color:#fff}.navbar.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.9)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E");cursor:pointer}.navbar.navbar-dark .breadcrumb a,.navbar.navbar-dark .navbar-nav .nav-item a{color:#fff;transition:.35s}.navbar.navbar-dark .breadcrumb a:hover,.navbar.navbar-dark .navbar-nav .nav-item a:hover{color:rgba(255,255,255,.75)}.navbar.navbar-dark .breadcrumb.active,.navbar.navbar-dark .navbar-nav .nav-item.active{background-color:rgba(255,255,255,.1)}.navbar.navbar-dark .breadcrumb .dropdown-menu a,.navbar.navbar-dark .breadcrumb .dropdown-menu a:active,.navbar.navbar-dark .breadcrumb .dropdown-menu a:focus,.navbar.navbar-dark .breadcrumb .dropdown-menu a:hover,.navbar.navbar-dark .navbar-nav .nav-item .dropdown-menu a,.navbar.navbar-dark .navbar-nav .nav-item .dropdown-menu a:active,.navbar.navbar-dark .navbar-nav .nav-item .dropdown-menu a:focus,.navbar.navbar-dark .navbar-nav .nav-item .dropdown-menu a:hover{color:#212121}.navbar.navbar-dark .nav-link,.navbar.navbar-dark .navbar-toggler{color:#fff}.navbar.navbar-light .breadcrumb a,.navbar.navbar-light .breadcrumb a:hover,.navbar.navbar-light .nav-item a,.navbar.navbar-light .nav-item a:hover{transition:.35s;color:#212121}.navbar.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.9)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E")}.navbar.navbar-light .breadcrumb.active,.navbar.navbar-light .nav-item.active{background-color:rgba(158,158,158,.2)}.navbar.navbar-light .breadcrumb .dropdown-menu a,.navbar.navbar-light .nav-item .dropdown-menu a{color:#000;padding:1rem}.navbar.navbar-light .navbar-toggler{color:#000}.navbar .dropdown-menu a{font-size:.9375rem;font-weight:300;padding:10px}.navbar .navbar-toggler{border-width:0}.navbar .nav-flex-icons{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}@media (max-width:991px){.navbar .container{width:100%}.navbar .container .navbar-toggler-right{right:0}}.navbar .dropdown-menu{position:absolute!important}.navbar.double-nav{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-dark form input[type=text]{border-bottom:1px solid #fff}.navbar-dark form .form-control{color:#fff}.navbar-dark form .form-control:-moz-placeholder{color:rgba(255,255,255,.65)!important;font-weight:300}.navbar-dark form .form-control::-ms-placeholder{color:rgba(255,255,255,.65)!important;font-weight:300}.navbar-dark form .form-control::-webkit-input-placeholder{color:rgba(255,255,255,.65)!important;font-weight:300}.navbar-dark form .form-control::-moz-placeholder{color:rgba(255,255,255,.65)!important;font-weight:300}.navbar-dark form .form-control:-ms-input-placeholder{color:rgba(255,255,255,.65)!important;font-weight:300}.navbar-dark form .form-control::placeholder{color:rgba(255,255,255,.65)!important;font-weight:300}.navbar-light form input[type=text]{border-bottom:1px solid #1C2331}.navbar-light form .form-control{color:#1C2331}.navbar-light form .form-control:-moz-placeholder{color:#1C2331!important;font-weight:300}.navbar-light form .form-control::-ms-placeholder{color:#1C2331!important;font-weight:300}.navbar-light form .form-control::-webkit-input-placeholder{color:#1C2331!important;font-weight:300}.navbar-light form .form-control::-moz-placeholder{color:#1C2331!important;font-weight:300}.navbar-light form .form-control:-ms-input-placeholder{color:#1C2331!important;font-weight:300}.navbar-light form .form-control::placeholder{color:#1C2331!important;font-weight:300}.view{overflow:hidden;position:relative;cursor:default}.view .content,.view .mask{width:100%;height:100%;position:absolute;overflow:hidden;top:0;left:0}.view img,.view video{display:block;position:relative}.view .mask{background-attachment:fixed}.full-bg-img{height:100%;width:100%;position:absolute;overflow:hidden;top:0;left:0}.img-overlay,header .view{position:relative}header .view{width:100%;height:auto;background-repeat:no-repeat;background-position:center center;background-size:cover}.overlay:hover .mask{opacity:1}.overlay img,.overlay video{transition:all .2s linear}.overlay .mask{opacity:0;transition:all .4s ease-in-out}.pattern-1{background:url(../img/overlays/01.png)}.pattern-2{background:url(../img/overlays/02.png)}.pattern-3{background:url(../img/overlays/03.png)}.pattern-4{background:url(../img/overlays/04.png)}.pattern-5{background:url(../img/overlays/05.png)}.pattern-6{background:url(../img/overlays/06.png)}.pattern-7{background:url(../img/overlays/07.png)}.pattern-8{background:url(../img/overlays/08.png)}.pattern-9{background:url(../img/overlays/09.png)}.hm-blue-light .full-bg-img,.hm-blue-light .mask{background-color:rgba(3,169,244,.3)}.hm-red-light .full-bg-img,.hm-red-light .mask{background-color:rgba(244,67,54,.3)}.hm-pink-light .full-bg-img,.hm-pink-light .mask{background-color:rgba(233,30,99,.3)}.hm-purple-light .full-bg-img,.hm-purple-light .mask{background-color:rgba(156,39,176,.3)}.hm-indigo-light .full-bg-img,.hm-indigo-light .mask{background-color:rgba(63,81,181,.3)}.hm-cyan-light .full-bg-img,.hm-cyan-light .mask{background-color:rgba(0,188,212,.3)}.hm-teal-light .full-bg-img,.hm-teal-light .mask{background-color:rgba(0,150,136,.3)}.hm-green-light .full-bg-img,.hm-green-light .mask{background-color:rgba(76,175,80,.3)}.hm-lime-light .full-bg-img,.hm-lime-light .mask{background-color:rgba(205,220,57,.3)}.hm-yellow-light .full-bg-img,.hm-yellow-light .mask{background-color:rgba(255,235,59,.3)}.hm-orange-light .full-bg-img,.hm-orange-light .mask{background-color:rgba(255,152,0,.3)}.hm-brown-light .full-bg-img,.hm-brown-light .mask{background-color:rgba(121,85,72,.3)}.hm-grey-light .full-bg-img,.hm-grey-light .mask{background-color:rgba(158,158,158,.3)}.hm-bluegrey-light .full-bg-img,.hm-bluegrey-light .mask{background-color:rgba(96,125,139,.3)}.hm-black-light .full-bg-img,.hm-black-light .mask{background-color:rgba(0,0,0,.3)}.hm-stylish-light .full-bg-img,.hm-stylish-light .mask{background-color:rgba(62,69,81,.3)}.hm-white-light .full-bg-img,.hm-white-light .mask{background-color:rgba(255,255,255,.3)}.hm-blue-strong .full-bg-img,.hm-blue-strong .mask{background-color:rgba(3,169,244,.7)}.hm-red-strong .full-bg-img,.hm-red-strong .mask{background-color:rgba(244,67,54,.7)}.hm-pink-strong .full-bg-img,.hm-pink-strong .mask{background-color:rgba(233,30,99,.7)}.hm-purple-strong .full-bg-img,.hm-purple-strong .mask{background-color:rgba(156,39,176,.7)}.hm-indigo-strong .full-bg-img,.hm-indigo-strong .mask{background-color:rgba(63,81,181,.7)}.hm-cyan-strong .full-bg-img,.hm-cyan-strong .mask{background-color:rgba(0,188,212,.7)}.hm-teal-strong .full-bg-img,.hm-teal-strong .mask{background-color:rgba(0,150,136,.7)}.hm-green-strong .full-bg-img,.hm-green-strong .mask{background-color:rgba(76,175,80,.7)}.hm-lime-strong .full-bg-img,.hm-lime-strong .mask{background-color:rgba(205,220,57,.7)}.hm-yellow-strong .full-bg-img,.hm-yellow-strong .mask{background-color:rgba(255,235,59,.7)}.hm-orange-strong .full-bg-img,.hm-orange-strong .mask{background-color:rgba(255,152,0,.7)}.hm-brown-strong .full-bg-img,.hm-brown-strong .mask{background-color:rgba(121,85,72,.7)}.hm-grey-strong .full-bg-img,.hm-grey-strong .mask{background-color:rgba(158,158,158,.7)}.hm-bluegrey-strong .full-bg-img,.hm-bluegrey-strong .mask{background-color:rgba(96,125,139,.7)}.hm-black-strong .full-bg-img,.hm-black-strong .mask{background-color:rgba(0,0,0,.7)}.hm-stylish-strong .full-bg-img,.hm-stylish-strong .mask{background-color:rgba(62,69,81,.7)}.hm-white-strong .full-bg-img,.hm-white-strong .mask{background-color:rgba(255,255,255,.7)}.hm-blue-slight .full-bg-img,.hm-blue-slight .mask{background-color:rgba(3,169,244,.1)}.hm-red-slight .full-bg-img,.hm-red-slight .mask{background-color:rgba(244,67,54,.1)}.hm-pink-slight .full-bg-img,.hm-pink-slight .mask{background-color:rgba(233,30,99,.1)}.hm-purple-slight .full-bg-img,.hm-purple-slight .mask{background-color:rgba(156,39,176,.1)}.hm-indigo-slight .full-bg-img,.hm-indigo-slight .mask{background-color:rgba(63,81,181,.1)}.hm-cyan-slight .full-bg-img,.hm-cyan-slight .mask{background-color:rgba(0,188,212,.1)}.hm-teal-slight .full-bg-img,.hm-teal-slight .mask{background-color:rgba(0,150,136,.1)}.hm-green-slight .full-bg-img,.hm-green-slight .mask{background-color:rgba(76,175,80,.1)}.hm-lime-slight .full-bg-img,.hm-lime-slight .mask{background-color:rgba(205,220,57,.1)}.hm-yellow-slight .full-bg-img,.hm-yellow-slight .mask{background-color:rgba(255,235,59,.1)}.hm-orange-slight .full-bg-img,.hm-orange-slight .mask{background-color:rgba(255,152,0,.1)}.hm-brown-slight .full-bg-img,.hm-brown-slight .mask{background-color:rgba(121,85,72,.1)}.hm-grey-slight .full-bg-img,.hm-grey-slight .mask{background-color:rgba(158,158,158,.1)}.hm-bluegrey-slight .full-bg-img,.hm-bluegrey-slight .mask{background-color:rgba(96,125,139,.1)}.hm-black-slight .full-bg-img,.hm-black-slight .mask{background-color:rgba(0,0,0,.1)}.hm-stylish-slight .full-bg-img,.hm-stylish-slight .mask{background-color:rgba(62,69,81,.1)}.hm-white-slight .full-bg-img,.hm-white-slight .mask{background-color:rgba(255,255,255,.1)}.hm-zoom img{transition:all .2s linear}.hm-zoom:hover img{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.hm-zoom:hover .mask{opacity:1}.img-overlay:after{content:'';display:block;position:absolute;height:100%;width:100%;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,.17);transition:background .4s}.img-overlay:hover:after{background:rgba(0,0,0,.35)}.img-overlay.light:after{background:rgba(255,255,255,.17)}.img-overlay.light:hover:after{background:rgba(255,255,255,.35)}.img-overlay.blue:after{background:rgba(0,145,234,.17)}.img-overlay.blue:hover:after{background:rgba(0,145,234,.35)}.img-overlay.green:after{background:rgba(76,175,80,.17)}.img-overlay.green:hover:after{background:rgba(76,175,80,.35)}.img-overlay.red:after{background:rgba(213,0,0,.17)}.img-overlay.red:hover:after{background:rgba(213,0,0,.35)}footer.page-footer{margin-top:20px;padding-top:20px;background-color:#3E4551;color:#fff}footer.page-footer .footer-copyright{overflow:hidden;height:50px;line-height:50px;color:rgba(255,255,255,.8);background-color:rgba(0,0,0,.2);text-align:center}footer.page-footer a{color:#fff}footer.page-footer .call-to-action{text-align:center;padding-top:1.3rem;padding-bottom:.5rem}footer.page-footer .call-to-action ul li{display:inline-block;padding-right:10px}footer.page-footer .social-section{text-align:center}footer.page-footer .social-section ul li{display:inline-block}ul.instagram-photos li{display:inline-block;max-width:100px;margin:4px}ul.instagram-photos li img{margin:0}.carousel-control:hover{-webkit-transition-duration:.4s;-moz-transition-duration:.4s;-o-transition-duration:.4s;-ms-transition-duration:.4s;transition-duration:.4s}.carousel-fade .carousel-inner .carousel-item{opacity:0;transition-property:opacity}.carousel-fade .carousel-inner .active{opacity:1}.carousel-fade .carousel-inner .active.left,.carousel-fade .carousel-inner .active.right{left:0;opacity:0;z-index:1}.carousel-fade .carousel-inner .next.left,.carousel-fade .carousel-inner .prev.right{opacity:1}.carousel-fade .carousel-control{z-index:2}@media all and (transform-3d),(-webkit-transform-3d){.carousel-fade .carousel-inner>.carousel-item.active.left,.carousel-fade .carousel-inner>.carousel-item.active.right,.carousel-fade .carousel-inner>.carousel-item.next,.carousel-fade .carousel-inner>.carousel-item.prev{opacity:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.carousel-fade .carousel-inner>.carousel-item.active,.carousel-fade .carousel-inner>.carousel-item.next.left,.carousel-fade .carousel-inner>.carousel-item.prev.right{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel .carousel-control-next-icon,.carousel .carousel-control-prev-icon{width:36px;height:36px}.modal .modal-fluid,.modal .modal-frame{width:100%;max-width:100%}.carousel .carousel-control-prev-icon{background-image:url(../img/svg/arrow_left.svg)}.carousel .carousel-control-next-icon{background-image:url(../img/svg/arrow_right.svg)}.carousel .carousel-indicators li{max-width:10px;height:10px;border-radius:50%}.carousel .video-fluid{height:100%}.carousel.no-flex .carousel-item-next,.carousel.no-flex .carousel-item-prev,.carousel.no-flex .carousel-item.active{display:block}body.scrollable{overflow-y:auto}.modal-dialog .modal-content{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;border:0}.modal .modal-dialog.modal-top{top:0}.modal .modal-dialog.modal-left{left:0}.modal .modal-dialog.modal-right{right:0}.modal .modal-dialog.modal-bottom{bottom:0}.modal .modal-dialog.modal-top-left{top:10px;left:10px}.modal .modal-dialog.modal-top-right{top:10px;right:10px}.modal .modal-dialog.modal-bottom-left{left:10px;bottom:10px}.modal .modal-dialog.modal-bottom-right{right:10px;bottom:10px}.modal.fade.top:not(.show) .modal-dialog{-webkit-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.fade.left:not(.show) .modal-dialog{-webkit-transform:translate3d(-25%,0,0);transform:translate3d(-25%,0,0)}.modal.fade.right:not(.show) .modal-dialog{-webkit-transform:translate3d(25%,0,0);transform:translate3d(25%,0,0)}.modal.fade.bottom:not(.show) .modal-dialog{-webkit-transform:translate3d(0,25%,0);transform:translate3d(0,25%,0)}.modal.modal-scrolling{position:relative}.modal.modal-scrolling .modal-dialog{position:fixed;z-index:1050}.modal.modal-content-clickable{top:auto;bottom:auto}.modal.modal-content-clickable .modal-dialog{position:fixed}.modal .modal-fluid .modal-content{width:100%}.modal .modal-frame{position:absolute;margin:0}.modal .modal-frame.modal-bottom{bottom:0}.modal .modal-full-height{display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;width:400px;height:100%;margin:0;top:0;right:0}.modal .modal-full-height.modal-bottom,.modal .modal-full-height.modal-top{display:block;width:100%;max-width:100%;height:auto}.modal .modal-full-height.modal-top{bottom:auto}.modal .modal-full-height.modal-bottom{top:auto}.modal .modal-full-height .modal-content{width:100%}.modal .modal-full-height.modal-lg{max-width:90%;width:90%}@media (min-width:992px){.modal .modal-full-height.modal-lg{max-width:800px;width:800px}}@media (min-width:1200px){.modal .modal-full-height.modal-lg{max-width:1000px;width:1000px}}.modal .modal-side{position:absolute;right:10px;bottom:10px;margin:0;width:400px}.modal-dialog .btn .fa{color:#fff!important}.modal-dialog [class*=btn-outline-] .fa{color:inherit!important}.modal-dialog.cascading-modal{margin-top:10%}.modal-dialog.cascading-modal .modal-header{text-align:center;margin:-2rem 1rem 1rem;padding:1.5rem;border:none;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px}.modal-dialog.cascading-modal .modal-header .close{margin-right:2.5rem}.modal-dialog.cascading-modal .modal-header.white-text .close{color:#fff;opacity:1}.modal-dialog.cascading-modal .modal-header .title{width:100%;margin-bottom:0;font-size:1.25rem}.modal-dialog.cascading-modal .modal-header .title .fa{margin-right:9px}.modal-dialog.cascading-modal .modal-header .social-buttons{margin-top:1.5rem}.modal-dialog.cascading-modal .modal-header .social-buttons a{font-size:1rem}.modal-dialog.cascading-modal .modal-c-tabs .nav-tabs{margin:-1.5rem 1rem 0}.modal-dialog.cascading-modal .modal-c-tabs .tab-content{padding:1.7rem 0 0}.modal-dialog.cascading-modal .modal-body,.modal-dialog.cascading-modal .modal-footer{color:#616161;padding-right:2rem;padding-left:2rem}.modal-dialog.cascading-modal .modal-body .additional-option,.modal-dialog.cascading-modal .modal-footer .additional-option{text-align:center;margin-top:1rem}.modal-dialog.cascading-modal.modal-avatar{margin-top:6rem}.modal-dialog.cascading-modal.modal-avatar .modal-header{margin:-6rem 2rem -1rem}.modal-dialog.cascading-modal.modal-avatar .modal-header img{width:130px}.modal-dialog.modal-notify .heading{margin:0;padding:.3rem;color:#fff;font-size:1.15rem}.modal-dialog.modal-notify .modal-header{border:0}.modal-dialog.modal-notify .close{opacity:1}.modal-dialog.modal-notify .modal-body{padding:1.5rem;color:#616161}.modal-dialog.modal-notify .btn-outline-secondary-modal{background-color:transparent}.modal-dialog.modal-notify.modal-info .badge,.modal-dialog.modal-notify.modal-info .modal-header{background-color:#5394ff}.modal-dialog.modal-notify.modal-info .fa{color:#5394ff}.modal-dialog.modal-notify.modal-info .btn-primary-modal{background:#5394ff}.modal-dialog.modal-notify.modal-info .btn-primary-modal:active,.modal-dialog.modal-notify.modal-info .btn-primary-modal:focus,.modal-dialog.modal-notify.modal-info .btn-primary-modal:hover{background-color:#6da4ff!important}.modal-dialog.modal-notify.modal-info .btn-primary-modal.active{background-color:#0059ec!important}.modal-dialog.modal-notify.modal-warning .badge,.modal-dialog.modal-notify.modal-warning .modal-header{background-color:#ff8e38}.modal-dialog.modal-notify.modal-info .btn-outline-secondary-modal{border:2px solid #5394ff;color:#5394ff!important}.modal-dialog.modal-notify.modal-warning .fa{color:#ff8e38}.modal-dialog.modal-notify.modal-warning .btn-primary-modal{background:#ff8e38}.modal-dialog.modal-notify.modal-warning .btn-primary-modal:active,.modal-dialog.modal-notify.modal-warning .btn-primary-modal:focus,.modal-dialog.modal-notify.modal-warning .btn-primary-modal:hover{background-color:#ff9c52!important}.modal-dialog.modal-notify.modal-warning .btn-primary-modal.active{background-color:#d15a00!important}.modal-dialog.modal-notify.modal-success .badge,.modal-dialog.modal-notify.modal-success .modal-header{background-color:#01d36b}.modal-dialog.modal-notify.modal-warning .btn-outline-secondary-modal{border:2px solid #ff8e38;color:#ff8e38!important}.modal-dialog.modal-notify.modal-success .fa{color:#01d36b}.modal-dialog.modal-notify.modal-success .btn-primary-modal{background:#01d36b}.modal-dialog.modal-notify.modal-success .btn-primary-modal:active,.modal-dialog.modal-notify.modal-success .btn-primary-modal:focus,.modal-dialog.modal-notify.modal-success .btn-primary-modal:hover{background-color:#01ec78!important}.modal-dialog.modal-notify.modal-success .btn-primary-modal.active{background-color:#016d38!important}.modal-dialog.modal-notify.modal-danger .badge,.modal-dialog.modal-notify.modal-danger .modal-header{background-color:#ff4b4b}.modal-dialog.modal-notify.modal-success .btn-outline-secondary-modal{border:2px solid #01d36b;color:#01d36b!important}.modal-dialog.modal-notify.modal-danger .fa{color:#ff4b4b}.modal-dialog.modal-notify.modal-danger .btn-primary-modal{background:#ff4b4b}.modal-dialog.modal-notify.modal-danger .btn-primary-modal:active,.modal-dialog.modal-notify.modal-danger .btn-primary-modal:focus,.modal-dialog.modal-notify.modal-danger .btn-primary-modal:hover{background-color:#ff6565!important}.modal-dialog.modal-notify.modal-danger .btn-primary-modal.active{background-color:#e40000!important}.modal-dialog.modal-notify.modal-danger .btn-outline-secondary-modal{border:2px solid #ff4b4b;color:#ff4b4b!important} \ No newline at end of file diff --git a/resources/static/datatables/Russian.json b/resources/static/datatables/Russian.json new file mode 100644 index 0000000..2046e33 --- /dev/null +++ b/resources/static/datatables/Russian.json @@ -0,0 +1,22 @@ +{ + "processing": "Подождите...", + "search": "Поиск:", + "lengthMenu": "Показать _MENU_ записей", + "info": "Записи с _START_ до _END_ из _TOTAL_ записей", + "infoEmpty": "Записи с 0 до 0 из 0 записей", + "infoFiltered": "(отфильтровано из _MAX_ записей)", + "infoPostFix": "", + "loadingRecords": "Загрузка записей...", + "zeroRecords": "Записи отсутствуют", + "emptyTable": "В таблице отсутствуют данные", + "paginate": { + "first": "Первая", + "previous": "Предыдущая", + "next": "Следующая", + "last": "Последняя" + }, + "aria": { + "sortAscending": ": активировать для сортировки столбца по возрастанию", + "sortDescending": ": активировать для сортировки столбца по убыванию" + } +} diff --git a/resources/static/datatables/css/buttons.bootstrap.min.css b/resources/static/datatables/css/buttons.bootstrap.min.css new file mode 100644 index 0000000..05b6c22 --- /dev/null +++ b/resources/static/datatables/css/buttons.bootstrap.min.css @@ -0,0 +1 @@ +div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}ul.dt-button-collection.dropdown-menu{display:block;z-index:2002;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}ul.dt-button-collection.dropdown-menu.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}ul.dt-button-collection.dropdown-menu.fixed.two-column{margin-left:-150px}ul.dt-button-collection.dropdown-menu.fixed.three-column{margin-left:-225px}ul.dt-button-collection.dropdown-menu.fixed.four-column{margin-left:-300px}ul.dt-button-collection.dropdown-menu>*{-webkit-column-break-inside:avoid;break-inside:avoid}ul.dt-button-collection.dropdown-menu.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}ul.dt-button-collection.dropdown-menu.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}ul.dt-button-collection.dropdown-menu.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2001}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5em}div.dt-buttons a.btn{float:none}} diff --git a/resources/static/datatables/css/buttons.dataTables.min.css b/resources/static/datatables/css/buttons.dataTables.min.css new file mode 100644 index 0000000..a8758ee --- /dev/null +++ b/resources/static/datatables/css/buttons.dataTables.min.css @@ -0,0 +1 @@ +div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}button.dt-button,div.dt-button,a.dt-button{position:relative;display:inline-block;box-sizing:border-box;margin-right:0.333em;padding:0.5em 1em;border:1px solid #999;border-radius:2px;cursor:pointer;font-size:0.88em;color:black;white-space:nowrap;overflow:hidden;background-color:#e9e9e9;background-image:-webkit-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-moz-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-ms-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-o-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:linear-gradient(to bottom, #fff 0%, #e9e9e9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='white', EndColorStr='#e9e9e9');-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;outline:none}button.dt-button.disabled,div.dt-button.disabled,a.dt-button.disabled{color:#999;border:1px solid #d0d0d0;cursor:default;background-color:#f9f9f9;background-image:-webkit-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-moz-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-ms-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-o-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:linear-gradient(to bottom, #fff 0%, #f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#ffffff', EndColorStr='#f9f9f9')}button.dt-button:active:not(.disabled),button.dt-button.active:not(.disabled),div.dt-button:active:not(.disabled),div.dt-button.active:not(.disabled),a.dt-button:active:not(.disabled),a.dt-button.active:not(.disabled){background-color:#e2e2e2;background-image:-webkit-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-moz-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-ms-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-o-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:linear-gradient(to bottom, #f3f3f3 0%, #e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f3f3f3', EndColorStr='#e2e2e2');box-shadow:inset 1px 1px 3px #999999}button.dt-button:active:not(.disabled):hover:not(.disabled),button.dt-button.active:not(.disabled):hover:not(.disabled),div.dt-button:active:not(.disabled):hover:not(.disabled),div.dt-button.active:not(.disabled):hover:not(.disabled),a.dt-button:active:not(.disabled):hover:not(.disabled),a.dt-button.active:not(.disabled):hover:not(.disabled){box-shadow:inset 1px 1px 3px #999999;background-color:#cccccc;background-image:-webkit-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-moz-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-ms-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-o-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:linear-gradient(to bottom, #eaeaea 0%, #ccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#eaeaea', EndColorStr='#cccccc')}button.dt-button:hover,div.dt-button:hover,a.dt-button:hover{text-decoration:none}button.dt-button:hover:not(.disabled),div.dt-button:hover:not(.disabled),a.dt-button:hover:not(.disabled){border:1px solid #666;background-color:#e0e0e0;background-image:-webkit-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-moz-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-ms-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-o-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:linear-gradient(to bottom, #f9f9f9 0%, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f9f9f9', EndColorStr='#e0e0e0')}button.dt-button:focus:not(.disabled),div.dt-button:focus:not(.disabled),a.dt-button:focus:not(.disabled){border:1px solid #426c9e;text-shadow:0 1px 0 #c4def1;outline:none;background-color:#79ace9;background-image:-webkit-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-moz-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-ms-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-o-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:linear-gradient(to bottom, #bddef4 0%, #79ace9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#bddef4', EndColorStr='#79ace9')}.dt-button embed{outline:none}div.dt-buttons{position:relative;float:left}div.dt-buttons.buttons-right{float:right}div.dt-button-collection{position:absolute;top:0;left:0;width:150px;margin-top:3px;padding:8px 8px 4px 8px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.4);background-color:white;overflow:hidden;z-index:2002;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,0.3);z-index:2002;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection button.dt-button,div.dt-button-collection div.dt-button,div.dt-button-collection a.dt-button{position:relative;left:0;right:0;display:block;float:none;margin-bottom:4px;margin-right:0}div.dt-button-collection button.dt-button:active:not(.disabled),div.dt-button-collection button.dt-button.active:not(.disabled),div.dt-button-collection div.dt-button:active:not(.disabled),div.dt-button-collection div.dt-button.active:not(.disabled),div.dt-button-collection a.dt-button:active:not(.disabled),div.dt-button-collection a.dt-button.active:not(.disabled){background-color:#dadada;background-image:-webkit-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-moz-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-ms-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-o-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f0f0f0', EndColorStr='#dadada');box-shadow:inset 1px 1px 3px #666}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-150px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0,0,0,0.3)), color-stop(1, rgba(0,0,0,0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);z-index:2001}@media screen and (max-width: 640px){div.dt-buttons{float:none !important;text-align:center}} diff --git a/resources/static/datatables/css/dataTables.bootstrap4.min.css b/resources/static/datatables/css/dataTables.bootstrap4.min.css new file mode 100644 index 0000000..5ec0a8b --- /dev/null +++ b/resources/static/datatables/css/dataTables.bootstrap4.min.css @@ -0,0 +1 @@ +table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0} diff --git a/resources/static/datatables/css/dataTables.checkboxes.css b/resources/static/datatables/css/dataTables.checkboxes.css new file mode 100644 index 0000000..be2f007 --- /dev/null +++ b/resources/static/datatables/css/dataTables.checkboxes.css @@ -0,0 +1,17 @@ +table.dataTable.dt-checkboxes-select tbody tr, +table.dataTable thead .dt-checkboxes-select-all { + cursor: pointer; +} + +div.dataTables_wrapper span.select-info, +div.dataTables_wrapper span.select-item { + margin-left: 0.5em; +} + +@media screen and (max-width: 640px) { + div.dataTables_wrapper span.select-info, + div.dataTables_wrapper span.select-item { + margin-left: 0; + display: block; + } +} diff --git a/resources/static/datatables/css/fixedHeader.dataTables.min.css b/resources/static/datatables/css/fixedHeader.dataTables.min.css new file mode 100644 index 0000000..7113963 --- /dev/null +++ b/resources/static/datatables/css/fixedHeader.dataTables.min.css @@ -0,0 +1 @@ +table.fixedHeader-floating{position:fixed !important;background-color:white}table.fixedHeader-floating.no-footer{border-bottom-width:0}table.fixedHeader-locked{position:absolute !important;background-color:white}@media print{table.fixedHeader-floating{display:none}} diff --git a/resources/static/datatables/css/jquery.dataTables.min.css b/resources/static/datatables/css/jquery.dataTables.min.css new file mode 100644 index 0000000..781de6b --- /dev/null +++ b/resources/static/datatables/css/jquery.dataTables.min.css @@ -0,0 +1 @@ +table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} diff --git a/resources/static/datatables/css/select.dataTables.min.css b/resources/static/datatables/css/select.dataTables.min.css new file mode 100644 index 0000000..72b4a7a --- /dev/null +++ b/resources/static/datatables/css/select.dataTables.min.css @@ -0,0 +1 @@ +table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:#B0BED9}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:#acbad4}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:#aab7d1}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#a6b4cd}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#a5b2cb}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#a2aec7}table.dataTable td.select-checkbox,table.dataTable th.select-checkbox{position:relative}table.dataTable td.select-checkbox:before,table.dataTable td.select-checkbox:after,table.dataTable th.select-checkbox:before,table.dataTable th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable td.select-checkbox:before,table.dataTable th.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after,table.dataTable tr.selected th.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}} diff --git a/resources/static/datatables/js/buttons.bootstrap.min.js b/resources/static/datatables/js/buttons.bootstrap.min.js new file mode 100644 index 0000000..dc28bac --- /dev/null +++ b/resources/static/datatables/js/buttons.bootstrap.min.js @@ -0,0 +1,6 @@ +/*! + Bootstrap integration for DataTables' Buttons + ©2016 SpryMedia Ltd - datatables.net/license +*/ +(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs","datatables.net-buttons"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);if(!b||!b.fn.dataTable)b=require("datatables.net-bs")(a,b).$;b.fn.dataTable.Buttons||require("datatables.net-buttons")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c){var a=c.fn.dataTable;c.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group"}, +button:{className:"btn btn-default"},collection:{tag:"ul",className:"dt-button-collection dropdown-menu",button:{tag:"li",className:"dt-button"},buttonLiner:{tag:"a",className:""}}}});a.ext.buttons.collection.text=function(a){return a.i18n("buttons.collection",'Collection ')};return a.Buttons}); diff --git a/resources/static/datatables/js/buttons.html5.min.js b/resources/static/datatables/js/buttons.html5.min.js new file mode 100644 index 0000000..45d027f --- /dev/null +++ b/resources/static/datatables/js/buttons.html5.min.js @@ -0,0 +1,25 @@ +(function(i){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(g){return i(g,window,document)}):"object"===typeof exports?module.exports=function(g,k,q,r){g||(g=window);if(!k||!k.fn.dataTable)k=require("datatables.net")(g,k).$;k.fn.dataTable.Buttons||require("datatables.net-buttons")(g,k);return i(k,g,g.document,q,r)}:i(jQuery,window,document)})(function(i,g,k,q,r,p){function y(a,c){s===p&&(s=-1===v.serializeToString(i.parseXML(z["xl/worksheets/sheet1.xml"])).indexOf("xmlns:r")); +i.each(c,function(c,b){if(i.isPlainObject(b)){var e=a.folder(c);y(e,b)}else{if(s){var e=b.childNodes[0],f,h,m=[];for(f=e.attributes.length-1;0<=f;f--){h=e.attributes[f].nodeName;var g=e.attributes[f].nodeValue;-1!==h.indexOf(":")&&(m.push({name:h,value:g}),e.removeAttribute(h))}f=0;for(h=m.length;f'+ +e),e=e.replace(/_dt_b_namespace_token_/g,":"));e=e.replace(/<(.*?) xmlns=""(.*?)>/g,"<$1 $2>");a.file(c,e)}})}function n(a,c,d){var b=a.createElement(c);d&&(d.attr&&i(b).attr(d.attr),d.children&&i.each(d.children,function(a,c){b.appendChild(c)}),d.text&&b.appendChild(a.createTextNode(d.text)));return b}function I(a,c){var d=a.header[c].length,b;a.footer&&a.footer[c].length>d&&(d=a.footer[c].length);for(var e=0,f=a.body.length;ed&&(d=b),401*a[1]?!0:!1};try{var v=new XMLSerializer,s}catch(O){}var z={"_rels/.rels":'', +"xl/_rels/workbook.xml.rels":'',"[Content_Types].xml":'', +"xl/workbook.xml":'', +"xl/worksheets/sheet1.xml":'',"xl/styles.xml":''}, +H=[{match:/^\-?\d+\.\d%$/,style:60,fmt:function(a){return a/100}},{match:/^\-?\d+\.?\d*%$/,style:56,fmt:function(a){return a/100}},{match:/^\-?\$[\d,]+.?\d*$/,style:57},{match:/^\-?£[\d,]+.?\d*$/,style:58},{match:/^\-?€[\d,]+.?\d*$/,style:59},{match:/^\-?\d+$/,style:65},{match:/^\-?\d+\.\d{2}$/,style:66},{match:/^\([\d,]+\)$/,style:61,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\([\d,]+\.\d{2}\)$/,style:62,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\-?[\d,]+$/,style:63}, +{match:/^\-?[\d,]+\.\d{2}$/,style:64}];l.ext.buttons.copyHtml5={className:"buttons-copy buttons-html5",text:function(a){return a.i18n("buttons.copy","Copy")},action:function(a,c,d,b){var a=F(c,b),e=a.str,d=i("
").css({height:1,width:1,overflow:"hidden",position:"fixed",top:0,left:0});b.customize&&(e=b.customize(e,b));b=i("",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.rnamespace||a.rnamespace.test(g.namespace))&&(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n(" +
+
+

+ Любое знание стоит воспринимать как подобие семантического дерева: убедитесь в том, что понимаете + фундаментальные принципы, то есть ствол и крупные ветки, прежде чем лезть в мелкие листья-детали. Иначе + последним не на чем будет держаться.

+
Илон Маск
+
+
+ + + +
    +
  • Стоимость участия без проверки домашних заданий: 6300 руб./ 115$
    + сюда входят все материалы, участие в группе Slack (на каждое занятие и тему- свой канал), полугодовая лицензия IntelliJ IDEA, ответы на вопросы и помощь с проектом.

    +
  • +
  • Стоимость с проверкой Домашних Заданий: 11400 руб./ 205$.
    + Проверка настоятельно рекомендуется, именно в этом состоит наибольшая польза от проекта (практика + ревью кода).

    +
  • +
  • Скидка участникам Java Enterprise (Topjava)/Masterjava: 5400 руб. / 98$ и 9900 руб/ 180$ (с проверкой ДЗ).

    +
  • +
  • При оплате со стажировкой Java Enterprise (Topjava) скидка 15%!
    участие с проверкой ДЗ + стажировка без проверки ДЗ: 16400 руб./ 298$

  • +
  • Способы оплаты

  • +
  • Добавляйтесь в skype: grigory.kislin

  • +
+
+
+ + +
+

Занятие 1

+ Разработка + ПО
+ Обзор языка + Java
+ + Системы + управления версиями. Git
+ Настройка + окружения
+ Насторойка + проекта. Debug
+

Занятие 2

+ Принципы + ООП
+ + Структура + памяти: куча, стек, регистры, константы +
+ Типы + данных. Пакеты
+ +

Занятие 3

+ Объектная + модель в Java
+ Сложность + алгоритмов
+ + Паттерн + проектирования Шаблонный метод +
+ +

Занятие 4

+ Работа со + строками
+ Исключения +
+ + Reflection. + Аннотации. Модульное тестирование +
+ +

Занятие 5

+ Контейнеры/коллекции +
+ +

Занятие 6

+ + Iterator + / Iterable. Вложенные, внутренние, локальные и анонимные классы +
+ Новое в Java + 8
+ +

Занятие 7

+ + Параметризация. + Стирание типов
+ Логирование +
+ Синглетон, + Enum
+ +

Занятие 8

+ Работа + с датами и временем
+ + Работа + с файлами и ресурсами
+ +

Занятие 9

+ Ввод/вывод +
+ + Сериализация +
+ NIO
+ Основы + Java 8 Stream API
+ +

Занятие 10

+ + Формат + XML. Работа с XML в Java
+ JSON
+ + DataInputStream + / DataOutputStream
+ +

Занятие 11

+ + Многопоточность. + Параллельное выполнение. +
+ Потоки. + Синхронизация
+ Ленивая + инициализация, JMM
+ +

Занятие 12

+ java.util.concurrent +
+ +

Занятие 13

+ + Базы + данных. Реляционные СУБД. PostgreSQL +
+ + Конфигурирование + данных в Java проекте
+ Подключение + DB в проект
+ +

Занятие 14

+ JOIN
+ Транзакции +
+ Установка/запуск + Tomcat
+ +

Занятие 15

+ HTML, + Tomcat
+ Сервлеты
+ +

Занятие 16

+ JSP
+ JSTL
+ +

Занятие 17

+ Деплой в + Heroku
+ Classloader +
+ Обзор + Java Enterprise
+ +
+ + + + +
+ + + + + \ No newline at end of file diff --git a/resources/view/books.html b/resources/view/books.html new file mode 100644 index 0000000..9d7463d --- /dev/null +++ b/resources/view/books.html @@ -0,0 +1,125 @@ + + + + + + + + + +
+
+
+
+

Рекомендуемые книги

+

по Java и разработке ПО

+
+
+ +
+
+
+

+ Видеообзор списка +

+
+ +
+ +
+ + + \ No newline at end of file diff --git a/resources/view/closeWindow.html b/resources/view/closeWindow.html new file mode 100644 index 0000000..648beb2 --- /dev/null +++ b/resources/view/closeWindow.html @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/resources/view/confirm.html b/resources/view/confirm.html new file mode 100644 index 0000000..4cc8643 --- /dev/null +++ b/resources/view/confirm.html @@ -0,0 +1,22 @@ + + + + + + + + + +
+
+

Проверьте свою почту.
Спасибо за интерес к проекту!

+ +
+
+ + + \ No newline at end of file diff --git a/resources/view/duplicate.html b/resources/view/duplicate.html new file mode 100644 index 0000000..b3ee5d3 --- /dev/null +++ b/resources/view/duplicate.html @@ -0,0 +1,23 @@ + + + + + + + + + +
+
+

Вы уже зарегистрированы!

+

Если это не так, свяжитесть пожалуйста со мной в скайпе, VK или по почте.

+ +
+
+ + + \ No newline at end of file diff --git a/resources/view/error.html b/resources/view/error.html new file mode 100644 index 0000000..02dffca --- /dev/null +++ b/resources/view/error.html @@ -0,0 +1,23 @@ + + + + + + + + + +
+
+

Ошибка отправки почты!

+

Пожалуйста свяжитесть со мной в скайпе, VK или по почте:

+ +
+
+ + + \ No newline at end of file diff --git a/resources/view/exception.html b/resources/view/exception.html new file mode 100644 index 0000000..994465b --- /dev/null +++ b/resources/view/exception.html @@ -0,0 +1,25 @@ + + + + + + + + + +
+
+
+

Ошибка приложения:

+ +

403

+

message

+
+
+ + + \ No newline at end of file diff --git a/resources/view/fragments.html b/resources/view/fragments.html new file mode 100644 index 0000000..45dd187 --- /dev/null +++ b/resources/view/fragments.html @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ Java Enterprise JavaEE проект стажировка обучение курсы online онлайн обучение e-lerning семинар вебинар + программирование + джава удаленное обучение корпоративное обучение JPA Maven Spring Hibernate REST webinar intership + Москва Санкт-Петербург Киев Kiev Минск Minsk Харьков Новосибирск Днепропетровск Одесса Уфа Владивосток + Краснодар Львов Запорожье Самара Нижний Новгород Николаев Гродно Казань Караганда Гомель Пермь + Рига Алматы Днепр Саратов Астана Екатеринбург Ростов-на-дону Херсон Воронеж Ижевск +
+
+ + + + + + + + + + + + + + + + + + Skype + + + + + + + + +

+
+ + +

+ Почта: admin@javaops.ru +

+

+ Группа vk: Java Enterprise Online Обучение
+

+

+ Добавляйтесь в skype: grigory.kislin и Григорий + Кислин +

+
+ +
+
+
+

+ +
+
+ +
+ +
+
+
+ \ No newline at end of file diff --git a/resources/view/index.html b/resources/view/index.html new file mode 100644 index 0000000..b658bfc --- /dev/null +++ b/resources/view/index.html @@ -0,0 +1,244 @@ + + + + + + + + + +
+
+

+  Разработка Web приложения "База данных резюме"

+
+ Разработка веб приложение с первого занятия. Объектная + модель, коллекции, система ввода-вывода, работа с файлами, сериализация, работа с XML, JSON, SQL, + персистентность в базу данных (PostgreSQL), сервлеты, JSP/JSTL, веб-контейнер Tomcat, HTML, + модульные тесты JUnit, java.util.Logging, система контроля версий Git
+
Подробнее...
+
Открытое первое занятие
+
+
+

 Стажировка + Java Enterprise

+
+ Разработка Spring/JPA Enterprise приложения c авторизацией и правами доступа на + основе ролей с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, + Security, JPA(Hibernate), REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 + Stream and Time API и сохранением в базах данных Postgresql и HSQLDB. +
+
Подробнее...
+
Бесплатное вводное занятие
+
+
+

 Многомодульный + maven. Многопоточность. XML. Веб + сервисы. Удаленное взаимодействие

+
+ Разработка полнофункционального многомодульного Maven проекта, + состоящего из 3-х веб приложений
+
Подробнее...
+
Открытое первое занятие: Многопоточность
+
+
+
+
+

Помощь с трудоустройством.

+
Наши истории
+

+ В группе Slack выпускников происходит активное общение на все темы IT, + обсуждение + вступительных заданий, + вакансии, цены на рынке труда, события, помощь, интересные видео и пр. + Обновления нашей базы выпускников смотрят уже ~100 партнеров по трудоустройству (компании и индивидуальные + рекрутеры). +

+
+
+

Последовательная возрастание сложности

+

+ Сложность проекта возрастает постепенно, с кода "Hello!" в main() до финальной + версии в Heroku. + Слон съедается по кусочкам. +

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

Общение, поддержка группы и преподавателя

+

+ По любым вопросам: git, трудоустройство, зарплаты программиста, java консультации, архитектура, + новости IT и пр. +

+
+
+

Доступность материалов

+

+ Все видео доступно для просмотра онлайн и скачивания (в случае вебинаров - сразу после занятия). + Записи разбиты по темам и тщательно отредактированы. Большое количество подобранных ресурсов + для углубления в детали. +

+
+
+

Ревью Вашего кода

+

+ Вы увидите именно свои ошибки в стиле, структурах данных, алгоритмах, кодировании.
+ Опыт равноценен нескольким годам работы Java разработчиком. +

+
+
+
+
+
+

Совместная разработка

+

+ Участники на протяжении всего курса работают с кодом проекта. Выполнение домашних заданий + закрепляет полученные знания. В результате проект становится "Вашим". +

+
+
+

Оптимальное подобранное время

+

+ Занятия проходят раз в неделю, время необходимое для проработки пройденных тем и выполнения домашнего + задания. +

+
+
+
+

+  Интервью в skype (голосом) на позицию Java разработчик.

+
+ +
    +
  • cамые распространенные вопросы на собеседованиях
  • +
  • упор не на заучивание ответов, а на понимание основ
  • +
  • советы как лучше ответить или оформить свою мысль
  • +
  • выявление слабых мест и пробелов
  • +
  • объяснение непонятных мест, указание ресурсов для проработки
  • +
  • позитивный, доброжелательный настрой и уверенность
  • +
  • оценка реального уровня знаний
  • +
+
+ Подробнее... +
+
+
+

После стажировки Java Enterprise в опыте работы твоего резюме будет + раздел:

+

Участие в разработке Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей на + стеке: Maven, Spring MVC, Spring Security, REST (Jackson), Java 8 Stream API: +

+
    +
  • реализация сохранения в базы Postgres и HSQLDB на основе Spring JBDC, JPA(Hibernate) и + Spring-Data-JPA +
  • +
  • реализация и JUnit тестирование REST и AJAX контроллеров
  • +
  • реализация клиента на Bootstrap (css/js), datatables, jQuery + plugins.
  • +
  • твоя доработка проекта
  • +
+

Отзывы по стажировке

+ Добавляйтесь в grigory.kislin + +
+ +
+ + + + + + + + + + + Skype + + + + + + \ No newline at end of file diff --git a/resources/view/masterjava.html b/resources/view/masterjava.html new file mode 100644 index 0000000..06c4e1b --- /dev/null +++ b/resources/view/masterjava.html @@ -0,0 +1,89 @@ + + + + + + + + + +
+

Многомодульный maven. Многопоточность. XML (JAXB/StAX).
+ Веб сервисы (JAX-RS/SOAP). Удаленное взаимодействие (JMS/AKKA).

+

+ Разработка полнофункционального многомодульного Maven проекта,
состоящего из 3-х веб приложений: +

+
+ Структура проекта +
+
    +
  • приложение импорта из XML (JAXB, StAX, XPath, XSLT)
  • +
  • многопоточного почтового веб-сервиса
    + (JavaMail, java.util.concurrent, JAX-WS, MTOM, хендлеры авторизации, логирования и статистики) +
  • +
  • веб приложения отправки почты с вложениями + +
  • +
  • сохранение данных в PostgreSQL используя jDBI
  • +
  • servlet 3.0: аннотации, multipart config, асинхронность
  • +
  • миграция базы LiquiBase
  • +
  • использование в проекте Guava, + Thymleaf, + Lombook, + StreamEx, + Typesafe Config, + Java Microbenchmark JMH +
  • +
+
+

Участие в проекте в индивидуальном порядке (старт в любое время) по готовым материалам и патчам с + поддержкой в группе Slack.

+

Для всех участников осенью планируется стажировка (занятия раз в неделю) с обновлением проекта.

+

+ Каждая итерация проекта закрепляется домашним заданием по реализации схожей функциональности + (+дополнительное Optional). + Каждое занятие начинается с разбора домашних заданий.
+ Требование к участникам: опыт программирования на Java (оптимально стажиовка Topjava). + Базовые знания Maven. +

+
+ +
+ +
    +
  • Стоимость участия без проверки домашних заданий: 8600 руб./ 155$ (участникам стажировки + TopJava: 7900 руб./ 143$)
    + сюда входят все материалы, участие в группе slack (общение разбито по каналам), ответы на вопросы + и + помощь с проектом. +

  • +
  • Стоимость полного пакета: 16300 руб./296$ (после TopJava: 14900 руб./270$ )
    + добавляется проверка домашних заданий

  • +
  • Для всех: бесплатное участие в следующий выпусках проекта.

  • +
  • Специальная цена на одновременную оплату 2-х проектов (TopJava + + MasterJava): -15% от стоимости.

    +
  • +
  • Способы оплаты
  • +
  • Добавляйтесь в skype: grigory.kislin

  • +
+
+

Программа проекта

+

История изменений проекта +

+ +
+ + + diff --git a/resources/view/message.html b/resources/view/message.html new file mode 100644 index 0000000..1e3f941 --- /dev/null +++ b/resources/view/message.html @@ -0,0 +1,21 @@ + + + + + + + + + +
+
+

Сообщение

+
+
+ + + \ No newline at end of file diff --git a/resources/view/noRegisteredPartner.html b/resources/view/noRegisteredPartner.html new file mode 100644 index 0000000..c13880c --- /dev/null +++ b/resources/view/noRegisteredPartner.html @@ -0,0 +1,31 @@ + + + + + + + + + +
+
+ +

Здравствуйте! Ваш почта + email не зарегистрирована для запросов

+

Для бесплатного доступа к данным соискателей,
+ напишите мне на почту admin@javaops.ru или в скайп: + grigory.kislin +

+
+
+ + + Skype + + + \ No newline at end of file diff --git a/resources/view/payment.html b/resources/view/payment.html new file mode 100644 index 0000000..8e85f7d --- /dev/null +++ b/resources/view/payment.html @@ -0,0 +1,68 @@ + + + + + + + + + +
+
+

Реквизиты оплаты

+ +
+

Курс рубля

+
+

+ Обязательно подтвердите оплату в skype grigory.kislin или почту admin@javaops.ru (проект, куда платеж и email)
+ После оплаты сразу выдаю доступ ко всем материалам проекта, включаю в группу Slack (разные каналы для уроков и общения) и выдаю ключ Ultimate IntelliJ IDEA на 6 месяцев. +

+
+
+ + + \ No newline at end of file diff --git a/resources/view/profile.html b/resources/view/profile.html new file mode 100644 index 0000000..607cbbd --- /dev/null +++ b/resources/view/profile.html @@ -0,0 +1,180 @@ + + + + + + + + + + + + +
+
+
+
+

Full Name +

+

admin@javaops.ru +

+

admin@gmail.com

+

grigory.kislin

+

Санкт-Петербург +

+

JavaOPs +

+

+ Resume +

+

+ GitHub account +

+
+ + Редактировать + Регистрация на проект + project + +
+
+
+ aboutMe +
+
+
+
+

Бонусы: + 15 +

+ +
+
+
Твой + единоразовый купон на IntelliJ IDEA: ideaCoupon
+ Получить + единоразовый 6-месячный купон на Ultimate IntelliJ IDEA + +
+
+
+
+
+
+
+ + + + + + + + + + Принять участие в проекте project + + +
+ + + + + +
+
+
+
+
+
+
+ +
+

База кандидатов на позицию Java разработчик от даты:   + + Смотреть +

+ +
+ +
+

Список участников, отсортированный по городам

+ (доступен при согласии на размещением своих данных в закрытой статистике группы) +
+
+
+ + + + + + + + + + + Skype + + + + + + + + \ No newline at end of file diff --git a/resources/view/profileChoice.html b/resources/view/profileChoice.html new file mode 100644 index 0000000..5faff95 --- /dev/null +++ b/resources/view/profileChoice.html @@ -0,0 +1,48 @@ + + + + + + + + + +
+
+
+

Профиль с почтой email не найден

+
+
+
+
+
+
+ + +
+
+ +
+
+
+ + + + + + + + + + +Skype + + \ No newline at end of file diff --git a/resources/view/profileER.html b/resources/view/profileER.html new file mode 100644 index 0000000..a8fa631 --- /dev/null +++ b/resources/view/profileER.html @@ -0,0 +1,211 @@ + + + + + + + + + + + +
+
+
+

+ Редактирование профиля

+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ + + +
+
+ + + + \ No newline at end of file diff --git a/resources/redirectToUrl.html b/resources/view/redirectToUrl.html similarity index 67% rename from resources/redirectToUrl.html rename to resources/view/redirectToUrl.html index f3b2af8..4b041ac 100644 --- a/resources/redirectToUrl.html +++ b/resources/view/redirectToUrl.html @@ -2,6 +2,6 @@ \ No newline at end of file diff --git a/resources/view/registration.html b/resources/view/registration.html new file mode 100644 index 0000000..5e9fb56 --- /dev/null +++ b/resources/view/registration.html @@ -0,0 +1,31 @@ + + + + + + + + + +
+
+

Спасибо за регистрацию на проекте project!

+ +

+ На почту должно прийти приглашение в группу Slack. +

+ + +

+ Проверьте доступ к материалам по ссылке в письме. +

+
+
+
+ + + \ No newline at end of file diff --git a/resources/view/registration_idea.html b/resources/view/registration_idea.html new file mode 100644 index 0000000..6acc6f0 --- /dev/null +++ b/resources/view/registration_idea.html @@ -0,0 +1,29 @@ + + + + + + + + + +
+
+

Спасибо за регистрацию IntelliJ IDEA!

+ +

Проверь почту: должен прийти купон для бесплатной активации с подробной инструкцией

+
+

+ IntelliJ +

+
+
+ + + diff --git a/resources/view/saveProfile.html b/resources/view/saveProfile.html new file mode 100644 index 0000000..30cf8b1 --- /dev/null +++ b/resources/view/saveProfile.html @@ -0,0 +1,39 @@ + + + + + + + + + +
+
+

Спасибо, обновления записаны!

+ + +
+

А здесь уже есть твоя история?

+

Если еще нет: жду после испытательного срока. Поделись опытом и успехами, это важно!

+
+

+
+ Для получения предложений о вакансиях обязательно заполни поле Ссылка на резюме и Информацию + для HR так, что твое резюме захотят открыть! +

+ +
+

Список участников, отсортированный по городам

+ (доступен при согласии на размещением своих данных в закрытой статистике группы) +
+

+ Профиль +
+
+ + + diff --git a/resources/view/sqlResult.html b/resources/view/sqlResult.html new file mode 100644 index 0000000..761dbf1 --- /dev/null +++ b/resources/view/sqlResult.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
+ +
+
+ + + + + + + + + + + + + + diff --git a/resources/view/statsForbidden.html b/resources/view/statsForbidden.html new file mode 100644 index 0000000..c91e4ba --- /dev/null +++ b/resources/view/statsForbidden.html @@ -0,0 +1,25 @@ + + + + + + + + + +
+
+

Вы можете смотреть список
+ при согласии на размещением своих данных в закрытой статистике группы

+ (последний пункт в редактировании профиля) +

+ Редактировать профиль +
+
+ + + \ No newline at end of file diff --git a/resources/view/story.html b/resources/view/story.html new file mode 100644 index 0000000..6aa252a --- /dev/null +++ b/resources/view/story.html @@ -0,0 +1,57 @@ + + + + + + + + + +
+
+

Наши истории

+
+

Из биологов в программисты за год

+

Александр Королев, 17/02/2017

+ +

Путь к Java Developer.

+

Иван, 05/02/2017

+ +

История трудоустройства.

+

Тимур Муратов, 07/01/2017

+ +

ИТ-область – это эскалатор, движущийся вниз. Если вы хотите развиваться, то + нужно + постоянно двигаться вверх.

+

Королёв Дмитрий, 13/04/2016

+ +

Как я стал Java-разработчиком.

+

Максим, 28/03/2016

+ +

Главное - верить в свои силы.

+

Лев Хачересьянц, 16/03/2016

+ +

Жизнь — как вождение велосипеда. Чтобы сохранить равновесие, ты должен + двигаться.

+

Кислин Григорий, 16/03/2016

+ +

История успеха длиной в год

+

AlexandrRS, 09/03/2016

+ +

Разработка ПО – это тяжелый, но благодарный труд

+

Григорий Н., 08/03/2016

+ +

Каждое утро я просыпался с мыслью: "Как мне написать приложение?"

+

Иван Виноградов, 04/03/2016

+
+ Ждем истории по окончанию испытательных сроков: Тимур, Андрей, Дмитрий, Евгений, Алексей, Азер, ... +
+ +
+ + + \ No newline at end of file diff --git a/resources/view/story/story1.html b/resources/view/story/story1.html new file mode 100644 index 0000000..f44e84b --- /dev/null +++ b/resources/view/story/story1.html @@ -0,0 +1,81 @@ + + + + + + + + +
+ +

+ В данный момент я работаю в западной корпорации на должности ИТ-администратора: системы коммуникаций на базе + Asterisk (офисная телефония, центры обработки вызовов итд), также занимаюсь системами виртуализации и базами + данных. + В современная телефонии происходит активная интеграция с CRM-системами. В какой-то момент мне стало очевидно, + что для предоставления полнофункциональных решений связи просто необходимо освоить программирование. + Это было около года назад, в качестве глобальной задачи я решил написать приложение по автообзвону клиентов с + веб-интерфейсом и интеграцией с любимым Asterisk. +

+

Как изучать, что изучать и где?

+

+ Такие вопросы стали передо мной. Первой попыткой был php, прошел несколько курсов, но к написанию реального + приложения меня это не приблизило. Возникало скорее больше вопросов, ответы на которые не удавалось найти. + От отчаяния я решил перейти на другой язык. Это был java. Базовые вещи java core учил по трем фронтам: JavaRush, Кадемика и лекции Ивана Головача. + Процесс изучения пошел и мне все нравилось, но временами впадал в полное уныние и прокрастинацию, так как сухая + теория и отрешенные от реалий задачки JavaRush не придавали мотивации и не приближали к конечной цели - написать + приложение для автообвзона (всегда лезли вопросы типа - ну как написание алгоритма сортировки мне вообще + понадобиться для веб-приложения итд). + Несколько раз делал перерыв на неделю и даже две. Думал даже вообще бросить все. Каждое утро я просыпался с мыслью: + "Как мне написать приложение?". + Уже была изучена библиотека для работы с Asterisk, но как связать базу, веб, астериск и полностью развернуть свое + приложения у меня не было представления.

+

Перехват мастерства

+

+ Как-то раз в один из мрачных вечеров я нашел на javarush описание курса topjava и сразу понял, + что это то, что я ищу. + В нейролингвистическом программировании есть такое понятие, как моделирование мастерства - или перехват мастерства. + В основе этого понятия лежит идея, что если кто-то, что-то делает хорошо - то этому можно достаточно быстро + научиться, для этого достаточно понять некоторую общую схему. + Действительно в течении многих лет мастера брали на обучение подмастерьев, которые перенимали профессионализм + просто наблюдая за работой. + Очень похожим способом обучает + программированию Григорий. В том же НЛП предполагается, что для освоения чего-либо необходимо пройти хотя бы 3 раза. + В нашем случае 1 раз - мы смотрим, как пишет программу Григорий, второй раз - выполняем домашнее задание, которое по + структуре очень похоже на тот код, который Григорий создал. Для меня третьим разом было написание кода в своем + приложении. + Обучение программированию, можно сравнить с обучением вождением автомобиля и от инструктора очень многое зависит. + Приведу пример, когда инструктор не подталкивает человека к достижению результата, а уводит от него - на уроках в + кадемике Олег Ющенко мог позволить себе прямо во время вебинара "поржать" с кода одного из участников, что отдаляло + участников от конечной цели - научиться хорошо программировать. В отличие от предыдущего "учителя" Григорий всегда + помогал решить трудные задачи, которые от урока к уроку возникали в процессе написания приложения "Расчет каллорий". + Мне кажется, что для эффективного изучения очень важно, чтобы чувствовалась поддержка преподавателя. У Григория это + очень хорошо получалось - всегда оперативно оказывал помощь в сложных моментах работы с фреймворками и фронтендом. +

+

Что в итоге?

+

+ Приложение автообзвон готово и уже эффективно работает в тестовом режиме в одном небольшом контакт-центре. + Ради спортивного интереса я сходил на несколько собеседований, в 2 из 3 прошел на должность джуниора. Сейчас менять + место работы не планирую: в моей компании меня сейчас пригласили принять участие в новом проекте на основе + java+extJS, что открывает новые карьерные горизонты. + Конечно еще много неуверенности и нужно улучшать навыки программирования. С нетерпением жду курса по Григория masterjava. +

+
+ Иван Виноградов, 04/03/2016 +
+

К списку историй

+ +
+ + + + \ No newline at end of file diff --git a/resources/view/story/story10.html b/resources/view/story/story10.html new file mode 100644 index 0000000..61cf071 --- /dev/null +++ b/resources/view/story/story10.html @@ -0,0 +1,52 @@ + + + + + + + + +
+

Из биологов в программисты за год

+ + +

+ По образованию я генетик, учился в аспирантуре в Праге, занимался наукой в одном из институтов Чешской академии + наук. И все бы хорошо, но капать эксперименты становилось все менее интересно, пока не превратилось в ужасно + неприятную и скучную необходимость. В то же время всегда интересовали компьютерные технологии, поэтому в один + прекрасный день я спросил у подруги-программиста с какого языка лучше начинать изучать программирование. Она + посоветовала джаву и ресурс джавараш. Таким образом, в мае 2015 года я купил подписку и стал заниматься. +

+

+ Давалось не очень легко, несколько раз делал перерывы по месяцу и более, так как трудно было совмещать с + основной работой. Помогало осознание факта, что программировать мне нравится, значит это мое, не стоит + останавливаться, не дойдя до финиша. В конце концов, к маю 2016 года я дошел до 34-го уровня джавараш, вернулся + в Россию и начал рассылать резюме. Однако мне не отвечали, так как не было практического опыта разработки. Я + понял, что необходимо пройти стажировку. Как раз в мае начинался набор на очередной проект топджава, я заплатил + за стажировку и получил тестовое задание. +

+

+ На тот момент о спринг и хайбернейт только слышал, поэтому тестовое задание JavaRush показалось достаточно + сложным. Но таки успел сдать вовремя и прошел. Занятия Topjava с самого начала были весьма содержательные, буквально за + месяц-полтора познакомился со спринг, хайбернейт, мавен, базами данных. Указал проект в своем резюме, и чудо – начали + приходить приглашения на собеседования. Первое я запорол, было много вопросов в тесте на спринг, которых еще не + знал. Второе собеседование было по телефону, около часа общались на разные темы от java core до основ spring и + SQL. В итоге через 2 недели я получил предложение о работе с зарплатой 60000 рублей в Санкт-Петербурге. И это + еще до окончания проекта! Моей радости не было предела, наконец-то я нашел работу мечты. Проработав полгода в + компании, я получил оффер из другой с более высокой зарплатой, с марта начинаю там работу. Очень благодарен + проекту топджава за полученные знания и реальный опыт на проекте, благодаря чему быстро смог найти хорошую + работу java программистом. +

+
+ Александр Королев, 17/02/2017 +
+

К списку историй

+ +
+ + + \ No newline at end of file diff --git a/resources/view/story/story2.html b/resources/view/story/story2.html new file mode 100644 index 0000000..5483fb1 --- /dev/null +++ b/resources/view/story/story2.html @@ -0,0 +1,102 @@ + + + + + + + + +
+ +

Всем привет!

+

+ Меня зовут Григорий, и я + джавист. +

+

Желание стать разработчиком ПО появилось у меня довольно давно, в 2013 году.

+ Тогда я занимался не связанными с + программированием вещами, и вообще слабо себе представлял, чем я буду заниматься в дальнейшем. + Я думал, что программирование – это только C++, и разработка сверхэффективных алгоритмов. Как же я ошибался ☺. + Еще я думал, что разработка ПО – это интеллектуальный труд, в котором узнаешь новое и все время учишься. Вот эти + ожидания оправдались ☺. На тот момент не было человека, который мог бы подсказать, в какую сторону начать + копать, и я не нашел ничего лучше, чем поступить в довольно известный технический вуз на вечернее отделение ☺. + Там я проводил все свое свободное время в ближайшие полтора года, изучая мат. анализ, физику, ТОЭ и прочие + бесконечно далекие от промышленного программирования вещи. Из проганья там были матановые лабы по фортрану и + несколько простейших программ на Си. +

Время шло, а я так и не приближался к своей цели, стать разработчиком.

+ Пробовал заниматься на javarush, но на + тот момент осмысленности от занятий там не приобрел. Я решил решил ускорить свое становление разработчиком и + оставил вуз, пойдя на онлайновые курсы по джаве и алгоритмам – getjavajob. На тот момент те курсы просто + взорвали мне мозг, за ~5 недель что я там проучился спать приходилось очень немного, я постоянно писал код, + облеплял его самописными тестами и делал максимум, чтобы уложиться в дедлайны) Собственно это мне не удавалось + на тот момент, т.к. мой уровень был очень невысок, что вызвало у меня когнитивный диссонанс, в вузе нас убеждали + что мы очень умные ребята и все можем ☺. + Поняв, что не тяну, я забил ☺ . Где-то около месяца не притрагивался к проганью, и вообще серьезно стал + задумываться, а мое ли это вообще? Как известно, отсутствие выбора крайне упрощает выбор, а для меня критерии, + по которым я выбрал для себя это направление, были сформулированы предельно четко и ясно, и я не видел и не вижу + для себя другой профессии, кроме этой. Я взял волю в кулак и продолжил заниматься. Протёр от пыли свою подписку + в javarush и нарешал там около 900 задач, прорешал половину учебника Лафоре по алгоритмам на JAVA, посмотрел + лекции Ивана Головача (Golovach core December 2013). +

Оффер

+ Много общался с теми, кто также обучается кодингу на джаве, запиливал совместный проект с отличными ребятами из + фэйсбука ☺, отвечал на вопросы в тематических группах в соц-сетях (отличная мотивация повышать свой уровень). + Улучшил знания гита, алгоритмов, изучил SQL на некотором уровне. Разобрался в множестве фич IntelliJ IDEA. Еще + записался на тренинг BaseJava на javawebinar.ru, где + также отлично расширил свой кодерский кругозор и + познакомился с замечательными людьми). Параллельно я начал рассылать свое резюме в множество контор, откликов + некоторые время вообще не было). То ли отсутствие релевантного опыта/законченного образования смущало кадровиков, + то ли количество бестолковых соискателей без опыта работы зашкаливает. Думаю, и то и другое ☺. Со временем + меня + начали звать на собеседования, и вдруг позвали из довольно известной конторы, о которой я слышал и раньше. Я как + следует подготовился и прошел собеседование, по результатам получил оффер. +

Итоги

+ Я уже давно прошел испытательный + срок, выкладываюсь и выдаю отличный результат) В данный момент я прохожу тренинг TopJava, чтобы знания + не + ограничивались тем, с чем сталкиваюсь в работе. Отличный набор технологий поможет новичку устроиться на работу, + а не-новичку – оставаться в теме, и освежить взгляд на привычные вещи. Очень благодарен всем, с кем общался(и + общаюсь) на темы кодинга и у кого перенимал опыт. По сути тренинги дали мне самое главное – обратную связь, и + круг общения, в котором дела быстро пошли в гору.

+
    Если подытожить, то выводы следующие: +
  • Разработка ПО – это тяжелый труд. Манны небесной тут нет и не предвидится ☺
  • +
  • Разработка ПО – это благодарный труд. Такая работа даст почувствовать, что думать действительно полезно, и + это хорошо оплачивается ☺ +
  • +
  • Общение – это все. Начиная со стадии входа в профессию, заканчивая продвижением по карьерной лестнице. + Всегда можно найти единомышленников, тех кто поможет, подскажет, поддержит, замотивирует, если навык общения + имеется, и испортить отношения на ровном месте, если такового нет. Некоторые думают, что программист должен + общаться только с компьютером – в реальности это не так. Узнавая новые вещи и становясь «прошаренным» в той + или иной области и помогая другим – тоже многому учишься. Общение – это мощнейший инструмент в достижении + любых результатов. Поэтому тренинги – это замечательная практика, и даже учеба в вузе – вполне себе + интересный опыт) +
  • +
  • Core Java, SQL, алгоритмы, git – это то, что нужно обязательно знать, чтобы устроиться на работу)
  • +
  • Практика важна. 15-30 тысяч строк кода – это то, что нужно для становления себя джуном ☺
  • +
  • Обратная связь также очень важна. Нужен кто-то, чтобы бил по рукам в случае, если вы пишете откровенную + дичь. Иначе способы, которыми вы решаете задачи будут далеки от идеала +
  • +
  • Быстро стать разработчиком не получится. Мне потребовалось потратить около 800 часов на занятия джавой и + связанные активности, чтобы получить свою первую работу. +
  • +
  • У вас все получится. Возможно не с первого раза и не со второго, но если есть у вас есть страстное желание + преуспеть и сила воли продолжать двигаться в том же направлении, то желаемая работа и зарплата не заставят + себя долго ждать ☺ +
  • +
+
+ Григорий Н., 08/03/2016
+ skype: n.grinder_evilfrag +
+

К списку историй

+ +
+ + + + \ No newline at end of file diff --git a/resources/view/story/story3.html b/resources/view/story/story3.html new file mode 100644 index 0000000..0bc55a1 --- /dev/null +++ b/resources/view/story/story3.html @@ -0,0 +1,91 @@ + + + + + + + + +
+

Закончился испытательный срок и пришло время рассказать “как я стал программистом”.

+

История успеха длиной в год

+

+ В ноябре 2014 года я прекратил свою полуторадесятилетнюю деятельность никак не связанную с IT и начал искать + себя. В наличии были умение и интерес работать с данными. К этому моменту, уже несколько лет я делал бесплатно и + за деньги, небольшие, несложные сайты собранные на СMS Modx и это было скорее хобби. При этом, не угасало + желание писать код, которое появилось еще в школе, но не реализовавшееся в силу многих причин. К наступающему + Новому Году я точно определился, что хочу работать программистом и оставалось дело за малым: выбрать язык. Я уже + видел до этого такие языки как Java и C++, а в далекие 90е писал на Pascal'е и Basic'е. В итоге, взглянув на + круг интересуемых задач, конечный выбор пал на Java. И пошел процесс обучения… +

+

Первый заход

+

Основы программирования были понятны, синтаксис простых программ тоже был давно изучен - за спиной была пара + простейших Android приложений, собранных по урокам и несколько классов Java, которые решали мои бытовые вопросы + (один из них пересчитывал параметры покрышек для разных размеров дисков).

+

В первую очередь была подобрана книга и пошел процесс обучения... Через 3 недели у меня не стало сил вообще + читать про программирование - это было уныло и скучно. Я слишком переоценил свои таланты и усердие. Еще около + месяца я пытался читать мануалы Oracle, что тоже никак не внушало оптимизма. К концу февраля я начал понимать, + что мне нужен компьютер... (:

+ Т.к. я уже несколько месяцев не работал, выбор пал на старый лэптоп претендующий на звание ультрабука, имеющий на + своем борту SSD, i5 первого поколения и 3Gb оперативки. К началу марта у меня все было готово к обучению и я + встретил сайт JavaRush... Сейчас мне кажется, что это было 7 + марта. С этого момента меня нельзя было оторвать от компьютера. Первые очень простые задачи, Intellij Idea, большие + задачи, внешние библиотеки и… ...30й уровень. К нему я подошел к началу августа. За спиной были сотни часов кодинга + и много тысяч строк кода. Подошел этап реального проекта, который входил в стоимость пакета приобретенного на JR. К + этому моменту я уже объективно понимал требования к программисту Java и иллюзий не питал. +

Проект

+ Тестовое задание сразу обозначило мой уровень программирования на уровень чуть выше нуля и я с нетерпением ожидал + первых лекций и заданий. Не стану углубляться в стек технологий и описание курса - все именно то, что сейчас требуют + от соискателей и правдивый обзор самого курса предлагает сам автор. Коснусь тех вещей, которые не все, как мне + кажется, видят. Григорий Кислин - человек, который собрал свой многолетний опыт в несколько часов видео и несколько + десятков коммитов, но какой ошеломительный результат это дает тем, кто готов это понять! Это ценнейший набор знаний, + который превращает Java в Enterprise инструмент. Уже больше 3х месяцев прошло с окончания курса, а я до сих пор + осознаю что именно показывал этот, и вправду, мастер. Самое главное, что Вы получите от TopJava - это заряд интереса + и умение учиться новым технологиям в программировании. Проект, который Вы получите по итогу - это уж и не самое + главное, но очень даже полезное. Если ты не знаешь технологий и хочешь их знать - тебе на TopJava. + +

Дополнительные знания

+ Не могу не дополнить представление о моем обучении. Помимо того, что я сидел от 8 до 15 часов в день за компьютером + и решал задачи, я глядел вокруг и вот перечень того, что надо хотя бы потрогать: mysql, postgresql, mongo, js, html, + css, linux (debian, mint, ubuntu - выбирай любой), spring boot, freemarker. И, конечно же, за базу надо + принимать Java Core и все технологии проекта. В интернете огромный список вопросов для подготовки к собеседованиям + (собираю ссылки в разделе + Интервью, прим. Григорий Кислин). Очень частые темы: коллекции, исключения, многототочность. Учите английский + язык - начните прямо сейчас. Например попробуйте читать документацию. В хорошей компании, где пишут на Java - + иностранные заказчики. Возможно вам придется с ними общаться - я был на общем митинге через полтора месяца. В + международных компаниях в багтрекерах вся информация тоже на английском языке. Читайте книги. На любом языке, но + лучше в оригинале. +

Собеседования

+ Для меня самый познавательный этап. Тут я узнал что конкретно хотят получить от соискателя, подтянул знания в + соответствии с требованиями. Старался попадать на собеседования Middle разработчиков и избегал Junior, но и они + случались. На Senior не был ни разу. Первое, что обозначилось в мозгу: независимо от позиции на которую ты + претендуешь, вопросы на собеседованиях разных уровней одинаковые и отличаются лишь глубиной. Коллекциями + интересуются везде (порекомендую Структуры + данных в картинках, прим. Григорий Кислин). Иногда задают каверзные вопросы. В этапе хождения по собеседованиям + надо отдавать себе отчет в том, что их должно пройти немало, прежде чем ты найдешь ту работу, которая устроит тебя и + где устроишь ты. Все собеседования до этого ключевого - твой путь, который надо пройти, пережить разочарования, + сделать выводы и пойти дальше. На этом этапе важно не забывать об этом ни на минуту. +

Сейчас

+ На данный момент закончился третий, заключительный месяц испытательного срока в крупной компании-аутсорсере и я + много раз вспомнил добрым словом проект TopJava и JavaRush. У меня нет градации, но, как мне кажется, у меня уровень + Middle. Вопросов я не задаю - сказывается опыт участия в реальном проекте, задачи получаю большие и решение о + реализации принимаю сам. За время работы применил все знания технологий изученных ранее и еще больше для меня новых. + Мой испытательный срок закончился ровно через год, день в день, с началом обучения на JavaRush. За 3 месяца + коммерческого прадакшна, конечно же, пришло очень много нового опыта и новых знаний и все, что было до этого, + кажется уже вовсе не сложным, но от этого нисколько не менее важным. + +
+ AlexandrRS, 09/03/2016 +
+

К списку историй

+ +
+ + + + \ No newline at end of file diff --git a/resources/view/story/story4.html b/resources/view/story/story4.html new file mode 100644 index 0000000..ac36b19 --- /dev/null +++ b/resources/view/story/story4.html @@ -0,0 +1,137 @@ + + + + + + + + +
+ +

Начало

+ Программировать я начал в школе на Электронике + МК-61, целых 105 иструкций. В журналах "Наука и жизнь", "Техника Молодежи" были программки игр, умещающиеся в + 96 инструкций БЗ-34, например, посадка на Луну. + В ИТМО на 2-м курсе повезло работать в студенческом научном обществе: перфокарты, Fortran-4, EC-1045. А в конце 80х - начале 90х случилось чудо: + на кафедре появилось две IBM XT: 20M HDD, 640K + ОЗУ, голубой Norton Commander, MS-DOS, четырехцветная графика 320*480, + очереди за книгой Фигурнова IBM PC для + пользователя. Все изучали сами: FORTRAN-77, C, позже ООП и Borland C++ 3.0. +

+

    +
  • используйте любую возможность для практики, чем раньше, тем лучше;
  • +
  • обязательно самообразование
  • +
+

+
+

Встреча с Java

+ Возвратиться в программирование в 2005 году после 8 лет работы в Alcatel инженером по тестированию телефонной + станции было нелегко: взяли в Siemens на java как специалиста по предметной обасти. Причем, пока ждал ответа от + Siemens, пришлось отказаться от перехода внутри Alcatel на вакансию программиста C++. + По java за спиной был только прочитанный курс intuit: + программирование на Java. + До сих пор в своем курсе Практика Java. Разработка Web приложения + много тем беру оттуда. Взяли меня на уровне с другими 5-ю разработчиками, совсем не новичками. Догонять пришлось + много, + первые 2 года читал запоем все, что попадалось по java, паттернам и разработке. +

+

    +
  • знание предметной области - плюс;
  • +
  • не бойтесь рисковать.
  • +
+

+ +
+

Жизнь — как вождение велосипеда. Чтобы сохранить равновесие, ты должен двигаться.

+ Альберт Эйнштейн +
+
+

Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум + вдвое быстрее!

+ Льюиса Кэрролл "Алиса в Зазеркалье" +
+ Ушел из Siemens после 2 с небольшим лет, как только перерос их велосипеды (незадолго до меня они перешли с + собственной RDBMS на Oracle, сборка была через make, в проекте не было ни одной сторонней библиотеки) и понял, + как это нужно делать. + Как раз в Россию пришла программа бонусов за инновации - заработал на ней 2 поощрительных рюкзака, вместо 3-го + наградили поездкой в Вену, где + была презентация "новых" подходов - самописный язык типа Fortran и самописное IDE на Swing. И это в 2007 году! + Коллектив был классный, полгода провел с ними в Польше, принимая проект, многому у них научился. Конечно уходить + было нелегко, но это означало остановку в развитии, которая была мне важнее всего. + Далее попал в отличную для новичка среду профессиональной разработки: JBoss, Hibernate, ревью кода, высокие темпы + (особенно по сравению с релаксом Siemens), профессиональные архитекторы и тимлиды. + Оттуда ушел по заманчивому предложению в Yota - стать синьором и самому проектировать. Далее по всем сменам места + работы у меня примерно получалось так: набираю опыт - применяю его на новом месте при разработке проекта с нуля. + Вообще частые переходы (меньше чем раз в 2 года) не очень приветствуются HR, кто-то делает карьеру и растет на одной + работе. В любой работе есть рутина, багфикс, не очень привлекательные задачи, а иногда и просто - отсутствие всякого + желания. Это проходит. + Не подавайтесь сиюминутным эмоциям, смена работы должно быть взвешенное, созревшее решение. Также был свидетелем, + когда + новички уходили на 2й -3й день, расцениваю это как сдачу перед первыми же трудностями. +

+

    +
  • работать должно быть интересно (если смотреть отстраненно, с перспективой);
  • +
  • если вам не нравятся кривые решения, прежде чем уйти, попробуйте пробить свои;
  • +
  • иногда есть возможность поменять проект (стек технологий) внутри одной компании;
  • +
  • если вы таки решились поменять работу - не дайте себя уговорить остаться;
  • +
  • наконец: уходить надо вовремя.
  • +
+

+

Тренер Java

+ Работы бывают разные: расслабление и застой, если сам не находишь себе достойных занятий (особенно в конторах, где + программирование непрофильное или новички в бизнесе) или впахивание с ежедневными стэндапами. + Для самообразования лучше первые, для получения насыщенного опыта - вторые. Работая расслаблено, задумался о + написании курса по Java. И вскоре после этого в "Мой Круг" пришло предложение попреподавать в СПб в платном учебном + центре. + В результате согласился и с октября 2013 г. провел несколько очных выпусков своего курса "Практика Java. Разработки + Web приложения" на котором разрабатывается база данных резюме и корпоративный вебинар "Веб-сервисы. SOA-based + архитектура". + Конечно тогда они были сырые, я только отрабатывал методику написания законченного приложения на протяжении всего + процесса обучения. Не было ни домашних заданий, ни git, ни JUnit, появившихся позже. + Паралельно разрабатывал проект Topjava, основанный на вступительном задании в Toptal. В преподавании хотелось + некоторой автономии - например приводить участников на курс с небольшой скидкой и получать за них комиссионные, + что шло вразрез с позицией руководства учебного центра и они без уведомления сняли меня с преподавания. Через + месяц после этого я случайно узнал, что они на несколько месяцев снизили цены втрое на вебинары моего курса c другим + преподавателем. + А я стал сам вести вебинары по разработке Web и скрести по всем сусекам для набора на первй выпуск Topjava: запустил + его в августе 2014, набралось целых 6 человек! +

Светлое настоящее

+ Сейчас идет 6-й выпуск проекта Topjava, в команде slack обучается + 115 человек. На сегодняшний день это мой самый востребованный проект и самые востребованные на рынке Java + фреймворки, + здесь можно почитать отзывы выпускников. + Но работа над проектом не останавливается: дорабатываются видео, рефакторится код. 25.03 запускаю очередной (7-й) + совмещенный с рассылкой вебинар-интенсив "Практика Java. Разработка Web + приложения" (2 раза в неделю). + В ближайших планах обновить вебинар Веб-сервисы. SOA-based + архитектура, дополнив его микросервисами. + Также разрабатываю проект Topjava-2: Spring Boot, H2, Thymleaf, AWS, nginx, + авторизация по OAuth2, асинхронность, Guava и пока еще не выбрал UI, + склоняюсь к Sencha GXT/GWT. + Конечно же, стараюсь содействовать трудоустройству + своих выпускников. +
+ Приглашаю к участию в проектах (интенсив "Разработка Web приложения" с 25.03 и + следующий набор Java Enterprise Topjava 26.05) и готов к любым вариантам + сотрудничества.
+
+ email: gkislin@yandex.ru
+ skype: grigory.kislin
+ тел: +7 (921) 855 0482
+ Григорий Кислин, 15/03/2016 +
+
+

К списку историй

+ +
+ + + \ No newline at end of file diff --git a/resources/view/story/story5.html b/resources/view/story/story5.html new file mode 100644 index 0000000..644b3cb --- /dev/null +++ b/resources/view/story/story5.html @@ -0,0 +1,74 @@ + + + + + + + + +
+ +

+ Добрый день. +

+

+ По просьбе коллеги, решил написать свою историю трудоустройства программистом. +

+

Обучение

+

+ До того как стать программистом, + я работал проектировщиком сетей связи. Но решил стать программистом, т.к. идея автоматизации разных процессов + мне показалось очень заманчивой. Сначала решил изучать C++, скачал пару задачников по С++. И увидел ссылку на + сервис JavaRush, на тот момент сервис содержал всего 15 уровней и не требовал денег за его использование. Я + прошел пару уровней и решил изучать Java, этот язык показался мне более читабельным и лаконичным. Когда я дошел + до 15 уровня, остальные еще разрабатывались, но я решил купить подписку в надежде, что это хоть как то поможет и + развитию сервиса. Я выполнял задания с Javarush, изучал HTML, CSS, Javascript и jQuery на codecademy. Позже, при + поиске разных + курсов, я наткнулся на школу разработки в Digital Design. Я подал заявку. +

+

Digital Design

+

+ Первую часть курса школы включала в себя изучение Java Core. Вторая часть предполагала - реальный проект (что-то + наподобие TopJava, но большую часть изучали сами, по примерам и туториалам). С Core проблем не было, но вот + переварить все, что включал "реальный проект" стало не просто. Стек технологий требовал много времени на + изучение jQuery и jQuery Plugins, Spring, Hibernate, Jetty, еще предстояло разобраться с svn и maven. + Предполагалась разработка приложения, позволяющего упростить управление проектами для менеджеров, учитывать + уровень загрузки членов команды на разных проектах и т.д. В итоге получился мало-функциональный макет. Но три + человека, включая меня, все-таки успешно закончили школу разработки. +

+

+ Следующим этапом стала стажировка. Там приходилось работать за еду в прямом смысле - оплачивали только обед. Я + начал делать свой собственный проект. Решил разработать каталог-партнёрку, на нем планировалось даже немного + подзаработать. Так я начал делать свой проект с таким же стеком, что и школе разработки. В это же время начал + ходить по собеседованиям. Кстати, одним из плюсов моего резюме оказался собственный проект, который + разворачивался на Amazon EC2. +

+

+ Проект я доделать не успел т.к. посетив 4-5 собеседований, я получил два предложения. Общее время, потраченное + на подготовку и трудоустройство, составляло 4-5 месяцев. Три из них я по 8 часов в день ходил на стажировку. +

+

TopJava

+

+ После полутора лет коммерческой разработки и использования фреймворков компании, решил обновить свои знания по + OpenSource технологиям. Проект TopJava для этого подошел идеально. Я узнал новые возможности Java 8, поработал + со основными модулями Srping'а , использовал Hibernate и eCache. Для UI использовал Bootstrap и jQuery plugins. + Вобщем прошел весь путь от создания скелета приложения и его реализации до его финального деплоя в heroku. + Думаю, этот проект - одна из причин, по которой я успешно сменю + работу. Но это тема для другой истории.:) +

+

+ Главное верить в свои силы:) . +

+
+ Лев Хачересьянц, 16/03/2016 +
+

К списку историй

+ +
+ + + \ No newline at end of file diff --git a/resources/view/story/story6.html b/resources/view/story/story6.html new file mode 100644 index 0000000..9447aa3 --- /dev/null +++ b/resources/view/story/story6.html @@ -0,0 +1,46 @@ + + + + + + + + +
+

Как я стал Java-разработчиком

+

+ После окончания технического университета в течение около десяти лет я работал разработчиком электронной + аппаратуры. Сначала разрабатывал схемы и печатные платы, писал программы для микроконтроллеров на Ассемблере и + Си. Потом на работе потребовалось создавать простейшие дескоптные приложения на С++ и С#, я стал изучать эти + языки и создавать такие приложения. Далее заинтересовался веб-приложениями, открыл для себя язык Java и начал + изучать его по книгам, статьям и видеозаписям из интернета. Изучая Java осознал, что технологий на базе этого + языка очень много и мне как новичку было непросто разобраться, что изучать сначала, а что потом, и я решил, что + без курсов мне не обойтись. +

+

+ Нашел в интернете очный курс для начинающих Java-разработчиков и записался на него. Преподавал на курсе Григорий + Кислин. Мне очень понравилось, как Григорий подает материал. На его курсе было очень много практики, мы + создавали и в итоге создали настоящее, актуальное веб-приложение. Каждый урок был записан на видео, которые я + потом пересматривал, а некоторые фрагменты не по одному разу. После окончания этого курса Григорий предложил + пройти обучение на еще одном его курсе TopJava и я, конечно, согласился. Этот курс Григорий проводил в похожем + формате и после его окончания было создано легко масштабируемое веб-приложение enterprise-уровня. +

+

+ Далее так сложилось, что на моей работе потребовалось создать подобное приложение. Благодаря этим курсам я + достаточно быстро справился с задачей. После этого разместил свое резюме на нескольких сайтах, и через некоторое + время мне предложили работу в крупной компании. Я успешно прошел собеседование и на данный момент работаю в этой + компании уже более полугода. +

+
+ Максим, 28/03/2016 +
+

К списку историй

+ +
+ + + \ No newline at end of file diff --git a/resources/view/story/story7.html b/resources/view/story/story7.html new file mode 100644 index 0000000..dc88b50 --- /dev/null +++ b/resources/view/story/story7.html @@ -0,0 +1,63 @@ + + + + + + + + +
+ +

Обучение

+

+ Обучение на престижной кафедре Технической Кибернетики в СПБГПУ дало хороший старт для развития в области + информационных технологий. +

+

Начало карьеры

+

+ Благодаря хорошему образованию и знанию иностранных языков, после окончания университета, смог устроиться в + известную международную компанию – Т-Системс (подразделение Deutsche Telekom’a). +

+

+ Первый проект был «околоджавный», если так можно сказать☺ : 50% было джава, в основом Core, 50% - Message Broker + от + IBM’a. Тем не менее, это дало отличную возможность углубить знания в синтаксисе языка, а также познакомиться с + применением джавы в других приложениях. +

+

+ Большой шаг вперёд произошёл, когда я смог попасть в java-school, организованную внутри компании. Она позволяет + за + короткий период (около 2х месяцев) в интенсивном режиме познакомиться с новыми технологиями и популярными + фреймворками, которые активно используются в повседневной работе. Результатом прохождения java-school стало + сдача + мною сертификата Oracle Certified Professional, Java SE 6 Programmer, а также рост по карьерной лестницы. +

+

Дополнительное развитие

+

+ Чтобы расти как профессионал нужно постоянное развитие, в т.ч. и самостоятельное. Помимо чтения специализированной + литературы, посещение конференций и просмотра обучающего видео, хорошей возможностью для роста и развития стал + вебинар от Григорий Кислина по популярным технологиям в мире Java: Java Enterprise (Topjava). Данный курс позволяет + в интерактивной режиме построить небольшое но полнофункциональное веб-приложение, где половину работы выполняет сам + участник вебинара. Таким образом полученные знания намного лучше усваиваются и могут быть применены в других + проектам самостоятельно. +

+

Настоящее и будущее

+

+ В настоящее время, я продолжаю работу в компании Т-Системс в проекте Swiss Federal Railways, в качестве Тим-лида одной из её подсистем. +

+

+ Хочется пожелать всем удачи, особенно начинающим разработчикам. На пути в ИТ-сфере, всегда много трудностей, но главное не сдаваться перед ними и идти вперёд и всё у вас получится! +

+
+ Дмитрий Королев, 13/04/2016 +
+

К списку историй

+ +
+ + + \ No newline at end of file diff --git a/resources/view/story/story8.html b/resources/view/story/story8.html new file mode 100644 index 0000000..9962e19 --- /dev/null +++ b/resources/view/story/story8.html @@ -0,0 +1,174 @@ + + + + + + + +
+Мне сейчас 30 лет и я работаю программистом уже четвертый месяц.Моя история о трудоустройстве:
+ +

Как я не стал программистом

+

+ Учась в школе, я хотел пойти учиться на программиста, но к концу 11-го класса у меня в аттeстате было + половина троек. Я хорошо разбирался и любил только математику и физику, остальные предметы меня раздражали. + Завуч мне тогда намекнула, что не надо мне лезть в программисты, а выбрать что-то попроще. Я плохо тогда + разбирался во всем, подал документы только на одну специальность (хотя можно было на несколько сразу), только + потом я узнал, что с моими 14 баллами из 15 максимальных (физика - 5, математика - 5, русский - 4), я мог бы + поступить на факультет, который готовил программистов. Но я поступил на специальность - ракетные двигатели. + Отучился 4 года и бросил учебу, хотя учился хорошо (на 4 и 5). +

+

Решение стать программистом

+

+ После этого где только я ни работал. Последнее место работы было в фотосалоне, я был что-то типа техподдержки + (ставил проги, обслуживал принтеры и много чего другого) и помимо этого обычным продавцом-фотографом, там же я + сделал 1-ый сайт для компании, тогда он был на joomla, потом был переведен на wordpress. Я понимал что это очень + далеко от программирования, но это напомнило о моей старой мечте. В 28 лет в феврале я твердо решил выучится и + стать программистом. Тогда я решил поступить заочно на факультет ИВТ(информатики и вычислительной техники), я + сходил в универ и узнал, что с моим дипломом о неполном высшем образовании, мне нужно будет сдать только + русский, и порог прохождения низкий, все таки для платников. Я стал копить деньги на учебу. Тут же я решил + выбрать язык программирования, который хотел бы выучить. Я выбрал Java, и ни капельки не пожалел. +

+

Самостоятельное обучение

+

+ Джаву я начал учить по сайту интуит, но это было настолько скучно, что бросил. Стал читать книгу "Философия + Джавы" Брюса Эккеля, книга отличная всем советую. Смотрел видео уроки на ютубе(советую кстати лекции у Головоча, + мне понравились), и не только по джава, но и по операционным системам, базам данным, линуксу и др. Когда было + лень что-то учить я слушал подкасты (Радио-Т, Разбор Полетов, DevZen), особенно люблю Разбор полетов, там одни + джависты. Притом я 80% того, что говорили в подкастах, вообще не понимал. Мне мир программистов казался чем-то + прекрасным и непонятным. Я хотел попасть в этот мир, и слушая такие подкасты я получал огромное удовольствие, + так как словно окунался в этот мир. Я пытался понять о чем они говорят, иногда заглядывая в википедию, а в + основном просто слушая (помню те незнакомые слова - Spring, JUnit, Casandra, интеграционные тесты и много + других). Сейчас я почти все понимаю, о чем беседуют в этих подкастах.
+ Как-то с начальством поделился, что собираюсь выучиться на программиста. На что начальница мне сказала, + тебе 28 лет, сейчас школьники в компах лучше разбираются, зачем туда лезть. В этот раз я проигнорировал совет + "знающего" человека.
+ Пришла середина лета, настало время для того, чтоб поступать в вуз. И тут оказалось поступить с одним экзаменом + можно только если у тебя нормальный диплом, а с моим о неполном высшем, мне нужно сдавать все 3 экзамена и я + это время уже упустил в этом году. Я плюнул на них и решил купить какой-нибудь курс, как раз тогда был конец + августа 2015, и на джавараш были скидки. Я взял курс с Реальным проектом (это была как раз стажировка от + Григория Кислина). Вообщем мне нужно было пройти минумум 30 уровней из 40 и потом стажировку на проекте. Кстати + за полгода в которые я самостоятельно изучал джаву, я продвинулся совсем немного. Я не знал что мне нужно + конкретно учить, да и надеялся поступить в вуз и идти по их программе. +

+

Обучение на онлайн курсах

+

+ До 30 уровня я дошел примерно за 4 месяца, при этом еще и ленился. Кроме джавараш я еще смотрел онлайн курс Головоча + (единственный видеокурс на ютубе, который я досмотрел до конца). Был январь 2016 года, как раз шел набор на + стажировку. Но нужно было сдать тестовый проект. У меня не хватало времени, и я решил - не буду торопиться, пойду на + стажировку в мае. Так же в январе я ушел с должности техподдержки в своей компании, и остался просто + продавцом-фотографом. Мне нужно было больше времени на учебу.
+ К маю я сделал тестовый проект, и был зачислен на стажировку. Я был безумно рад этому и с нетерпением ждал начала + учебы. Кстати замечу, в декабре-январе я еще покупал небольшой курс, где мы делали небольшое веб приложение. + Благодаря этому курсу, я и написал свое тестовое задание. Переход от простых задачек джавараш к реальным проектам, + это как с арифметики перейти к высшей математике. +

+

Стажировка Григория Кислина

+

+ Было тяжело. Саму джаву я знал хорошо, спасибо джавараш. Но работа с фреймворками, логирование, тестирование, мавен, + томкат. Это было нечто запредельным. Я старался изучать все что давали в уроках. Но быстро начал отставать. Я уже + перестал делать домашку, до того как Григорий выложит решение. Мне было важно хотя бы понять, что тут вообще + происходит. Я делал задания параллельно смотря видео с решением. И потихоньку начинал понимать. Кроме этого у меня + тогда уже стоял линукс, и мне еще приходилось мучиться настраивая базу данных и другие вещи. Но на это я шел + сознательно.
+ В итоге когда закончилась стажировка (12 уроков), я закончил только 9 уроков. И то я понимал, что самостоятельно + не смогу сделать такой же проект, не подсматривая в учебные материалы. Я начал готовиться к собеседованию, заучиваю + основы джавы. У меня был план 10 сентября начать искать работу (выложить резюме в открытый доступ). Подготовил + резюме, дал Григорию на проверку. Он мне посоветовал стажировку указать как опыт работы, что я и сделал. В итоге в + моем резюме теперь было написано, что я программист с мая 2016 года. Как я знал тогда из различных источников, что в + начале нужно главное устроиться, куда угодно, а потом время будет работать на тебя, чем больше стаж тем ты более + востребован на рынке труда.
+ В конце лета 2016 как раз была анонсирована стажировка Григория по многопоточности. Я записался на нее тоже, не + жалея денег на это. Я хотел стать профессионалом в джава и я уже тогда начал понимать насколько много дают такие + стажировки от хорошего специалиста. И, помимо этого, эта стажировка давет мне дополнительный стаж в резюме. +

+

Трудоустройство

+

+ Итак, наступило 10 сентября (это была суббота) и я выложил свое резюме на hh.ru, решил начать с этого. В моем резюме + не было ничего особенного, указал учебу в универе 4 года, это было правдой, хотя я и не закончил ее. Указал + последние 2 места работы, 1-е - сисадмин в сети фотосалонов, где я до сих пор работал, а 2-е - программист в + Online Java Project. Указал свои скилы, и свой домашний проект (параллельно стажировке начал делать еще летом). И + какое было мое удивление, что 12 сентября (в понедельник) я получил отклик на вакансию. Я созвонился с кадровиком, + она меня спросила, почему я решил поменять место работы, я честно ответил, что это стажировка, и что я решил сменить + свою область деятельности. Вообщем отвечал честно, волновался (все таки первый раз на программиста устраиваюсь). На + следующий день мне пришло письмо с приглашением на собеседование. Мой непосредственный начальник, который меня + должен был собеседовать, немного задержался, я общался сначала с другим. Когда пришел тот, кто меня должен был + собеседовать, он даже вроде ничего не спрашивал, просто сидел (компания куда я устраивался было достаточно крутая), + тогда я сам начал рассказывать о том что знаю и умею, и весь разговор был о стажировке. Потом я стал спрашивать о + том что делают у них, какую систему сборки используют, какие БД, есть ли команда тестировщиков или разработчики сами + тесты пишут и т.п. Мне показалось, что я произвел достаточно хорошее впечатление, так как достаточно суровый вначале + начальник стал более дружелюбным. Он сказал что вышлет тестовое задание и мы попрощались.
+ Когда я приехал домой тестовое задание уже было в моей почте. Надо было скачать их тестовый проект с гитхаба, + доработать сущности и один метод, плюс добавить тестовые данные. Когда я скачал и открыл проект я был в шоке. Такого + я еще не видел вообще. Это был многомодульный мавен проект, в котором классы сущностей и интерфейсы генерировались + из специальных файлов. Я был в шоке. Я даже не мог запустить его на томкате. Где то 12 часов я пытался разобраться + в нем и запустить его, настраивая окружение и др. Была уже ночь, пока я пытался запустить проект, я немного + разобрался в нем. Но голова уже не работала и я лег спать. На следующий день, я плюнул на попытки запустить проект, + сделал задание, как считал правильным, даже не сумев проверить. Написал ответ, в котором описал то что не смог + запустить проект, описал почему не смог, сделал некоторые предположения, описал эксепшены которые вываливались при + попытке собрать проект и в конце кинул ссылку на коммит с моим решением тестового задания. Я ни на что не надеялся, + так как думал что провалил тест. Но через пару часов, мне пришел ответ, где написали что я успешно прошел испытания + и если Служба безопасности даст добро, то они меня возьмут. Я был безумно счастлив, тем более что оклад, который они + мне предложили, даже на испытательном сроке был больше, чем я вообще ожидал. Итого не прошло и недели как я выложил + резюме, а меня уже приняли.
+ Пока я ждал ответа от СБ, я еще успел сходить на собеседование в епам, там меня проверили по всему основному джава + стеку. Там я еще раз убедился, что мои слабые стороны это SQL, JavaScript и фреймворки. До второго уровня проверки в + епам (проверка английского) я так и не дошел, окончательно приняли в 1-ю компанию. +

+

Работа

+

+ Я старался работать много, приходил рано, задерживался. Я с трудом понимал что такое мы делаем, и замучил наверно + своего начальника бесконечными вопросами. Но я старался все понять, и постепенно понимал. Домой я приходил выжатый + как лимон. Я не мог ничего больше учить дополнительно по вечерам, мой мозг отказывался что-то воспринимать. Но я + ходил на работу с радостью. Я был уже официально инженером-программистом, и это меня безумно вдохновляло. + Через 2 месяца закончился мой испытательный срок, и с декабря я уже нахожусь в полных правах.
+ Из личных успехов: в декабре мы уже запустили небольшой проект (вернее сказать серию дополнений), бэкенд который был + написан полностью мной (под руководством моего начальника конечно), один микросервис я написал сам от бекэнда до + фронтенда(пришлось учить React.js), но он пока еще не выложен. Специфика моей работы - суровый энтерпрайз. Я как раз + и мечтал о такой работе. Мои строчки кода уже крутятся на боевой и я счастлив от этого. Конечно были и проблемы, я + косячил, писал код с багами, находил эти баги у себя и не только у себя. Есть нехватка знаний, которая быстро + закрывается во время практики, но не вся. Чтение логов стало для меня привычным делом, я просмотрел уже наверно + сотню страниц логов. И свой код я пытаюсь подробно логировать, чтоб можно было быстро выявить ошибку по логам. +

+

Заключение

+

+ Во-первых я хочу сказать огромное спасибо Григорию Кислину, за его прекрасную стажировку. Это + высококонцентрированный источник знаний, которые самостоятельно получить очень трудно, тем более за такой короткий + срок (12 недель). И именно участие в стажировке сыграло главную роль в моем быстром трудоустройстве. Это и опыт + участия в настоящем проекте, о котором можно рассказать на собеседовании, это и стаж программиста, который можно + указать в резюме.
+ С того момента как я решил стать программистом, до моего 1-го рабочего дня в качестве программиста, прошло примерно + 1,5 года. Из них действительно продуктивно прошли только 4 месяца онлайн курса джавараш и 3 месяца стажировки у + Григория. Да я изучал еще самостоятельно много чего, но это было хаотичное изучение и я много ленился. В общем этот + срок в 1,5 года можно было бы сократить в 2 раза, хотя возможно иногда лучше если изменения происходят плавно, а за + эти 1,5 года я очень изменился.
+ И хочу сказать свое мнение о платных курсах: я всегда с радостью покупал курсы, если видел, что они мне помогут + достигнуть моей цели. Если посчитать сколько я потратил всего на обучение джавы, то выйдет примерно так: в конце + августа 2015г, купил расширенный пакет от джавараш вроде за 10 тыс. руб., зимой 2015 дополнительно покупал миникурс + создания вебприложения - 5 тыс.руб, после стажировки в конце лета 2016 купил курс многопоточность у Григория - + 8 тыс.руб, итого 23 тыс руб. Так вот, за 1-й месяц работы, будучи еще на испытательном сроке, я заработал больше чем + потратил за 1,5 года на свое обучение.
+ Сейчас мои планы снова пройтись по 1ой стажировке, досконально изучая все, а потом 2-ю стажировку (многопоточность), + тоже досконально все изучая. И очень хорошо, что стажировки даются в бессрочное пользование, можно проходить их + сколько захочешь раз. И мое мнение, они дают уровень знаний хорошего мидла. +

+

+ Желаю всем удачи в обучении джава и других языков программирования. Никогда не слушайте никого, кто говорит вам, что + вы что-то не сможете или что-то не для вас. Не бойтесь вкладывать в себя, в свое обучение средства, они вернутся + сторицей. Учитесь у профессионалов, если хотите стать профессионалом. Любите то дело которым хотите заниматься, и + оно быстрее примет вас. Общайтесь с программистами или слушайте подкасты, чтоб лучше и быстрее понять этот + удивительный мир программирования. +

+
+ Тимур Муратов, 07/01/2017 +
+

К списку историй

+ +
+ + + \ No newline at end of file diff --git a/resources/view/story/story9.html b/resources/view/story/story9.html new file mode 100644 index 0000000..3c81889 --- /dev/null +++ b/resources/view/story/story9.html @@ -0,0 +1,95 @@ + + + + + + + + +
+

Путь к Java Developer:

+ + +

Предыстория

+

+ Начну с того, что мне повезло быть студентом технического ВУЗа и учился я именно на факультете информационных + технологий. Повезло не потому что я получил какие-то очень полезные навыки, а из-за того, что многие компании + «отсеивают» кандидатов по этому критерию. Но речь не об этом. Я был довольно ленивым студентом и не особо + понимал, чем я хочу заниматься в будущем. Даже не был уверен, что буду работать в IT. +

+

+ После университета работал установщиком ПО – выезжал к клиентам компании, устанавливал программное обеспечение и + рассказывал, как им пользоваться. Проработав около 2-х лет, я понял, что, особых перспектив не намечается и + нужно двигаться дальше. +

+

+ Решив продолжить работу в IT, я всё ещё смутно понимал, в каком именно направлении мне нужно развиваться. И + увидев где-то фразу «Не знаешь какой язык программирования учить – учи английский» я проверил требования в паре + десятков вакансий и убедился, что с этого и стоит начать! +

+

+ Около полугода я самостоятельно изучал английский с помощью интернет-ресурсов, но была нужна языковая практика. + Сначала я хотел поехать в одну из англоязычных стран, но из-за девальвации рубля я начал искать другие варианты + и нашёл! Я решил отправиться в Азию, а именно на Филиппины – во первых, английский имеет статус официального, а + во вторых очень хорошее предложение по обучению – 5 дней в неделю по 6 – 8 уроков в день было именно то, что мне + было нужно. Со мной учились несколько программистов, которые также как и я хотели поднять свой уровень + английского, и с некоторыми общаюсь и сегодня. От них я узнал много нового, и мне было о чём подумать. А в + последнюю неделю обучения в школе проходили уроки по HTML для начинающих. В тот момент для меня это было очень + интересно, а на английском - вдвойне. Так я решил стать программистом! +

+

Изучение Java.

+

+ Вернувшись домой, я хотел как можно скорее приступить к изучению одного из языков программирования. Но мне + предстояло выбрать – какой же язык всё таки учить. После нескольких дней размышлений и изучения информации, + пришёл к выводу, что лучший выбор – это Java! +

+

+ Начать я решил с JavaRush – отличный ресурс для новичков, который поможет постигнуть начальные азы + программирования на Java. Спустя полгода я получил работу и приступил к обязанностям в должности + инженера-программиста! Первый мой проект был достаточно интересным, особенно для такого новичка, как я – было + необходимо написать простое веб-приложения и организовать доступ к базе данных. На это у меня ушло около месяца. + Хотя сейчас я сделал бы это гораздо быстрее и на совершенно другом уровне, но тогда для меня это был успех! +

+

TopJava

+

+ Проработав чуть меньше года, я набрался опыта и решил, что на этом нельзя останавливаться. Со временем я понял, + что не получил того, что хотел. Я хоть и работал программистом, но я занимался не только Java, а и кучей других + малоизвестный и бесперспективных технологий. Изучив рынок труда, я осознал, что для того, чтобы получить работу, + которую я всегда хотел – необходимо существенно повысить свой уровень и изучить востребованные технологии. + Именно поэтому я решил пройти TopJava – этот курс даёт возможность изучить самые востребованные технологии на + сегодняшний день, а именно Spring, PostgreSQL, JPA/Hibernate, а также Java 8 – Stream API и Date and Time API. +

+

+ Буду честным и скажу, что не всё давалось легко, но при должном упорстве во всём можно разобраться, а + возможность задать вопрос автору курса или сокурсникам в slack’е несомненно помогает понять то, что на первый + взгляд может показаться довольно сложным. +

+

+ Вскоре после завершения курса, я разместил своё резюме на нескольких сайтах и мне сразу начали писать и звонить. + Но, как ни странно, предложение о работе, которое я в итоге принял, я получил после того, как написал + девушке-HR, которая написала в slack’е, что ищет специалистов моего уровня . +

+

+ Недавно закончился испытательный срок, и теперь я являюсь полноценным Java-разработчиком и каждый день + развиваюсь в этом направлении и не собираюсь останавливаться на достигнутом. +

+

+ Благодарю Григория Кислина, за замечательный курс TopJava и оказанную поддержку. Благодаря всему этому я овладел + необходимыми навыками, которые позволили мне найти работу, которую я всегда хотел. +

+

+ Было ли легко – нет. Стоит ли оно того – несомненно. +

+
+ Иван, 05/02/2017 +
+

К списку историй

+ +
+ + + \ No newline at end of file diff --git a/resources/view/test.html b/resources/view/test.html new file mode 100644 index 0000000..0c26ce3 --- /dev/null +++ b/resources/view/test.html @@ -0,0 +1,202 @@ + + + + + + + + + + +
+

Интервью в skype (голосом) на позицию Java разработчик.

+
+ + + + + +
+
    +
  • cамые распространенные вопросы на собеседованиях
  • +
  • упор не на заучивание ответов, а на понимание основ
  • +
  • советы как лучше ответить или оформить свою мысль
  • +
  • выявление слабых мест и пробелов
  • +
  • объяснение непонятных мест, указание ресурсов для проработки
  • +
  • позитивный, доброжелательный настрой и уверенность
  • +
  • оценка реального уровня знаний
  • +
+
+
+ +
+
+
+

Темы тестового собеседования (можно выбрать):

+ +
+

Полезные ресурсы для подготовки

+ +
+
+

Время собеседования: 1 час/ 1450 руб./25$

+

Детали в скайпе: grigory.kislin

+
+
+

Из кнала #interview группы выпускников Slack

+
+
+ Всем привет! сходил на первое собеседование на вакансию Junior Java Developer, на следующий день + получил + офер) + Теперь дорабатываю 2 недели на старом месте и выхожу на работу. Зарплата полностью белая, 60 тыс. + рублей + к + начислению. Если интересно, напишу подробнее, как проходило собеседование, что спрашивали и т.д. + Пока + даже с + трудом верится что такое возможно, теперь думаю где может быть подвох:) +
+ Компания работает с гос. заказчиками, в штате примерно 120 человек. У них сейчас несколько крупных + проектов, на + каждый отдельная команда. В какой конкретно проект я попаду, пока не известно, сказали определят + ближе к + дате + выхода. Собеседовала меня как обычно сначала HR, задавала общие вопросы, спрашивала что за + организация + Java + Online Projects, и официально ли я там работаю. Я честно сказал что это стажировка, и описал вкратце + как + у нас + происходит разработка:) Спрашивала почему решил сменить сферу деятельности и т.д. Потом пришёл + руководитель + одного из проектов, в команду к которому я скорее всего попаду, Он спрашивал в основном в общем, на + понимание + предметной области: с какими технологиями я знаком, какие для чего применял и т.д. Поспрашивал + немного + про + микросервисную архитектуру. Сказал что ему в целом всё понятно, и сейчас позовёт тимлида, чтобы + проверить мои + технические навыки. Пришёл тимлид, и тоже сначала поспрашивал по технологиям в целом, потом начал + задавать более + детальные вопросы по некоторым технологиям. +
+ Из тех что запомнил: по мавену - как добавлять зависимости, для чего нужны плагины. По спрингу - как + конфигурируется спринг, какие бывают бины, как сделать бин не синглетоном. Довольно много спрашивал + про + Hibernate - какие бывают аннотации, связи, так же дал небольшую задачу на N+1 select. Потом задал + буквально пару + вопросов по Java Core - какие бывают коллекции, какие бывают сортированные мапы, что такое Hash. Вот + с + хэшем я + немного затупил, не смог ответить почему в HashMap в качестве ключа можно добавить объекты с + одинаковым + хэшем. + Тут тимлида позвали на какое-то важное совещание, и он закончил собеседование, сказав что по + результатам + мне + сообщат. Я был уверен что меня не возьмут из-за неправильного ответа про хэш, и не очень чётких + ответов + по + спринг бинам. Но на следующий день HR связалась со мной и прислала офер:) +
+
+
+ Господа, как и обещал - рассказываю про собеседование в ....
+ Было лайтово, не так страшно как я себе это представлял. Был всего один человек - ведущий разработчик. + Интервью я завалил по полной как мне казалось. Вопросов вышло всего немного, потому что я дико нервничал и + он прервал интервью видя мое состояние и предложил рассказать про контору. Вопросы были примерно такие: +
    +
  1. SQL, нарисовал таблички, связь один ко многим, попросил написать запрос с использованием объединения + двух таблиц, с GROUP BY и суммированием. +
  2. +
  3. Спросил про стримы, написал код небольшой и надо было сказать что будет в результате стрима. Было что то + такое -коллекция, ее фильтровал, преобразовывал, что-то еще и в конце фор ич в котором он пытался + удалить элемент коллекции. Тут я затупил, забыл что нельзя на лету удалять элементы, будет экспешн. Надо + было сказать какой и почему. +
  4. +
  5. Про спринг вопрос - как его можно сконфигурировать, какие существуют способы. Потом написал пару + классов, у которых был общий наследник и попытался по этому наследнику заинжектить бин Autowired(ом). + Спросил какой из классов заинжектится. Когда сказал что будет конфликт, как избавиться от такого + конфликта. +
  6. +
+ В общем поговорили о тестировании, JUnit(е), базах данных, хибернейте... + Ни одного вопроса по языку у меня не было, все по фреймворкам, я такого совершенно не ожидал, потому как + повторял в основном core и думал что начнут с него. + Дальше он рассказывал про контору, а я спрашивал что мне интересно. Я ни на один вопрос на сто процентов + правильно не ответил. Я представил как это выглядело, как я нервничал, это было ужасно. У меня не было сомнений + что это провал. Но вчера мне позвонили оттуда и сказали что будут рады видеть в команде. Сегодня жду офера на + почте. +
+
+
+ Ну что, друзья, я таки получил оффер, в одной компании из г.Запорожье. Теперь главная задача подхватить и + потащить, чтобы по истечении испытательного зацепиться. Сказать что рад - ничего не сказать. Всем спасибо, + Григорий, с меня сакцесс стори как испытательный пройду. +
+
+ + + \ No newline at end of file diff --git a/resources/view/topjava.html b/resources/view/topjava.html new file mode 100644 index 0000000..bcc7741 --- /dev/null +++ b/resources/view/topjava.html @@ -0,0 +1,296 @@ + + + + + + + + + +
+

Стажировка Java Enterprise (Topjava)

+

Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и + правами доступа на основе ролей с использованием наиболее популярных инструментов и технологий + Java: Maven, Spring MVC, Security, JPA(Hibernate), REST(Jackson), Bootstrap (css,js), + datatables, jQuery + plugins, Java 8 Stream and Time API и сохранением в базах данных Postgresql и + HSQLDB. +

+
+ Структура проекта +
+
+ + + +
+

Вебинар ОСВАИВАЕМ JAVA ENTERPRISE

+

Слайды вебинара

+
+ Стажировка ведется по подготовленным на основе вебинара, разбитым по темам и отредактированым + записям. + Раз в неделю (четверг) производится рассылка новых материалов, обновления к проекту (патчи) и + домашние задания. Домашние задания подобранны по темам занятия и требуют реализации + функциональности, схожей с пройденной на занятии. Разбор домашних заданий происходит в начале + каждого урока. + Вопросы и обсуждение занятий и домашних заданий, общение на разные темы происходит в различных + каналах группы проекта + (используем мессенджер Slack). Начиная с 4-го занятия участники пишут + собственный выпускной проект. + +
+
+
    +
  • + Участники последовательно разрабатывают полнофункциональное Spring/JPA Enterprise приложение + c + авторизацией и правами доступа на основе ролей, используя инструменты/ библиотеки/ + фреймворки: + Maven, + Spring Security, + Spring + MVC, + Spring Data JPA, + Spring + Security + Test, + Hibernate ORM, + Hibernate Validator, + SLF4J, + Json Jackson, + JSP, + JSTL, + Apache Tomcat, + WebJars, + Ehcache, + PostgreSQL, + JUnit, + Hamcrest, + jQuery, + jQuery Datatable, + jQuery notification, + Bootstrap. +

  • +
  • Основное внимание будет уделяться способам решения многочисленных проблем разработки в + Spring/JPA, а + также + структурному (красивому и надежному) java кодированию и архитектуре приложения. +

  • +
  • Каждая итерация проекта закрепляется домашним заданием по реализации схожей функциональности. + Следующее + занятие + начинается с разбора домашних заданий. + +

    +
  • +
  • Большое внимание уделяется тестированию кода: в проекте более 100 JUnit тестов. +

    +
  • +
  • Несмотря на относительно небольшой размер, приложение разрабатывается с нуля как большой проект + (например, мы используем кэш 2-го уровня Hibernate, настраиваем Jackson для работы с ленивой + загрузкой + Hibernate, делаем конверторы для типов LocalDateTime (Java 8 time API), + которые еще не поддерживаются ни JPA/Hibernate, ни Jackson/json). + Разбираются архитектурные паттерны: слои приложения и как правильно разбивать логику по слоям, когда + нужно + применят Data Transfer Object. + Т.е на выходе получается не учебный проект, а хорошо маштабируемый шаблон для большого проекта на + всех + пройденных технологиях. +

  • +
  • Большое внимание уделяется деталям: популяция базы, использование транзакционности, тесты + сервисов и + REST + контроллеров, насторойка EntityManagerFactory, + выбор реализации пула коннектов. Особое внимание уделяется работе с базой: через Spring JDBC, Spring + ORM + и + Spring Data Jpa. +

  • +
  • Используются самые востребованные на сегодняшний момент фреймворки: Maven, Spring Security 4 + вместе с Spring Security Test, наиболее удобный для работы с базой проект Spring Data Jpa, + библиотека + логирования logback, реализующая SLF4J, повсеместно используемый Bootstrap и jQuery. +

  • +
  • Разработка ведется на the number one IDE IntelliJ IDEA. В начале проекта выдаются персональные + лицензии на 6 + месяцев.

    +

    + IntelliJ +

  • +
+
+
+
+ +
    +
  • Стоимость участия без проверки домашних заданий: 8300 руб./ 150$
    + сюда входят все материалы, участие в группе Slack (на каждое занятие и тему- свой канал), полугодовая лицензия IntelliJ IDEA, ответы на вопросы и помощь с проектом.

    +
  • +
  • Стоимость полного пакета: 16200 руб./ 294$
    + добавляется проверка домашних заданий + ревью выпускного проекта (либо вашего, например тестового задания при устройстве на работу).

  • +
  • Для всех: бесплатное (или с доплатой за проверку ДЗ) участие в следующий выпусках проекта.

  • +
  • Скидка на другие курсы: 700 руб. (без ДЗ) и 1500 руб (с ДЗ).

  • +
  • Способы оплаты
  • +
  • Добавляйтесь в skype: grigory.kislin

  • +
+
+ +
+

    06.07: Старт проекта

    +
  • Сбор группы в Slack
  • +
  • Заполнение формы регистрации участника (в том числе gmail для доступа к материалам на Google Drive)
  • +
  • Раздача учебных лицензий IntelliJ IDEA +
  • +
  • Проверка вступительного задания (для участников с проверкой решения присылать до 21.03).
  • +
+

    13.07: 1-е занятие

    +
  • Разбор домашнего задания вступительного занятия (вместе с Optional)
  • +
  • Обзор используемых в проекте технологий. Интеграция ПО
  • +
  • Maven
  • +
  • WAR. Веб-контейнер Tomcat. Сервлеты
  • +
  • Логирование
  • +
  • Уровни и зависимости логгирования. JMX
  • +
  • Домашнее задание 1-го занятия (HW1 + Optional)
  • +
+

    20.07: 2-е занятие

    +
  • Разбор домашнего задания HW1 + Optional
  • +
  • Библиотека vs Фреймворк. Стандартные библиотеки Apache Commons, Guava
  • +
  • Слои приложения. Создание каркаса приложения
  • +
  • Обзор Spring Framework. Spring Context
  • +
  • Пояснения к HW2. Обработка Autowired
  • +
  • Домашнее задание (HW2 + Optional)
  • +
+

    27.07: 3-е занятие

    +
  • Разбор домашнего задания HW2 + Optional
  • +
  • Жизненный цикл Spring контекста
  • +
  • Тестирование через JUnit
  • +
  • Spring Test
  • +
  • Базы данных. Обзор NoSQL и Java persistence solution без ORM
  • +
  • Настройка Database в IDEA
  • +
  • Скрипты инициализации базы. Spring Jdbc Template
  • +
  • Подготовка тестовых данных и тестирование UserService
  • +
  • Логирование тестов
  • +
  • Домашнее задание (HW3 + Optional)
  • +
+

    03.08: 4-е занятие

    +
  • Разбор домашнего задания HW3 + Optional
  • +
  • Методы улучшения качества кода
  • +
  • Spring: инициализация и популирование DB
  • +
  • Подмена контекста при тестировании
  • +
  • ORM. Hibernate. JPA
  • +
  • Поддержка HSQLDB
  • +
  • Домашнее задание (HW4 + Optional)
  • +
+

    10.08: 5-е занятие

    +
  • Разбор вопросов
  • +
  • Разбор домашнего задания HW4 + Optional
  • +
  • Транзакции
  • +
  • Профили Maven и Spring
  • +
  • Пул коннектов
  • +
  • Spring Data JPA
  • +
  • Spring кэш
  • +
  • Домашнее задание (HW5 + Optional)
  • +
+

    17.08: 6-е занятие

    +
  • Разбор домашнего задания HW5 + Optional
  • +
  • Кэш Hibernate
  • +
  • Spring Web
  • +
  • JPS, JSTL, internationalization
  • +
  • Динамическое изменение профиля при запуске
  • +
  • Конфигурирование Tomcat через maven plugin. Jndi-lookup
  • +
  • Spring Web MVC
  • +
  • Spring Internationalization
  • +
  • Домашнее задание (HW6 + Optional)
  • +
+

    24.08: 7-е занятие

    +
  • Разбор домашнего задания HW6 + Optional
  • +
  • Автогенерация DDL по модели
  • +
  • Тестирование Spring MVC
  • +
  • REST контроллеры
  • +
  • Тестирование REST контроллеров. Jackson
  • +
  • jackson-datatype-hibernate. Тестирование через матчеры
  • +
  • Тестирование через SoapUi. UTF-8
  • +
  • Домашнее задание (HW7 + Optional)
  • +
+

    31.08: 8-е занятие

    +
  • Разбор домашнего задания HW7 + Optional
  • +
  • WebJars. jQuery и JavaScript frameworks
  • +
  • Bootstrap
  • +
  • AJAX. Datatables. jQuery
  • +
  • jQuery notifications plugin
  • +
  • Добавление Spring Security
  • +
  • Домашнее задание (HW8 + Optional)
  • +
+

    07.09: 9-е занятие

    +
  • Разбор домашнего задания HW8 + Optional
  • +
  • Spring Binding
  • +
  • Spring Validation
  • +
  • Перевод DataTables на Ajax
  • +
  • Форма login / logout
  • +
  • Реализация собственного провайдера авторицазии
  • +
  • Принцип работы Spring Security. Проксирование
  • +
  • Spring Security Test
  • +
  • Cookie. Session
  • +
  • Домашнее задание (HW9 + Optional)
  • +
+

    14.09: 10-е занятие

    +
  • Разбор домашнего задания HW10 + Optional
  • +
  • Spring Security Taglib. Method Security Expressions
  • +
  • Интерсепторы. Редактирование профиля. JSP tag files
  • +
  • Форма регистрации
  • +
  • Обработка исключений в Spring
  • +
  • Encoding password
  • +
  • Защита от межсайтовой подделки запросов (CSRF)
  • +
  • Домашнее задание (HW10)
  • +
+

    21.09: Заключительное занятие

    +
  • Разбор домашнего задания HW10 + Optional
  • +
  • Локализация datatables, ошибок валидации
  • +
  • Защита от XSS (Cross Site Scripting)
  • +
  • Обработка ошибок 404 (NotFound)
  • +
  • Доступ к AuthorizedUser
  • +
  • Ограничение модификации пользователей
  • +
  • Деплой приложения в Heroku
  • +
  • Собеседование. Разработка ПО +
  • +
  • Возможные доработки приложения
  • +
+
+

+ Код проекта постоянно рефакторится: появились настройки пользователя, сохранения собственных типов в + Hibernate, работа с java 8 (time API, Lambda, Streaming), модальные окна bootstrap, переключение локали, + JsonView и + Validation groups, + сильно уменьшено количество и упрощена работа с java + script. Появилась логика фильтрации таблицы и сброс фильтра. В каждом уроке добавляются ответы на ваши + вопросы по + занятию, + дополнительные домашние задания и подсказки по выполнению домашних заданий. +

+

История изменений проекта

+
+ +
+ + + \ No newline at end of file diff --git a/resources/view/userInfo.html b/resources/view/userInfo.html new file mode 100644 index 0000000..083e706 --- /dev/null +++ b/resources/view/userInfo.html @@ -0,0 +1,60 @@ + + + + + + + + +
+
+
+
+

fullName

+
Cтажировка:
+
Projects
+
Email
+
+
Skype
+
skype
+
Город
+
location
+ +
Резюме
+
Ссылка на резюме
+
+
Релокация
+
true
+
Место релокации
+
Relocation
+
Обо мне
+
aboutMe
+
+
+
+ +
+
+ +
+ + +
+ +
+
+ +
+ +
+ +
+ +
+ +
+
+
+
+ + \ No newline at end of file diff --git a/resources/view/users.html b/resources/view/users.html new file mode 100644 index 0000000..53844cd --- /dev/null +++ b/resources/view/users.html @@ -0,0 +1,36 @@ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
ИмяГородОбо мнеskype
+
+ + + \ No newline at end of file diff --git a/src/main/java/ru/javaops/AuthorizedUser.java b/src/main/java/ru/javaops/AuthorizedUser.java new file mode 100644 index 0000000..c38a601 --- /dev/null +++ b/src/main/java/ru/javaops/AuthorizedUser.java @@ -0,0 +1,86 @@ +package ru.javaops; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.context.HttpSessionSecurityContextRepository; +import ru.javaops.model.User; +import ru.javaops.to.UserToExt; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import static java.util.Objects.requireNonNull; + +/** + * GKislin + */ +@Slf4j +public class AuthorizedUser extends org.springframework.security.core.userdetails.User { + private static final long serialVersionUID = 1L; + public static final String PRE_AUTHORIZED = "PRE_AUTHORIZED"; + + private User user; + + public AuthorizedUser(User user) { + super(user.getEmail(), user.getPassword() != null ? user.getPassword() : "dummy", true, true, true, true, user.getRoles()); + this.user = user; + } + + public static AuthorizedUser safeGet() { + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + if (auth == null) { + return null; + } + Object user = auth.getPrincipal(); + return (user instanceof AuthorizedUser) ? (AuthorizedUser) user : null; + } + + public static AuthorizedUser get() { + AuthorizedUser user = safeGet(); + requireNonNull(user, "Требуется авторизация"); + return user; + } + + public static void setPreAuthorized(UserToExt userToExt, HttpServletRequest request) { + log.info("setPreAuthorized for '{}', '{}'", userToExt.getEmail(), userToExt.getNameSurname()); + HttpSession session = request.getSession(true); + session.setAttribute(PRE_AUTHORIZED, userToExt); + } + + public static UserToExt getPreAuthorized(HttpServletRequest request) { + HttpSession session = request.getSession(false); + if (session != null) { + return (UserToExt) session.getAttribute(PRE_AUTHORIZED); + } + return null; + } + + public static void setAuthorized(User user, HttpServletRequest request) { + log.info("setAuthorized for '{}', '{}'", user.getEmail(), user.getFullName()); + AuthorizedUser authorizedUser = new AuthorizedUser(user); + SecurityContext context = SecurityContextHolder.getContext(); + context.setAuthentication( + new UsernamePasswordAuthenticationToken(authorizedUser, null, authorizedUser.getAuthorities())); + // Create a new session and add the security context. + HttpSession session = request.getSession(true); + session.removeAttribute(PRE_AUTHORIZED); + session.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, context); + } + + public static User user() { + AuthorizedUser authorizedUser = safeGet(); + return authorizedUser == null ? null : authorizedUser.user; + } + + @Override + public String toString() { + return user == null ? "noAuth" : user.toString(); + } + + public static void updateUser(User user) { + get().user = user; + } +} diff --git a/src/main/java/ru/javaops/JavaOPsApplication.java b/src/main/java/ru/javaops/JavaOPsApplication.java index b00bcd3..6c2e720 100644 --- a/src/main/java/ru/javaops/JavaOPsApplication.java +++ b/src/main/java/ru/javaops/JavaOPsApplication.java @@ -8,9 +8,10 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.web.servlet.DispatcherServlet; import ru.javaops.config.AppProperties; +import ru.javaops.config.IntegrationProperties; @SpringBootApplication -@EnableConfigurationProperties(AppProperties.class) +@EnableConfigurationProperties({AppProperties.class, IntegrationProperties.class}) @EnableJpaRepositories("ru.javaops.repository") @EnableCaching public class JavaOPsApplication { diff --git a/src/main/java/ru/javaops/LoggedUser.java b/src/main/java/ru/javaops/LoggedUser.java deleted file mode 100644 index 62d185f..0000000 --- a/src/main/java/ru/javaops/LoggedUser.java +++ /dev/null @@ -1,45 +0,0 @@ -package ru.javaops; - -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import ru.javaops.model.User; - -import static java.util.Objects.requireNonNull; - -/** - * GKislin - */ -public class LoggedUser extends org.springframework.security.core.userdetails.User { - static final long serialVersionUID = 1L; - - private int id; - - public LoggedUser(User user) { - super(user.getEmail(), user.getPassword(), user.isActive(), true, true, true, user.getRoles()); - this.id = user.getId(); - } - - public static LoggedUser safeGet() { - Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - if (auth == null) { - return null; - } - Object user = auth.getPrincipal(); - return (user instanceof LoggedUser) ? (LoggedUser) user : null; - } - - public static LoggedUser get() { - LoggedUser user = safeGet(); - requireNonNull(user, "No authorized user found"); - return user; - } - - public static int id() { - return get().id; - } - - @Override - public String toString() { - return "User (" + id + ',' + getUsername() + ")"; - } -} diff --git a/src/main/java/ru/javaops/SqlResult.java b/src/main/java/ru/javaops/SqlResult.java new file mode 100644 index 0000000..f064662 --- /dev/null +++ b/src/main/java/ru/javaops/SqlResult.java @@ -0,0 +1,17 @@ +package ru.javaops; + +import java.util.List; + +/** + * gkislin + * 30.10.2016 + */ +public class SqlResult { + public SqlResult(List headers, List rows) { + this.headers = headers; + this.rows = rows; + } + + public List headers; + public List rows; +} diff --git a/src/main/java/ru/javaops/config/AppConfig.java b/src/main/java/ru/javaops/config/AppConfig.java index 5dd0f09..0229619 100644 --- a/src/main/java/ru/javaops/config/AppConfig.java +++ b/src/main/java/ru/javaops/config/AppConfig.java @@ -7,8 +7,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.Scheduled; +import java.io.IOException; +import java.io.Reader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.sql.SQLException; +import java.util.Properties; /** * GKislin @@ -16,20 +24,34 @@ @Configuration public class AppConfig { - // @Profile("dev") + @Profile("dev") @Bean(initMethod = "start", destroyMethod = "stop") public Server h2WebServer() throws SQLException { return Server.createWebServer("-web", "-webAllowOthers", "-webPort", "8082"); } + @Profile("prod") @Bean(initMethod = "start", destroyMethod = "stop") public Server h2Server() throws SQLException { return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092"); } - @Autowired(required = true) - public void configeJackson(ObjectMapper objectMapper) { + @Autowired + public void configureJackson(ObjectMapper objectMapper) { objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE) .setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); } + + public static final Properties SQL_PROPS = new Properties(); + + @Scheduled(fixedRate = 5000) // every 5 sec + private void refreshSqlProps() { + Path path = Paths.get("./config/sql.properties"); + try (Reader reader = Files.newBufferedReader(path)) { + SQL_PROPS.clear(); + SQL_PROPS.load(reader); + } catch (IOException e) { + throw new IllegalStateException(path.toAbsolutePath().toString() + " load exception", e); + } + } } diff --git a/src/main/java/ru/javaops/config/AppProperties.java b/src/main/java/ru/javaops/config/AppProperties.java index 0423ea1..4c585a5 100644 --- a/src/main/java/ru/javaops/config/AppProperties.java +++ b/src/main/java/ru/javaops/config/AppProperties.java @@ -1,6 +1,7 @@ package ru.javaops.config; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotNull; @@ -9,13 +10,14 @@ * 20.08.2015. */ @ConfigurationProperties("app") +@Validated public class AppProperties { /** * Test email */ @NotNull - private String testEmail; + private String email; /** * Interval for update templates @@ -30,16 +32,16 @@ public class AppProperties { private String activationSecretSalt; /** - * Host url + * Secret key */ @NotNull - private String hostUrl; + private String secretKey; /** - * VK token + * Host url */ @NotNull - private String vkToken; + private String hostUrl; public String getActivationSecretSalt() { return activationSecretSalt; @@ -49,6 +51,14 @@ public void setActivationSecretSalt(String activationSecretSalt) { this.activationSecretSalt = activationSecretSalt; } + public String getSecretKey() { + return secretKey; + } + + public void setSecretKey(String secretKey) { + this.secretKey = secretKey; + } + public void setCacheSeconds(int cacheSeconds) { this.cacheSeconds = cacheSeconds; } @@ -57,12 +67,12 @@ public void setHostUrl(String hostUrl) { this.hostUrl = hostUrl; } - public String getTestEmail() { - return testEmail; + public String getEmail() { + return email; } - public void setTestEmail(String testEmail) { - this.testEmail = testEmail; + public void setEmail(String email) { + this.email = email; } public int getCacheSeconds() { @@ -72,12 +82,4 @@ public int getCacheSeconds() { public String getHostUrl() { return hostUrl; } - - public String getVkToken() { - return vkToken; - } - - public void setVkToken(String vkToken) { - this.vkToken = vkToken; - } } diff --git a/src/main/java/ru/javaops/config/IntegrationProperties.java b/src/main/java/ru/javaops/config/IntegrationProperties.java new file mode 100644 index 0000000..2a117c5 --- /dev/null +++ b/src/main/java/ru/javaops/config/IntegrationProperties.java @@ -0,0 +1,42 @@ +package ru.javaops.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotNull; +import java.util.Map; + +/** + * GKislin + * 20.08.2015. + */ +@ConfigurationProperties("app.integration") +@Validated +public class IntegrationProperties { + + @NotNull + private String vkToken; + + @NotNull + private Map slackTokens; + + public String getVkToken() { + return vkToken; + } + + public void setVkToken(String vkToken) { + this.vkToken = vkToken; + } + + public Map getSlackTokens() { + return slackTokens; + } + + public void setSlackTokens(Map slackTokens) { + this.slackTokens = slackTokens; + } + + public String getSlackToken(String teamName) { + return slackTokens.get(teamName); + } +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/config/MailAsyncConfig.java b/src/main/java/ru/javaops/config/MailAsyncConfig.java index b98ccb5..53ee66b 100644 --- a/src/main/java/ru/javaops/config/MailAsyncConfig.java +++ b/src/main/java/ru/javaops/config/MailAsyncConfig.java @@ -7,7 +7,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; diff --git a/src/main/java/ru/javaops/config/MvcConfiguration.java b/src/main/java/ru/javaops/config/MvcConfiguration.java index 0f81572..d01fa75 100644 --- a/src/main/java/ru/javaops/config/MvcConfiguration.java +++ b/src/main/java/ru/javaops/config/MvcConfiguration.java @@ -1,42 +1,117 @@ package ru.javaops.config; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; +import org.springframework.web.servlet.mvc.UrlFilenameViewController; +import ru.javaops.AuthorizedUser; +import ru.javaops.service.SubscriptionService; +import ru.javaops.service.UserService; +import ru.javaops.util.WebUtil; -//@EnableWebMvc // NOK, 8 converters -@EnableAutoConfiguration // OK, 10 converters -@Configuration // OK, 9 converters +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Properties; +import java.util.function.Consumer; + +import static com.google.common.base.Preconditions.checkNotNull; + +//@EnableWebMvc : http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc-auto-configuration +@EnableAutoConfiguration +@Configuration +@Slf4j public class MvcConfiguration extends WebMvcConfigurerAdapter { -/* - @Bean - public MessageSource messageSource() { - ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); - messageSource.setBasename("./i18n/messages"); - messageSource.setDefaultEncoding("UTF-8"); - messageSource.setCacheSeconds(properties.getCacheSeconds()); - return messageSource; - } + @Autowired + private SubscriptionService subscriptionService; + + @Autowired + private UserService userService; @Override public void addInterceptors(InterceptorRegistry registry) { - LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); - localeChangeInterceptor.setParamName("language"); - registry.addInterceptor(localeChangeInterceptor); + registry.addInterceptor(new HandlerInterceptorAdapter() { + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + String project = request.getParameter("project"); + if (project != null && StringUtils.isBlank(project)) { + WebUtil.logWarn(request); + return false; + } + check(request, "adminKey", adminKey -> subscriptionService.checkAdminKey(adminKey)); + check(request, "channelKey", channelKey -> { + String channel = request.getParameter("channel"); + subscriptionService.checkActivationKey(checkNotNull(channel, "Не задан channel"), channelKey); + }); + check(request, "key", key -> { + String email = request.getParameter("email"); + subscriptionService.checkActivationKey(checkNotNull(email, "Не задан email"), key); + AuthorizedUser.setAuthorized(userService.findExistedByEmail(email), request); + }); + return true; + } + }).excludePathPatterns("/api/**"); + registry.addInterceptor(authInterceptor()).excludePathPatterns("/api/**"); + } + + private void check(HttpServletRequest request, String param, Consumer checker) { + String value = request.getParameter(param); + if (value != null) { + checker.accept(value); + } + } + + @Bean + public HandlerInterceptor authInterceptor() { + return new HandlerInterceptorAdapter() { + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + if (modelAndView != null && !modelAndView.isEmpty()) { + modelAndView.getModelMap().addAttribute("authUser", AuthorizedUser.user()); + } + } + }; } -*/ @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); + registry.addViewController("/interview/test.html").setViewName("test"); + registry.addViewController("/payment.html").setViewName("payment"); + registry.addViewController("/story.html").setViewName("story"); + } + + // http://www.codejava.net/frameworks/spring/spring-mvc-url-based-view-resolution-with-urlfilenameviewcontroller-example + @Bean + public SimpleUrlHandlerMapping getUrlHandlerMapping() { + SimpleUrlHandlerMapping handlerMapping = new SimpleUrlHandlerMapping(); + handlerMapping.setMappings(new Properties() { + { +// https://stackoverflow.com/a/12569566/548473 + put("/view/**", new UrlFilenameViewController()); + } + }); + handlerMapping.setOrder(Integer.MAX_VALUE - 5); + handlerMapping.setInterceptors(authInterceptor()); + return handlerMapping; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("file:./resources/static/"); registry.addResourceHandler("/css/**").addResourceLocations("file:./resources/css/"); + registry.addResourceHandler("/*.html", "/**/*.html").addResourceLocations("file:./resources/"); + registry.setOrder(Integer.MAX_VALUE); } } diff --git a/src/main/java/ru/javaops/config/SecurityConfig.java b/src/main/java/ru/javaops/config/SecurityConfig.java index 0656ba5..ebbd60d 100644 --- a/src/main/java/ru/javaops/config/SecurityConfig.java +++ b/src/main/java/ru/javaops/config/SecurityConfig.java @@ -1,21 +1,36 @@ package ru.javaops.config; +import com.google.common.collect.ImmutableList; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.context.annotation.PropertySources; +import org.springframework.core.annotation.Order; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.web.client.RestTemplate; import ru.javaops.model.Role; import ru.javaops.util.PasswordUtil; +import ru.javaops.web.oauth.OAuth2Provider; @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) -public class SecurityConfig extends WebSecurityConfigurerAdapter { +@PropertySources({ + @PropertySource("file:config/oauth/github.properties"), + @PropertySource("file:config/oauth/google.properties") +}) +public class SecurityConfig { @Autowired private UserDetailsService userDetailsService; @@ -25,15 +40,59 @@ public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception auth.userDetailsService(userDetailsService).passwordEncoder(PasswordUtil.getPasswordEncoder()); } - @Override - protected void configure(HttpSecurity http) throws Exception { - http.authorizeRequests() - .antMatchers("/api/mail**").hasAuthority(Role.ROLE_ADMIN.getAuthority()) - .antMatchers("/api/**").authenticated() - .and().httpBasic() - .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and().csrf().disable(); + // https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#multiple-httpsecurity +// https://stackoverflow.com/questions/33603156/spring-security-multiple-http-config-not-working + @Configuration + @Order(1) + public static class ApiWebSecurityConfiguration extends WebSecurityConfigurerAdapter { + @Override + protected void configure(HttpSecurity http) throws Exception { + http.antMatcher("/api/**") + .authorizeRequests().anyRequest().hasAuthority(Role.ROLE_ADMIN.getAuthority()) + .and().httpBasic() + .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .and().csrf().disable(); + } + } + + @Configuration + public static class AuthWebSecurityConfiguration extends WebSecurityConfigurerAdapter { + @Override + public void configure(WebSecurity web) throws Exception { + web.ignoring() + .antMatchers("/resources/**") + .antMatchers("/static/**"); + } + + // http://www.programcreek.com/java-api-examples/index.php?api=org.springframework.security.web.AuthenticationEntryPoint + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.authorizeRequests() + .antMatchers("/auth/**").authenticated() + .and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/") + .and().exceptionHandling().authenticationEntryPoint( + (request, response, authException) -> { + response.sendRedirect("/view/accessDenied"); + }) + .and().csrf().disable(); + } + } + + @Bean + @ConfigurationProperties(prefix = "github") + public OAuth2Provider githubOAuth2Provider() { + return new OAuth2Provider(); + } + + @Bean + @ConfigurationProperties(prefix = "google") + public OAuth2Provider googleOAuth2Provider() { + return new OAuth2Provider(); + } -// http.headers().frameOptions().disable(); + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(ImmutableList.of(new MappingJackson2HttpMessageConverter())); } } \ No newline at end of file diff --git a/src/main/java/ru/javaops/config/ThymeleafConfiguration.java b/src/main/java/ru/javaops/config/ThymeleafConfiguration.java index f38cd9f..8e48a05 100644 --- a/src/main/java/ru/javaops/config/ThymeleafConfiguration.java +++ b/src/main/java/ru/javaops/config/ThymeleafConfiguration.java @@ -31,9 +31,9 @@ public SpringTemplateEngine thymeleafTemplateEngine() { @Bean @Description("App template resolver") public TemplateResolver appTemplateResolver() { - log.debug("Configuring Email template"); + log.debug("Configuring App template"); return new FileTemplateResolver() {{ - setPrefix("./resources/"); + setPrefix("./resources/view/"); setSuffix(".html"); setTemplateMode("HTML5"); setCharacterEncoding("UTF-8"); @@ -44,7 +44,7 @@ public TemplateResolver appTemplateResolver() { @Bean @Description("Email template resolver serving HTML 5 emails") public TemplateResolver emailTemplateResolver() { - log.debug("Configuring App template"); + log.debug("Configuring Email template"); return new FileTemplateResolver() {{ setPrefix("./resources/mails/"); setSuffix(".html"); diff --git a/src/main/java/ru/javaops/config/exception/ExceptionInfoHandler.java b/src/main/java/ru/javaops/config/exception/ExceptionInfoHandler.java index f56b7e1..dcfedf0 100644 --- a/src/main/java/ru/javaops/config/exception/ExceptionInfoHandler.java +++ b/src/main/java/ru/javaops/config/exception/ExceptionInfoHandler.java @@ -1,9 +1,8 @@ package ru.javaops.config.exception; +import com.google.common.base.Throwables; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import ru.javaops.util.exception.ErrorInfo; @@ -11,7 +10,6 @@ import javax.servlet.http.HttpServletRequest; /** - * User: vvserdiuk * Date: 20.02.2016 */ @ControllerAdvice(annotations = RestController.class) @@ -21,9 +19,8 @@ public class ExceptionInfoHandler { @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler(Exception.class) @ResponseBody - @Order(Ordered.LOWEST_PRECEDENCE) public ErrorInfo handleError(HttpServletRequest req, Exception e) { - log.error("Exception at request " + req.getRequestURI()); - return new ErrorInfo(req.getRequestURL(), e); + log.error("Exception at request " + req.getRequestURI(), e); + return new ErrorInfo(req.getRequestURL(), Throwables.getRootCause(e)); } } diff --git a/src/main/java/ru/javaops/config/exception/GlobalExceptionHandler.java b/src/main/java/ru/javaops/config/exception/GlobalExceptionHandler.java index 6bc4c0d..a6b5683 100644 --- a/src/main/java/ru/javaops/config/exception/GlobalExceptionHandler.java +++ b/src/main/java/ru/javaops/config/exception/GlobalExceptionHandler.java @@ -1,13 +1,13 @@ package ru.javaops.config.exception; +import com.google.common.base.Throwables; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.NoHandlerFoundException; +import ru.javaops.AuthorizedUser; import javax.servlet.http.HttpServletRequest; @@ -20,28 +20,41 @@ public class GlobalExceptionHandler { private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(NoHandlerFoundException.class) - @Order(Ordered.LOWEST_PRECEDENCE - 1) - ModelAndView noHandlerFoundHandler() throws Exception { + public ModelAndView noHandlerFoundHandler() throws Exception { return processException("Неверный запрос"); } + @ExceptionHandler(NoPartnerException.class) + public ModelAndView noPartnerException(HttpServletRequest req, NoPartnerException pe) throws Exception { + log.error("Illegal partner email in request " + req.getRequestURL()); + return new ModelAndView("noRegisteredPartner", "email", pe.getPartnerKey()); + } + @ExceptionHandler(IllegalArgumentException.class) - @Order(Ordered.LOWEST_PRECEDENCE - 1) - ModelAndView illegalArgumentHandler(HttpServletRequest req, Exception e) throws Exception { - log.error("Illegal params in request" + req.getRequestURL(), e); + public ModelAndView illegalArgumentHandler(HttpServletRequest req, Exception e) throws Exception { + log.error("Illegal params in request " + req.getRequestURL(), e); return processException(e.getMessage() == null ? "Неверные параметры запроса" : e.getMessage()); } +/* + @ExceptionHandler(ValidationException.class) + public ModelAndView bindValidationError(HttpServletRequest req, BindingResult result) { + log.error("Illegal binding in request " + req.getRequestURL()); + StringBuilder sb = new StringBuilder(); + result.getFieldErrors().forEach(fe -> sb.append(Strings.isNullOrEmpty(fe.getField()) ? "Поле формы" : fe.getField()).append(" ").append(fe.getDefaultMessage()).append("
")); + return processException(sb.toString()); + } +*/ + @ExceptionHandler(Throwable.class) - @Order(Ordered.LOWEST_PRECEDENCE) - ModelAndView defaultHandler(HttpServletRequest req, Exception e) throws Exception { + public ModelAndView defaultHandler(HttpServletRequest req, Throwable e) throws Exception { log.error("Exception at request " + req.getRequestURL(), e); - return processException(e.getMessage()); + return processException(Throwables.getRootCause(e).getMessage()); } private ModelAndView processException(String msg) { - ModelAndView mav = new ModelAndView("exception"); - mav.addObject("message", msg); - return mav; + ModelAndView modelAndView = new ModelAndView("exception", "message", msg); + modelAndView.getModelMap().addAttribute("authUser", AuthorizedUser.user()); + return modelAndView; } } \ No newline at end of file diff --git a/src/main/java/ru/javaops/config/exception/NoPartnerException.java b/src/main/java/ru/javaops/config/exception/NoPartnerException.java new file mode 100644 index 0000000..80fd481 --- /dev/null +++ b/src/main/java/ru/javaops/config/exception/NoPartnerException.java @@ -0,0 +1,13 @@ +package ru.javaops.config.exception; + +public class NoPartnerException extends RuntimeException { + private String partnerKey; + + public NoPartnerException(String partnerKey) { + this.partnerKey = partnerKey; + } + + public String getPartnerKey() { + return partnerKey; + } +} diff --git a/src/main/java/ru/javaops/model/BaseEntity.java b/src/main/java/ru/javaops/model/BaseEntity.java index 1b0b547..e8ae477 100644 --- a/src/main/java/ru/javaops/model/BaseEntity.java +++ b/src/main/java/ru/javaops/model/BaseEntity.java @@ -1,12 +1,9 @@ package ru.javaops.model; -import com.fasterxml.jackson.annotation.JsonIgnore; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.hibernate.Hibernate; import org.springframework.hateoas.Identifiable; -import javax.persistence.Access; -import javax.persistence.AccessType; -import javax.persistence.MappedSuperclass; +import javax.persistence.*; /** * User: gkislin @@ -14,17 +11,49 @@ */ @MappedSuperclass @Access(AccessType.FIELD) -public class BaseEntity extends AbstractPersistable implements Identifiable { +public class BaseEntity implements Identifiable { + + // PROPERTY access for id due to bug: https://hibernate.atlassian.net/browse/HHH-3718 + @Access(value = AccessType.PROPERTY) + @Id + @GeneratedValue + private Integer id; public BaseEntity() { } protected BaseEntity(Integer id) { - setId(id); + this.id = id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Override + public Integer getId() { + return id; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || !getClass().equals(Hibernate.getClass(o))) { + return false; + } + BaseEntity that = (BaseEntity) o; + return getId() != null && getId().equals(that.getId()); + } + + @Override + public int hashCode() { + return (getId() == null) ? 0 : getId(); } - @JsonIgnore - public boolean isNew() { - return super.isNew(); + @Override + public String toString() { + return String.format("Entity of type %s with id: %s", getClass().getName(), getId()); } } diff --git a/src/main/java/ru/javaops/model/Group.java b/src/main/java/ru/javaops/model/Group.java index ac37c31..7224982 100644 --- a/src/main/java/ru/javaops/model/Group.java +++ b/src/main/java/ru/javaops/model/Group.java @@ -25,10 +25,17 @@ public class Group extends NamedEntity { @JoinColumn(name = "project_id") private Project project; - @OneToMany(mappedBy = "group", fetch = FetchType.LAZY) private Set groupUsers; + @Column(name = "role") + @Enumerated(EnumType.STRING) + private Role role; + + public Role getRole() { + return role; + } + public Set getGroupUsers() { return groupUsers; } @@ -41,6 +48,18 @@ public GroupType getType() { return type; } + public LocalDate getStartDate() { + return startDate; + } + + public LocalDate getEndDate() { + return endDate; + } + + public boolean isMembers() { + return role == Role.ROLE_MEMBER; + } + @Override public String toString() { return "Group{" + diff --git a/src/main/java/ru/javaops/model/GroupType.java b/src/main/java/ru/javaops/model/GroupType.java index f02ec33..222c7c4 100644 --- a/src/main/java/ru/javaops/model/GroupType.java +++ b/src/main/java/ru/javaops/model/GroupType.java @@ -6,6 +6,7 @@ */ public enum GroupType { TEST, + PARTNER, REGISTERED, FINISHED, CURRENT diff --git a/src/main/java/ru/javaops/model/IdeaCoupon.java b/src/main/java/ru/javaops/model/IdeaCoupon.java new file mode 100644 index 0000000..b980212 --- /dev/null +++ b/src/main/java/ru/javaops/model/IdeaCoupon.java @@ -0,0 +1,61 @@ +package ru.javaops.model; + +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + +import javax.persistence.*; +import java.time.LocalDate; + +/** + * gkislin + * 07.12.2016 + */ +@Entity +@Table(name = "idea_coupon", uniqueConstraints = { + @UniqueConstraint(columnNames = {"coupon"}, name = "idea_coupon_unique_idx"), + @UniqueConstraint(columnNames = {"user_id", "project_id"}, name = "idea_coupon_user_project_unique_idx") +}) +public class IdeaCoupon extends BaseEntity{ + @Column(name = "coupon") + private String coupon; + + @Column(name = "date") + private LocalDate date; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + @OnDelete(action = OnDeleteAction.CASCADE) + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "project_id") + private Project project; + + public String getCoupon() { + return coupon; + } + + public void setCoupon(String coupon) { + this.coupon = coupon; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public Project getProject() { + return project; + } + + public void setProject(Project project) { + this.project = project; + } +} diff --git a/src/main/java/ru/javaops/model/MailCase.java b/src/main/java/ru/javaops/model/MailCase.java index 7d1fac4..3ca1a2c 100644 --- a/src/main/java/ru/javaops/model/MailCase.java +++ b/src/main/java/ru/javaops/model/MailCase.java @@ -1,9 +1,11 @@ package ru.javaops.model; -import org.hibernate.annotations.OnDelete; -import org.hibernate.annotations.OnDeleteAction; +import ru.javaops.to.UserMail; +import ru.javaops.to.UserMailImpl; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; import javax.validation.constraints.NotNull; import java.util.Date; @@ -14,25 +16,16 @@ @Entity @Table(name = "mail_case") public class MailCase extends BaseEntity { - protected MailCase() { - } - - public MailCase(User user, String template, String result) { - this.user = user; - this.template = template; - this.result = result; - this.datetime = new Date(); - } - @Column(name = "datetime", columnDefinition = "TIMESTAMP DEFAULT NOW()", nullable = false) @NotNull private Date datetime; - @ManyToOne - @JoinColumn(name = "user_id", nullable = false) + @Column(name = "email", nullable = false) @NotNull - @OnDelete(action = OnDeleteAction.CASCADE) - private User user; + private String email; + + @Column(name = "full_name") + private String fullName; @Column(name = "template", nullable = false) @NotNull @@ -41,4 +34,27 @@ public MailCase(User user, String template, String result) { @Column(name = "result", nullable = false) @NotNull private String result; + + protected MailCase() { + } + + public MailCase(UserMail userMail, String template, String result) { + this.fullName = userMail.getFullName(); + this.email = userMail.getEmail(); + this.template = template; + this.result = result; + this.datetime = new Date(); + } + + public UserMail getUserMail() { + return new UserMailImpl(fullName, email); + } + + public String getTemplate() { + return template; + } + + public String getResult() { + return result; + } } diff --git a/src/main/java/ru/javaops/model/ParticipationType.java b/src/main/java/ru/javaops/model/ParticipationType.java index 0879ee4..c464a02 100644 --- a/src/main/java/ru/javaops/model/ParticipationType.java +++ b/src/main/java/ru/javaops/model/ParticipationType.java @@ -5,7 +5,7 @@ * 02.09.2015. */ public enum ParticipationType { - REPEAT, - FIRST_REGISTERED, - REGISTERED; + REGULAR, + HW_REVIEW, + ASSIST } diff --git a/src/main/java/ru/javaops/model/Payment.java b/src/main/java/ru/javaops/model/Payment.java index 04ffa4f..c9ac748 100644 --- a/src/main/java/ru/javaops/model/Payment.java +++ b/src/main/java/ru/javaops/model/Payment.java @@ -1,5 +1,8 @@ package ru.javaops.model; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + import javax.persistence.*; import java.time.LocalDate; @@ -10,14 +13,11 @@ @Entity @Table(name = "payment") public class Payment extends BaseEntity { - public Payment() { - } - public Payment(int sum, Currency currency, String comment) { - this.sum = sum; - this.currency = currency; - this.comment = comment; - } + @OnDelete(action = OnDeleteAction.CASCADE) + @JoinColumn(name = "user_group_id", nullable = false) + @ManyToOne + private UserGroup userGroup; @Column(name = "date") private LocalDate date = LocalDate.now(); @@ -36,4 +36,17 @@ public Payment(int sum, Currency currency, String comment) { public String toString() { return "Payment(" + sum + currency + ':' + comment + ')'; } + + public Payment() { + } + + public Payment(int sum, Currency currency, String comment) { + this.sum = sum; + this.currency = currency; + this.comment = comment; + } + + public void setUserGroup(UserGroup userGroup) { + this.userGroup = userGroup; + } } diff --git a/src/main/java/ru/javaops/model/Project.java b/src/main/java/ru/javaops/model/Project.java index d2d333e..2b3dfe4 100644 --- a/src/main/java/ru/javaops/model/Project.java +++ b/src/main/java/ru/javaops/model/Project.java @@ -1,5 +1,7 @@ package ru.javaops.model; +import com.google.common.base.CaseFormat; + import javax.persistence.*; import java.util.HashSet; import java.util.Set; @@ -32,4 +34,9 @@ public Set getGroup() { public void setGroup(Set group) { this.group = group; } + + @Override + public String toString() { + return String.format("%s", name, CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, name)); + } } diff --git a/src/main/java/ru/javaops/model/RegisterType.java b/src/main/java/ru/javaops/model/RegisterType.java new file mode 100644 index 0000000..fda3caf --- /dev/null +++ b/src/main/java/ru/javaops/model/RegisterType.java @@ -0,0 +1,11 @@ +package ru.javaops.model; + +/** + * GKislin + * 02.09.2015. + */ +public enum RegisterType { + REPEAT, + FIRST_REGISTERED, + REGISTERED +} diff --git a/src/main/java/ru/javaops/model/Role.java b/src/main/java/ru/javaops/model/Role.java index 4a1404f..fc8b572 100644 --- a/src/main/java/ru/javaops/model/Role.java +++ b/src/main/java/ru/javaops/model/Role.java @@ -7,11 +7,13 @@ * Date: 22.08.2014 */ public enum Role implements GrantedAuthority { - ROLE_USER, + ROLE_MEMBER, + ROLE_ASSISTANT, + ROLE_PARTNER, ROLE_ADMIN; @Override public String getAuthority() { return name(); } -} +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/model/User.java b/src/main/java/ru/javaops/model/User.java index a77751d..e99c6b1 100644 --- a/src/main/java/ru/javaops/model/User.java +++ b/src/main/java/ru/javaops/model/User.java @@ -3,11 +3,13 @@ import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; +import org.hibernate.validator.constraints.URL; +import ru.javaops.to.UserMail; import javax.persistence.*; -import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; -import java.util.Collection; +import java.io.Serializable; +import java.time.LocalDate; import java.util.Date; import java.util.EnumSet; import java.util.Set; @@ -20,7 +22,10 @@ */ @Entity @Table(name = "users") -public class User extends BaseEntity { +public class User extends BaseEntity implements UserMail, Serializable { + private static final long PARTNER_RESUME_NOTIFY = 0x1; + private static final long PARTNER_CORPORATE_STUDY = 0x2; + private static final long PARTNER_DIRECT_EMAIL = 0x4; @Column(name = "email", nullable = false, unique = true) @Email @@ -37,33 +42,57 @@ public class User extends BaseEntity { @Email @Size(max = 100) @Column(length = 100, unique = true) - @Pattern(regexp = "[_A-Za-z0-9-\\+\\.]*@gmail\\.[A-Za-z]{2,3}") private String gmail; @Size(max = 50) private String location; + @Size(max = 50) + private String phone; + @Size(max = 100) @Column(name = "info_source", length = 100) private String infoSource; - @Size(max = 500) - @Column(name = "about_me", length = 5000) + @Column(name = "about_me") private String aboutMe; - @Size(max = 100) + @Column(name = "stats_agree") + private boolean statsAgree; + + @Column(name = "consider_job_offers") + private Boolean considerJobOffers; + + @Column(name = "relocation_ready") + private Boolean relocationReady; + + @Column(name = "job_through_topjava") + private Boolean jobThroughTopjava; + + @Column(name = "under_recruitment") + private Boolean underRecruitment; + + @URL + @Column(name = "resume_url") + private String resumeUrl; + + @URL + @Size + @Column private String website; - @Size(max = 50) + @Column private String company; @Size(max = 50) + @Column private String skype; - @Size(max = 100) + @Column private String github; @Size(max = 100) + @Column private String vk; @Column(name = "active", nullable = false, columnDefinition = "BOOLEAN DEFAULT TRUE") @@ -72,37 +101,56 @@ public class User extends BaseEntity { @Column(name = "registered_date", columnDefinition = "TIMESTAMP DEFAULT NOW()") private Date registeredDate = new Date(); + @Column + private String relocation; + + @Column + private String mark; + + @Column(name = "bonus", columnDefinition = "INT DEFAULT 0") + private int bonus = 0; + @Column(name = "activated_date") private Date activatedDate; @Enumerated(EnumType.STRING) @CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id")) @Column(name = "role") - @ElementCollection(fetch = FetchType.EAGER) + @ElementCollection(fetch = FetchType.LAZY) private Set roles; - @OneToMany(mappedBy = "group") + @OneToMany(mappedBy = "user", fetch = FetchType.LAZY) private Set userGroups; + private LocalDate hrUpdate; + + private String comment; + + @Column(name = "partner_flag", columnDefinition = "bigint default 0") + private long partnerFlag; + public User() { } - public User(String email, String nameSurname, String location, String infoSource) { - this(null, email, nameSurname, location, infoSource); + public User(String email, String nameSurname, String location, String infoSource, String skype) { + this(null, email, nameSurname, location, infoSource, skype); } - public User(Integer id, String email, String fullName, String location, String infoSource) { + public User(Integer id, String email, String fullName, String location, String infoSource, String skype) { super(id); this.email = email; this.fullName = fullName; this.location = location; this.infoSource = infoSource; + this.skype = skype; } + @Override public String getEmail() { return email; } + // Exception evaluating SpringEL expression: "user.firstName" for default method in UserMail public String getFirstName() { return fullName == null ? "" : (substringBefore(capitalize(fullName), " ")); } @@ -128,6 +176,9 @@ public boolean isActive() { } public Set getRoles() { + if (roles == null) { + roles = EnumSet.noneOf(Role.class); + } return roles; } @@ -135,10 +186,6 @@ public String getPassword() { return password; } - public void setRoles(Collection roles) { - this.roles = EnumSet.copyOf(roles); - } - public Set getUserGroups() { return userGroups; } @@ -163,10 +210,209 @@ public String getInfoSource() { return infoSource; } + @Override public String getFullName() { return fullName; } + public void setGmail(String gmail) { + this.gmail = gmail; + } + + public void setAboutMe(String aboutMe) { + this.aboutMe = aboutMe; + } + + public void setSkype(String skype) { + this.skype = skype; + } + + public String getGmail() { + return gmail; + } + + public String getAboutMe() { + return aboutMe; + } + + public String getSkype() { + return skype; + } + + public String getWebsite() { + return website; + } + + public String getCompany() { + return company; + } + + public Boolean isJobThroughTopjava() { + return jobThroughTopjava; + } + + public Boolean isUnderRecruitment() { + return underRecruitment; + } + + public void setUnderRecruitment(Boolean underRecruitment) { + this.underRecruitment = underRecruitment; + } + + public void setGithub(String github) { + this.github = github; + } + + public String getResumeUrl() { + return resumeUrl; + } + + public String getGithub() { + return github; + } + + public String getVk() { + return vk; + } + + @Override + public Date getRegisteredDate() { + return registeredDate; + } + + public Date getActivatedDate() { + return activatedDate; + } + + public Boolean isConsiderJobOffers() { + return considerJobOffers; + } + + public void setConsiderJobOffers(Boolean considerJobOffers) { + this.considerJobOffers = considerJobOffers; + } + + public void setCompany(String company) { + this.company = company; + } + + public void setJobThroughTopjava(Boolean jobThroughTopjava) { + this.jobThroughTopjava = jobThroughTopjava; + } + + public void setResumeUrl(String resumeUrl) { + this.resumeUrl = resumeUrl; + } + + public boolean isStatsAgree() { + return statsAgree; + } + + public void setStatsAgree(boolean statsAgree) { + this.statsAgree = statsAgree; + } + + public String getPhone() { + return phone; + } + + public Boolean isRelocationReady() { + return relocationReady; + } + + public void setRelocationReady(Boolean relocationReady) { + this.relocationReady = relocationReady; + } + + public LocalDate getHrUpdate() { + return hrUpdate; + } + + public void setHrUpdate(LocalDate hrUpdate) { + this.hrUpdate = hrUpdate; + } + + public String getRelocation() { + return relocation; + } + + public void setRelocation(String relocation) { + this.relocation = relocation; + } + + public String getComment() { + return comment; + } + + public int getBonus() { + return bonus; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public boolean isPartner() { + return hasRole(Role.ROLE_PARTNER); + } + + public boolean isAdmin() { + return hasRole(Role.ROLE_ADMIN); + } + + public boolean isPartnerResumeNotify() { + return hasPartnerFlag(PARTNER_RESUME_NOTIFY); + } + + public boolean isPartnerCorporateStudy() { + return hasPartnerFlag(PARTNER_CORPORATE_STUDY); + } + + public boolean isPartnerDirectEmail() { + return hasPartnerFlag(PARTNER_DIRECT_EMAIL); + } + + public void setPartnerResumeNotify(boolean flag) { + setPartnerFlag(PARTNER_RESUME_NOTIFY, flag); + } + + public void setPartnerCorporateStudy(boolean flag) { + setPartnerFlag(PARTNER_CORPORATE_STUDY, flag); + } + + public void setPartnerDirectEmail(boolean flag) { + setPartnerFlag(PARTNER_DIRECT_EMAIL, flag); + } + + public boolean isMember() { + return hasRole(Role.ROLE_MEMBER); + } + + private boolean hasRole(Role role) { + return roles != null && roles.contains(role); + } + + private boolean hasPartnerFlag(long mask) { + return (partnerFlag & mask) != 0; + } + + public int addBonus(int bonus) { + this.bonus += bonus; + return bonus; + } + + private void setPartnerFlag(long mask, boolean flag) { + if (flag) { + partnerFlag |= mask; + } else { + partnerFlag &= ~mask; + } + } + + public String getMark() { + return mark; + } + @Override public String toString() { return "User (" + @@ -177,4 +423,14 @@ public String toString() { ", infoSource=" + infoSource + ')'; } + + @Override + public boolean equals(Object o) { + return this == o || !(o == null || getClass() != o.getClass()) && email.equals(((User) o).email); + } + + @Override + public int hashCode() { + return email.hashCode(); + } } diff --git a/src/main/java/ru/javaops/model/UserGroup.java b/src/main/java/ru/javaops/model/UserGroup.java index e979989..f30a6b0 100644 --- a/src/main/java/ru/javaops/model/UserGroup.java +++ b/src/main/java/ru/javaops/model/UserGroup.java @@ -1,9 +1,11 @@ package ru.javaops.model; +import com.google.common.base.MoreObjects; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import javax.persistence.*; +import java.util.Date; /** * GKislin @@ -13,16 +15,6 @@ @Table(name = "user_group", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "group_id"}, name = "user_group_unique_idx")}) public class UserGroup extends BaseEntity { - public UserGroup() { - } - - public UserGroup(User user, Group group, ParticipationType type, String channel) { - this.user = user; - this.group = group; - this.type = type; - this.channel = channel; - } - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", nullable = false) @OnDelete(action = OnDeleteAction.CASCADE) @@ -33,16 +25,32 @@ public UserGroup(User user, Group group, ParticipationType type, String channel) @OnDelete(action = OnDeleteAction.CASCADE) private Group group; + @Column(name = "registered_date", columnDefinition = "TIMESTAMP DEFAULT NOW()") + private Date registeredDate = new Date(); + @Enumerated(EnumType.STRING) - @Column(name = "type") - private ParticipationType type; + @Column(name = "register_type") + private RegisterType registerType; + + @Enumerated(EnumType.STRING) + @Column(name = "participation_type", nullable = true) + private ParticipationType participationType; @Column(name = "channel") private String channel; - @OneToOne(fetch = FetchType.LAZY) - @OnDelete(action = OnDeleteAction.CASCADE) - private Payment payment; + @Transient + private boolean alreadyExist = false; + + public UserGroup() { + } + + public UserGroup(User user, Group group, RegisterType type, String channel) { + this.user = user; + this.group = group; + this.registerType = type; + this.channel = channel; + } public String getChannel() { return channel; @@ -56,15 +64,57 @@ public void setGroup(Group group) { this.group = group; } - public ParticipationType getType() { - return type; + public RegisterType getRegisterType() { + return registerType; } public Group getGroup() { return group; } - public void setPayment(Payment payment) { - this.payment = payment; + public void setParticipationType(ParticipationType participationType) { + this.participationType = participationType; + } + + public void setChannel(String channel) { + this.channel = channel; + } + + public void setRegisteredDate(Date registeredDate) { + this.registeredDate = registeredDate; + } + + public void setRegisterType(RegisterType registerType) { + this.registerType = registerType; + } + + public ParticipationType getParticipationType() { + return participationType; + } + + public boolean isAlreadyExist() { + return alreadyExist; + } + + public void setAlreadyExist(boolean alreadyExist) { + this.alreadyExist = alreadyExist; + } + + public Date getRegisteredDate() { + return registeredDate; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("channel", channel) + .add("id", getId()) + .add("user", user) + .add("group", group) + .add("registeredDate", registeredDate) + .add("registerType", registerType) + .add("participationType", participationType) + .add("alreadyExist", alreadyExist) + .toString(); } } diff --git a/src/main/java/ru/javaops/repository/GroupRepository.java b/src/main/java/ru/javaops/repository/GroupRepository.java index 04227e3..e9e07f6 100644 --- a/src/main/java/ru/javaops/repository/GroupRepository.java +++ b/src/main/java/ru/javaops/repository/GroupRepository.java @@ -1,7 +1,5 @@ package ru.javaops.repository; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -18,11 +16,7 @@ public interface GroupRepository extends JpaRepository { " WHERE ug.user.id = :userId") Set findByUser(@Param("userId") int userId); - - @Query("SELECT g FROM Group g LEFT JOIN g.project WHERE g.name = :name") - @Cacheable("group") - Group findByName(@Param("name") String name); - - @Cacheable("groups") - List findAll(Sort sort); + @Override + @Query("SELECT g FROM Group g LEFT JOIN FETCH g.project") + List findAll(); } \ No newline at end of file diff --git a/src/main/java/ru/javaops/repository/IdeaCouponRepository.java b/src/main/java/ru/javaops/repository/IdeaCouponRepository.java new file mode 100644 index 0000000..154a718 --- /dev/null +++ b/src/main/java/ru/javaops/repository/IdeaCouponRepository.java @@ -0,0 +1,19 @@ +package ru.javaops.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; +import ru.javaops.model.IdeaCoupon; + +@Transactional(readOnly = true) +public interface IdeaCouponRepository extends JpaRepository { + @Query("SELECT c FROM IdeaCoupon c WHERE c.user.id=:userId AND c.project.id=:projectId") + IdeaCoupon findByUserIdAndProjectId(@Param("userId") int userId, @Param("projectId") int projectId); + + @Query("SELECT c FROM IdeaCoupon c WHERE c.user.id=:userId") + IdeaCoupon findByUserId(@Param("userId") int userId); + + @Query(value = "SELECT * FROM idea_coupon WHERE user_id IS NULL LIMIT 1", nativeQuery = true) + IdeaCoupon getUnused(); +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/repository/MailCaseRepository.java b/src/main/java/ru/javaops/repository/MailCaseRepository.java index ef23b3a..9cdf391 100644 --- a/src/main/java/ru/javaops/repository/MailCaseRepository.java +++ b/src/main/java/ru/javaops/repository/MailCaseRepository.java @@ -1,9 +1,14 @@ package ru.javaops.repository; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.transaction.annotation.Transactional; import ru.javaops.model.MailCase; +import java.util.List; + @Transactional(readOnly = true) public interface MailCaseRepository extends JpaRepository { + @Query("SELECT mc FROM MailCase mc WHERE mc.datetime > TODAY AND mc.result <> 'OK'") + List getTodayFailed(); } \ No newline at end of file diff --git a/src/main/java/ru/javaops/repository/ProjectRepository.java b/src/main/java/ru/javaops/repository/ProjectRepository.java new file mode 100644 index 0000000..35834fa --- /dev/null +++ b/src/main/java/ru/javaops/repository/ProjectRepository.java @@ -0,0 +1,10 @@ +package ru.javaops.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.transaction.annotation.Transactional; +import ru.javaops.model.Project; + +@Transactional(readOnly = true) +public interface ProjectRepository extends JpaRepository { + Project getByName(String name); +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/repository/SqlRepository.java b/src/main/java/ru/javaops/repository/SqlRepository.java new file mode 100644 index 0000000..5efc61c --- /dev/null +++ b/src/main/java/ru/javaops/repository/SqlRepository.java @@ -0,0 +1,51 @@ +package ru.javaops.repository; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.jdbc.support.JdbcUtils; +import org.springframework.stereotype.Repository; +import ru.javaops.SqlResult; +import ru.javaops.to.UserMailImpl; + +import java.sql.ResultSetMetaData; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * gkislin + * 30.10.2016 + */ + +@Repository +public class SqlRepository { + private static final BeanPropertyRowMapper ROW_MAPPER = BeanPropertyRowMapper.newInstance(UserMailImpl.class); + + @Autowired + private NamedParameterJdbcTemplate jdbcTemplate; + + public List getUsersMail(String sql) { + return jdbcTemplate.query(sql, ROW_MAPPER); + } + + public SqlResult execute(String sql, Map params) { + return jdbcTemplate.query(sql, params, rs -> { + ResultSetMetaData rsmd = rs.getMetaData(); + int columnCount = rsmd.getColumnCount(); + List headers = new ArrayList<>(columnCount); + for (int i = 1; i <= columnCount; i++) { + headers.add(JdbcUtils.lookupColumnName(rsmd, i)); + } + List rows = new ArrayList<>(); + while (rs.next()) { + Object[] row = new Object[columnCount]; + for (int i = 1; i <= columnCount; i++) { + row[i - 1] = JdbcUtils.getResultSetValue(rs, i); + } + rows.add(row); + } + return new SqlResult(headers, rows); + }); + } +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/repository/UserRepository.java b/src/main/java/ru/javaops/repository/UserRepository.java index 72a8779..4697f64 100644 --- a/src/main/java/ru/javaops/repository/UserRepository.java +++ b/src/main/java/ru/javaops/repository/UserRepository.java @@ -1,25 +1,60 @@ package ru.javaops.repository; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; -import ru.javaops.model.GroupType; import ru.javaops.model.User; +import ru.javaops.to.UserMail; +import ru.javaops.to.UserStat; +import java.util.List; import java.util.Set; @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { + @Override + User getOne(Integer integer); + @Query("SELECT u FROM User u " + - " LEFT JOIN u.roles WHERE u.email=:email") + " LEFT JOIN FETCH u.roles WHERE u.email=:email") User findByEmail(@Param("email") String email); - @Query("SELECT DISTINCT(ug.user) FROM UserGroup ug " + - " WHERE ug.group.type=:groupType AND ug.group.project.name=:projectName AND ug.user.active=TRUE") - Set findByProjectAndGroupType(@Param("projectName") String projectName, @Param("groupType") GroupType GroupType); + @Query("SELECT u FROM User u " + + " LEFT JOIN FETCH u.roles WHERE u.email=:email OR u.gmail=:email") + User findByEmailOrGmail(@Param("email") String email); - @Query("SELECT DISTINCT(ug.user) FROM UserGroup ug " + + @Query("SELECT u FROM User u " + + " LEFT JOIN FETCH u.userGroups WHERE u.email=:email") + User findByEmailWithGroup(@Param("email") String email); + + @Query("SELECT new ru.javaops.to.UserMailImpl(ug.user) FROM UserGroup ug " + " WHERE ug.group.name=:groupName AND ug.user.active=TRUE") - Set findByGroupName(@Param("groupName") String groupName); + Set findByGroupName(@Param("groupName") String groupName); + + @Query("SELECT ug.user FROM UserGroup ug WHERE ug.user.email=:email AND ug.group.id=:groupId") + User findByEmailAndGroupId(@Param("email") String email, @Param("groupId") int groupId); + + @Query("SELECT new ru.javaops.to.UserStat(u.fullName, u.email, u.location, u.aboutMe, u.skype) FROM User u " + + "WHERE u.statsAgree=TRUE " + + "AND u.fullName IS NOT NULL " + + "AND u.location IS NOT NULL " + + "ORDER BY LOWER(u.location)") + List findAllForStats(); + + @Query("SELECT ug.user FROM UserGroup ug WHERE ug.user.email=:email AND ug.group.name=:groupName") + User findByEmailAndGroupName(@Param("email") String email, @Param("groupName") String groupName); + + @Override + @Transactional + User save(User entity); + + // https://jira.spring.io/browse/DATAJPA-1103 +// @Query("UPDATE User u SET u.comment = :#{#uaInfo.comment}, u.mark=:#{#uaInfo.mark}, u.bonus=:#{#uaInfo.bonus} WHERE u.email=:email") +// void saveAdminInfo(@Param("email") String email, @Param("uaInfo") UserAdminsInfo uaInfo); + @Transactional + @Modifying + @Query("UPDATE User u SET u.comment = :comment, u.mark=:mark, u.bonus=:bonus WHERE u.email=:email") + void saveAdminInfo(@Param("email") String email, @Param("comment") String comment, @Param("mark") String mark, @Param("bonus") Integer bonus); } \ No newline at end of file diff --git a/src/main/java/ru/javaops/service/CachedGroups.java b/src/main/java/ru/javaops/service/CachedGroups.java new file mode 100644 index 0000000..fb1fac2 --- /dev/null +++ b/src/main/java/ru/javaops/service/CachedGroups.java @@ -0,0 +1,61 @@ +package ru.javaops.service; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import ru.javaops.model.Group; +import ru.javaops.model.Project; +import ru.javaops.repository.GroupRepository; +import ru.javaops.repository.ProjectRepository; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * gkislin + * 17.03.2017 + */ +@Service +@Slf4j +public class CachedGroups { + @Autowired + private CacheManager cacheManager; + + @Autowired + private GroupRepository groupRepository; + + @Autowired + private ProjectRepository projectRepository; + + @Cacheable("groups") + public List getAll() { + log.debug("getAll"); + List groups = groupRepository.findAll(); + Cache cache = cacheManager.getCache("group"); + groups.forEach(g -> cache.put(g.getName(), g)); + return groups; + } + + @Cacheable("member_groups") + public Map getMembers() { + List groups = getAll(); + return groups.stream().filter(Group::isMembers).collect(Collectors.toMap(Group::getId, g -> g)); + } + + @Cacheable("project") + public Project getProject(String name) { + return projectRepository.getByName(name); + } + + @Cacheable("group") + public Group findByName(String name) { + List groups = getAll(); + return groups.stream() + .filter(g -> name.equals(g.getName())) + .findAny().orElseThrow(() -> new IllegalArgumentException("Не найдена группа '" + name + '\'')); + } +} diff --git a/src/main/java/ru/javaops/service/GoogleAdminSDKDirectoryService.java b/src/main/java/ru/javaops/service/GoogleAdminSDKDirectoryService.java new file mode 100644 index 0000000..5106fa9 --- /dev/null +++ b/src/main/java/ru/javaops/service/GoogleAdminSDKDirectoryService.java @@ -0,0 +1,81 @@ +package ru.javaops.service; + +import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; +import com.google.api.client.googleapis.json.GoogleJsonResponseException; +import com.google.api.services.admin.directory.Directory; +import com.google.api.services.admin.directory.DirectoryScopes; +import com.google.api.services.admin.directory.model.Member; +import com.google.api.services.admin.directory.model.Members; +import com.google.api.services.admin.directory.model.Users; +import com.google.common.collect.ImmutableList; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.GeneralSecurityException; +import java.util.List; + +import static com.google.api.client.googleapis.util.Utils.getDefaultJsonFactory; +import static com.google.api.client.googleapis.util.Utils.getDefaultTransport; + +@Service +@Slf4j +public class GoogleAdminSDKDirectoryService { + private static final String APPLICATION_NAME = "JavaOPs"; + + private final List SCOPES = ImmutableList.of( + DirectoryScopes.ADMIN_DIRECTORY_GROUP_MEMBER, DirectoryScopes.ADMIN_DIRECTORY_USER, DirectoryScopes.ADMIN_DIRECTORY_GROUP); + + private Directory service; + + @PostConstruct + void init() throws GeneralSecurityException, IOException { + GoogleCredential credential; + try (InputStream is = new FileInputStream("./config/client_secret.json")) { + credential = GoogleCredential.fromStream(is); + } + GoogleCredential credentialWithUser = new GoogleCredential.Builder() + .setTransport(getDefaultTransport()) + .setJsonFactory(getDefaultJsonFactory()) + .setServiceAccountUser("admin@javaops.ru") + .setServiceAccountId(credential.getServiceAccountId()) + .setServiceAccountScopes(SCOPES) + .setServiceAccountPrivateKey(credential.getServiceAccountPrivateKey()) + .setServiceAccountPrivateKeyId(credential.getServiceAccountPrivateKeyId()) + .setTokenServerEncodedUrl(credential.getTokenServerEncodedUrl()).build(); + + service = new Directory.Builder(getDefaultTransport(), getDefaultJsonFactory(), credentialWithUser).setApplicationName(APPLICATION_NAME).build(); + } + + public Members members(String googleGroupName) throws IOException { + return service.members().list(googleGroupName).execute(); + } + + public String insertMember(String googleGroupMail, String gmail) { + log.info("++++ insert {} to {} google groups ++++", gmail, googleGroupMail); + Member member = new Member(); + member.setEmail(gmail); + try { + service.members().insert(googleGroupMail, member).execute(); + return "ok"; + } catch (GoogleJsonResponseException ex) { + log.warn(ex.getDetails().toString()); + if (ex.getDetails().getCode() == 409) { + //Member already exists. + log.warn(ex.getDetails().getMessage()); + return "ok"; + } + return ex.getDetails().getMessage(); + } catch (Exception e) { + log.error("insertMember failed", e); + return e.toString(); + } + } + + public Users users(String googleDomain) throws IOException { + return service.users().list().setDomain(googleDomain).execute(); + } +} diff --git a/src/main/java/ru/javaops/service/GroupService.java b/src/main/java/ru/javaops/service/GroupService.java index 3e42277..6f86d92 100644 --- a/src/main/java/ru/javaops/service/GroupService.java +++ b/src/main/java/ru/javaops/service/GroupService.java @@ -4,24 +4,27 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.Cache; -import org.springframework.cache.CacheManager; -import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.javaops.model.*; import ru.javaops.repository.GroupRepository; import ru.javaops.repository.PaymentRepository; import ru.javaops.repository.UserGroupRepository; +import ru.javaops.to.UserMail; import ru.javaops.to.UserTo; +import ru.javaops.util.ProjectUtil; +import ru.javaops.util.ProjectUtil.ProjectProps; +import ru.javaops.util.TimeUtil; import ru.javaops.util.UserUtil; +import ru.javaops.util.exception.NotMemberException; +import java.time.LocalDate; import java.util.*; +import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; /** * GKislin @@ -34,6 +37,9 @@ public class GroupService { @Autowired private GroupRepository groupRepository; + @Autowired + private CachedGroups cachedGroups; + @Autowired private UserGroupRepository userGroupRepository; @@ -43,108 +49,141 @@ public class GroupService { @Autowired private PaymentRepository paymentRepository; - @Autowired - private CacheManager cacheManager; + public boolean isProjectMember(int userId, String projectName) { + return getGroupsByUserId(userId).stream() + .anyMatch(g -> g.isMembers() && projectName.equals(g.getProject().getName())); + } - public Group findByName(String name) { - Group group = groupRepository.findByName(name); - checkNotNull(group, "Не найдена группа '" + name + '\''); - return group; + public Set getGroupsByUserId(int userId) { + log.debug("getGroupsByUserId {}", userId); + return groupRepository.findByUser(userId); } - public List getAll() { - log.debug("getAll"); - List groups = groupRepository.findAll(new Sort("name")); - Cache cache = cacheManager.getCache("group"); - groups.forEach(g -> cache.put(g.getName(), g)); - return groups; + @Transactional + public UserGroup registerAtProject(UserTo userTo, String projectName, String channel) { + log.info("add{} to project {}", userTo, projectName); + + ProjectProps projectProps = getProjectProps(projectName); + return registerAtGroup(userTo, channel, projectProps.registeredGroup, null, + user -> { + RegisterType registerType = isProjectMember(user.getId(), projectProps.project.getName()) ? + RegisterType.REPEAT : RegisterType.REGISTERED; + + return new UserGroup(user, + registerType == RegisterType.REGISTERED ? projectProps.registeredGroup : projectProps.currentGroup, + registerType, channel); + }); } - public Set findByUserId(int userId) { - log.debug("findByUserId {}", userId); - return groupRepository.findByUser(userId); + @Transactional + public UserGroup registerAtGroup(UserTo userTo, String groupName, String channel, ParticipationType participationType) { + log.info("add{} to group {}", userTo, groupName); + Group group = cachedGroups.findByName(groupName); + return registerAtGroup(userTo, channel, group, participationType, + user -> new UserGroup(user, group, RegisterType.REGISTERED, channel)); } @Transactional - public UserGroup registerAtProject(UserTo userTo, ProjectGroups projectGroups, String channel) { - log.info("add{} to project {}", userTo, projectGroups.project); - User user = userService.findByEmail(userTo.getEmail()); - ParticipationType participationType; - - if (user != null) { - UserUtil.updateFromTo(user, userTo); - Set groups = findByUserId(user.getId()); - participationType = groups.stream() - .filter(g -> projectGroups.project.equals(g.getProject()) && g.getType() == GroupType.FINISHED) - .findFirst().isPresent() ? ParticipationType.REPEAT : ParticipationType.REGISTERED; - - if (groups.stream().filter(g -> g.equals(projectGroups.registeredGroup) || g.equals(projectGroups.currentGroup)).findFirst().isPresent()) { - // Already registered - return new UserGroup(user, projectGroups.registeredGroup, participationType, channel); - } - } else { - user = UserUtil.createFromTo(userTo); - participationType = ParticipationType.FIRST_REGISTERED; - } - userService.save(user); - Group group = (participationType == ParticipationType.REPEAT) ? projectGroups.currentGroup : projectGroups.registeredGroup; - UserGroup userGroup = new UserGroup(user, group, participationType, channel); - return userGroupRepository.save(userGroup); + public UserGroup pay(UserTo userTo, String groupName, Payment payment, ParticipationType participationType, String channel) { + log.info("Pay from {} for {}: {}", userTo, groupName, payment); + Group group = cachedGroups.findByName(groupName); + UserGroup ug = registerAtGroup(userTo, channel, group, participationType, + user -> new UserGroup(user, group, RegisterType.REGISTERED, channel)); + payment.setUserGroup(ug); + paymentRepository.save(payment); + return ug; } - public UserGroup moveOrCreate(User u, Group sourceGroup, Group targetGroup) { - UserGroup ug = userGroupRepository.findByUserIdAndGroupId(u.getId(), sourceGroup.getId()); - if (ug == null) { - ug = new UserGroup(u, targetGroup, ParticipationType.REGISTERED, "email"); + private UserGroup registerAtGroup(UserTo userTo, String channel, Group newUserGroup, ParticipationType type, Function existedUserGroupProvider) { + User user = userService.findByEmail(userTo.getEmail()); + UserGroup ug; + if (user == null) { + user = UserUtil.createFromTo(userTo); + ug = new UserGroup(user, newUserGroup, RegisterType.FIRST_REGISTERED, channel); } else { - ug.setGroup(targetGroup); + ug = existedUserGroupProvider.apply(user); + UserGroup oldUserGroup = userGroupRepository.findByUserIdAndGroupId(user.getId(), ug.getGroup().getId()); + if (oldUserGroup != null) { + oldUserGroup.setAlreadyExist(true); + if (Objects.equals(oldUserGroup.getParticipationType(), type)) { + return oldUserGroup; + } + oldUserGroup.setParticipationType(type); + return userGroupRepository.save(oldUserGroup); + } } - return ug; + Group group = ug.getGroup(); + if (ug.getRegisterType() != RegisterType.REPEAT) { + if (group.isMembers() && ug.getRegisterType() == RegisterType.REGISTERED) { + ug = checkRemoveFromRegistered(ug); + } + if (group.getRole() != null) { + user.getRoles().add(group.getRole()); + } + userService.save(user); + } + ug.setParticipationType(type); + return userGroupRepository.save(ug); } - @Transactional - public UserGroup pay(String email, String projectName, Payment payment) { - log.info("Pay from {} for {}: {}", email, payment); - User u = userService.findExistedByEmail(email); - ProjectGroups projectGroups = getProjectGroups(projectName); - UserGroup ug = moveOrCreate(u, projectGroups.registeredGroup, projectGroups.currentGroup); - paymentRepository.save(payment); - ug.setPayment(payment); - userGroupRepository.save(ug); - return ug; + public UserGroup save(UserGroup userGroup) { + return userGroupRepository.save(userGroup); } - public ProjectGroups getProjectGroups(String projectName) { - Collection groups = getAll(); - return new ProjectGroups( - getGroupByProjectAndType(groups, projectName, GroupType.REGISTERED), - getGroupByProjectAndType(groups, projectName, GroupType.CURRENT)); + private UserGroup checkRemoveFromRegistered(UserGroup ug) { + ProjectProps projectProps = getProjectProps(ug.getGroup().getProject().getName()); + UserGroup registeredUserGroup = userGroupRepository.findByUserIdAndGroupId(ug.getUser().getId(), projectProps.registeredGroup.getId()); + if (registeredUserGroup == null) { + return ug; + } + registeredUserGroup.setRegisterType(RegisterType.REGISTERED); + registeredUserGroup.setGroup(ug.getGroup()); + if (ug.getChannel() != null) { + registeredUserGroup.setChannel(ug.getChannel()); + } + registeredUserGroup.setRegisteredDate(new Date()); + return registeredUserGroup; } - private static Group getGroupByProjectAndType(Collection groups, String projectName, GroupType type) { - Optional group = groups.stream() - .filter(g -> g.getProject() != null && g.getProject().getName().equals(projectName) && (g.getType() == type)) - .findFirst(); - checkState(group.isPresent(), "В проекте %s отсутствуют группы c типом %s", projectName, type); - return group.get(); + public ProjectProps getProjectProps(String projectName) { + return ProjectUtil.getProjectProps(projectName, cachedGroups.getAll()); } - public Set filterUserByGroupNames(String includes, String excludes) { - final List groups = getAll(); - Set includeUsers = filterUserByGroupNames(groups, includes); + public Set filterUserByGroupNames(String includes, String excludes, LocalDate startRegisteredDate, LocalDate endRegisteredDate) { + final List groups = cachedGroups.getAll(); + final Set includeUsers = filterUserByGroupNames(groups, includes, startRegisteredDate, endRegisteredDate); if (StringUtils.isNoneEmpty(excludes)) { - Set excludeUsers = filterUserByGroupNames(groups, excludes); + Set excludeUsers = filterUserByGroupNames(groups, excludes, startRegisteredDate, endRegisteredDate); includeUsers.removeAll(excludeUsers); } return includeUsers; } - private Set filterUserByGroupNames(List groups, String groupNames) { + public User getExistedUserInCurrentProject(String email, String projectName) { + User u; + if (projectName.equals("javaops")) { + u = userService.findExistedByEmail(email); + if (!u.isMember()) { + throw new NotMemberException(email); + } + } else { + ProjectProps projectProps = getProjectProps(projectName); + u = userService.findByEmailAndGroupId(email, projectProps.currentGroup.getId()); + checkNotNull(u, "Пользователь %s не найден в группе %s", email, projectProps.currentGroup.getName()); + } + return u; + } + + private Set filterUserByGroupNames(List groups, String groupNames, LocalDate startRegisteredDate, LocalDate endRegisteredDate) { List> predicates = getMatcher(groupNames); + Date startDate = TimeUtil.toDate(startRegisteredDate); + Date endDate = TimeUtil.toDate(endRegisteredDate); // filter users by predicates return groups.stream().filter(group -> predicates.stream().anyMatch(p -> p.test(group.getName()))) .flatMap(group -> userService.findByGroupName(group.getName()).stream()) + .filter(um -> startDate == null || um.getRegisteredDate().compareTo(startDate) >= 0) + .filter(um -> endDate == null || um.getRegisteredDate().compareTo(endDate) <= 0) .collect(Collectors.toSet()); } @@ -164,16 +203,4 @@ public boolean test(String name) { (Predicate) paramName::equals ).collect(Collectors.toList()); } - - public static class ProjectGroups { - public final Group registeredGroup; - public final Group currentGroup; - public final Project project; - - public ProjectGroups(Group registeredGroup, Group currentGroup) { - this.registeredGroup = registeredGroup; - this.currentGroup = currentGroup; - this.project = registeredGroup.getProject(); - } - } } diff --git a/src/main/java/ru/javaops/service/IdeaCouponService.java b/src/main/java/ru/javaops/service/IdeaCouponService.java new file mode 100644 index 0000000..3748aa6 --- /dev/null +++ b/src/main/java/ru/javaops/service/IdeaCouponService.java @@ -0,0 +1,45 @@ +package ru.javaops.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.javaops.model.IdeaCoupon; +import ru.javaops.model.Project; +import ru.javaops.model.User; +import ru.javaops.repository.IdeaCouponRepository; + +import java.time.LocalDate; + +/** + * GKislin + * 15.02.2016 + */ +@Service +public class IdeaCouponService { + private final Logger log = LoggerFactory.getLogger(IdeaCouponService.class); + + @Autowired + private IdeaCouponRepository ideaCouponRepository; + + public IdeaCoupon getByUser(User user) { + return ideaCouponRepository.findByUserId(user.getId()); + } + + public IdeaCoupon assignToUser(User user, Project project) { + IdeaCoupon ideaCoupon = getByUser(user); + if (ideaCoupon != null) { + throw new IllegalStateException("Согласно политике JetBrains персональный купон IDEA выдается только один раз."); + } + ideaCoupon = ideaCouponRepository.getUnused(); + if (ideaCoupon == null) { + throw new IllegalStateException("Закончились купоны IDEA, напиши пожалуйста в skype: grigory.kislin"); + } + ideaCoupon.setUser(user); + ideaCoupon.setProject(project); + ideaCoupon.setDate(LocalDate.now()); + ideaCouponRepository.save(ideaCoupon); + log.info("Assign IDEA coupon to " + user.getEmail()); + return ideaCoupon; + } +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/service/IntegrationService.java b/src/main/java/ru/javaops/service/IntegrationService.java new file mode 100644 index 0000000..3d3b052 --- /dev/null +++ b/src/main/java/ru/javaops/service/IntegrationService.java @@ -0,0 +1,60 @@ +package ru.javaops.service; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Value; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.AsyncRestTemplate; +import org.springframework.web.client.RestTemplate; +import ru.javaops.config.IntegrationProperties; + +@Service +@Slf4j +public class IntegrationService { + + @Autowired + private JsonService jsonService; + + @Autowired + private IntegrationProperties integrationProperties; + + public void asyncSendSlackInvitation(String email, String project) { + new AsyncRestTemplate().exchange( + "https://slack.com/api/users.admin.invite?token={token}&email={email}", + HttpMethod.GET, null, String.class, integrationProperties.getSlackToken(project), email).addCallback( + res -> log.info("Slack invitation result: " + res.getStatusCode() + ": " + res.getBody()), + ex -> log.error("Slack invitation result", ex) + ); + } + + public SlackResponse sendSlackInvitation(String email, String project) { + log.info("++++ Send SlackInvitation to {} ({})", email, project); + ResponseEntity response = new RestTemplate().exchange( + "https://slack.com/api/users.admin.invite?token={token}&email={email}", + HttpMethod.GET, null, String.class, integrationProperties.getSlackToken(project), email); + + SlackResponse slackResponse = response.getStatusCode().is2xxSuccessful() ? + jsonService.readValue(response.getBody(), SlackResponse.class) : + new SlackResponse(false, response.getBody()); + log.info(slackResponse.toString()); + return slackResponse; + } + + /** + * gkislin + * 03.06.2016 + */ + @Value + public static class SlackResponse { + final boolean ok; + final String error; + + public SlackResponse(@JsonProperty("ok") boolean ok, @JsonProperty(value = "error") String error) { + this.ok = ok; + this.error = error; + } + } +} diff --git a/src/main/java/ru/javaops/service/JsonService.java b/src/main/java/ru/javaops/service/JsonService.java new file mode 100644 index 0000000..ca58eec --- /dev/null +++ b/src/main/java/ru/javaops/service/JsonService.java @@ -0,0 +1,47 @@ +package ru.javaops.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectReader; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.List; + +/** + * User: gkislin + * Date: 30.04.2014 + */ + +@Service +public class JsonService { + + @Autowired + private ObjectMapper objectMapper; + + public List readValues(String json, Class clazz) { + ObjectReader reader = objectMapper.readerFor(clazz); + try { + return reader.readValues(json).readAll(); + } catch (IOException e) { + throw new IllegalArgumentException("Invalid read array from JSON:\n'" + json + "'", e); + } + } + + public T readValue(String json, Class clazz) { + try { + return objectMapper.readValue(json, clazz); + } catch (IOException e) { + throw new IllegalArgumentException("Invalid read from JSON:\n'" + json + "'", e); + } + } + + public String writeValue(T obj) { + try { + return objectMapper.writeValueAsString(obj); + } catch (JsonProcessingException e) { + throw new IllegalStateException("Invalid write to JSON:\n'" + obj + "'", e); + } + } +} diff --git a/src/main/java/ru/javaops/service/MailService.java b/src/main/java/ru/javaops/service/MailService.java index 9b6999e..a370c00 100644 --- a/src/main/java/ru/javaops/service/MailService.java +++ b/src/main/java/ru/javaops/service/MailService.java @@ -3,8 +3,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.mail.MailException; @@ -16,9 +15,10 @@ import org.thymeleaf.context.Context; import org.thymeleaf.spring4.SpringTemplateEngine; import ru.javaops.config.AppProperties; -import ru.javaops.model.*; +import ru.javaops.model.MailCase; +import ru.javaops.model.User; import ru.javaops.repository.MailCaseRepository; -import ru.javaops.repository.UserRepository; +import ru.javaops.to.UserMail; import ru.javaops.util.Util; import javax.mail.MessagingException; @@ -27,14 +27,15 @@ import java.io.UnsupportedEncodingException; import java.util.*; import java.util.concurrent.*; +import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; @Service +@Slf4j public class MailService { private static final Locale LOCALE_RU = Locale.forLanguageTag("ru"); - private static final String OK = "OK"; - private static final Logger LOG = LoggerFactory.getLogger(MailService.class); + public static final String OK = "OK"; @Autowired private SpringTemplateEngine templateEngine; @@ -46,11 +47,14 @@ public class MailService { private MailCaseRepository mailCaseRepository; @Autowired - private UserRepository userRepository; + private UserService userService; @Autowired private SubscriptionService subscriptionService; + @Autowired + private RefService refService; + @Autowired private AppProperties appProperties; @@ -62,14 +66,14 @@ public static boolean isOk(String result) { return OK.equals(result); } - public GroupResult sendToProjectByGroupType(String template, String projectName, GroupType type) { - return sendToUserList(template, userRepository.findByProjectAndGroupType(projectName, type)); + public GroupResult sendToEmailList(String template, Collection emails) { + return sendToUserList(template, emails.stream().map(email -> userService.findExistedByEmail(email)).collect(Collectors.toSet())); } - public GroupResult sendToUserList(String template, Collection users) { - checkNotNull(template, "template must not be null"); - checkNotNull(users, "users must not be null"); - users.add(getTestUser()); + public GroupResult sendToUserList(String template, Set users) { + checkNotNull(template, " template must not be null"); + checkNotNull(users, " users must not be null"); + users.add(getAppUser()); CompletionService completionService = new ExecutorCompletionService<>(mailExecutor); Map, String> resultMap = new HashMap<>(); users.forEach( @@ -100,59 +104,76 @@ public GroupResult sendToUserList(String template, Collection users) { return groupResultBuilder.buildOK(); } - private User getTestUser() { - return userRepository.findByEmail(appProperties.getTestEmail()); + User getAppUser() { + return userService.findExistedByEmail(appProperties.getEmail()); } private void cancelAll(Map, String> resultMap) { - LOG.warn("Cancel all unsent tasks"); + log.warn("Cancel all unsent tasks"); resultMap.forEach((feature, email) -> { - LOG.warn("Sending to " + email + " failed"); + log.warn("Sending to " + email + " failed"); feature.cancel(true); }); } @Async("mailExecutor") - public Future sendToUserAsync(String template, String email) { - return new AsyncResult<>(sendToUser(template, email)); + public Future sendWithTemplateAsync(UserMail userMail, String template, final Map params) { + return new AsyncResult<>(sendWithTemplate(template, userMail, params)); } public String sendTest(String template) { - return sendToUser(template, getTestUser()); + return sendToUser(template, getAppUser()); } public String sendToUser(String template, String email) { - checkNotNull(template, "Template must not be null"); - checkNotNull(email, "email must not be null"); - return sendToUser(template, userRepository.findByEmail(email.toLowerCase())); + checkNotNull(email, "Email must not be null"); + return sendToUser(template, userService.findExistedByEmail(email)); + } + + public String sendToUser(String template, UserMail userMail) { + return sendWithTemplate(template, userMail, ImmutableMap.of()); } - public String sendToUser(String template, User user) { - checkNotNull(user, "User must not be null"); - String activationKey = subscriptionService.generateActivationKey(user.getEmail()); - String subscriptionUrl = subscriptionService.getSubscriptionUrl(user.getEmail(), activationKey, false); - return sendToUserWithParams(template, user, ImmutableMap.of("user", user, "subscriptionUrl", subscriptionUrl)); + public void sendRefMail(User refUser, String template, Map params) { + sendWithTemplateAsync(refUser, template, params); } - public String sendToUserWithParams(String template, User user, final Map params) { - checkNotNull(user, "User must not be null"); - LOG.debug("Sending {} email to '{}'", template, user.getEmail()); - String content = getContent(template, params); + public String sendWithTemplate(String template, UserMail userMail, final Map params) { + checkNotNull(template, "Template must not be null"); + checkNotNull(userMail, "User must not be null"); + final String email = checkNotNull(userMail.getEmail()); + + log.debug("Sending {} email to '{}'", template, email); + String activationKey = subscriptionService.generateActivationKey(email); + String subscriptionUrl = subscriptionService.getSubscriptionUrl(email, activationKey, false); + ImmutableMap.Builder builder = ImmutableMap.builder() + .putAll(params) + .put("user", userMail) + .put("subscriptionUrl", subscriptionUrl) + .put("activationKey", activationKey); + + if (template.startsWith("ref/")) { + builder.put("topjavaRef", refService.getRefUrl("topjava", email)) + .put("masterjavaRef", refService.getRefUrl("masterjava", email)) + .put("basejavaRef", refService.getRefUrl("basejava", email)); + } + + String content = getContent(template, builder.build()); final String subject = Util.getTitle(content); String result; try { - send(user.getEmail(), user.getFirstName(), subject, content, true, (String) params.get("subscriptionUrl")); + send(email, userMail.getFullName(), subject, content, true, (String) params.get("subscriptionUrl")); result = OK; } catch (MessagingException | MailException e) { result = e.getMessage(); - LOG.error("Sending to {} failed: \n{}", user.getEmail(), result); + log.error("Sending to {} failed: \n{}", email, result); + mailCaseRepository.save(new MailCase(userMail, template, result)); } - mailCaseRepository.save(new MailCase(user, template, result)); return result; } public void send(String toEmail, String toName, String subject, String content, boolean isHtml, String subscriptionUrl) throws MessagingException { - LOG.debug("Send email to '{} <{}>' with subject '{}'", toName, toEmail, subject); + log.debug("Send email to '{} <{}>' with subject '{}'", toName, toEmail, subject); MimeMessage mimeMessage = javaMailSender.createMimeMessage(); if (subscriptionUrl != null) { @@ -161,7 +182,7 @@ public void send(String toEmail, String toName, String subject, String content, MimeMessageHelper message = new MimeMessageHelper(mimeMessage, "UTF-8"); try { message.setTo(new InternetAddress(toEmail, toName, "UTF-8")); - message.setFrom("admin@javaops.ru", "Java Online Projects"); + message.setFrom(appProperties.getEmail(), "Java Online Projects"); } catch (UnsupportedEncodingException e) { // dummy } message.setSubject(subject); @@ -169,21 +190,13 @@ public void send(String toEmail, String toName, String subject, String content, javaMailSender.send(mimeMessage); } - public String sendRegistration(String template, Project project, UserGroup userGroup, String confirmEmail) throws MessagingException { - if (userGroup.getType() == ParticipationType.REPEAT) { - template = project.getName() + "_repeat"; - } else if (template == null) { - template = project.getName() + "_register"; - } - String result = sendToUser(template, userGroup.getUser()); - String content = getContent("confirm", - ImmutableMap.of("template", template, "result", result, "userGroup", userGroup)); - send(confirmEmail, null, Util.getTitle(content), content, true, null); - return result; + public GroupResult resendTodayFailed(String template) { + List todayFailed = mailCaseRepository.getTodayFailed(); + return sendToUserList(template, todayFailed.stream().map(MailCase::getUserMail).collect(Collectors.toSet())); } public static class GroupResultBuilder { - private List success = new ArrayList<>(); + private int success = 0; private List failed = new ArrayList<>(); private String failedCause = null; @@ -195,22 +208,23 @@ private GroupResult buildWithFailure(String cause) { return new GroupResult(success, failed, cause); } - boolean accept(String email, Future future) { + private boolean accept(String email, Future future) { try { final String result = future.get(); if (isOk(result)) { - success.add(email); + success++; } else { failed.add(new MailResult(email, result)); } } catch (InterruptedException e) { failedCause = "Task interrupted"; - LOG.error("Sending to " + email + " interrupted"); + log.error("Sending to " + email + " interrupted"); } catch (ExecutionException e) { failed.add(new MailResult(email, e.toString())); - LOG.error("Sending to " + email + " failed with " + e.getMessage()); + log.error("Sending to " + email + " failed with " + e.getMessage()); } - return (failed.size() < success.size() || failed.size() < 3) && failedCause == null; + double failedSize = failed.size(); + return (failedSize < 6. || failedSize / (success + failedSize) < 0.15) && failedCause == null; } } @@ -220,8 +234,8 @@ String getContent(String template, final Map params) { } public static class MailResult { - final String email; - final String result; + private final String email; + private final String result; public MailResult(@JsonProperty("email") String email, @JsonProperty("result") String result) { this.email = email; @@ -235,19 +249,19 @@ public String toString() { } public static class GroupResult { - final List success; - final List failed; - final String failedCause; + private final int success; + private final List failed; + private final String failedCause; - public GroupResult(@JsonProperty("success") List success, @JsonProperty("failed") List failed, @JsonProperty("failedCause") String failedCause) { - this.success = ImmutableList.copyOf(success); + public GroupResult(@JsonProperty("success") int success, @JsonProperty("failed") List failed, @JsonProperty("failedCause") String failedCause) { + this.success = success; this.failed = ImmutableList.copyOf(failed); this.failedCause = failedCause; } @Override public String toString() { - return "Success: " + success.toString() + '\n' + + return "Success: " + success + '\n' + "Failed: " + failed.toString() + '\n' + (failedCause == null ? "" : "Failed cause" + failedCause); } diff --git a/src/main/java/ru/javaops/service/RefService.java b/src/main/java/ru/javaops/service/RefService.java new file mode 100644 index 0000000..efdb1d6 --- /dev/null +++ b/src/main/java/ru/javaops/service/RefService.java @@ -0,0 +1,71 @@ +package ru.javaops.service; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.javaops.config.AppProperties; +import ru.javaops.model.User; +import ru.javaops.util.RefUtil; + +import javax.annotation.PostConstruct; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.security.NoSuchAlgorithmException; + +@Service +@Slf4j +public class RefService { + + @Autowired + private AppProperties appProperties; + + @Autowired + private UserService userService; + + private SecretKey secretKey; + + @PostConstruct + private void postConstruct() throws NoSuchAlgorithmException { +// http://stackoverflow.com/questions/10303767/encrypt-and-decrypt-in-java +// http://sakthipriyan.com/2015/07/21/encryption-and-decrption-in-java.html + + this.secretKey = new SecretKeySpec(appProperties.getSecretKey().getBytes(), "AES"); + } + + public String encrypt(String value) { + return RefUtil.markRef(RefUtil.encrypt0(value, secretKey)); + } + + private String decrypt(String value) { + return RefUtil.isRef(value) ? RefUtil.decrypt0(value.substring(1), secretKey) : null; + } + + public User decryptUser(String value) { + User user = null; + String email = decrypt(value); + if (email != null) { + user = userService.findByEmail(email); + if (user == null) { + log.error("!!! Error user decrypted email '{}'", email); + } + } + return user; + } + + public User getRefUser(String channel) { + if (RefUtil.isRef(channel)) { + User user = userService.findByEmail(channel.substring(1)); + if (user == null) { + log.error("!!! Error refUser channel '{}'", channel); + } + return user; + } + return null; + } + + public String getRefUrl(String project, String email) { + return project == null ? + String.format("http://javaops.ru/ref/%s", encrypt(email)) : + String.format("http://javaops.ru/ref/%s/%s", project, encrypt(email)); + } +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/service/SqlService.java b/src/main/java/ru/javaops/service/SqlService.java new file mode 100644 index 0000000..e9c7d71 --- /dev/null +++ b/src/main/java/ru/javaops/service/SqlService.java @@ -0,0 +1,56 @@ +package ru.javaops.service; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.javaops.SqlResult; +import ru.javaops.config.AppConfig; +import ru.javaops.repository.SqlRepository; +import ru.javaops.to.UserMail; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; + +/** + * gkislin + * 10.04.2017 + */ +@Service +@Slf4j +public class SqlService { + + @Autowired + private SqlRepository sqlRepository; + + public SqlResult execute(String sqlKey, Integer limit, Map params) { + return execute(sqlKey, sql -> { + if (limit != null) { + sql = sql.replace(":limit", String.valueOf(limit)); + } + return sqlRepository.execute(sql, params); + }); + } + + public Set getUsers(String sqlKey) { + return execute(sqlKey, sql -> { + List users = sqlRepository.getUsersMail(sql); + return new HashSet<>(users); + }); + } + + private T execute(String sqlKey, Function sqlExecutor) { + String sql = AppConfig.SQL_PROPS.getProperty(sqlKey); + if (sql == null) { + throw new IllegalArgumentException("Key '" + sqlKey + "' is not found"); + } + try { + return sqlExecutor.apply(sql); + } catch (Exception e) { + log.error("Sql '" + sql + "' execution exception", e); + throw new IllegalStateException("Sql execution exception"); + } + } +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/service/SubscriptionService.java b/src/main/java/ru/javaops/service/SubscriptionService.java index 010507c..c39dc16 100644 --- a/src/main/java/ru/javaops/service/SubscriptionService.java +++ b/src/main/java/ru/javaops/service/SubscriptionService.java @@ -1,16 +1,24 @@ package ru.javaops.service; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import ru.javaops.config.AppProperties; +import ru.javaops.config.exception.NoPartnerException; +import ru.javaops.model.User; import ru.javaops.util.PasswordUtil; @Service +@Slf4j public class SubscriptionService { + private static final String PARTNER_GROUP_NAME = "partner"; @Autowired private AppProperties appProperties; + @Autowired + private UserService userService; + public String getSubscriptionUrl(String email, String activationKey, boolean active) { return appProperties.getHostUrl() + "/activate?email=" + email + "&key=" + activationKey + "&activate=" + active; } @@ -19,11 +27,27 @@ public String generateActivationKey(String email) { return PasswordUtil.getPasswordEncoder().encode(getSalted(email)); } - public boolean isActivationKeyMatch(String email, String key) { - return PasswordUtil.isMatch(getSalted(email), key); + public void checkActivationKey(String value, String key) { + if (!PasswordUtil.isMatch(getSalted(value), key)) { + throw new IllegalArgumentException("Неверный ключ активации"); + } + } + + private String getSalted(String value) { + return value + appProperties.getActivationSecretSalt(); + } + + public User checkPartner(String partnerKey) { + User partner = userService.findByEmailAndGroupName(partnerKey.toLowerCase(), PARTNER_GROUP_NAME); + if (partner == null) { + throw new NoPartnerException(partnerKey); + } + return partner; } - private String getSalted(String email) { - return email + appProperties.getActivationSecretSalt(); + public void checkAdminKey(String adminKey) { + if (!userService.findExistedByEmail(adminKey).isAdmin()) { + throw new IllegalArgumentException("Неверный ключ"); + } } } diff --git a/src/main/java/ru/javaops/service/UserService.java b/src/main/java/ru/javaops/service/UserService.java index 317ff61..410de4f 100644 --- a/src/main/java/ru/javaops/service/UserService.java +++ b/src/main/java/ru/javaops/service/UserService.java @@ -1,8 +1,9 @@ package ru.javaops.service; import ru.javaops.model.User; +import ru.javaops.to.UserMail; +import ru.javaops.to.UserToExt; -import java.util.Collection; import java.util.Set; /** @@ -11,15 +12,23 @@ */ public interface UserService { - void deleteByEmail(String email); - - Collection getGroup(String groupName); + boolean deleteByEmail(String email); User findExistedByEmail(String email); User findByEmail(String email); - Set findByGroupName(String email); + User findByEmailOrGmail(String email); + + Set findByGroupName(String email); + + User findByEmailAndGroupId(String email, int groupId); void save(User u); -} + + User update(UserToExt userTo); + + User findByEmailAndGroupName(String email, String groupName); + + User get(int id); +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/service/UserServiceImpl.java b/src/main/java/ru/javaops/service/UserServiceImpl.java index 4f26b3d..1265dbd 100644 --- a/src/main/java/ru/javaops/service/UserServiceImpl.java +++ b/src/main/java/ru/javaops/service/UserServiceImpl.java @@ -3,19 +3,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.authentication.DisabledException; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ru.javaops.LoggedUser; +import ru.javaops.AuthorizedUser; import ru.javaops.model.User; import ru.javaops.repository.UserRepository; +import ru.javaops.to.UserMail; +import ru.javaops.to.UserToExt; +import ru.javaops.util.UserUtil; -import java.util.Collection; import java.util.Set; -import static com.google.common.base.Preconditions.checkNotNull; - /** * Authenticate a user from the database. */ @@ -28,46 +27,50 @@ public class UserServiceImpl implements UserService, org.springframework.securit private UserRepository userRepository; @Override - public LoggedUser loadUserByUsername(final String email) { - String lowercaseLogin = email.toLowerCase(); - log.debug("Authenticating {}", email); - User user = userRepository.findByEmail(lowercaseLogin); - if (user == null) { - throw new UsernameNotFoundException("User " + lowercaseLogin + " was not found in the database"); - } - if (!user.isActive()) { - throw new DisabledException("User " + lowercaseLogin + " was not activated"); - } - return new LoggedUser(user); + public AuthorizedUser loadUserByUsername(final String email) { + String lowerEmail = email.toLowerCase(); + log.info("Authenticating {}", lowerEmail); + return new AuthorizedUser(findExistedByEmail(lowerEmail)); } - + @Override @Transactional - public void deleteByEmail(String email) { + public boolean deleteByEmail(String email) { log.debug("Delete user " + email); User user = userRepository.findByEmail(email); if (user != null) { userRepository.delete(user); + return true; } else { log.warn("User " + email + " is not found"); + return false; } } - public Collection getGroup(String groupName) { - return userRepository.findByGroupName(groupName); + @Override + public User findByEmail(String email) { + return userRepository.findByEmail(email.toLowerCase()); } @Override - public User findByEmail(String email) { - return userRepository.findByEmail(email); + public User findByEmailOrGmail(String email) { + return userRepository.findByEmailOrGmail(email.toLowerCase()); } + @Override public User findExistedByEmail(String email) { - return checkNotNull(findByEmail(email), "User " + email + " not found"); + return checkExist(findByEmail(email), email); + } + + private User checkExist(User user, String email) { + if (user == null) { + throw new UsernameNotFoundException("Пользователь c почтой " + email + " не найден"); + } + return user; } @Override - public Set findByGroupName(String groupName) { + public Set findByGroupName(String groupName) { return userRepository.findByGroupName(groupName); } @@ -75,4 +78,27 @@ public Set findByGroupName(String groupName) { public void save(User u) { userRepository.save(u); } + + @Override + public User findByEmailAndGroupId(String email, int groupId) { + return userRepository.findByEmailAndGroupId(email.toLowerCase(), groupId); + } + + @Override + @Transactional + public User update(UserToExt userTo) { + User user = userRepository.findOne(userTo.getId()); + UserUtil.updateFromToExt(user, userTo); + return userRepository.save(user); + } + + @Override + public User findByEmailAndGroupName(String email, String groupName) { + return userRepository.findByEmailAndGroupName(email, groupName); + } + + @Override + public User get(int id) { + return userRepository.findOne(id); + } } diff --git a/src/main/java/ru/javaops/to/UserAdminsInfo.java b/src/main/java/ru/javaops/to/UserAdminsInfo.java new file mode 100644 index 0000000..9fd788b --- /dev/null +++ b/src/main/java/ru/javaops/to/UserAdminsInfo.java @@ -0,0 +1,14 @@ +package ru.javaops.to; + +import lombok.Data; + +/** + * gkislin + * 24.04.2017 + */ +@Data +public class UserAdminsInfo { + private String mark; + private Integer bonus; + private String comment; +} diff --git a/src/main/java/ru/javaops/to/UserMail.java b/src/main/java/ru/javaops/to/UserMail.java new file mode 100644 index 0000000..b3abc4b --- /dev/null +++ b/src/main/java/ru/javaops/to/UserMail.java @@ -0,0 +1,18 @@ +package ru.javaops.to; + +import java.util.Date; + +/** + * gkislin + * 29.06.2016 + */ +public interface UserMail { + + public String getEmail(); + + public String getFullName(); + + default public Date getRegisteredDate() { + return null; + } +} diff --git a/src/main/java/ru/javaops/to/UserMailImpl.java b/src/main/java/ru/javaops/to/UserMailImpl.java new file mode 100644 index 0000000..c638e28 --- /dev/null +++ b/src/main/java/ru/javaops/to/UserMailImpl.java @@ -0,0 +1,54 @@ +package ru.javaops.to; + +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.text.WordUtils; +import ru.javaops.model.User; + +import java.util.Date; + +import static org.apache.commons.lang3.StringUtils.capitalize; +import static org.apache.commons.lang3.StringUtils.substringBefore; + +/** + * gkislin + * 29.06.2016 + */ +@Getter +@Setter +public class UserMailImpl implements UserMail { + private String fullName; + private String email; + private Date registeredDate; + private int bonus; + + public UserMailImpl() { + } + + public UserMailImpl(String fullName, String email) { + this.fullName = fullName; + this.email = email; + } + + public UserMailImpl(User user) { + this.fullName = WordUtils.capitalize(user.getFullName()); + this.email = user.getEmail(); + this.registeredDate = user.getRegisteredDate(); + this.bonus = user.getBonus(); + } + + // Exception evaluating SpringEL expression: "user.firstName" for default method in UserMail + public String getFirstName() { + return getFullName() == null ? "" : (substringBefore(capitalize(getFullName()), " ")); + } + + @Override + public boolean equals(Object o) { + return this == o || email.equals(((UserMail) o).getEmail()); + } + + @Override + public int hashCode() { + return email.hashCode(); + } +} diff --git a/src/main/java/ru/javaops/to/UserStat.java b/src/main/java/ru/javaops/to/UserStat.java new file mode 100644 index 0000000..abeafd7 --- /dev/null +++ b/src/main/java/ru/javaops/to/UserStat.java @@ -0,0 +1,44 @@ +package ru.javaops.to; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.text.WordUtils; + +/** + * gkislin + * 29.06.2016 + */ +public class UserStat { + private final String fullName; + private final String email; + private final String location; + private final String aboutMe; + private final String skype; + + public UserStat(String fullName, String email, String location, String aboutMe, String skype) { + this.fullName = WordUtils.capitalize(fullName); + this.email = email; + this.location = WordUtils.capitalize(location, ' ', '-', '.', '/', ','); + this.aboutMe = StringUtils.replace(aboutMe, "\n", "
"); + this.skype = skype; + } + + public String getFullName() { + return fullName; + } + + public String getEmail() { + return email; + } + + public String getLocation() { + return location; + } + + public String getAboutMe() { + return aboutMe; + } + + public String getSkype() { + return skype; + } +} diff --git a/src/main/java/ru/javaops/to/UserTo.java b/src/main/java/ru/javaops/to/UserTo.java index babcb81..c43a5ef 100644 --- a/src/main/java/ru/javaops/to/UserTo.java +++ b/src/main/java/ru/javaops/to/UserTo.java @@ -1,58 +1,51 @@ package ru.javaops.to; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.NotEmpty; +import org.hibernate.validator.constraints.SafeHtml; /** * GKislin * 16.02.2016 */ +@Getter +@Setter +@NoArgsConstructor public class UserTo { @NotEmpty(message = "Поле email не может быть пустым") - String email; - - String nameSurname; - String location; - String infoSource; - - public String getEmail() { - return email; + @Email + @SafeHtml + private String email; + + @SafeHtml + private String nameSurname; + @SafeHtml + private String location; + @SafeHtml + private String infoSource; + @SafeHtml + private String phone; + @SafeHtml + private String skype; + + public UserTo(String email, String nameSurname) { + this.email = email; + this.nameSurname = nameSurname; } public void setEmail(String email) { this.email = email.toLowerCase(); } - public String getNameSurname() { - return nameSurname; - } - - public void setNameSurname(String nameSurname) { - this.nameSurname = nameSurname; - } - - public String getLocation() { - return location; - } - public void setLocation(String location) { - this.location = location; - } - - public String getInfoSource() { - return infoSource; - } - - public void setInfoSource(String infoSource) { - this.infoSource = infoSource; + this.location = location == null ? null : location.trim().toLowerCase(); } @Override public String toString() { - return "UserTo (" + - "email='" + email + '\'' + - ", nameSurname='" + nameSurname + '\'' + - ", location='" + location + '\'' + - ", infoSource='" + infoSource + '\'' + - ')'; + return "(email:" + email + ", name" + nameSurname + ')'; } } diff --git a/src/main/java/ru/javaops/to/UserToExt.java b/src/main/java/ru/javaops/to/UserToExt.java new file mode 100644 index 0000000..959802e --- /dev/null +++ b/src/main/java/ru/javaops/to/UserToExt.java @@ -0,0 +1,57 @@ +package ru.javaops.to; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.validator.constraints.SafeHtml; +import org.hibernate.validator.constraints.URL; + +import javax.validation.constraints.NotNull; + +@Getter +@Setter +@NoArgsConstructor +public class UserToExt extends UserTo { + + public UserToExt(String email, String nameSurname) { + super(email, nameSurname); + } + + @NotNull + private Integer id; + + @SafeHtml + private String gmail; + + @SafeHtml + private String aboutMe; + + private boolean statsAgree; + + private boolean considerJobOffers; + + private boolean jobThroughTopjava; + + private boolean relocationReady; + + @SafeHtml + private String relocation; + + private boolean underRecruitment; + + @SafeHtml + private String company; + + @URL + private String resumeUrl; + + private boolean partnerResumeNotify; + + private boolean partnerCorporateStudy; + + private String github; + + public void setGmail(String gmail) { + this.gmail = gmail.toLowerCase(); + } +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/util/MarkdownUtil.java b/src/main/java/ru/javaops/util/MarkdownUtil.java deleted file mode 100644 index 5e31e8c..0000000 --- a/src/main/java/ru/javaops/util/MarkdownUtil.java +++ /dev/null @@ -1,22 +0,0 @@ -package ru.javaops.util; - -import org.pegdown.PegDownProcessor; -import org.springframework.core.io.Resource; - -/** - * @author grigory.kislin - * Date: 04-Aug-15. - */ -public class MarkdownUtil { - private final ThreadLocal PROCESSOR = new ThreadLocal() { - - @Override - protected PegDownProcessor initialValue() { - return new PegDownProcessor(); - } - }; - - String toHtml(Resource resource) { - return PROCESSOR.get().markdownToHtml(Util.toString(resource)); - } -} diff --git a/src/main/java/ru/javaops/util/ProjectUtil.java b/src/main/java/ru/javaops/util/ProjectUtil.java new file mode 100644 index 0000000..13d7d3b --- /dev/null +++ b/src/main/java/ru/javaops/util/ProjectUtil.java @@ -0,0 +1,44 @@ +package ru.javaops.util; + +import ru.javaops.model.Group; +import ru.javaops.model.GroupType; +import ru.javaops.model.Project; + +import java.util.Collection; +import java.util.Optional; + +/** + * gkislin + * 13.07.2016 + */ +public class ProjectUtil { + + public static ProjectUtil.ProjectProps getProjectProps(String projectName, Collection groups) { + return new ProjectUtil.ProjectProps( + getExistedGroupByProjectAndType(groups, projectName, GroupType.REGISTERED), + getExistedGroupByProjectAndType(groups, projectName, GroupType.CURRENT)); + } + + public static Optional getGroupByProjectAndType(Collection groups, String projectName, GroupType type) { + return groups.stream() + .filter(g -> g.getProject() != null && g.getProject().getName().equals(projectName) && (g.getType() == type)) + .findFirst(); + } + + public static Group getExistedGroupByProjectAndType(Collection groups, String projectName, GroupType type) { + return getGroupByProjectAndType(groups, projectName, type) + .orElseThrow(() -> new IllegalStateException("В проекте " + projectName + " отсутствуют группы c типом " + type)); + } + + public static class ProjectProps { + public final Group registeredGroup; + public final Group currentGroup; + public final Project project; + + public ProjectProps(Group registeredGroup, Group currentGroup) { + this.registeredGroup = registeredGroup; + this.currentGroup = currentGroup; + this.project = registeredGroup.getProject(); + } + } +} diff --git a/src/main/java/ru/javaops/util/RefUtil.java b/src/main/java/ru/javaops/util/RefUtil.java new file mode 100644 index 0000000..24704a8 --- /dev/null +++ b/src/main/java/ru/javaops/util/RefUtil.java @@ -0,0 +1,49 @@ +package ru.javaops.util; + +import com.google.common.base.Strings; +import lombok.extern.slf4j.Slf4j; + +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import java.util.Base64; + +/** + * gkislin + * 19.06.2017 + */ +@Slf4j +public class RefUtil { + public static String encrypt0(String value, SecretKey secretKey) { + try { + byte[] bytes = value.getBytes(); + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(Cipher.ENCRYPT_MODE, secretKey); + byte[] encryptedByte = cipher.doFinal(bytes); + return Base64.getUrlEncoder().encodeToString(encryptedByte); + } catch (Exception e) { + log.warn("!!! Error encrypt '{}'", value); + return null; + } + } + + public static String decrypt0(String encrypted, SecretKey secretKey) { + try { + byte[] encryptedByte = Base64.getUrlDecoder().decode(encrypted); + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(Cipher.DECRYPT_MODE, secretKey); + byte[] bytes = cipher.doFinal(encryptedByte); + return new String(bytes); + } catch (Exception e) { + log.warn("!!! Error decrypt '{}'", encrypted); + return null; + } + } + + public static boolean isRef(String value) { + return !Strings.isNullOrEmpty(value) && value.charAt(0) == '$'; + } + + public static String markRef(String value) { + return '$' + value; + } +} diff --git a/src/main/java/ru/javaops/util/TimeUtil.java b/src/main/java/ru/javaops/util/TimeUtil.java new file mode 100644 index 0000000..9ca920b --- /dev/null +++ b/src/main/java/ru/javaops/util/TimeUtil.java @@ -0,0 +1,16 @@ +package ru.javaops.util; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Date; + +/** + * GKislin + * 18.05.2016 + */ +public class TimeUtil { + public static Date toDate(LocalDate ld) { + return ld == null ? null : + Date.from(ld.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()); + } +} diff --git a/src/main/java/ru/javaops/util/UserUtil.java b/src/main/java/ru/javaops/util/UserUtil.java index c367168..ffc3963 100644 --- a/src/main/java/ru/javaops/util/UserUtil.java +++ b/src/main/java/ru/javaops/util/UserUtil.java @@ -1,23 +1,96 @@ package ru.javaops.util; +import com.google.common.base.Strings; +import org.springframework.util.StringUtils; import ru.javaops.model.User; import ru.javaops.to.UserTo; +import ru.javaops.to.UserToExt; -import static ru.javaops.util.Util.assignNotEmpty; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.regex.Pattern; + +import static ru.javaops.util.Util.*; /** * GKislin * 16.02.2016 */ public class UserUtil { + static final Pattern GMAIL_EXP = Pattern.compile("\\@gmail\\."); + public static User createFromTo(UserTo userTo) { - return new User(userTo.getEmail(), userTo.getNameSurname(), userTo.getLocation(), userTo.getInfoSource()); + User user = new User(userTo.getEmail(), userTo.getNameSurname(), userTo.getLocation(), userTo.getInfoSource(), userTo.getSkype()); + tryFillGmail(user); + return user; + } + + public static User createFromToExt(UserToExt userToExt) { + User user = createFromTo(userToExt); + user.setGithub(userToExt.getGithub()); + return user; + } + + public static void updateFromToExt(User user, UserToExt userToExt) { + updateFromTo(user, userToExt); + if (user.isMember()) { + if (!StringUtils.hasText(userToExt.getGmail())) { + throw new IllegalArgumentException("Заполните gmail, он требуется для авторизации"); + } else if (!GMAIL_EXP.matcher(userToExt.getGmail()).find()) { + throw new IllegalArgumentException("Неверный формат gmail"); + } + user.setStatsAgree(userToExt.isStatsAgree()); + user.setJobThroughTopjava(userToExt.isJobThroughTopjava()); + } + if ((user.getHrUpdate() == null || user.getHrUpdate().isBefore(LocalDate.now())) // not switched back + && userToExt.isConsiderJobOffers() && !Strings.isNullOrEmpty(userToExt.getResumeUrl()) // visible for HR + && (user.isConsiderJobOffers() == null || !user.isConsiderJobOffers() || Strings.isNullOrEmpty(user.getResumeUrl()))) { // was not visible for HR + user.setHrUpdate(LocalDate.now()); + + } else if (!userToExt.isConsiderJobOffers() && user.isConsiderJobOffers() != null && user.isConsiderJobOffers()) { // stop job considering + user.setHrUpdate(LocalDate.now().plus(90, ChronoUnit.DAYS)); + } + if (user.isPartner()) { + user.setPartnerResumeNotify(userToExt.isPartnerResumeNotify()); + user.setPartnerCorporateStudy(userToExt.isPartnerCorporateStudy()); + } + user.setConsiderJobOffers(userToExt.isConsiderJobOffers()); + user.setUnderRecruitment(userToExt.isUnderRecruitment()); + + assign(userToExt.getAboutMe(), user::setAboutMe); + assign(userToExt.getGmail(), user::setGmail); + assign(userToExt.getCompany(), user::setCompany); + assign(userToExt.getResumeUrl(), user::setResumeUrl); + assign(userToExt.getRelocation(), user::setRelocation); } public static void updateFromTo(User user, UserTo userTo) { assignNotEmpty(userTo.getNameSurname(), user::setFullName); - assignNotEmpty(userTo.getLocation(), user::setLocation); assignNotEmpty(userTo.getInfoSource(), user::setInfoSource); + assign(userTo.getLocation(), user::setLocation); + assign(userTo.getSkype(), user::setSkype); user.setActive(true); + tryFillGmail(user); + } + + public static boolean updateFromAuth(User user, UserToExt userToExt) { + boolean assign = assignNotOverride(userToExt.getNameSurname(), user.getFullName(), user::setFullName); + assign |= assignNotEmpty(userToExt.getGithub(), user::setGithub); + assign |= tryFillGmail(user); + return assign; + } + + private static boolean tryFillGmail(User user) { + if (user.getGmail() == null && GMAIL_EXP.matcher(user.getEmail()).find()) { + user.setGmail(user.getEmail()); + return true; + } + return false; + } + + public static String normalize(String aboutMe) { + return aboutMe == null ? "" : aboutMe.replace("\r\n", "
") + .replace("\n", "
") + .replace("\r", "
"); } } diff --git a/src/main/java/ru/javaops/util/Util.java b/src/main/java/ru/javaops/util/Util.java index 782c13a..b1f9cbc 100644 --- a/src/main/java/ru/javaops/util/Util.java +++ b/src/main/java/ru/javaops/util/Util.java @@ -19,14 +19,30 @@ public class Util { private static Pattern MAIL_TITLE = Pattern.compile("(.+)", Pattern.MULTILINE); - public static boolean assignNotEmpty(T value, Consumer setter) { - if (!StringUtils.isEmpty(value)) { + public static boolean assignNotEmpty(String value, Consumer setter) { + if (StringUtils.hasText(value)) { setter.accept(value); return true; } return false; } + public static boolean assignNotOverride(String value, String oldValue, Consumer setter) { + if (!StringUtils.hasText(oldValue)) { + setter.accept(value); + return true; + } + return false; + } + + public static void assign(String value, Consumer setter) { + if (StringUtils.hasText(value)) { + setter.accept(value); + } else { + setter.accept(null); + } + } + public static String toString(Resource resource) { try (BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()))) { return FileCopyUtils.copyToString(br); diff --git a/src/main/java/ru/javaops/util/WebUtil.java b/src/main/java/ru/javaops/util/WebUtil.java new file mode 100644 index 0000000..1b15400 --- /dev/null +++ b/src/main/java/ru/javaops/util/WebUtil.java @@ -0,0 +1,23 @@ +package ru.javaops.util; + +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * gkislin + * 14.05.2017 + */ +@UtilityClass +@Slf4j +public class WebUtil { + public static void logWarn(HttpServletRequest req) { + log.warn("+++ Suspicious request: '" + req.getRequestURI() + + ", params=[" + req.getParameterMap().entrySet().stream().map(e -> e.getKey() + ':' + Arrays.toString(e.getValue())).collect(Collectors.joining(",")) + + "], IP=" + req.getRemoteAddr() + + ", FORWARDED=" + req.getHeader("X-FORWARDED-FOR")); + } +} diff --git a/src/main/java/ru/javaops/util/exception/NotMemberException.java b/src/main/java/ru/javaops/util/exception/NotMemberException.java new file mode 100644 index 0000000..4ec5e9c --- /dev/null +++ b/src/main/java/ru/javaops/util/exception/NotMemberException.java @@ -0,0 +1,15 @@ +package ru.javaops.util.exception; + +/** + * gkislin + * 29.06.2017 + */ +public class NotMemberException extends RuntimeException { + public NotMemberException(String email) { + super("Пользователь " + email + " не участник Java Online проектов"); + } + + public NotMemberException(String email, String project) { + super("Пользователь " + email + " не участник проекта " + project + ""); + } +} diff --git a/src/main/java/ru/javaops/web/ErrorController.java b/src/main/java/ru/javaops/web/ErrorController.java index 32cf71d..6a87e6b 100644 --- a/src/main/java/ru/javaops/web/ErrorController.java +++ b/src/main/java/ru/javaops/web/ErrorController.java @@ -33,12 +33,13 @@ public class ErrorController implements org.springframework.boot.autoconfigure.w @Autowired private ErrorAttributes errorAttributes; + @Override public String getErrorPath() { return ERROR_PATH; } @RequestMapping(ERROR_PATH) - String error(HttpServletRequest request, Model model) { + public String error(HttpServletRequest request, Model model) { Map errorMap = errorAttributes.getErrorAttributes(new ServletRequestAttributes(request), false); model.addAllAttributes(errorMap); return "exception"; diff --git a/src/main/java/ru/javaops/web/MailController.java b/src/main/java/ru/javaops/web/MailController.java index f38a1f2..dd81913 100644 --- a/src/main/java/ru/javaops/web/MailController.java +++ b/src/main/java/ru/javaops/web/MailController.java @@ -1,18 +1,23 @@ package ru.javaops.web; +import com.google.common.base.Splitter; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.repository.query.Param; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import ru.javaops.model.GroupType; -import ru.javaops.model.User; import ru.javaops.service.GroupService; import ru.javaops.service.MailService; +import ru.javaops.service.MailService.GroupResult; +import ru.javaops.service.SqlService; +import ru.javaops.to.UserMail; +import java.time.LocalDate; +import java.util.Collections; import java.util.Set; import static org.springframework.web.bind.annotation.RequestMethod.POST; @@ -23,6 +28,7 @@ @RestController @RequestMapping(value = "/api/mail", produces = MediaType.APPLICATION_JSON_VALUE) +@Slf4j public class MailController { @Autowired @@ -31,30 +37,57 @@ public class MailController { @Autowired private GroupService groupService; + @Autowired + private SqlService sqlService; + + @RequestMapping(value = "/test", method = POST) + public ResponseEntity sendTest(@RequestParam("template") String template) { + String result = mailService.sendTest(template); + return new ResponseEntity<>(result, MailService.isOk(result) ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR); + } + @RequestMapping(value = "/to-user", method = POST) - public ResponseEntity sendToUser(@Param("template") String template, @Param("email") String email) { + public ResponseEntity sendToUser(@RequestParam("template") String template, @RequestParam("email") String email) { String result = mailService.sendToUser(template, email); return new ResponseEntity<>(result, MailService.isOk(result) ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR); } - @RequestMapping(value = "/test", method = POST) - public ResponseEntity sendToUser(@Param("template") String template) { - String result = mailService.sendTest(template); - return new ResponseEntity<>(result, MailService.isOk(result) ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR); + @RequestMapping(value = "/by-sql", method = POST) + public ResponseEntity sendToUsersBySql(@RequestParam("template") String template, @RequestParam("sql_key") String sqlKey) { + Set users = sqlService.getUsers(sqlKey); + return sendToGroup(template, users); } - @RequestMapping(value = "/to-project", method = POST) - public ResponseEntity sendToProjectByGroupType(@Param("template") String template, @Param("project") String project, @Param("groupType") String groupType) { - MailService.GroupResult groupResult = mailService.sendToProjectByGroupType(template, project, GroupType.valueOf(groupType.toUpperCase())); - return new ResponseEntity<>(groupResult, groupResult.isOk() ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR); + @RequestMapping(value = "/to-users", method = POST) + public ResponseEntity sendToUsers(@RequestParam("template") String template, @RequestParam("emails") String emails) { + GroupResult groupResult = mailService.sendToEmailList(template, Splitter.on(',').trimResults().omitEmptyStrings().splitToList(emails)); + return getGroupResultResponseEntity(groupResult); } @RequestMapping(value = "/to-groups", method = POST) - public ResponseEntity sendToGroup(@Param("template") String template, @Param("includes") String includes, - @RequestParam(value = "excludes", required = false) String excludes) { + public ResponseEntity sendToGroup(@RequestParam("template") String template, @RequestParam("includes") String includes, + @RequestParam(value = "excludes", required = false) String excludes, + @RequestParam(value = "startRegisteredDate", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startRegisteredDate, + @RequestParam(value = "endRegisteredDate", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endRegisteredDate) { + return sendToGroup(template, groupService.filterUserByGroupNames(includes, excludes, startRegisteredDate, endRegisteredDate)); + } + + @RequestMapping(value = "/resend", method = POST) + public ResponseEntity resend(@RequestParam("template") String template) { + GroupResult groupResult = mailService.resendTodayFailed(template); + return getGroupResultResponseEntity(groupResult); + } + + private ResponseEntity sendToGroup(String template, Set users) { + if (users.isEmpty()) { + return getGroupResultResponseEntity(new GroupResult(0, Collections.emptyList(), null)); + } + GroupResult groupResult = mailService.sendToUserList(template, users); + return getGroupResultResponseEntity(groupResult); + } - Set users = groupService.filterUserByGroupNames(includes, excludes); - MailService.GroupResult groupResult = mailService.sendToUserList(template, users); + private ResponseEntity getGroupResultResponseEntity(GroupResult groupResult) { + log.info(groupResult.toString()); return new ResponseEntity<>(groupResult, groupResult.isOk() ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR); } } diff --git a/src/main/java/ru/javaops/web/PageController.java b/src/main/java/ru/javaops/web/PageController.java new file mode 100644 index 0000000..dab2cf4 --- /dev/null +++ b/src/main/java/ru/javaops/web/PageController.java @@ -0,0 +1,134 @@ +package ru.javaops.web; + +import com.google.common.collect.ImmutableMap; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; +import ru.javaops.SqlResult; +import ru.javaops.model.Group; +import ru.javaops.model.Project; +import ru.javaops.model.User; +import ru.javaops.repository.UserRepository; +import ru.javaops.service.CachedGroups; +import ru.javaops.service.RefService; +import ru.javaops.service.SqlService; +import ru.javaops.service.SubscriptionService; +import ru.javaops.to.UserAdminsInfo; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletResponse; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Controller +@Slf4j +public class PageController { + + @Autowired + private UserRepository userRepository; + + @Autowired + private SqlService sqlService; + + @Autowired + private CachedGroups cachedGroups; + + @Autowired + private SubscriptionService subscriptionService; + + @Autowired + private RefService refService; + + @GetMapping(value = "/user") + public ModelAndView userInfo(@RequestParam("email") String email, + @RequestParam("partnerKey") String partnerKey) { + + User partner = subscriptionService.checkPartner(partnerKey); + User user = userRepository.findByEmailWithGroup(email); + Map groupMembers = cachedGroups.getMembers(); + List projects = user.getUserGroups().stream() + .filter(ug -> groupMembers.containsKey(ug.getGroup().getId())) + .map(ug -> groupMembers.get(ug.getGroup().getId()).getProject()) + .distinct() + .collect(Collectors.toList()); + return new ModelAndView("userInfo", + ImmutableMap.of("user", user, "projects", projects, "partner", partner)); + } + + @PostMapping(value = "/saveAdminInfo") + public String saveComment(@RequestParam("email") String email, + @RequestParam("adminKey") String adminKey, + UserAdminsInfo uaInfo) { +// userRepository.saveAdminInfo(email, uaInfo); + userRepository.saveAdminInfo(email, uaInfo.getComment(), uaInfo.getMark(), uaInfo.getBonus()); + return "closeWindow"; + } + + @GetMapping(value = "/sql") + public ModelAndView sqlExecute(@RequestParam("sql_key") String sqlKey, + @RequestParam(value = "limit", required = false) Integer limit, + @RequestParam(value = "csv", required = false, defaultValue = "false") boolean csv, + @RequestParam("partnerKey") String partnerKey, + @RequestParam(value = "fromDate", required = false) String fromDate, + @RequestParam Map params) { + + User partner = subscriptionService.checkPartner(partnerKey); + params.put("partnerKey", partnerKey); + params.put("partnerMark", partner.getMark()); + params.put("fromDate", fromDate == null ? "01-01-01" : fromDate); + params.put("toDate", fromDate == null ? "3000-01-01" : DateTimeFormatter.ISO_DATE.format(LocalDate.now())); + SqlResult result = sqlService.execute(sqlKey, limit, params); + return new ModelAndView("sqlResult", + ImmutableMap.of("result", result, "csv", csv)); + } + + @GetMapping(value = "/ref/{channel}") + public ModelAndView rootReference(@PathVariable(value = "channel") String channel, HttpServletResponse response) { + setCookie(response, channel, "root"); + return new ModelAndView("redirectToUrl", "redirectUrl", "/"); + } + + @GetMapping(value = "/ref/{project}/{channel}") + public ModelAndView projectReference(@PathVariable(value = "channel") String channel, + @PathVariable(value = "project") String project, + HttpServletResponse response) { + setCookie(response, channel, project); + return new ModelAndView("redirectToUrl", "redirectUrl", "/reg/" + project); + } + + @GetMapping(value = "/reg/{project}") + public ModelAndView registration(@PathVariable(value = "project") String project, + @RequestParam(value = "ch", required = false) String channel, + HttpServletResponse response) { + setCookie(response, "channel", channel, project); + return new ModelAndView(project); + } + + private void setCookie(HttpServletResponse response, String channel, String entry) { + User user = refService.decryptUser(channel); + if (user == null) { + setCookie(response, "channel", channel, entry); + } else { + log.info("+++ Reference from user {}", user.getEmail()); + setCookie(response, "ref", user.getId().toString(), entry); + } + } + + private void setCookie(HttpServletResponse response, String name, String value, String entry) { + if (value != null) { + log.info("+++ set Cookie '{}' : '{}' for entry {}", name, value, entry); + Cookie cookie = new Cookie(name, value); + cookie.setPath("/"); + cookie.setMaxAge(60 * 60 * 24 * 30); // 30 days + response.addCookie(cookie); + } + } +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/web/ProfileController.java b/src/main/java/ru/javaops/web/ProfileController.java new file mode 100644 index 0000000..9b303ea --- /dev/null +++ b/src/main/java/ru/javaops/web/ProfileController.java @@ -0,0 +1,165 @@ +package ru.javaops.web; + +import com.google.api.client.repackaged.com.google.common.base.Strings; +import com.google.common.collect.ImmutableMap; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.servlet.ModelAndView; +import ru.javaops.AuthorizedUser; +import ru.javaops.model.IdeaCoupon; +import ru.javaops.model.User; +import ru.javaops.repository.UserRepository; +import ru.javaops.service.*; +import ru.javaops.to.UserStat; +import ru.javaops.to.UserToExt; +import ru.javaops.util.UserUtil; +import ru.javaops.util.Util; + +import javax.validation.Valid; +import javax.validation.ValidationException; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * gkislin + * 19.05.2017 + */ + +@Controller +@Slf4j +public class ProfileController { + @Autowired + private UserService userService; + + @Autowired + private UserRepository userRepository; + + @Autowired + private GroupService groupService; + + @Autowired + private IntegrationService integrationService; + + @Autowired + private RefService refService; + + @Autowired + private IdeaCouponService ideaCouponService; + + @Autowired + private GoogleAdminSDKDirectoryService googleAdminSDKDirectoryService; + + @GetMapping("/auth/profile") + public ModelAndView profile() { + return getProfileView(null); + } + + @GetMapping("/auth/profileER") + public ModelAndView profileER(@RequestParam(value = "project", required = false) String projectName) { + return new ModelAndView("profileER", "project", projectName); + } + + @RequestMapping(value = "/participate", method = RequestMethod.GET) + public ModelAndView participate(@RequestParam("email") String email, @RequestParam("key") String key, @RequestParam("project") String projectName) { + return getProfileView(ImmutableMap.of("project", projectName)); + } + + @RequestMapping(value = "/profile", method = RequestMethod.GET) + public ModelAndView profile(@RequestParam("email") String email, @RequestParam("key") String key) { + return getProfileView(null); + } + + @RequestMapping(value = "/delete", method = RequestMethod.GET) + public ResponseEntity delete(@RequestParam("email") String email, @RequestParam("key") String key) { + return new ResponseEntity<>(userService.deleteByEmail(email) ? "OK" : "Not Found", HttpStatus.OK); + } + + @RequestMapping(value = "/auth/save", method = RequestMethod.POST) + public ModelAndView save(@RequestParam(value = "project", required = false) String project, @Valid UserToExt userToExt, BindingResult result) { + if (result.hasErrors()) { + throw new ValidationException(Util.getErrorMessage(result)); + } + User user = userService.update(userToExt); + AuthorizedUser.updateUser(user); + if (!Strings.isNullOrEmpty(project)) { + String email = userToExt.getEmail(); + groupService.getExistedUserInCurrentProject(email, project); + return grantAllAccess(email, userToExt.getGmail(), project); + } else { + return new ModelAndView("saveProfile"); + } + } + + @GetMapping(value = "/auth/users") + public ModelAndView usersInfo() { + List users = userRepository.findAllForStats(); + return (users.stream().anyMatch(u -> u.getEmail().equals(AuthorizedUser.user().getEmail()))) ? + new ModelAndView("users", "users", users) : + new ModelAndView("statsForbidden"); + } + + private ModelAndView grantAllAccess(String email, String gmail, String project) { + log.info("grantAllAccess to {}/{}", email, gmail); + IntegrationService.SlackResponse response = integrationService.sendSlackInvitation(email, project); + String accessResponse = ""; + if (!project.equals("javaops")) { + accessResponse = googleAdminSDKDirectoryService.insertMember(project + "@javaops.ru", gmail); + } + return new ModelAndView("registration", + ImmutableMap.of("response", response, "email", email, + "accessResponse", accessResponse, "project", project)); + } + + private ModelAndView getProfileView(Map params) { + User user = checkNotNull(AuthorizedUser.user()); + String aboutMe = UserUtil.normalize(user.getAboutMe()); + + Map projects = groupService.getGroupsByUserId(user.getId()).stream() + .filter(g -> g.getProject() != null) + .collect(Collectors.toMap(g -> g.getProject().getName(), g -> g.getType().name(), (t1, t2) -> t1 + t2)); +/* + Map> projects = groupService.getGroupsByUserId(user.getId()).stream() + .filter(g -> g.getProject() != null) + .collect(Collectors.groupingBy(g -> g.getProject().getName(), + Collector.of( + () -> EnumSet.noneOf(GroupType.class), + (set, g) -> set.add(g.getType()), + (set, set2) -> { + set.addAll(set2); + return set; + }))); +*/ + + String refUrl = refService.getRefUrl(null, user.getEmail()); + + String ideaCoupon = ""; + if (user.isMember()) { + IdeaCoupon coupon = ideaCouponService.getByUser(user); + if (coupon != null) { + ideaCoupon = coupon.getCoupon(); + } + } + ImmutableMap.Builder builder = + new ImmutableMap.Builder() + .put("aboutMe", aboutMe) + .put("refUrl", refUrl) + .put("ideaCoupon", ideaCoupon) + .put("projects", projects); + + if (params != null) { + builder = builder.putAll(params); + } + return new ModelAndView("profile", builder.build()); + } +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/web/SubscriptionController.java b/src/main/java/ru/javaops/web/SubscriptionController.java index 05f369a..45f61f5 100644 --- a/src/main/java/ru/javaops/web/SubscriptionController.java +++ b/src/main/java/ru/javaops/web/SubscriptionController.java @@ -1,40 +1,45 @@ package ru.javaops.web; +import com.google.api.client.repackaged.com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; -import ru.javaops.config.AppProperties; -import ru.javaops.model.User; -import ru.javaops.model.UserGroup; -import ru.javaops.service.GroupService; -import ru.javaops.service.GroupService.ProjectGroups; -import ru.javaops.service.MailService; -import ru.javaops.service.SubscriptionService; -import ru.javaops.service.UserService; +import ru.javaops.AuthorizedUser; +import ru.javaops.model.*; +import ru.javaops.service.*; +import ru.javaops.to.UserMailImpl; import ru.javaops.to.UserTo; -import ru.javaops.util.Util; +import ru.javaops.to.UserToExt; +import ru.javaops.util.*; +import ru.javaops.util.exception.NotMemberException; import javax.mail.MessagingException; +import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import javax.validation.ValidationException; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.Date; +import java.util.Optional; +import java.util.Set; /** * GKislin */ @Controller +@Slf4j public class SubscriptionController { - private static final Logger LOG = LoggerFactory.getLogger(SubscriptionController.class); @Autowired - private AppProperties appProperties; + private IntegrationService integrationService; @Autowired private SubscriptionService subscriptionService; @@ -48,41 +53,170 @@ public class SubscriptionController { @Autowired private GroupService groupService; + @Autowired + private IdeaCouponService ideaCouponService; + + @Autowired + private CachedGroups cachedGroups; + @RequestMapping(value = "/activate", method = RequestMethod.GET) public ModelAndView activate(@RequestParam("email") String email, @RequestParam("activate") boolean activate, @RequestParam("key") String key) { - if (subscriptionService.isActivationKeyMatch(email, key)) { - User u = userService.findExistedByEmail(email); - if (u != null) { - if (u.isActive() != activate) { - u.setActive(activate); - u.setActivatedDate(new Date()); - userService.save(u); - return new ModelAndView("activation", - ImmutableMap.of("activate", activate, - "subscriptionUrl", subscriptionService.getSubscriptionUrl(email, key, !activate))); - } - } + log.info("User {} set activete={}", email, activate); + User u = userService.findByEmail(email); + if (u != null && u.isActive() != activate) { + u.setActive(activate); + u.setActivatedDate(new Date()); + userService.save(u); + } + return new ModelAndView("activation", + ImmutableMap.of("activate", activate, + "subscriptionUrl", subscriptionService.getSubscriptionUrl(email, key, !activate))); + } + + @RequestMapping(value = "/register-group", method = RequestMethod.POST) + public ModelAndView registerInGroup(@RequestParam("group") String group, + @RequestParam(value = "confirmMail", required = false) String confirmMail, + @RequestParam(value = "callback", required = false) String callback, + @RequestParam("channel") String channel, + @RequestParam(value = "template", required = false) String template, + @RequestParam(value = "type", required = false) ParticipationType participationType, + @RequestParam("channelKey") String channelKey, + @Valid UserTo userTo, BindingResult result) { + if (result.hasErrors()) { + throw new ValidationException(Util.getErrorMessage(result)); + } + UserGroup userGroup = groupService.registerAtGroup(userTo, group, channel, participationType); + String mailResult = "без отправки"; + if (StringUtils.isNotEmpty(template)) { + mailResult = mailService.sendWithTemplate(template, userGroup.getUser(), ImmutableMap.of("participationType", participationType == null ? "" : participationType)); + } + ImmutableMap params = ImmutableMap.of("userGroup", userGroup, "result", mailResult); + + final ModelAndView mv; + if (callback != null) { + mv = getRedirectView(mailResult, callback, "error"); + } else { + mv = new ModelAndView("simpleConfirm", params); + } + if (confirmMail != null) { + mailService.sendWithTemplateAsync(new UserMailImpl(null, confirmMail), "simpleConfirm", params); } - throw new IllegalArgumentException(); + return mv; + } + + @RequestMapping(value = "/register-site", method = RequestMethod.POST) + public ModelAndView registerSite(@CookieValue(value = "channel", required = false) String cookieChannel, + @CookieValue(value = "ref", required = false) String refUserId, + HttpServletRequest request) { + UserToExt userToExt = AuthorizedUser.getPreAuthorized(request); + if (userToExt == null) { + WebUtil.logWarn(request); + return null; + } + log.info("+++ !!! Register from Site, {}", userToExt); + User user = UserUtil.createFromToExt(userToExt); + userService.save(user); + AuthorizedUser.setAuthorized(user, request); + return new ModelAndView("redirect:/auth/profile"); } @RequestMapping(value = "/register", method = RequestMethod.POST) - public ModelAndView registerByProject(@RequestParam("project") String project, + public ModelAndView registerByProject(@RequestParam("project") String projectName, + @RequestParam(value = "channel", required = false) String channel, @RequestParam(value = "template", required = false) String template, - @RequestParam("channel") String channel, - @Valid UserTo userTo, BindingResult result) throws MessagingException { + @Valid UserTo userTo, BindingResult result, + @CookieValue(value = "channel", required = false) String cookieChannel, + @CookieValue(value = "ref", required = false) String refUserId) { if (result.hasErrors()) { throw new ValidationException(Util.getErrorMessage(result)); } - return register(template, appProperties.getTestEmail(), channel, "http://javawebinar.ru/confirm.html", "http://javawebinar.ru/error.html", userTo, result, groupService.getProjectGroups(project)); + User refUser = null; + if (!Strings.isNullOrEmpty(refUserId)) { + try { + refUser = userService.get(Integer.parseInt(refUserId)); + if (refUser != null) { + channel = RefUtil.markRef(refUser.getEmail()); + } else { + channel = "Unknown_refUserId_" + refUserId; + } + } catch (Exception e) { + channel = "Unknown_refUserId_" + refUserId; + } + } else if (!Strings.isNullOrEmpty(cookieChannel)) { + channel = cookieChannel; + } + log.info("+++ !!! Register from '{}', project={}, email={}", channel, projectName, userTo.getEmail()); + + UserGroup userGroup = groupService.registerAtProject(userTo, projectName, channel); + if (userGroup.isAlreadyExist()) { + Date date = userGroup.getRegisteredDate(); + if (date != null) { + LocalDate ld = LocalDate.of(date.getYear() + 1900, date.getMonth() + 1, date.getDate()); + if (ld.isAfter(LocalDate.now().minus(15, ChronoUnit.DAYS))) { + return getRedirectView("/view/duplicate"); + } + } + userGroup.setRegisteredDate(new Date()); + groupService.save(userGroup); + } else if (userGroup.getRegisterType() == RegisterType.REPEAT) { + integrationService.asyncSendSlackInvitation(userGroup.getUser().getEmail(), projectName); + template = projectName + "_repeat"; + } else { + if (template == null) { + template = projectName + "_register"; + } + if (refUser != null) { + mailService.sendRefMail(refUser, "ref/refRegistration", ImmutableMap.of("project", projectName, "email", userTo.getEmail())); + } + } + String mailResult = mailService.sendToUser(template, userGroup.getUser()); + return getRedirectView(mailResult, "/view/confirm", "/view/error"); } - private ModelAndView register(String template, String confirmEmail, String channel, String successUrl, String failUrl, - UserTo userTo, BindingResult result, - ProjectGroups projectGroups) throws MessagingException { + private ModelAndView getRedirectView(String mailResult, String successUrl, String failUrl) { + return getRedirectView(MailService.isOk(mailResult) ? successUrl : failUrl); + } + + private ModelAndView getRedirectView(String url) { + return new ModelAndView("redirectToUrl", "redirectUrl", url); + } - UserGroup userGroup = groupService.registerAtProject(userTo, projectGroups, channel); - String mailResult = mailService.sendRegistration(template, projectGroups.project, userGroup, confirmEmail); - return new ModelAndView("redirectToUrl", "redirectUrl", MailService.isOk(mailResult) ? successUrl : failUrl); + @RequestMapping(value = "/repeat", method = RequestMethod.POST) + public ModelAndView repeat(@RequestParam("email") String email, + @RequestParam("project") String projectName) throws MessagingException { + + email = email.toLowerCase(); + User user = userService.findExistedByEmail(email); + Set groups = groupService.getGroupsByUserId(user.getId()); + + Optional optGroup = ProjectUtil.getGroupByProjectAndType(groups, projectName, GroupType.CURRENT); + if (optGroup.isPresent()) { + return new ModelAndView("already_registered", "group", optGroup.get().getName()); + } + if (ProjectUtil.getGroupByProjectAndType(groups, projectName, GroupType.FINISHED).isPresent()) { + ProjectUtil.ProjectProps projectProps = groupService.getProjectProps(projectName); + groupService.save(new UserGroup(user, projectProps.currentGroup, RegisterType.REPEAT, "repeat")); + + mailService.sendToUser(projectName + "_repeat", user); + IntegrationService.SlackResponse response = integrationService.sendSlackInvitation(email, projectName); + return new ModelAndView("registration", + ImmutableMap.of("response", response, "email", email, "project", projectName)); + } + throw new NotMemberException(email, projectName); + } + + @RequestMapping(value = "/idea", method = RequestMethod.GET) + public ModelAndView ideaRegister(@RequestParam("email") String email, @RequestParam("project") String projectName) throws MessagingException { + User user = userService.findExistedByEmail(email); + if (!user.isMember()) { + throw new NotMemberException(user.getEmail()); + } + IdeaCoupon coupon = ideaCouponService.assignToUser(user, cachedGroups.getProject(projectName)); + String response = mailService.sendWithTemplate("idea_register", user, ImmutableMap.of("coupon", coupon.getCoupon())); + if (MailService.OK.equals(response)) { + return new ModelAndView("registration_idea"); + } else { + throw new IllegalStateException("Ошибка отправки почты" + response); + } } } \ No newline at end of file diff --git a/src/main/java/ru/javaops/web/UserController.java b/src/main/java/ru/javaops/web/UserController.java deleted file mode 100644 index 20ac28e..0000000 --- a/src/main/java/ru/javaops/web/UserController.java +++ /dev/null @@ -1,49 +0,0 @@ -package ru.javaops.web; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.repository.query.Param; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import ru.javaops.model.Currency; -import ru.javaops.model.Payment; -import ru.javaops.model.User; -import ru.javaops.service.GroupService; -import ru.javaops.service.UserService; - -import java.util.Collection; - -import static org.springframework.web.bind.annotation.RequestMethod.DELETE; -import static org.springframework.web.bind.annotation.RequestMethod.POST; - -/** - * GKislin - */ - -@RestController -@RequestMapping(value = "/api/users", produces = MediaType.APPLICATION_JSON_VALUE) -public class UserController { - - @Autowired - private UserService userService; - - @Autowired - private GroupService groupService; - - @RequestMapping(method = DELETE) - public void delete(@Param("email") String email) { - userService.deleteByEmail(email); - } - - @RequestMapping(value = "/group", method = POST) - public Collection getGroup(@Param("group") String group) { -// TODO make json projection - return userService.getGroup(group); - } - - @RequestMapping(value = "/pay", method = POST) - public void pay(@Param("project") String project, @Param("email") String email, - @Param("sum") int sum, @Param("currency") Currency currency, @Param("comment") String comment) { - groupService.pay(email, project, new Payment(sum, currency, comment)); - } -} diff --git a/src/main/java/ru/javaops/web/UserRestController.java b/src/main/java/ru/javaops/web/UserRestController.java new file mode 100644 index 0000000..bdf30f5 --- /dev/null +++ b/src/main/java/ru/javaops/web/UserRestController.java @@ -0,0 +1,74 @@ +package ru.javaops.web; + +import com.google.common.collect.ImmutableMap; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import ru.javaops.model.*; +import ru.javaops.service.GroupService; +import ru.javaops.service.MailService; +import ru.javaops.service.RefService; +import ru.javaops.service.UserService; +import ru.javaops.to.UserTo; + +import javax.validation.Valid; + +import static org.springframework.web.bind.annotation.RequestMethod.DELETE; +import static org.springframework.web.bind.annotation.RequestMethod.POST; + +/** + * GKislin + */ + +@RestController +@RequestMapping(value = "/api/users", produces = MediaType.APPLICATION_JSON_VALUE) +@Slf4j +public class UserRestController { + + @Autowired + private UserService userService; + + @Autowired + private RefService refService; + + @Autowired + private MailService mailService; + + @Autowired + private GroupService groupService; + + @RequestMapping(method = DELETE) + public ResponseEntity delete(@RequestParam("email") String email) { + return new ResponseEntity<>(userService.deleteByEmail(email) ? "OK":"Not Found", HttpStatus.OK); + } + + @RequestMapping(value = "/pay", method = POST) + public String pay(@RequestParam("group") String group, @Valid UserTo userTo, + @RequestParam("sum") int sum, @RequestParam("currency") Currency currency, @RequestParam("comment") String comment, + @RequestParam(value = "type", required = false) ParticipationType participationType, + @RequestParam(value = "channel", required = false) String channel, + @RequestParam(value = "template", required = false) String template) { + UserGroup ug = groupService.pay(userTo, group, new Payment(sum, currency, comment), participationType, channel); + User refUser = null; + if (ug.isAlreadyExist()) { + log.info("User {} already exist in {}", userTo.getEmail(), group); + } else { + refUser = refService.getRefUser(ug.getChannel()); + if (refUser != null) { + String project = ug.getGroup().getProject().getName(); + int addBonus = "topjava".equals(project) || "masterjava".equals(project) ? 25 : 10; + refUser.addBonus(addBonus); + log.info("!!! Ref Participation from user {}, bonus {}", refUser.getEmail(), refUser.getBonus()); + userService.save(refUser); + mailService.sendRefMail(refUser, "ref/refParticipation", ImmutableMap.of("project", project, "email", userTo.getEmail(), "addBonus", addBonus)); + } + } + return (refUser == null ? "" : "Reference from " + refUser.getEmail() + ", bonus=" + refUser.getBonus() + "\n") + + ug.toString() + '\n' + (template == null ? "No template" : mailService.sendToUser(template, ug.getUser())); + } +} \ No newline at end of file diff --git a/src/main/java/ru/javaops/web/oauth/AbstractOAuth2Controller.java b/src/main/java/ru/javaops/web/oauth/AbstractOAuth2Controller.java new file mode 100644 index 0000000..4dfca9c --- /dev/null +++ b/src/main/java/ru/javaops/web/oauth/AbstractOAuth2Controller.java @@ -0,0 +1,84 @@ +package ru.javaops.web.oauth; + +import com.fasterxml.jackson.databind.JsonNode; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; +import ru.javaops.AuthorizedUser; +import ru.javaops.model.User; +import ru.javaops.service.UserService; +import ru.javaops.to.UserToExt; +import ru.javaops.util.UserUtil; + +import javax.servlet.http.HttpServletRequest; +import java.net.URI; + +import static org.springframework.web.util.UriComponentsBuilder.fromHttpUrl; + +@Slf4j +public abstract class AbstractOAuth2Controller { + + @Autowired + protected RestTemplate template; + + @Autowired + private UserService userService; + + final OAuth2Provider provider; + + public AbstractOAuth2Controller(OAuth2Provider provider) { + this.provider = provider; + } + + @RequestMapping("/callback") + public String authenticate(@RequestParam String code, @RequestParam String state, HttpServletRequest request) { + if (state.equals("csrf_token_auth")) { + String accessToken = getAccessToken(code); + + UserToExt userToExt = getUserToExt(accessToken); + log.info(provider.getName() + " authorization from user {}", userToExt.getEmail()); + User user = userService.findByEmailOrGmail(userToExt.getEmail()); + if (user == null) { + AuthorizedUser.setPreAuthorized(userToExt, request); + return "redirect:/view/profileChoice?email=" + userToExt.getEmail(); + } + if (UserUtil.updateFromAuth(user, userToExt)) { + userService.save(user); + } + AuthorizedUser.setAuthorized(user, request); + return "redirect:/auth/profile"; + } + return "/"; + } + + protected abstract UserToExt getUserToExt(String accessToken); + + public String authorize() { + return "redirect:" + provider.getAuthorizeUrl() + + "?client_id=" + provider.getClientId() + + "&redirect_uri=" + provider.getRedirectUri() + + "&state=csrf_token_auth"; + } + + protected String getAccessToken(String code) { + URI uri = fromHttpUrl(provider.getAccessTokenUrl()) + .queryParam("client_id", provider.getClientId()) + .queryParam("client_secret", provider.getClientSecret()) + .queryParam("code", code) + .queryParam("redirect_uri", provider.getRedirectUri()) + .queryParam("grant_type", "authorization_code").build().encode().toUri(); + + ResponseEntity tokenEntity = template.postForEntity(uri, null, JsonNode.class); + return tokenEntity.getBody().get("access_token").asText(); + } + + protected JsonNode getRequest(String url, String accessToken) { + UriComponentsBuilder builder = fromHttpUrl(url).queryParam("access_token", accessToken); + ResponseEntity entity = template.getForEntity(builder.build().encode().toUri(), JsonNode.class); + return entity.getBody(); + } +} diff --git a/src/main/java/ru/javaops/web/oauth/GithubOAuth2Controller.java b/src/main/java/ru/javaops/web/oauth/GithubOAuth2Controller.java new file mode 100644 index 0000000..059e529 --- /dev/null +++ b/src/main/java/ru/javaops/web/oauth/GithubOAuth2Controller.java @@ -0,0 +1,46 @@ +package ru.javaops.web.oauth; + +import com.fasterxml.jackson.databind.JsonNode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import ru.javaops.to.UserToExt; + +@Controller +@RequestMapping("/login/github") +public class GithubOAuth2Controller extends AbstractOAuth2Controller { + + @Autowired + public GithubOAuth2Controller(@Qualifier("githubOAuth2Provider") OAuth2Provider provider) { + super(provider); + } + + @Override + @GetMapping + public String authorize() { + return super.authorize(); + } + + @Override + protected UserToExt getUserToExt(String accessToken) { + JsonNode jsonResponse = getRequest(provider.getUserInfoUrl(), accessToken); + String name = jsonResponse.get("name").asText(); + if (name.equals("null")) { + name = jsonResponse.get("login").asText(); + } + String email = jsonResponse.get("email").asText(); + if (email.equals("null")) { + // email is not public, one more request + email = getEmail(accessToken); + } + UserToExt userToExt = new UserToExt(email, name); + userToExt.setGithub(jsonResponse.get("html_url").asText()); + return userToExt; + } + + private String getEmail(String accessToken) { + return getRequest("https://api.github.com/user/emails", accessToken).get(0).get("email").asText(); + } +} diff --git a/src/main/java/ru/javaops/web/oauth/GoogleOAuth2Controller.java b/src/main/java/ru/javaops/web/oauth/GoogleOAuth2Controller.java new file mode 100644 index 0000000..0f2d2d0 --- /dev/null +++ b/src/main/java/ru/javaops/web/oauth/GoogleOAuth2Controller.java @@ -0,0 +1,35 @@ +package ru.javaops.web.oauth; + +import com.fasterxml.jackson.databind.JsonNode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import ru.javaops.to.UserToExt; + +@Controller +@RequestMapping("/login/google") +public class GoogleOAuth2Controller extends AbstractOAuth2Controller { + + @Autowired + public GoogleOAuth2Controller(@Qualifier("googleOAuth2Provider") OAuth2Provider provider) { + super(provider); + } + + @Override + @GetMapping + public String authorize() { + return super.authorize() + + "&scope=https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile" + + "&response_type=code"; + } + + @Override + protected UserToExt getUserToExt(String accessToken) { + JsonNode jsonResponse = getRequest(provider.getUserInfoUrl(), accessToken); + String name = jsonResponse.get("name").asText(); + String email = jsonResponse.get("email").asText(); + return new UserToExt(email, name); + } +} diff --git a/src/main/java/ru/javaops/web/oauth/OAuth2Provider.java b/src/main/java/ru/javaops/web/oauth/OAuth2Provider.java new file mode 100644 index 0000000..b0d1724 --- /dev/null +++ b/src/main/java/ru/javaops/web/oauth/OAuth2Provider.java @@ -0,0 +1,26 @@ +package ru.javaops.web.oauth; + +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotNull; + +@Getter +@Setter +public class OAuth2Provider { + + @NotNull + private String authorizeUrl; + @NotNull + private String accessTokenUrl; + @NotNull + private String userInfoUrl; + @NotNull + private String clientId; + @NotNull + private String clientSecret; + @NotNull + private String redirectUri; + @NotNull + private String name; +} diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index 189a8b4..bd96566 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -25,7 +25,10 @@ app: activation-secret-salt: test cache-seconds: 1 host-url: http://localhost:8080 - vk-token: token + integration: + vk-token: vk-token + slack-tokens.topjava: dummy-slack-token-topjava + slack-tokens.javaops: dummy-slack-token-javaops spring: mail.host: smtp.yandex.ru diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 6d62464..7fbd00e 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -1,5 +1,5 @@ app: - test-email: javawebinar@yandex.ru + email: admin@javaops.ru mail.async: corePoolSize: 8 @@ -16,12 +16,18 @@ spring: base-path: /api default-page-size: 100 +#http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-caching.html#boot-features-caching-provider-caffeine spring.cache: - cache-names: group, groups - guava.spec: maximumSize=100, expireAfterAccess=300s + cache-names: group, groups, member_groups, project + guava.spec: maximumSize=100, expireAfterAccess=15s logging: file: javaops.log level: ru.javaops: DEBUG org.hibernate.engine.jdbc.spi.SqlStatementLogger: DEBUG + +spring.http.encoding: + charset: UTF-8 # Charset of HTTP requests and responses. Added to the "Content-Type" header if not set explicitly. + enabled: true # Enable http encoding support. + force: true \ No newline at end of file diff --git a/src/main/resources/import.sql b/src/main/resources/import.sql index 632ffa3..84d5653 100644 --- a/src/main/resources/import.sql +++ b/src/main/resources/import.sql @@ -12,3 +12,9 @@ INSERT INTO GROUPS (NAME, TYPE, PROJECT_ID) VALUES INSERT INTO USER_GROUP (USER_ID, GROUP_ID) VALUES (1, 4); + +ALTER TABLE PUBLIC.USER_GROUP ALTER COLUMN TYPE RENAME TO REGISTER_TYPE; +ALTER TABLE PUBLIC.USER_GROUP ADD PARTICIPATION_TYPE VARCHAR(255) NULL; + +ALTER TABLE USERS ADD STATS_AGREE BOOL DEFAULT FALSE; +UPDATE USERS SET STATS_AGREE=FALSE; \ No newline at end of file diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 9869c0e..caca107 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -1,11 +1,18 @@ + + + - - + + + diff --git a/src/test/java/ru/javaops/ApplicationAbstractTest.java b/src/test/java/ru/javaops/ApplicationAbstractTest.java index ec08de5..a285595 100644 --- a/src/test/java/ru/javaops/ApplicationAbstractTest.java +++ b/src/test/java/ru/javaops/ApplicationAbstractTest.java @@ -3,7 +3,7 @@ import org.junit.Rule; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; -import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @@ -12,7 +12,7 @@ * 16.02.2016 */ @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(JavaOPsApplication.class) +@SpringBootTest @WebAppConfiguration public abstract class ApplicationAbstractTest { @Rule diff --git a/src/test/java/ru/javaops/UserTestData.java b/src/test/java/ru/javaops/UserTestData.java index cf2bf59..09591f3 100644 --- a/src/test/java/ru/javaops/UserTestData.java +++ b/src/test/java/ru/javaops/UserTestData.java @@ -12,6 +12,6 @@ public class UserTestData { public static final int USER_ID = 1; public static final int ADMIN_ID = 2; - public static final User USER = new User(USER_ID, "gkislin@yandex.ru", "Григорий Кислин", "Санкт-Петербург", "vk"); - public static final User ADMIN = new User(ADMIN_ID, "admin@javaops.ru", "Java_Online_Projects", "Москва", "habr"); + public static final User USER = new User(USER_ID, "gkislin@yandex.ru", "Григорий Кислин", "Санкт-Петербург", "vk", null); + public static final User ADMIN = new User(ADMIN_ID, "admin@javaops.ru", "Java_Online_Projects", "Москва", "habr", null); } diff --git a/src/test/java/ru/javaops/service/GoogleAdminSDKDirectoryServiceTest.java b/src/test/java/ru/javaops/service/GoogleAdminSDKDirectoryServiceTest.java new file mode 100644 index 0000000..7c47b42 --- /dev/null +++ b/src/test/java/ru/javaops/service/GoogleAdminSDKDirectoryServiceTest.java @@ -0,0 +1,29 @@ +package ru.javaops.service; + +import com.google.api.services.admin.directory.model.Members; +import com.google.api.services.admin.directory.model.Users; +import org.junit.Test; + +/** + * gkislin + * 17.02.2017 + */ +public class GoogleAdminSDKDirectoryServiceTest { + @Test + public void testAPI() throws Exception { + GoogleAdminSDKDirectoryService service = new GoogleAdminSDKDirectoryService(); + service.init(); + + System.out.println("\nInsert:"); + String response = service.insertMember("masterjava@javaops.ru", "gkislin@yandex.ru"); + System.out.println(response); + + System.out.println("\nMembers:"); + Members members = service.members("masterjava@javaops.ru"); + members.getMembers().forEach(System.out::println); + + System.out.println("\nUsers:"); + Users users = service.users("javaops.ru"); + users.getUsers().forEach(System.out::println); + } +} \ No newline at end of file diff --git a/src/test/java/ru/javaops/service/GroupServiceTest.java b/src/test/java/ru/javaops/service/GroupServiceTest.java index 0bed340..5e50013 100644 --- a/src/test/java/ru/javaops/service/GroupServiceTest.java +++ b/src/test/java/ru/javaops/service/GroupServiceTest.java @@ -14,17 +14,8 @@ public class GroupServiceTest extends ApplicationAbstractTest { @Autowired private GroupService groupService; - @Test - public void testFindByName() throws Exception { - groupService.findByName("test"); - groupService.findByName("test"); - groupService.findByName("test"); - thrown.expect(NullPointerException.class); - groupService.findByName("dummy"); - } - @Test public void testFindByUser() throws Exception { - System.out.println(groupService.findByUserId(UserTestData.USER_ID)); + System.out.println(groupService.getGroupsByUserId(UserTestData.USER_ID)); } } \ No newline at end of file diff --git a/src/test/java/ru/javaops/service/JacksonTest.java b/src/test/java/ru/javaops/service/JacksonTest.java index 7d8eb77..de0de15 100644 --- a/src/test/java/ru/javaops/service/JacksonTest.java +++ b/src/test/java/ru/javaops/service/JacksonTest.java @@ -18,8 +18,7 @@ public class JacksonTest extends ApplicationAbstractTest { @Test public void testGetResult() throws Exception { - MailService.GroupResult res = new MailService.GroupResult(ImmutableList.of("a@ya.ru", "b@ya.ru"), - ImmutableList.of(new MailService.MailResult("c@ya.ru", "fail_c"), new MailService.MailResult("d@ya.ru", "fail_d")), null); + MailService.GroupResult res = new MailService.GroupResult(2, ImmutableList.of(new MailService.MailResult("c@ya.ru", "fail_c"), new MailService.MailResult("d@ya.ru", "fail_d")), null); System.out.println(res); String str = objectMapper.writeValueAsString(res); System.out.println(str); diff --git a/src/test/java/ru/javaops/service/MailServiceTest.java b/src/test/java/ru/javaops/service/MailServiceTest.java index cd171ba..79a7e4d 100644 --- a/src/test/java/ru/javaops/service/MailServiceTest.java +++ b/src/test/java/ru/javaops/service/MailServiceTest.java @@ -4,8 +4,7 @@ import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import ru.javaops.ApplicationAbstractTest; -import ru.javaops.UserTestData; -import ru.javaops.util.Util; +import ru.javaops.model.User; /** * GKislin @@ -16,13 +15,31 @@ public class MailServiceTest extends ApplicationAbstractTest { @Autowired private MailService mailService; + @Autowired + private SubscriptionService subscriptionService; + + @Autowired + private RefService refService; + @Test - public void testGetContent() throws Exception { - String content = mailService.getContent("basejava_register_ad", - ImmutableMap.of("user", UserTestData.USER, "template", "topjava_register", "participation", "REGISTRATION", "result", "OK")); - System.out.println("\n+++++"); - System.out.println(Util.getTitle(content)); - System.out.println("+++++"); + public void testSendMail() throws Exception { + System.out.println(mailService.sendTest("jr_confirm")); + } + + @Test + public void testTemplate() throws Exception { + User user = mailService.getAppUser(); + String activationKey = subscriptionService.generateActivationKey(user.getEmail()); + String subscriptionUrl = subscriptionService.getSubscriptionUrl(user.getEmail(), activationKey, false); + + String email = user.getEmail(); + String content = mailService.getContent("ref/refParticipation", + ImmutableMap.of( + "user", user, + "topjavaRef", refService.getRefUrl("topjava", email), + "masterjavaRef", refService.getRefUrl("masterjava", email), + "basejavaRef", refService.getRefUrl("basejava", email))); + System.out.println(content); } } \ No newline at end of file diff --git a/src/test/java/ru/javaops/service/SubscriptionServiceTest.java b/src/test/java/ru/javaops/service/SubscriptionServiceTest.java new file mode 100644 index 0000000..4a6b1ff --- /dev/null +++ b/src/test/java/ru/javaops/service/SubscriptionServiceTest.java @@ -0,0 +1,26 @@ +package ru.javaops.service; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import ru.javaops.ApplicationAbstractTest; + +/** + * GKislin + * 25.02.2016 + */ +public class SubscriptionServiceTest extends ApplicationAbstractTest { + + public static final String EMAIL = "admin@javaops.ru"; + + @Autowired + private SubscriptionService subscriptionService; + + @Test + public void testActivationKey() throws Exception { + String key = subscriptionService.generateActivationKey(EMAIL); + System.out.println("+++++++++"); + System.out.println(key); + System.out.println("+++++++++"); + subscriptionService.checkActivationKey(EMAIL, key); + } +} \ No newline at end of file diff --git a/src/test/java/ru/javaops/util/PasswordUtilTest.java b/src/test/java/ru/javaops/util/PasswordUtilTest.java index c033c7a..8c620fb 100644 --- a/src/test/java/ru/javaops/util/PasswordUtilTest.java +++ b/src/test/java/ru/javaops/util/PasswordUtilTest.java @@ -1,5 +1,6 @@ package ru.javaops.util; +import org.apache.commons.lang3.text.WordUtils; import org.junit.Test; import static org.apache.commons.lang3.StringUtils.capitalize; @@ -15,6 +16,7 @@ public class PasswordUtilTest { @Test public void test() throws Exception { System.out.println(substringBefore(capitalize("григорий Кислин"), " ")); + System.out.println(WordUtils.capitalize("Санкт,петербург", ' ', '-', '.',',')); } @Test diff --git a/src/test/java/ru/javaops/util/RefUtilTest.java b/src/test/java/ru/javaops/util/RefUtilTest.java new file mode 100644 index 0000000..c255dec --- /dev/null +++ b/src/test/java/ru/javaops/util/RefUtilTest.java @@ -0,0 +1,25 @@ +package ru.javaops.util; + +import org.junit.Assert; +import org.junit.Test; + +import javax.crypto.spec.SecretKeySpec; + +/** + * GKislin + * 25.02.2016 + */ +public class RefUtilTest { + + @Test +// $vZDS4I86C3mPhvvo_lXKTQDCBJK7AdUl4nTm8Zso5RQ= + public void encryptDecrypt() throws Exception { + SecretKeySpec secretKey = new SecretKeySpec("1234567890123456".getBytes(), "AES"); + String mail = "admin@javaops.ru"; + String code = RefUtil.encrypt0(mail, secretKey); + System.out.println(code); + String recoveredMail = RefUtil.decrypt0(code, secretKey); + System.out.println(mail); + Assert.assertEquals(mail, recoveredMail); + } +} \ No newline at end of file diff --git a/src/test/java/ru/javaops/util/UserUtilTest.java b/src/test/java/ru/javaops/util/UserUtilTest.java new file mode 100644 index 0000000..211450c --- /dev/null +++ b/src/test/java/ru/javaops/util/UserUtilTest.java @@ -0,0 +1,17 @@ +package ru.javaops.util; + +import org.junit.Assert; +import org.junit.Test; + +/** + * gkislin + * 03.06.2016 + */ +public class UserUtilTest { + @Test + public void checkGmailExp() throws Exception { + Assert.assertTrue(UserUtil.GMAIL_EXP.matcher("werw@gmail.ru").find()); + Assert.assertFalse(UserUtil.GMAIL_EXP.matcher("werwgmail.ru").find()); + Assert.assertFalse(UserUtil.GMAIL_EXP.matcher("werw@gmailru").find()); + } +} \ No newline at end of file