├── static
├── .gitkeep
├── aee.png
├── aef.png
├── aei.png
├── seq.png
├── list.png
├── logo.png
├── next.png
├── pause.png
├── play.png
├── prev.png
├── banner1.jpg
├── banner2.jpg
├── banner3.jpg
├── banner4.jpg
├── stick_bg.png
├── cd_wrapper.png
├── list_hover.png
├── next_hover.png
├── pause_hover.png
├── play_hover.png
├── player-bar.png
├── prev_hover.png
├── seq_hover.png
├── default_cover.png
├── rage_loading.png
├── user-default.png
├── banner-item-load.png
├── playbar_btn_next.png
├── playbar_btn_play.png
├── playbar_btn_pause.png
├── playbar_btn_playlist.png
├── placeholder_disk_play_song.png
└── placeholder_disk_play_program.png
├── .eslintignore
├── config
├── prod.env.js
├── test.env.js
├── dev.env.js
└── index.js
├── screenshots
├── 1.png
├── 2.png
├── 3.gif
├── 4.gif
└── 4444.png
├── src
├── assets
│ ├── logo.png
│ ├── theme.less
│ └── animate.css
├── views
│ ├── hotSinger.vue
│ ├── leaderBoard.vue
│ ├── index.vue
│ ├── songList.vue
│ ├── rage.vue
│ ├── playListDetail.vue
│ └── playerDetail.vue
├── utils
│ └── diyaxios.js
├── App.vue
├── main.js
├── router
│ └── router.js
├── api
│ └── index.js
├── components
│ ├── list.vue
│ └── playerBar.vue
└── store
│ └── index.js
├── test
├── unit
│ ├── .eslintrc
│ ├── specs
│ │ └── Hello.spec.js
│ ├── index.js
│ └── karma.conf.js
└── e2e
│ ├── specs
│ └── test.js
│ ├── custom-assertions
│ └── elementCount.js
│ ├── runner.js
│ └── nightwatch.conf.js
├── .gitignore
├── .editorconfig
├── .babelrc
├── .eslintrc.js
├── LICENSE
├── README.md
├── index.html
└── package.json
/static/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | build/*.js
2 | config/*.js
3 |
--------------------------------------------------------------------------------
/config/prod.env.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | NODE_ENV: '"production"'
3 | }
4 |
--------------------------------------------------------------------------------
/static/aee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/aee.png
--------------------------------------------------------------------------------
/static/aef.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/aef.png
--------------------------------------------------------------------------------
/static/aei.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/aei.png
--------------------------------------------------------------------------------
/static/seq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/seq.png
--------------------------------------------------------------------------------
/screenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/screenshots/1.png
--------------------------------------------------------------------------------
/screenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/screenshots/2.png
--------------------------------------------------------------------------------
/screenshots/3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/screenshots/3.gif
--------------------------------------------------------------------------------
/screenshots/4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/screenshots/4.gif
--------------------------------------------------------------------------------
/static/list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/list.png
--------------------------------------------------------------------------------
/static/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/logo.png
--------------------------------------------------------------------------------
/static/next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/next.png
--------------------------------------------------------------------------------
/static/pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/pause.png
--------------------------------------------------------------------------------
/static/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/play.png
--------------------------------------------------------------------------------
/static/prev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/prev.png
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/src/assets/logo.png
--------------------------------------------------------------------------------
/static/banner1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/banner1.jpg
--------------------------------------------------------------------------------
/static/banner2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/banner2.jpg
--------------------------------------------------------------------------------
/static/banner3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/banner3.jpg
--------------------------------------------------------------------------------
/static/banner4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/banner4.jpg
--------------------------------------------------------------------------------
/static/stick_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/stick_bg.png
--------------------------------------------------------------------------------
/screenshots/4444.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/screenshots/4444.png
--------------------------------------------------------------------------------
/static/cd_wrapper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/cd_wrapper.png
--------------------------------------------------------------------------------
/static/list_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/list_hover.png
--------------------------------------------------------------------------------
/static/next_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/next_hover.png
--------------------------------------------------------------------------------
/static/pause_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/pause_hover.png
--------------------------------------------------------------------------------
/static/play_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/play_hover.png
--------------------------------------------------------------------------------
/static/player-bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/player-bar.png
--------------------------------------------------------------------------------
/static/prev_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/prev_hover.png
--------------------------------------------------------------------------------
/static/seq_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/seq_hover.png
--------------------------------------------------------------------------------
/static/default_cover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/default_cover.png
--------------------------------------------------------------------------------
/static/rage_loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/rage_loading.png
--------------------------------------------------------------------------------
/static/user-default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/user-default.png
--------------------------------------------------------------------------------
/static/banner-item-load.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/banner-item-load.png
--------------------------------------------------------------------------------
/static/playbar_btn_next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/playbar_btn_next.png
--------------------------------------------------------------------------------
/static/playbar_btn_play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/playbar_btn_play.png
--------------------------------------------------------------------------------
/static/playbar_btn_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/playbar_btn_pause.png
--------------------------------------------------------------------------------
/static/playbar_btn_playlist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/playbar_btn_playlist.png
--------------------------------------------------------------------------------
/static/placeholder_disk_play_song.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/placeholder_disk_play_song.png
--------------------------------------------------------------------------------
/static/placeholder_disk_play_program.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaswing/NeteaseCloudWebApp/HEAD/static/placeholder_disk_play_program.png
--------------------------------------------------------------------------------
/test/unit/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "mocha": true
4 | },
5 | "globals": {
6 | "expect": true,
7 | "sinon": true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/config/test.env.js:
--------------------------------------------------------------------------------
1 | var merge = require('webpack-merge')
2 | var devEnv = require('./dev.env')
3 |
4 | module.exports = merge(devEnv, {
5 | NODE_ENV: '"testing"'
6 | })
7 |
--------------------------------------------------------------------------------
/src/views/hotSinger.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
4 | .vscode/
5 | .idea/
6 | npm-debug.log
7 | test/unit/coverage
8 | test/e2e/reports
9 | selenium-debug.log
10 | *.psd
11 |
--------------------------------------------------------------------------------
/config/dev.env.js:
--------------------------------------------------------------------------------
1 | var merge = require('webpack-merge')
2 | var prodEnv = require('./prod.env')
3 |
4 | module.exports = merge(prodEnv, {
5 | NODE_ENV: '"development"'
6 | })
7 |
--------------------------------------------------------------------------------
/src/views/leaderBoard.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
10 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015", "stage-2"],
3 | "plugins": ["transform-runtime"],
4 | "comments": false,
5 | "env": {
6 | "test": {
7 | "plugins": [ "istanbul" ]
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/test/unit/specs/Hello.spec.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Hello from 'src/components/Hello'
3 |
4 | describe('Hello.vue', () => {
5 | it('should render correct contents', () => {
6 | const vm = new Vue({
7 | el: document.createElement('div'),
8 | render: (h) => h(Hello)
9 | })
10 | expect(vm.$el.querySelector('.hello h1').textContent)
11 | .to.equal('Welcome to Your Vue.js App')
12 | })
13 | })
14 |
--------------------------------------------------------------------------------
/src/utils/diyaxios.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios'
2 | axios.defaults.timeout = 8000
3 | // 添加请求头
4 | axios.defaults.withCredentials = true
5 | // code状态码200判断
6 | axios.interceptors.response.use((res) => {
7 | if (res.status === 654) { // 百度云请求超时检测
8 | window.alert('请求超时!')
9 | }
10 | if (res.data.code !== 200) {
11 | window.alert('数据返回有误')
12 | return Promise.reject(res)
13 | }
14 | return res.data
15 | }, (error) => {
16 | console.log('promise error:' + error)
17 | return Promise.reject(error)
18 | })
19 | export default axios
20 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
28 |
--------------------------------------------------------------------------------
/test/unit/index.js:
--------------------------------------------------------------------------------
1 | // Polyfill fn.bind() for PhantomJS
2 | /* eslint-disable no-extend-native */
3 | Function.prototype.bind = require('function-bind')
4 |
5 | // require all test files (files that ends with .spec.js)
6 | const testsContext = require.context('./specs', true, /\.spec$/)
7 | testsContext.keys().forEach(testsContext)
8 |
9 | // require all src files except main.js for coverage.
10 | // you can also change this to match only the subset of files that
11 | // you want coverage for.
12 | const srcContext = require.context('src', true, /^\.\/(?!main(\.js)?$)/)
13 | srcContext.keys().forEach(srcContext)
14 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parser: 'babel-eslint',
4 | parserOptions: {
5 | sourceType: 'module'
6 | },
7 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
8 | extends: 'standard',
9 | // required to lint *.vue files
10 | plugins: [
11 | 'html'
12 | ],
13 | // add your custom rules here
14 | 'rules': {
15 | // allow paren-less arrow functions
16 | 'arrow-parens': 0,
17 | // allow async-await
18 | 'generator-star-spacing': 0,
19 | // allow debugger during development
20 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/test/e2e/specs/test.js:
--------------------------------------------------------------------------------
1 | // For authoring Nightwatch tests, see
2 | // http://nightwatchjs.org/guide#usage
3 |
4 | module.exports = {
5 | 'default e2e tests': function (browser) {
6 | // automatically uses dev Server port from /config.index.js
7 | // default: http://localhost:8080
8 | // see nightwatch.conf.js
9 | const devServer = browser.globals.devServerURL
10 |
11 | browser
12 | .url(devServer)
13 | .waitForElementVisible('#app', 5000)
14 | .assert.elementPresent('.hello')
15 | .assert.containsText('h1', 'Welcome to Your Vue.js App')
16 | .assert.elementCount('img', 1)
17 | .end()
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import Axios from './utils/diyaxios'
4 | import router from './router/router'
5 | import store from './store'
6 | import MuseUI from 'muse-ui'
7 | import Toast from 'vue-easy-toast'
8 | import 'muse-ui/dist/muse-ui.css'
9 | import 'assets/theme.less'
10 | import FastClick from 'fastclick' // 解决移动端300毫秒延迟
11 | if ('addEventListener' in document) {
12 | document.addEventListener('DOMContentLoaded', function () {
13 | FastClick.attach(document.body)
14 | }, false)
15 | }
16 |
17 | Vue.use(MuseUI)
18 | Vue.use(Toast)
19 | Vue.prototype.$http = Axios // 类似于vue-resource的调用方法,之后可以在实例里直接用this.$http.get()等
20 | /* eslint-disable no-new */
21 | new Vue({
22 | el: '#app',
23 | router,
24 | store,
25 | template: '',
26 | components: { App }
27 | })
28 |
--------------------------------------------------------------------------------
/test/e2e/custom-assertions/elementCount.js:
--------------------------------------------------------------------------------
1 | // A custom Nightwatch assertion.
2 | // the name of the method is the filename.
3 | // can be used in tests like this:
4 | //
5 | // browser.assert.elementCount(selector, count)
6 | //
7 | // for how to write custom assertions see
8 | // http://nightwatchjs.org/guide#writing-custom-assertions
9 | exports.assertion = function (selector, count) {
10 | this.message = 'Testing if element <' + selector + '> has count: ' + count
11 | this.expected = count
12 | this.pass = function (val) {
13 | return val === this.expected
14 | }
15 | this.value = function (res) {
16 | return res.value
17 | }
18 | this.command = function (cb) {
19 | var self = this
20 | return this.api.execute(function (selector) {
21 | return document.querySelectorAll(selector).length
22 | }, [selector], function (res) {
23 | cb.call(self, res)
24 | })
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/router/router.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 整个app的路由设置
3 | */
4 | import Vue from 'vue'
5 | import VueRouter from 'vue-router'
6 | Vue.use(VueRouter)
7 |
8 | const router = new VueRouter({
9 | routes: [{
10 | path: '/index',
11 | component: require('../views/index'),
12 | children: [
13 | {
14 | path: 'rage',
15 | component: require('../views/rage')
16 | },
17 | {
18 | path: 'songList',
19 | component: require('../views/songList')
20 | },
21 | {
22 | path: 'leaderBoard',
23 | component: require('../views/leaderBoard')
24 | },
25 | {
26 | path: 'hotSinger',
27 | component: require('../views/hotSinger')
28 | }
29 | ]
30 | }, {
31 | name: 'playerDetail',
32 | path: '/playerDetail/:id',
33 | component: require('../views/playerDetail')
34 | }, {
35 | path: '/playListDetail/:id',
36 | name: 'playListDetail',
37 | component: require('../views/playListDetail')
38 | }, {
39 | path: '*', redirect: '/index/rage'
40 | }]
41 | })
42 |
43 | export default router
44 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 javaSwing
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/test/e2e/runner.js:
--------------------------------------------------------------------------------
1 | // 1. start the dev server using production config
2 | process.env.NODE_ENV = 'testing'
3 | var server = require('../../build/dev-server.js')
4 |
5 | // 2. run the nightwatch test suite against it
6 | // to run in additional browsers:
7 | // 1. add an entry in test/e2e/nightwatch.conf.json under "test_settings"
8 | // 2. add it to the --env flag below
9 | // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`
10 | // For more information on Nightwatch's config file, see
11 | // http://nightwatchjs.org/guide#settings-file
12 | var opts = process.argv.slice(2)
13 | if (opts.indexOf('--config') === -1) {
14 | opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js'])
15 | }
16 | if (opts.indexOf('--env') === -1) {
17 | opts = opts.concat(['--env', 'chrome'])
18 | }
19 |
20 | var spawn = require('cross-spawn')
21 | var runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' })
22 |
23 | runner.on('exit', function (code) {
24 | server.close()
25 | process.exit(code)
26 | })
27 |
28 | runner.on('error', function (err) {
29 | server.close()
30 | throw err
31 | })
32 |
--------------------------------------------------------------------------------
/src/assets/theme.less:
--------------------------------------------------------------------------------
1 | @import "../../node_modules/muse-ui/less/vars.less"; // 默认基础的变量
2 |
3 | @fontFamily: Roboto, Lato, sans-serif; // 字体
4 | // 主色和强调色
5 | @primaryColor: #ce3d3e; // 主色
6 | @darkerPrimaryColor: #ce3d3e; // 更深的主色
7 | @lighterPrimaryColor: @grey400; // 浅一点的主色
8 | @accentColor: #ce3d3e; // 强调色
9 | @darkerAccentColor: @grey100; // 更深的强调色
10 | @lighterAccentColor: @grey500; // 浅一点的强调色
11 |
12 | // 文本颜色
13 | @textColor: @darkBlack;
14 | @secondaryTextColor: fade(@fullBlack, 54%);
15 | @alternateTextColor: @white;
16 | @borderColor: fade(@fullBlack, 12%);
17 | @disabledColor: fade(@fullBlack, 38%);
18 |
19 | // background
20 | @backgroundColor: @white; // 背景色
21 | @statusBarBackgroundColor: @grey300; // web项目没有状态栏,所以也没有使用
22 | @appbarBackgroundColor: @grey100; // 并未在appbar组件中应用
23 | @dialogBackgroundColor: @white; // dialogs、 cards、 paper 组件背景
24 |
25 | // icon color
26 | @activeIconColor: fade(@fullBlack, 54%);
27 | @inActiveIconColor: fade(@fullBlack, 38%);
28 |
29 | @import "../../node_modules/muse-ui/less/theme-vars.less"; // 默认组件变量
30 | @import "../../node_modules/muse-ui/less/theme.less"; // 主题相关的样式
31 |
--------------------------------------------------------------------------------
/config/index.js:
--------------------------------------------------------------------------------
1 | // see http://vuejs-templates.github.io/webpack for documentation.
2 | var path = require('path')
3 |
4 | module.exports = {
5 | build: {
6 | env: require('./prod.env'),
7 | index: path.resolve(__dirname, '../dist/index.html'),
8 | assetsRoot: path.resolve(__dirname, '../dist'),
9 | assetsSubDirectory: 'static',
10 | assetsPublicPath: '/',
11 | productionSourceMap: true,
12 | // Gzip off by default as many popular static hosts such as
13 | // Surge or Netlify already gzip all static assets for you.
14 | // Before setting to `true`, make sure to:
15 | // npm install --save-dev compression-webpack-plugin
16 | productionGzip: false,
17 | productionGzipExtensions: ['js', 'css']
18 | },
19 | dev: {
20 | env: require('./dev.env'),
21 | port: 8080,
22 | assetsSubDirectory: 'static',
23 | assetsPublicPath: '/',
24 | proxyTable: {},
25 | // CSS Sourcemaps off by default because relative paths are "buggy"
26 | // with this option, according to the CSS-Loader README
27 | // (https://github.com/webpack/css-loader#sourcemaps)
28 | // In our experience, they generally work as expected,
29 | // just be aware of this issue when enabling this option.
30 | cssSourceMap: false
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/test/e2e/nightwatch.conf.js:
--------------------------------------------------------------------------------
1 | require('babel-register')
2 | var config = require('../../config')
3 |
4 | // http://nightwatchjs.org/guide#settings-file
5 | module.exports = {
6 | src_folders: ['test/e2e/specs'],
7 | output_folder: 'test/e2e/reports',
8 | custom_assertions_path: ['test/e2e/custom-assertions'],
9 |
10 | selenium: {
11 | start_process: true,
12 | server_path: 'node_modules/selenium-server/lib/runner/selenium-server-standalone-2.53.1.jar',
13 | host: '127.0.0.1',
14 | port: 4444,
15 | cli_args: {
16 | 'webdriver.chrome.driver': require('chromedriver').path
17 | }
18 | },
19 |
20 | test_settings: {
21 | default: {
22 | selenium_port: 4444,
23 | selenium_host: 'localhost',
24 | silent: true,
25 | globals: {
26 | devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
27 | }
28 | },
29 |
30 | chrome: {
31 | desiredCapabilities: {
32 | browserName: 'chrome',
33 | javascriptEnabled: true,
34 | acceptSslCerts: true
35 | }
36 | },
37 |
38 | firefox: {
39 | desiredCapabilities: {
40 | browserName: 'firefox',
41 | javascriptEnabled: true,
42 | acceptSslCerts: true
43 | }
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/api/index.js:
--------------------------------------------------------------------------------
1 | const _baseUrl = 'http://api.javaswing.cn'
2 | const _baseUrl2 = 'https://api.imjad.cn/cloudmusic/'
3 | export default {
4 | /**
5 | * 获取首页Banner图片数据
6 | */
7 | getBannerList () {
8 | return `${_baseUrl}/banner`
9 | },
10 | /**
11 | * 获取推荐歌单
12 | */
13 | getPersonalized () {
14 | return `${_baseUrl}/personalized`
15 | },
16 | /**
17 | * 获取推荐 mv
18 | */
19 | getPersonalizedMV () {
20 | return `${_baseUrl}/personalized/mv`
21 | },
22 | /**
23 | *
24 | * @param {*} cat
25 | * @param {*} order
26 | * @param {*} offset
27 | * @param {*} total
28 | * @param {*} limit
29 | */
30 | getPlayListByWhere (offset, limit) {
31 | return `${_baseUrl}/top/playlist?limit=${limit}&order=all&offset=${offset}`
32 | },
33 | /**
34 | * 获取歌词API
35 | * @param {Number} id
36 | */
37 | getLrc (id) {
38 | return `${_baseUrl}/lyric?id=${id}`
39 | },
40 | /**
41 | * 获取歌曲 播放URL
42 | * @param {Number} id
43 | */
44 | getSong (id) {
45 | return `${_baseUrl}/song/url?id=${id}`
46 | },
47 | /**
48 | * 获取歌单详情
49 | * @param {Number} id
50 | */
51 | getPlayListDetail (id) {
52 | return `${_baseUrl}/playlist/detail?id=${id}`
53 | },
54 | getMv (id) {
55 | return _baseUrl2 + '?type=mv&id=' + id
56 | },
57 | search (words) {
58 | return _baseUrl2 + '?type=search&s=' + words
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # netease-clound-webapps
2 |
3 | > 这是一个用VUEJS写高仿网易云音乐的webapp,只实现了APP的核心功能,这个项目会长期进行更新。
4 |
5 | [在线地址](http://music.javaswing.cn/)
6 |
7 | ### 技术栈
8 | - 传说中的VUE全家桶(vue vue-router vuex)
9 | - axios
10 | - Muse-UI(一个基于Vue2.x的material design 风格UI框架)
11 |
12 | ## 运行截图
13 | 
14 | 
15 | 
16 | 
17 |
18 | ## 安装运行(Build Setup)
19 |
20 | ``` bash
21 | # install dependencies
22 | npm install
23 |
24 | # serve with hot reload at localhost:8080
25 | npm run dev
26 |
27 | # build for production with minification
28 | npm run build
29 |
30 | # run unit tests
31 | npm run unit
32 |
33 | # run e2e tests
34 | npm run e2e
35 |
36 | # run all tests
37 | npm test
38 | ```
39 |
40 | ## TODO
41 |
42 | - [ ] 实现音乐播放器的播放模式调整
43 | - [ ] 搜索模块
44 |
45 | ## 鸣谢
46 |
47 | 此网站提供的API: [https://api.imjad.cn/cloudmusic/](https://api.imjad.cn/cloudmusic/) ,此接口的说明请到这里[查看](https://api.imjad.cn/cloudmusic/index.html)
48 |
49 | 歌单列表部分为自己提供,在别一个项目中[MusicApi](https://github.com/javaSwing/MusicAPI)
50 |
51 | [NeteaseCloudMusicApi](https://github.com/Binaryify/NeteaseCloudMusicApi) NodeJS 项目
52 |
53 |
54 | ## License
55 |
56 | [MIT](https://github.com/javaSwing/NeteaseCloudWebApp/blob/master/LICENSE)
57 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Netease-Cloud
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/test/unit/karma.conf.js:
--------------------------------------------------------------------------------
1 | // This is a karma config file. For more details see
2 | // http://karma-runner.github.io/0.13/config/configuration-file.html
3 | // we are also using it with karma-webpack
4 | // https://github.com/webpack/karma-webpack
5 |
6 | var path = require('path')
7 | var merge = require('webpack-merge')
8 | var baseConfig = require('../../build/webpack.base.conf')
9 | var utils = require('../../build/utils')
10 | var webpack = require('webpack')
11 | var projectRoot = path.resolve(__dirname, '../../')
12 |
13 | var webpackConfig = merge(baseConfig, {
14 | // use inline sourcemap for karma-sourcemap-loader
15 | module: {
16 | loaders: utils.styleLoaders()
17 | },
18 | devtool: '#inline-source-map',
19 | vue: {
20 | loaders: {
21 | js: 'babel-loader'
22 | }
23 | },
24 | plugins: [
25 | new webpack.DefinePlugin({
26 | 'process.env': require('../../config/test.env')
27 | })
28 | ]
29 | })
30 |
31 | // no need for app entry during tests
32 | delete webpackConfig.entry
33 |
34 | // Use babel for test files too
35 | webpackConfig.module.loaders.some(function (loader, i) {
36 | if (/^babel(-loader)?$/.test(loader.loader)) {
37 | loader.include.push(path.resolve(projectRoot, 'test/unit'))
38 | return true
39 | }
40 | })
41 |
42 | module.exports = function (config) {
43 | config.set({
44 | // to run in additional browsers:
45 | // 1. install corresponding karma launcher
46 | // http://karma-runner.github.io/0.13/config/browsers.html
47 | // 2. add it to the `browsers` array below.
48 | browsers: ['PhantomJS'],
49 | frameworks: ['mocha', 'sinon-chai'],
50 | reporters: ['spec', 'coverage'],
51 | files: ['./index.js'],
52 | preprocessors: {
53 | './index.js': ['webpack', 'sourcemap']
54 | },
55 | webpack: webpackConfig,
56 | webpackMiddleware: {
57 | noInfo: true
58 | },
59 | coverageReporter: {
60 | dir: './coverage',
61 | reporters: [
62 | { type: 'lcov', subdir: '.' },
63 | { type: 'text-summary' }
64 | ]
65 | }
66 | })
67 | }
68 |
--------------------------------------------------------------------------------
/src/views/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
60 |
93 |
--------------------------------------------------------------------------------
/src/components/list.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 播放列表({{songList.length}})
6 |
7 |
8 |
9 |
10 |
11 | {{item.name}} -{{item.singer}}
12 |
13 |
x
14 |
15 |
16 |
17 |
18 |
19 |
20 |
58 |
118 |
119 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "netease-clound-webapps",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "javaSwing ",
6 | "private": true,
7 | "scripts": {
8 | "dev": "node build/dev-server.js",
9 | "build": "node build/build.js",
10 | "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run",
11 | "e2e": "node test/e2e/runner.js",
12 | "test": "npm run unit && npm run e2e",
13 | "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
14 | },
15 | "dependencies": {
16 | "axios": "^0.21.2",
17 | "fastclick": "^1.0.6",
18 | "muse-ui": "^2.0.2",
19 | "vue": "^2.2.2",
20 | "vue-awesome-swiper": "^2.3.0",
21 | "vue-easy-toast": "^1.0.1",
22 | "vue-router": "^2.2.0",
23 | "vuex": "^2.1.1"
24 | },
25 | "devDependencies": {
26 | "autoprefixer": "^6.4.0",
27 | "babel-core": "^6.0.0",
28 | "babel-eslint": "^7.0.0",
29 | "babel-loader": "^6.0.0",
30 | "babel-plugin-istanbul": "^3.0.0",
31 | "babel-plugin-transform-runtime": "^6.0.0",
32 | "babel-preset-es2015": "^6.0.0",
33 | "babel-preset-stage-2": "^6.0.0",
34 | "babel-register": "^6.0.0",
35 | "chai": "^3.5.0",
36 | "chalk": "^1.1.3",
37 | "chromedriver": "^2.45.0",
38 | "connect-history-api-fallback": "^1.1.0",
39 | "cross-env": "^3.1.3",
40 | "cross-spawn": "^4.0.2",
41 | "css-loader": "^0.25.0",
42 | "eslint": "^3.7.1",
43 | "eslint-config-standard": "^6.1.0",
44 | "eslint-friendly-formatter": "^2.0.5",
45 | "eslint-loader": "^1.5.0",
46 | "eslint-plugin-html": "^1.3.0",
47 | "eslint-plugin-promise": "^3.4.0",
48 | "eslint-plugin-standard": "^2.0.1",
49 | "eventsource-polyfill": "^0.9.6",
50 | "express": "^4.13.3",
51 | "extract-text-webpack-plugin": "^1.0.1",
52 | "file-loader": "^0.9.0",
53 | "friendly-errors-webpack-plugin": "^1.1.2",
54 | "function-bind": "^1.0.2",
55 | "html-webpack-plugin": "^2.8.1",
56 | "http-proxy-middleware": "^0.17.2",
57 | "inject-loader": "^2.0.1",
58 | "json-loader": "^0.5.4",
59 | "karma": "^6.3.16",
60 | "karma-coverage": "^1.1.1",
61 | "karma-mocha": "^1.2.0",
62 | "karma-phantomjs-launcher": "^1.0.0",
63 | "karma-sinon-chai": "^1.2.0",
64 | "karma-sourcemap-loader": "^0.3.7",
65 | "karma-spec-reporter": "0.0.26",
66 | "karma-webpack": "^1.7.0",
67 | "keycode": "^2.1.8",
68 | "less": "^2.7.2",
69 | "less-loader": "^2.2.3",
70 | "lolex": "^1.4.0",
71 | "mocha": "^3.1.0",
72 | "nightwatch": "^0.9.8",
73 | "opn": "^4.0.2",
74 | "ora": "^0.3.0",
75 | "phantomjs-prebuilt": "^2.1.3",
76 | "selenium-server": "2.53.1",
77 | "semver": "^5.3.0",
78 | "shelljs": "^0.8.5",
79 | "sinon": "^2.1.0",
80 | "sinon-chai": "^2.8.0",
81 | "url-loader": "^0.5.7",
82 | "vue-lazyload": "^1.0.0-rc9",
83 | "vue-loader": "^11.1.4",
84 | "vue-style-loader": "^2.0.0",
85 | "vue-template-compiler": "^2.2.4",
86 | "webpack": "^1.13.2",
87 | "webpack-dev-middleware": "^1.8.3",
88 | "webpack-hot-middleware": "^2.12.2",
89 | "webpack-merge": "^0.14.1"
90 | },
91 | "engines": {
92 | "node": ">= 4.0.0",
93 | "npm": ">= 3.0.0"
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/src/views/songList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
全部歌单
5 |
6 |
7 |
8 | {{item.playCount | formatCount}}
9 |
10 | {{item.name}}
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
64 |
118 |
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 | import Axios from 'axios'
4 | import api from '../api'
5 | Vue.use(Vuex)
6 |
7 | const store = new Vuex.Store({
8 | state: {
9 | audio: {
10 | 'id': 0,
11 | 'name': '歌曲名称',
12 | 'singer': '演唱者',
13 | 'albumPic': '/static/placeholder_disk_play_program.png',
14 | 'location': '',
15 | 'album': ''
16 | },
17 | lyric: '',
18 | currentIndex: 0, // 当前播放的歌曲位置
19 | playing: false, // 是否正在播放
20 | loading: false, // 是否正在加载中
21 | showDetail: false,
22 | songList: [], // 播放列表
23 | currentTime: 0,
24 | tmpCurrentTime: 0,
25 | durationTime: 0,
26 | bufferedTime: 0,
27 | change: false // 判断是更改的时间还是播放的时间
28 | },
29 | getters: {
30 | audio: state => state.audio,
31 | playing: state => state.playing,
32 | loading: state => state.loading,
33 | showDetail: state => state.showDetail,
34 | durationTime: state => state.durationTime,
35 | currentIndex: state => state.currentIndex,
36 | bufferedTime: state => state.bufferedTime,
37 | tmpCurrentTime: state => state.tmpCurrentTime,
38 | songList: state => state.songList,
39 | change: state => state.change,
40 | currentTime: state => state.currentTime,
41 | prCurrentTime: state => {
42 | return state.currentTime / state.durationTime * 100
43 | },
44 | prBufferedTime: state => {
45 | return state.bufferedTime / state.durationTime * 100
46 | }
47 | },
48 | mutations: {
49 | play (state) {
50 | state.playing = true
51 | },
52 | pause (state) {
53 | state.playing = false
54 | },
55 | toggleDetail (state) {
56 | state.showDetail = !state.showDetail
57 | },
58 | setAudio (state) {
59 | state.audio = state.songList[state.currentIndex - 1]
60 | },
61 | setAudioIndex (state, index) {
62 | state.audio = state.songList[index]
63 | state.currentIndex = index + 1
64 | },
65 | removeAudio (state, index) {
66 | state.songList.splice(index, 1)
67 | if (index === state.songList.length) {
68 | index--
69 | }
70 | state.audio = state.songList[index]
71 | state.currentIndex = index + 1
72 | if (state.songList.length === 0) {
73 | state.audio = {
74 | 'id': 0,
75 | 'name': '歌曲名称',
76 | 'singer': '演唱者',
77 | 'albumPic': '/static/player-bar.png',
78 | 'location': '',
79 | 'album': ''
80 | }
81 | state.playing = false
82 | }
83 | },
84 | setChange (state, flag) {
85 | state.change = flag
86 | },
87 | setLocation (state, location) {
88 | state.audio.location = location
89 | },
90 | updateCurrentTime (state, time) {
91 | state.currentTime = time
92 | },
93 | updateDurationTime (state, time) {
94 | state.durationTime = time
95 | },
96 | updateBufferedTime (state, time) {
97 | state.bufferedTime = time
98 | },
99 | changeTime (state, time) {
100 | state.tmpCurrentTime = time
101 | },
102 | openLoading (state) {
103 | state.loading = true
104 | },
105 | closeLoading (state) {
106 | state.loading = false
107 | },
108 | resetAudio (state) {
109 | state.currentTime = 0
110 | },
111 | playNext (state) { // 播放下一曲
112 | state.currentIndex++
113 | if (state.currentIndex > state.songList.length) {
114 | state.currentIndex = 1
115 | }
116 | state.audio = state.songList[state.currentIndex - 1]
117 | },
118 | playPrev (state) { // 播放上一曲
119 | state.currentIndex--
120 | if (state.currentIndex < 1) {
121 | state.currentIndex = state.songList.length
122 | }
123 | state.audio = state.songList[state.currentIndex - 1]
124 | },
125 | addToList (state, songs) {
126 | var items = Array.prototype.concat.call(songs)
127 | items.forEach(item => {
128 | var flag = false
129 | state.songList.forEach(function (element, index) { // 检测歌曲重复
130 | if (element.id === item.id) {
131 | flag = true
132 | state.currentIndex = index + 1
133 | }
134 | })
135 | if (!flag) {
136 | state.songList.push(item)
137 | state.currentIndex = state.songList.length
138 | }
139 | })
140 | },
141 | setLrc (state, lrc) {
142 | state.lyric = lrc
143 | }
144 | },
145 | // 异步的数据操作
146 | actions: {
147 | getSong ({commit, state}, id) {
148 | // 使用 CancelToken 退出一个Axios事件
149 | var CancelToken = Axios.CancelToken
150 | var source = CancelToken.source()
151 | if (state.loading && state.songList.length > 0) {
152 | console.log('cancel')
153 | source.cancel()
154 | }
155 | commit('openLoading')
156 | Axios.get(api.getSong(id)).then(data => {
157 | // 统一数据模型,方便后台接口的改变
158 | var url = data.data[0].url
159 | commit('setAudio')
160 | commit('setLocation', url)
161 | })
162 | .catch((error) => { // 错误处理
163 | console.log(error)
164 | window.alert('获取歌曲信息出错!')
165 | })
166 | }
167 | }
168 | })
169 | export default store
170 |
--------------------------------------------------------------------------------
/src/views/rage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
推荐歌单 更多>
16 |
17 |
18 |
19 | {{item.playCount | formatCount}}
20 |
21 | {{item.name}}
22 |
23 |
24 |
25 |
推荐MV 更多>
26 |
27 |
28 |
29 | {{item.name}}
30 | {{item.artistName}}
31 |
32 |
33 |
34 |
35 |
36 |
37 |
167 |
219 |
--------------------------------------------------------------------------------
/src/components/playerBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
26 |
27 |
120 |
251 |
--------------------------------------------------------------------------------
/src/views/playListDetail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
12 |
13 |
14 |
{{playCount | formatCount}}
15 |
![]()
16 |
17 |
18 |
{{name}}
19 |
20 |
21 | {{creator.nickname}}
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | {{index + 1}}
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
161 |
162 |
310 |
--------------------------------------------------------------------------------
/src/views/playerDetail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
{{audio.name}}
9 |
{{audio.singer}}
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
![]()
22 |
23 |
24 |
25 |
26 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
57 |
58 |
59 |
60 |
212 |
507 |
--------------------------------------------------------------------------------
/src/assets/animate.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 |
3 | /*!
4 | * animate.css -http://daneden.me/animate
5 | * Version - 3.5.1
6 | * Licensed under the MIT license - http://opensource.org/licenses/MIT
7 | *
8 | * Copyright (c) 2016 Daniel Eden
9 | */
10 |
11 | .animated {
12 | -webkit-animation-duration: 0.3s;
13 | animation-duration: 0.3s;
14 | -webkit-animation-fill-mode: both;
15 | animation-fill-mode: both;
16 | /*animation: 0.25s linear;*/
17 | }
18 |
19 | .animated.infinite {
20 | -webkit-animation-iteration-count: infinite;
21 | animation-iteration-count: infinite;
22 | }
23 |
24 | .animated.hinge {
25 | -webkit-animation-duration: 2s;
26 | animation-duration: 2s;
27 | }
28 |
29 | .animated.flipOutX,
30 | .animated.flipOutY,
31 | .animated.bounceIn,
32 | .animated.bounceOut {
33 | -webkit-animation-duration: .75s;
34 | animation-duration: .75s;
35 | }
36 |
37 | @-webkit-keyframes bounce {
38 | from,
39 | 20%,
40 | 53%,
41 | 80%,
42 | to {
43 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
44 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
45 | -webkit-transform: translate3d(0, 0, 0);
46 | transform: translate3d(0, 0, 0);
47 | }
48 | 40%,
49 | 43% {
50 | -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
51 | animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
52 | -webkit-transform: translate3d(0, -30px, 0);
53 | transform: translate3d(0, -30px, 0);
54 | }
55 | 70% {
56 | -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
57 | animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
58 | -webkit-transform: translate3d(0, -15px, 0);
59 | transform: translate3d(0, -15px, 0);
60 | }
61 | 90% {
62 | -webkit-transform: translate3d(0, -4px, 0);
63 | transform: translate3d(0, -4px, 0);
64 | }
65 | }
66 |
67 | @keyframes bounce {
68 | from,
69 | 20%,
70 | 53%,
71 | 80%,
72 | to {
73 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
74 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
75 | -webkit-transform: translate3d(0, 0, 0);
76 | transform: translate3d(0, 0, 0);
77 | }
78 | 40%,
79 | 43% {
80 | -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
81 | animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
82 | -webkit-transform: translate3d(0, -30px, 0);
83 | transform: translate3d(0, -30px, 0);
84 | }
85 | 70% {
86 | -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
87 | animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
88 | -webkit-transform: translate3d(0, -15px, 0);
89 | transform: translate3d(0, -15px, 0);
90 | }
91 | 90% {
92 | -webkit-transform: translate3d(0, -4px, 0);
93 | transform: translate3d(0, -4px, 0);
94 | }
95 | }
96 |
97 | .bounce {
98 | -webkit-animation-name: bounce;
99 | animation-name: bounce;
100 | -webkit-transform-origin: center bottom;
101 | transform-origin: center bottom;
102 | }
103 |
104 | @-webkit-keyframes flash {
105 | from,
106 | 50%,
107 | to {
108 | opacity: 1;
109 | }
110 | 25%,
111 | 75% {
112 | opacity: 0;
113 | }
114 | }
115 |
116 | @keyframes flash {
117 | from,
118 | 50%,
119 | to {
120 | opacity: 1;
121 | }
122 | 25%,
123 | 75% {
124 | opacity: 0;
125 | }
126 | }
127 |
128 | .flash {
129 | -webkit-animation-name: flash;
130 | animation-name: flash;
131 | }
132 |
133 |
134 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
135 |
136 | @-webkit-keyframes pulse {
137 | from {
138 | -webkit-transform: scale3d(1, 1, 1);
139 | transform: scale3d(1, 1, 1);
140 | }
141 | 50% {
142 | -webkit-transform: scale3d(1.05, 1.05, 1.05);
143 | transform: scale3d(1.05, 1.05, 1.05);
144 | }
145 | to {
146 | -webkit-transform: scale3d(1, 1, 1);
147 | transform: scale3d(1, 1, 1);
148 | }
149 | }
150 |
151 | @keyframes pulse {
152 | from {
153 | -webkit-transform: scale3d(1, 1, 1);
154 | transform: scale3d(1, 1, 1);
155 | }
156 | 50% {
157 | -webkit-transform: scale3d(1.05, 1.05, 1.05);
158 | transform: scale3d(1.05, 1.05, 1.05);
159 | }
160 | to {
161 | -webkit-transform: scale3d(1, 1, 1);
162 | transform: scale3d(1, 1, 1);
163 | }
164 | }
165 |
166 | .pulse {
167 | -webkit-animation-name: pulse;
168 | animation-name: pulse;
169 | }
170 |
171 | @-webkit-keyframes rubberBand {
172 | from {
173 | -webkit-transform: scale3d(1, 1, 1);
174 | transform: scale3d(1, 1, 1);
175 | }
176 | 30% {
177 | -webkit-transform: scale3d(1.25, 0.75, 1);
178 | transform: scale3d(1.25, 0.75, 1);
179 | }
180 | 40% {
181 | -webkit-transform: scale3d(0.75, 1.25, 1);
182 | transform: scale3d(0.75, 1.25, 1);
183 | }
184 | 50% {
185 | -webkit-transform: scale3d(1.15, 0.85, 1);
186 | transform: scale3d(1.15, 0.85, 1);
187 | }
188 | 65% {
189 | -webkit-transform: scale3d(.95, 1.05, 1);
190 | transform: scale3d(.95, 1.05, 1);
191 | }
192 | 75% {
193 | -webkit-transform: scale3d(1.05, .95, 1);
194 | transform: scale3d(1.05, .95, 1);
195 | }
196 | to {
197 | -webkit-transform: scale3d(1, 1, 1);
198 | transform: scale3d(1, 1, 1);
199 | }
200 | }
201 |
202 | @keyframes rubberBand {
203 | from {
204 | -webkit-transform: scale3d(1, 1, 1);
205 | transform: scale3d(1, 1, 1);
206 | }
207 | 30% {
208 | -webkit-transform: scale3d(1.25, 0.75, 1);
209 | transform: scale3d(1.25, 0.75, 1);
210 | }
211 | 40% {
212 | -webkit-transform: scale3d(0.75, 1.25, 1);
213 | transform: scale3d(0.75, 1.25, 1);
214 | }
215 | 50% {
216 | -webkit-transform: scale3d(1.15, 0.85, 1);
217 | transform: scale3d(1.15, 0.85, 1);
218 | }
219 | 65% {
220 | -webkit-transform: scale3d(.95, 1.05, 1);
221 | transform: scale3d(.95, 1.05, 1);
222 | }
223 | 75% {
224 | -webkit-transform: scale3d(1.05, .95, 1);
225 | transform: scale3d(1.05, .95, 1);
226 | }
227 | to {
228 | -webkit-transform: scale3d(1, 1, 1);
229 | transform: scale3d(1, 1, 1);
230 | }
231 | }
232 |
233 | .rubberBand {
234 | -webkit-animation-name: rubberBand;
235 | animation-name: rubberBand;
236 | }
237 |
238 | @-webkit-keyframes shake {
239 | from,
240 | to {
241 | -webkit-transform: translate3d(0, 0, 0);
242 | transform: translate3d(0, 0, 0);
243 | }
244 | 10%,
245 | 30%,
246 | 50%,
247 | 70%,
248 | 90% {
249 | -webkit-transform: translate3d(-10px, 0, 0);
250 | transform: translate3d(-10px, 0, 0);
251 | }
252 | 20%,
253 | 40%,
254 | 60%,
255 | 80% {
256 | -webkit-transform: translate3d(10px, 0, 0);
257 | transform: translate3d(10px, 0, 0);
258 | }
259 | }
260 |
261 | @keyframes shake {
262 | from,
263 | to {
264 | -webkit-transform: translate3d(0, 0, 0);
265 | transform: translate3d(0, 0, 0);
266 | }
267 | 10%,
268 | 30%,
269 | 50%,
270 | 70%,
271 | 90% {
272 | -webkit-transform: translate3d(-10px, 0, 0);
273 | transform: translate3d(-10px, 0, 0);
274 | }
275 | 20%,
276 | 40%,
277 | 60%,
278 | 80% {
279 | -webkit-transform: translate3d(10px, 0, 0);
280 | transform: translate3d(10px, 0, 0);
281 | }
282 | }
283 |
284 | .shake {
285 | -webkit-animation-name: shake;
286 | animation-name: shake;
287 | }
288 |
289 | @-webkit-keyframes headShake {
290 | 0% {
291 | -webkit-transform: translateX(0);
292 | transform: translateX(0);
293 | }
294 | 6.5% {
295 | -webkit-transform: translateX(-6px) rotateY(-9deg);
296 | transform: translateX(-6px) rotateY(-9deg);
297 | }
298 | 18.5% {
299 | -webkit-transform: translateX(5px) rotateY(7deg);
300 | transform: translateX(5px) rotateY(7deg);
301 | }
302 | 31.5% {
303 | -webkit-transform: translateX(-3px) rotateY(-5deg);
304 | transform: translateX(-3px) rotateY(-5deg);
305 | }
306 | 43.5% {
307 | -webkit-transform: translateX(2px) rotateY(3deg);
308 | transform: translateX(2px) rotateY(3deg);
309 | }
310 | 50% {
311 | -webkit-transform: translateX(0);
312 | transform: translateX(0);
313 | }
314 | }
315 |
316 | @keyframes headShake {
317 | 0% {
318 | -webkit-transform: translateX(0);
319 | transform: translateX(0);
320 | }
321 | 6.5% {
322 | -webkit-transform: translateX(-6px) rotateY(-9deg);
323 | transform: translateX(-6px) rotateY(-9deg);
324 | }
325 | 18.5% {
326 | -webkit-transform: translateX(5px) rotateY(7deg);
327 | transform: translateX(5px) rotateY(7deg);
328 | }
329 | 31.5% {
330 | -webkit-transform: translateX(-3px) rotateY(-5deg);
331 | transform: translateX(-3px) rotateY(-5deg);
332 | }
333 | 43.5% {
334 | -webkit-transform: translateX(2px) rotateY(3deg);
335 | transform: translateX(2px) rotateY(3deg);
336 | }
337 | 50% {
338 | -webkit-transform: translateX(0);
339 | transform: translateX(0);
340 | }
341 | }
342 |
343 | .headShake {
344 | -webkit-animation-timing-function: ease-in-out;
345 | animation-timing-function: ease-in-out;
346 | -webkit-animation-name: headShake;
347 | animation-name: headShake;
348 | }
349 |
350 | @-webkit-keyframes swing {
351 | 20% {
352 | -webkit-transform: rotate3d(0, 0, 1, 15deg);
353 | transform: rotate3d(0, 0, 1, 15deg);
354 | }
355 | 40% {
356 | -webkit-transform: rotate3d(0, 0, 1, -10deg);
357 | transform: rotate3d(0, 0, 1, -10deg);
358 | }
359 | 60% {
360 | -webkit-transform: rotate3d(0, 0, 1, 5deg);
361 | transform: rotate3d(0, 0, 1, 5deg);
362 | }
363 | 80% {
364 | -webkit-transform: rotate3d(0, 0, 1, -5deg);
365 | transform: rotate3d(0, 0, 1, -5deg);
366 | }
367 | to {
368 | -webkit-transform: rotate3d(0, 0, 1, 0deg);
369 | transform: rotate3d(0, 0, 1, 0deg);
370 | }
371 | }
372 |
373 | @keyframes swing {
374 | 20% {
375 | -webkit-transform: rotate3d(0, 0, 1, 15deg);
376 | transform: rotate3d(0, 0, 1, 15deg);
377 | }
378 | 40% {
379 | -webkit-transform: rotate3d(0, 0, 1, -10deg);
380 | transform: rotate3d(0, 0, 1, -10deg);
381 | }
382 | 60% {
383 | -webkit-transform: rotate3d(0, 0, 1, 5deg);
384 | transform: rotate3d(0, 0, 1, 5deg);
385 | }
386 | 80% {
387 | -webkit-transform: rotate3d(0, 0, 1, -5deg);
388 | transform: rotate3d(0, 0, 1, -5deg);
389 | }
390 | to {
391 | -webkit-transform: rotate3d(0, 0, 1, 0deg);
392 | transform: rotate3d(0, 0, 1, 0deg);
393 | }
394 | }
395 |
396 | .swing {
397 | -webkit-transform-origin: top center;
398 | transform-origin: top center;
399 | -webkit-animation-name: swing;
400 | animation-name: swing;
401 | }
402 |
403 | @-webkit-keyframes tada {
404 | from {
405 | -webkit-transform: scale3d(1, 1, 1);
406 | transform: scale3d(1, 1, 1);
407 | }
408 | 10%,
409 | 20% {
410 | -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
411 | transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
412 | }
413 | 30%,
414 | 50%,
415 | 70%,
416 | 90% {
417 | -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
418 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
419 | }
420 | 40%,
421 | 60%,
422 | 80% {
423 | -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
424 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
425 | }
426 | to {
427 | -webkit-transform: scale3d(1, 1, 1);
428 | transform: scale3d(1, 1, 1);
429 | }
430 | }
431 |
432 | @keyframes tada {
433 | from {
434 | -webkit-transform: scale3d(1, 1, 1);
435 | transform: scale3d(1, 1, 1);
436 | }
437 | 10%,
438 | 20% {
439 | -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
440 | transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
441 | }
442 | 30%,
443 | 50%,
444 | 70%,
445 | 90% {
446 | -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
447 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
448 | }
449 | 40%,
450 | 60%,
451 | 80% {
452 | -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
453 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
454 | }
455 | to {
456 | -webkit-transform: scale3d(1, 1, 1);
457 | transform: scale3d(1, 1, 1);
458 | }
459 | }
460 |
461 | .tada {
462 | -webkit-animation-name: tada;
463 | animation-name: tada;
464 | }
465 |
466 |
467 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
468 |
469 | @-webkit-keyframes wobble {
470 | from {
471 | -webkit-transform: none;
472 | transform: none;
473 | }
474 | 15% {
475 | -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
476 | transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
477 | }
478 | 30% {
479 | -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
480 | transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
481 | }
482 | 45% {
483 | -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
484 | transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
485 | }
486 | 60% {
487 | -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
488 | transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
489 | }
490 | 75% {
491 | -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
492 | transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
493 | }
494 | to {
495 | -webkit-transform: none;
496 | transform: none;
497 | }
498 | }
499 |
500 | @keyframes wobble {
501 | from {
502 | -webkit-transform: none;
503 | transform: none;
504 | }
505 | 15% {
506 | -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
507 | transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
508 | }
509 | 30% {
510 | -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
511 | transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
512 | }
513 | 45% {
514 | -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
515 | transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
516 | }
517 | 60% {
518 | -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
519 | transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
520 | }
521 | 75% {
522 | -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
523 | transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
524 | }
525 | to {
526 | -webkit-transform: none;
527 | transform: none;
528 | }
529 | }
530 |
531 | .wobble {
532 | -webkit-animation-name: wobble;
533 | animation-name: wobble;
534 | }
535 |
536 | @-webkit-keyframes jello {
537 | from,
538 | 11.1%,
539 | to {
540 | -webkit-transform: none;
541 | transform: none;
542 | }
543 | 22.2% {
544 | -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
545 | transform: skewX(-12.5deg) skewY(-12.5deg);
546 | }
547 | 33.3% {
548 | -webkit-transform: skewX(6.25deg) skewY(6.25deg);
549 | transform: skewX(6.25deg) skewY(6.25deg);
550 | }
551 | 44.4% {
552 | -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
553 | transform: skewX(-3.125deg) skewY(-3.125deg);
554 | }
555 | 55.5% {
556 | -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
557 | transform: skewX(1.5625deg) skewY(1.5625deg);
558 | }
559 | 66.6% {
560 | -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
561 | transform: skewX(-0.78125deg) skewY(-0.78125deg);
562 | }
563 | 77.7% {
564 | -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
565 | transform: skewX(0.390625deg) skewY(0.390625deg);
566 | }
567 | 88.8% {
568 | -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
569 | transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
570 | }
571 | }
572 |
573 | @keyframes jello {
574 | from,
575 | 11.1%,
576 | to {
577 | -webkit-transform: none;
578 | transform: none;
579 | }
580 | 22.2% {
581 | -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
582 | transform: skewX(-12.5deg) skewY(-12.5deg);
583 | }
584 | 33.3% {
585 | -webkit-transform: skewX(6.25deg) skewY(6.25deg);
586 | transform: skewX(6.25deg) skewY(6.25deg);
587 | }
588 | 44.4% {
589 | -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
590 | transform: skewX(-3.125deg) skewY(-3.125deg);
591 | }
592 | 55.5% {
593 | -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
594 | transform: skewX(1.5625deg) skewY(1.5625deg);
595 | }
596 | 66.6% {
597 | -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
598 | transform: skewX(-0.78125deg) skewY(-0.78125deg);
599 | }
600 | 77.7% {
601 | -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
602 | transform: skewX(0.390625deg) skewY(0.390625deg);
603 | }
604 | 88.8% {
605 | -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
606 | transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
607 | }
608 | }
609 |
610 | .jello {
611 | -webkit-animation-name: jello;
612 | animation-name: jello;
613 | -webkit-transform-origin: center;
614 | transform-origin: center;
615 | }
616 |
617 | @-webkit-keyframes bounceIn {
618 | from,
619 | 20%,
620 | 40%,
621 | 60%,
622 | 80%,
623 | to {
624 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
625 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
626 | }
627 | 0% {
628 | opacity: 0;
629 | -webkit-transform: scale3d(.3, .3, .3);
630 | transform: scale3d(.3, .3, .3);
631 | }
632 | 20% {
633 | -webkit-transform: scale3d(1.1, 1.1, 1.1);
634 | transform: scale3d(1.1, 1.1, 1.1);
635 | }
636 | 40% {
637 | -webkit-transform: scale3d(.9, .9, .9);
638 | transform: scale3d(.9, .9, .9);
639 | }
640 | 60% {
641 | opacity: 1;
642 | -webkit-transform: scale3d(1.03, 1.03, 1.03);
643 | transform: scale3d(1.03, 1.03, 1.03);
644 | }
645 | 80% {
646 | -webkit-transform: scale3d(.97, .97, .97);
647 | transform: scale3d(.97, .97, .97);
648 | }
649 | to {
650 | opacity: 1;
651 | -webkit-transform: scale3d(1, 1, 1);
652 | transform: scale3d(1, 1, 1);
653 | }
654 | }
655 |
656 | @keyframes bounceIn {
657 | from,
658 | 20%,
659 | 40%,
660 | 60%,
661 | 80%,
662 | to {
663 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
664 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
665 | }
666 | 0% {
667 | opacity: 0;
668 | -webkit-transform: scale3d(.3, .3, .3);
669 | transform: scale3d(.3, .3, .3);
670 | }
671 | 20% {
672 | -webkit-transform: scale3d(1.1, 1.1, 1.1);
673 | transform: scale3d(1.1, 1.1, 1.1);
674 | }
675 | 40% {
676 | -webkit-transform: scale3d(.9, .9, .9);
677 | transform: scale3d(.9, .9, .9);
678 | }
679 | 60% {
680 | opacity: 1;
681 | -webkit-transform: scale3d(1.03, 1.03, 1.03);
682 | transform: scale3d(1.03, 1.03, 1.03);
683 | }
684 | 80% {
685 | -webkit-transform: scale3d(.97, .97, .97);
686 | transform: scale3d(.97, .97, .97);
687 | }
688 | to {
689 | opacity: 1;
690 | -webkit-transform: scale3d(1, 1, 1);
691 | transform: scale3d(1, 1, 1);
692 | }
693 | }
694 |
695 | .bounceIn {
696 | -webkit-animation-name: bounceIn;
697 | animation-name: bounceIn;
698 | }
699 |
700 | @-webkit-keyframes bounceInDown {
701 | from,
702 | 60%,
703 | 75%,
704 | 90%,
705 | to {
706 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
707 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
708 | }
709 | 0% {
710 | opacity: 0;
711 | -webkit-transform: translate3d(0, -3000px, 0);
712 | transform: translate3d(0, -3000px, 0);
713 | }
714 | 60% {
715 | opacity: 1;
716 | -webkit-transform: translate3d(0, 25px, 0);
717 | transform: translate3d(0, 25px, 0);
718 | }
719 | 75% {
720 | -webkit-transform: translate3d(0, -10px, 0);
721 | transform: translate3d(0, -10px, 0);
722 | }
723 | 90% {
724 | -webkit-transform: translate3d(0, 5px, 0);
725 | transform: translate3d(0, 5px, 0);
726 | }
727 | to {
728 | -webkit-transform: none;
729 | transform: none;
730 | }
731 | }
732 |
733 | @keyframes bounceInDown {
734 | from,
735 | 60%,
736 | 75%,
737 | 90%,
738 | to {
739 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
740 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
741 | }
742 | 0% {
743 | opacity: 0;
744 | -webkit-transform: translate3d(0, -3000px, 0);
745 | transform: translate3d(0, -3000px, 0);
746 | }
747 | 60% {
748 | opacity: 1;
749 | -webkit-transform: translate3d(0, 25px, 0);
750 | transform: translate3d(0, 25px, 0);
751 | }
752 | 75% {
753 | -webkit-transform: translate3d(0, -10px, 0);
754 | transform: translate3d(0, -10px, 0);
755 | }
756 | 90% {
757 | -webkit-transform: translate3d(0, 5px, 0);
758 | transform: translate3d(0, 5px, 0);
759 | }
760 | to {
761 | -webkit-transform: none;
762 | transform: none;
763 | }
764 | }
765 |
766 | .bounceInDown {
767 | -webkit-animation-name: bounceInDown;
768 | animation-name: bounceInDown;
769 | }
770 |
771 | @-webkit-keyframes bounceInLeft {
772 | from,
773 | 60%,
774 | 75%,
775 | 90%,
776 | to {
777 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
778 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
779 | }
780 | 0% {
781 | opacity: 0;
782 | -webkit-transform: translate3d(-3000px, 0, 0);
783 | transform: translate3d(-3000px, 0, 0);
784 | }
785 | 60% {
786 | opacity: 1;
787 | -webkit-transform: translate3d(25px, 0, 0);
788 | transform: translate3d(25px, 0, 0);
789 | }
790 | 75% {
791 | -webkit-transform: translate3d(-10px, 0, 0);
792 | transform: translate3d(-10px, 0, 0);
793 | }
794 | 90% {
795 | -webkit-transform: translate3d(5px, 0, 0);
796 | transform: translate3d(5px, 0, 0);
797 | }
798 | to {
799 | -webkit-transform: none;
800 | transform: none;
801 | }
802 | }
803 |
804 | @keyframes bounceInLeft {
805 | from,
806 | 60%,
807 | 75%,
808 | 90%,
809 | to {
810 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
811 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
812 | }
813 | 0% {
814 | opacity: 0;
815 | -webkit-transform: translate3d(-3000px, 0, 0);
816 | transform: translate3d(-3000px, 0, 0);
817 | }
818 | 60% {
819 | opacity: 1;
820 | -webkit-transform: translate3d(25px, 0, 0);
821 | transform: translate3d(25px, 0, 0);
822 | }
823 | 75% {
824 | -webkit-transform: translate3d(-10px, 0, 0);
825 | transform: translate3d(-10px, 0, 0);
826 | }
827 | 90% {
828 | -webkit-transform: translate3d(5px, 0, 0);
829 | transform: translate3d(5px, 0, 0);
830 | }
831 | to {
832 | -webkit-transform: none;
833 | transform: none;
834 | }
835 | }
836 |
837 | .bounceInLeft {
838 | -webkit-animation-name: bounceInLeft;
839 | animation-name: bounceInLeft;
840 | }
841 |
842 | @-webkit-keyframes bounceInRight {
843 | from,
844 | 60%,
845 | 75%,
846 | 90%,
847 | to {
848 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
849 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
850 | }
851 | from {
852 | opacity: 0;
853 | -webkit-transform: translate3d(3000px, 0, 0);
854 | transform: translate3d(3000px, 0, 0);
855 | }
856 | 60% {
857 | opacity: 1;
858 | -webkit-transform: translate3d(-25px, 0, 0);
859 | transform: translate3d(-25px, 0, 0);
860 | }
861 | 75% {
862 | -webkit-transform: translate3d(10px, 0, 0);
863 | transform: translate3d(10px, 0, 0);
864 | }
865 | 90% {
866 | -webkit-transform: translate3d(-5px, 0, 0);
867 | transform: translate3d(-5px, 0, 0);
868 | }
869 | to {
870 | -webkit-transform: none;
871 | transform: none;
872 | }
873 | }
874 |
875 | @keyframes bounceInRight {
876 | from,
877 | 60%,
878 | 75%,
879 | 90%,
880 | to {
881 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
882 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
883 | }
884 | from {
885 | opacity: 0;
886 | -webkit-transform: translate3d(3000px, 0, 0);
887 | transform: translate3d(3000px, 0, 0);
888 | }
889 | 60% {
890 | opacity: 1;
891 | -webkit-transform: translate3d(-25px, 0, 0);
892 | transform: translate3d(-25px, 0, 0);
893 | }
894 | 75% {
895 | -webkit-transform: translate3d(10px, 0, 0);
896 | transform: translate3d(10px, 0, 0);
897 | }
898 | 90% {
899 | -webkit-transform: translate3d(-5px, 0, 0);
900 | transform: translate3d(-5px, 0, 0);
901 | }
902 | to {
903 | -webkit-transform: none;
904 | transform: none;
905 | }
906 | }
907 |
908 | .bounceInRight {
909 | -webkit-animation-name: bounceInRight;
910 | animation-name: bounceInRight;
911 | }
912 |
913 | @-webkit-keyframes bounceInUp {
914 | from,
915 | 60%,
916 | 75%,
917 | 90%,
918 | to {
919 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
920 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
921 | }
922 | from {
923 | opacity: 0;
924 | -webkit-transform: translate3d(0, 3000px, 0);
925 | transform: translate3d(0, 3000px, 0);
926 | }
927 | 60% {
928 | opacity: 1;
929 | -webkit-transform: translate3d(0, -20px, 0);
930 | transform: translate3d(0, -20px, 0);
931 | }
932 | 75% {
933 | -webkit-transform: translate3d(0, 10px, 0);
934 | transform: translate3d(0, 10px, 0);
935 | }
936 | 90% {
937 | -webkit-transform: translate3d(0, -5px, 0);
938 | transform: translate3d(0, -5px, 0);
939 | }
940 | to {
941 | -webkit-transform: translate3d(0, 0, 0);
942 | transform: translate3d(0, 0, 0);
943 | }
944 | }
945 |
946 | @keyframes bounceInUp {
947 | from,
948 | 60%,
949 | 75%,
950 | 90%,
951 | to {
952 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
953 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
954 | }
955 | from {
956 | opacity: 0;
957 | -webkit-transform: translate3d(0, 3000px, 0);
958 | transform: translate3d(0, 3000px, 0);
959 | }
960 | 60% {
961 | opacity: 1;
962 | -webkit-transform: translate3d(0, -20px, 0);
963 | transform: translate3d(0, -20px, 0);
964 | }
965 | 75% {
966 | -webkit-transform: translate3d(0, 10px, 0);
967 | transform: translate3d(0, 10px, 0);
968 | }
969 | 90% {
970 | -webkit-transform: translate3d(0, -5px, 0);
971 | transform: translate3d(0, -5px, 0);
972 | }
973 | to {
974 | -webkit-transform: translate3d(0, 0, 0);
975 | transform: translate3d(0, 0, 0);
976 | }
977 | }
978 |
979 | .bounceInUp {
980 | -webkit-animation-name: bounceInUp;
981 | animation-name: bounceInUp;
982 | }
983 |
984 | @-webkit-keyframes bounceOut {
985 | 20% {
986 | -webkit-transform: scale3d(.9, .9, .9);
987 | transform: scale3d(.9, .9, .9);
988 | }
989 | 50%,
990 | 55% {
991 | opacity: 1;
992 | -webkit-transform: scale3d(1.1, 1.1, 1.1);
993 | transform: scale3d(1.1, 1.1, 1.1);
994 | }
995 | to {
996 | opacity: 0;
997 | -webkit-transform: scale3d(.3, .3, .3);
998 | transform: scale3d(.3, .3, .3);
999 | }
1000 | }
1001 |
1002 | @keyframes bounceOut {
1003 | 20% {
1004 | -webkit-transform: scale3d(.9, .9, .9);
1005 | transform: scale3d(.9, .9, .9);
1006 | }
1007 | 50%,
1008 | 55% {
1009 | opacity: 1;
1010 | -webkit-transform: scale3d(1.1, 1.1, 1.1);
1011 | transform: scale3d(1.1, 1.1, 1.1);
1012 | }
1013 | to {
1014 | opacity: 0;
1015 | -webkit-transform: scale3d(.3, .3, .3);
1016 | transform: scale3d(.3, .3, .3);
1017 | }
1018 | }
1019 |
1020 | .bounceOut {
1021 | -webkit-animation-name: bounceOut;
1022 | animation-name: bounceOut;
1023 | }
1024 |
1025 | @-webkit-keyframes bounceOutDown {
1026 | 20% {
1027 | -webkit-transform: translate3d(0, 10px, 0);
1028 | transform: translate3d(0, 10px, 0);
1029 | }
1030 | 40%,
1031 | 45% {
1032 | opacity: 1;
1033 | -webkit-transform: translate3d(0, -20px, 0);
1034 | transform: translate3d(0, -20px, 0);
1035 | }
1036 | to {
1037 | opacity: 0;
1038 | -webkit-transform: translate3d(0, 2000px, 0);
1039 | transform: translate3d(0, 2000px, 0);
1040 | }
1041 | }
1042 |
1043 | @keyframes bounceOutDown {
1044 | 20% {
1045 | -webkit-transform: translate3d(0, 10px, 0);
1046 | transform: translate3d(0, 10px, 0);
1047 | }
1048 | 40%,
1049 | 45% {
1050 | opacity: 1;
1051 | -webkit-transform: translate3d(0, -20px, 0);
1052 | transform: translate3d(0, -20px, 0);
1053 | }
1054 | to {
1055 | opacity: 0;
1056 | -webkit-transform: translate3d(0, 2000px, 0);
1057 | transform: translate3d(0, 2000px, 0);
1058 | }
1059 | }
1060 |
1061 | .bounceOutDown {
1062 | -webkit-animation-name: bounceOutDown;
1063 | animation-name: bounceOutDown;
1064 | }
1065 |
1066 | @-webkit-keyframes bounceOutLeft {
1067 | 20% {
1068 | opacity: 1;
1069 | -webkit-transform: translate3d(20px, 0, 0);
1070 | transform: translate3d(20px, 0, 0);
1071 | }
1072 | to {
1073 | opacity: 0;
1074 | -webkit-transform: translate3d(-2000px, 0, 0);
1075 | transform: translate3d(-2000px, 0, 0);
1076 | }
1077 | }
1078 |
1079 | @keyframes bounceOutLeft {
1080 | 20% {
1081 | opacity: 1;
1082 | -webkit-transform: translate3d(20px, 0, 0);
1083 | transform: translate3d(20px, 0, 0);
1084 | }
1085 | to {
1086 | opacity: 0;
1087 | -webkit-transform: translate3d(-2000px, 0, 0);
1088 | transform: translate3d(-2000px, 0, 0);
1089 | }
1090 | }
1091 |
1092 | .bounceOutLeft {
1093 | -webkit-animation-name: bounceOutLeft;
1094 | animation-name: bounceOutLeft;
1095 | }
1096 |
1097 | @-webkit-keyframes bounceOutRight {
1098 | 20% {
1099 | opacity: 1;
1100 | -webkit-transform: translate3d(-20px, 0, 0);
1101 | transform: translate3d(-20px, 0, 0);
1102 | }
1103 | to {
1104 | opacity: 0;
1105 | -webkit-transform: translate3d(2000px, 0, 0);
1106 | transform: translate3d(2000px, 0, 0);
1107 | }
1108 | }
1109 |
1110 | @keyframes bounceOutRight {
1111 | 20% {
1112 | opacity: 1;
1113 | -webkit-transform: translate3d(-20px, 0, 0);
1114 | transform: translate3d(-20px, 0, 0);
1115 | }
1116 | to {
1117 | opacity: 0;
1118 | -webkit-transform: translate3d(2000px, 0, 0);
1119 | transform: translate3d(2000px, 0, 0);
1120 | }
1121 | }
1122 |
1123 | .bounceOutRight {
1124 | -webkit-animation-name: bounceOutRight;
1125 | animation-name: bounceOutRight;
1126 | }
1127 |
1128 | @-webkit-keyframes bounceOutUp {
1129 | 20% {
1130 | -webkit-transform: translate3d(0, -10px, 0);
1131 | transform: translate3d(0, -10px, 0);
1132 | }
1133 | 40%,
1134 | 45% {
1135 | opacity: 1;
1136 | -webkit-transform: translate3d(0, 20px, 0);
1137 | transform: translate3d(0, 20px, 0);
1138 | }
1139 | to {
1140 | opacity: 0;
1141 | -webkit-transform: translate3d(0, -2000px, 0);
1142 | transform: translate3d(0, -2000px, 0);
1143 | }
1144 | }
1145 |
1146 | @keyframes bounceOutUp {
1147 | 20% {
1148 | -webkit-transform: translate3d(0, -10px, 0);
1149 | transform: translate3d(0, -10px, 0);
1150 | }
1151 | 40%,
1152 | 45% {
1153 | opacity: 1;
1154 | -webkit-transform: translate3d(0, 20px, 0);
1155 | transform: translate3d(0, 20px, 0);
1156 | }
1157 | to {
1158 | opacity: 0;
1159 | -webkit-transform: translate3d(0, -2000px, 0);
1160 | transform: translate3d(0, -2000px, 0);
1161 | }
1162 | }
1163 |
1164 | .bounceOutUp {
1165 | -webkit-animation-name: bounceOutUp;
1166 | animation-name: bounceOutUp;
1167 | }
1168 |
1169 | @-webkit-keyframes fadeIn {
1170 | from {
1171 | opacity: 0;
1172 | }
1173 | to {
1174 | opacity: 1;
1175 | }
1176 | }
1177 |
1178 | @keyframes fadeIn {
1179 | from {
1180 | opacity: 0;
1181 | }
1182 | to {
1183 | opacity: 1;
1184 | }
1185 | }
1186 |
1187 | .fadeIn {
1188 | -webkit-animation-name: fadeIn;
1189 | animation-name: fadeIn;
1190 | }
1191 |
1192 | @-webkit-keyframes fadeInDown {
1193 | from {
1194 | opacity: 0;
1195 | -webkit-transform: translate3d(0, -100%, 0);
1196 | transform: translate3d(0, -100%, 0);
1197 | }
1198 | to {
1199 | opacity: 1;
1200 | -webkit-transform: none;
1201 | transform: none;
1202 | }
1203 | }
1204 |
1205 | @keyframes fadeInDown {
1206 | from {
1207 | opacity: 0;
1208 | -webkit-transform: translate3d(0, -100%, 0);
1209 | transform: translate3d(0, -100%, 0);
1210 | }
1211 | to {
1212 | opacity: 1;
1213 | -webkit-transform: none;
1214 | transform: none;
1215 | }
1216 | }
1217 |
1218 | .fadeInDown {
1219 | -webkit-animation-name: fadeInDown;
1220 | animation-name: fadeInDown;
1221 | }
1222 |
1223 | @-webkit-keyframes fadeInDownBig {
1224 | from {
1225 | opacity: 0;
1226 | -webkit-transform: translate3d(0, -2000px, 0);
1227 | transform: translate3d(0, -2000px, 0);
1228 | }
1229 | to {
1230 | opacity: 1;
1231 | -webkit-transform: none;
1232 | transform: none;
1233 | }
1234 | }
1235 |
1236 | @keyframes fadeInDownBig {
1237 | from {
1238 | opacity: 0;
1239 | -webkit-transform: translate3d(0, -2000px, 0);
1240 | transform: translate3d(0, -2000px, 0);
1241 | }
1242 | to {
1243 | opacity: 1;
1244 | -webkit-transform: none;
1245 | transform: none;
1246 | }
1247 | }
1248 |
1249 | .fadeInDownBig {
1250 | -webkit-animation-name: fadeInDownBig;
1251 | animation-name: fadeInDownBig;
1252 | }
1253 |
1254 | @-webkit-keyframes fadeInLeft {
1255 | from {
1256 | opacity: 1;
1257 | -webkit-transform: translate3d(-100%, 0, 0);
1258 | transform: translate3d(-100%, 0, 0);
1259 | }
1260 | to {
1261 | opacity: 1;
1262 | -webkit-transform: none;
1263 | transform: none;
1264 | }
1265 | }
1266 |
1267 | @keyframes fadeInLeft {
1268 | from {
1269 | opacity: 1;
1270 | -webkit-transform: translate3d(-100%, 0, 0);
1271 | transform: translate3d(-100%, 0, 0);
1272 | }
1273 | to {
1274 | opacity: 1;
1275 | -webkit-transform: none;
1276 | transform: none;
1277 | }
1278 | }
1279 |
1280 | .fadeInLeft {
1281 | -webkit-animation-name: fadeInLeft;
1282 | animation-name: fadeInLeft;
1283 | }
1284 |
1285 | @-webkit-keyframes fadeInLeftBig {
1286 | from {
1287 | opacity: 0;
1288 | -webkit-transform: translate3d(-2000px, 0, 0);
1289 | transform: translate3d(-2000px, 0, 0);
1290 | }
1291 | to {
1292 | opacity: 1;
1293 | -webkit-transform: none;
1294 | transform: none;
1295 | }
1296 | }
1297 |
1298 | @keyframes fadeInLeftBig {
1299 | from {
1300 | opacity: 0;
1301 | -webkit-transform: translate3d(-2000px, 0, 0);
1302 | transform: translate3d(-2000px, 0, 0);
1303 | }
1304 | to {
1305 | opacity: 1;
1306 | -webkit-transform: none;
1307 | transform: none;
1308 | }
1309 | }
1310 |
1311 | .fadeInLeftBig {
1312 | -webkit-animation-name: fadeInLeftBig;
1313 | animation-name: fadeInLeftBig;
1314 | }
1315 |
1316 | @-webkit-keyframes fadeInRight {
1317 | from {
1318 | opacity: 1;
1319 | -webkit-transform: translate3d(100%, 0, 0);
1320 | transform: translate3d(100%, 0, 0);
1321 | }
1322 | to {
1323 | opacity: 1;
1324 | -webkit-transform: none;
1325 | transform: none;
1326 | }
1327 | }
1328 |
1329 | @keyframes fadeInRight {
1330 | from {
1331 | opacity: 1;
1332 | -webkit-transform: translate3d(100%, 0, 0);
1333 | transform: translate3d(100%, 0, 0);
1334 | }
1335 | to {
1336 | opacity: 1;
1337 | -webkit-transform: none;
1338 | transform: none;
1339 | }
1340 | }
1341 |
1342 | .fadeInRight {
1343 | -webkit-animation-name: fadeInRight;
1344 | animation-name: fadeInRight;
1345 | }
1346 |
1347 | @-webkit-keyframes fadeInRightBig {
1348 | from {
1349 | opacity: 0;
1350 | -webkit-transform: translate3d(2000px, 0, 0);
1351 | transform: translate3d(2000px, 0, 0);
1352 | }
1353 | to {
1354 | opacity: 1;
1355 | -webkit-transform: none;
1356 | transform: none;
1357 | }
1358 | }
1359 |
1360 | @keyframes fadeInRightBig {
1361 | from {
1362 | opacity: 0;
1363 | -webkit-transform: translate3d(2000px, 0, 0);
1364 | transform: translate3d(2000px, 0, 0);
1365 | }
1366 | to {
1367 | opacity: 1;
1368 | -webkit-transform: none;
1369 | transform: none;
1370 | }
1371 | }
1372 |
1373 | .fadeInRightBig {
1374 | -webkit-animation-name: fadeInRightBig;
1375 | animation-name: fadeInRightBig;
1376 | }
1377 |
1378 | @-webkit-keyframes fadeInUp {
1379 | from {
1380 | opacity: 0;
1381 | -webkit-transform: translate3d(0, 100%, 0);
1382 | transform: translate3d(0, 100%, 0);
1383 | }
1384 | to {
1385 | opacity: 1;
1386 | -webkit-transform: none;
1387 | transform: none;
1388 | }
1389 | }
1390 |
1391 | @keyframes fadeInUp {
1392 | from {
1393 | opacity: 0;
1394 | -webkit-transform: translate3d(0, 100%, 0);
1395 | transform: translate3d(0, 100%, 0);
1396 | }
1397 | to {
1398 | opacity: 1;
1399 | -webkit-transform: none;
1400 | transform: none;
1401 | }
1402 | }
1403 |
1404 | .fadeInUp {
1405 | -webkit-animation-name: fadeInUp;
1406 | animation-name: fadeInUp;
1407 | }
1408 |
1409 | @-webkit-keyframes fadeInUpBig {
1410 | from {
1411 | opacity: 0;
1412 | -webkit-transform: translate3d(0, 2000px, 0);
1413 | transform: translate3d(0, 2000px, 0);
1414 | }
1415 | to {
1416 | opacity: 1;
1417 | -webkit-transform: none;
1418 | transform: none;
1419 | }
1420 | }
1421 |
1422 | @keyframes fadeInUpBig {
1423 | from {
1424 | opacity: 0;
1425 | -webkit-transform: translate3d(0, 2000px, 0);
1426 | transform: translate3d(0, 2000px, 0);
1427 | }
1428 | to {
1429 | opacity: 1;
1430 | -webkit-transform: none;
1431 | transform: none;
1432 | }
1433 | }
1434 |
1435 | .fadeInUpBig {
1436 | -webkit-animation-name: fadeInUpBig;
1437 | animation-name: fadeInUpBig;
1438 | }
1439 |
1440 | @-webkit-keyframes fadeOut {
1441 | from {
1442 | opacity: 1;
1443 | }
1444 | to {
1445 | opacity: 0;
1446 | }
1447 | }
1448 |
1449 | @keyframes fadeOut {
1450 | from {
1451 | opacity: 1;
1452 | }
1453 | to {
1454 | opacity: 0;
1455 | }
1456 | }
1457 |
1458 | .fadeOut {
1459 | -webkit-animation-name: fadeOut;
1460 | animation-name: fadeOut;
1461 | }
1462 |
1463 | @-webkit-keyframes fadeOutDown {
1464 | from {
1465 | opacity: 1;
1466 | }
1467 | to {
1468 | opacity: 0;
1469 | -webkit-transform: translate3d(0, 100%, 0);
1470 | transform: translate3d(0, 100%, 0);
1471 | }
1472 | }
1473 |
1474 | @keyframes fadeOutDown {
1475 | from {
1476 | opacity: 1;
1477 | }
1478 | to {
1479 | opacity: 0;
1480 | -webkit-transform: translate3d(0, 100%, 0);
1481 | transform: translate3d(0, 100%, 0);
1482 | }
1483 | }
1484 |
1485 | .fadeOutDown {
1486 | -webkit-animation-name: fadeOutDown;
1487 | animation-name: fadeOutDown;
1488 | }
1489 |
1490 | @-webkit-keyframes fadeOutDownBig {
1491 | from {
1492 | opacity: 1;
1493 | }
1494 | to {
1495 | opacity: 0;
1496 | -webkit-transform: translate3d(0, 2000px, 0);
1497 | transform: translate3d(0, 2000px, 0);
1498 | }
1499 | }
1500 |
1501 | @keyframes fadeOutDownBig {
1502 | from {
1503 | opacity: 1;
1504 | }
1505 | to {
1506 | opacity: 0;
1507 | -webkit-transform: translate3d(0, 2000px, 0);
1508 | transform: translate3d(0, 2000px, 0);
1509 | }
1510 | }
1511 |
1512 | .fadeOutDownBig {
1513 | -webkit-animation-name: fadeOutDownBig;
1514 | animation-name: fadeOutDownBig;
1515 | }
1516 |
1517 | @-webkit-keyframes fadeOutLeft {
1518 | from {
1519 | opacity: 1;
1520 | }
1521 | to {
1522 | opacity: 1;
1523 | -webkit-transform: translate3d(-100%, 0, 0);
1524 | transform: translate3d(-100%, 0, 0);
1525 | }
1526 | }
1527 |
1528 | @keyframes fadeOutLeft {
1529 | from {
1530 | opacity: 1;
1531 | }
1532 | to {
1533 | opacity: 1;
1534 | -webkit-transform: translate3d(-100%, 0, 0);
1535 | transform: translate3d(-100%, 0, 0);
1536 | }
1537 | }
1538 |
1539 | .fadeOutLeft {
1540 | -webkit-animation-name: fadeOutLeft;
1541 | animation-name: fadeOutLeft;
1542 | }
1543 |
1544 | @-webkit-keyframes fadeOutLeftBig {
1545 | from {
1546 | opacity: 1;
1547 | }
1548 | to {
1549 | opacity: 0;
1550 | -webkit-transform: translate3d(-2000px, 0, 0);
1551 | transform: translate3d(-2000px, 0, 0);
1552 | }
1553 | }
1554 |
1555 | @keyframes fadeOutLeftBig {
1556 | from {
1557 | opacity: 1;
1558 | }
1559 | to {
1560 | opacity: 0;
1561 | -webkit-transform: translate3d(-2000px, 0, 0);
1562 | transform: translate3d(-2000px, 0, 0);
1563 | }
1564 | }
1565 |
1566 | .fadeOutLeftBig {
1567 | -webkit-animation-name: fadeOutLeftBig;
1568 | animation-name: fadeOutLeftBig;
1569 | }
1570 |
1571 | @-webkit-keyframes fadeOutRight {
1572 | from {
1573 | opacity: 1;
1574 | }
1575 | to {
1576 | opacity: 0;
1577 | -webkit-transform: translate3d(100%, 0, 0);
1578 | transform: translate3d(100%, 0, 0);
1579 | }
1580 | }
1581 |
1582 | @keyframes fadeOutRight {
1583 | from {
1584 | opacity: 1;
1585 | }
1586 | to {
1587 | opacity: 0;
1588 | -webkit-transform: translate3d(100%, 0, 0);
1589 | transform: translate3d(100%, 0, 0);
1590 | }
1591 | }
1592 |
1593 | .fadeOutRight {
1594 | -webkit-animation-name: fadeOutRight;
1595 | animation-name: fadeOutRight;
1596 | }
1597 |
1598 | @-webkit-keyframes fadeOutRightBig {
1599 | from {
1600 | opacity: 1;
1601 | }
1602 | to {
1603 | opacity: 0;
1604 | -webkit-transform: translate3d(2000px, 0, 0);
1605 | transform: translate3d(2000px, 0, 0);
1606 | }
1607 | }
1608 |
1609 | @keyframes fadeOutRightBig {
1610 | from {
1611 | opacity: 1;
1612 | }
1613 | to {
1614 | opacity: 0;
1615 | -webkit-transform: translate3d(2000px, 0, 0);
1616 | transform: translate3d(2000px, 0, 0);
1617 | }
1618 | }
1619 |
1620 | .fadeOutRightBig {
1621 | -webkit-animation-name: fadeOutRightBig;
1622 | animation-name: fadeOutRightBig;
1623 | }
1624 |
1625 | @-webkit-keyframes fadeOutUp {
1626 | from {
1627 | opacity: 1;
1628 | }
1629 | to {
1630 | opacity: 0;
1631 | -webkit-transform: translate3d(0, -100%, 0);
1632 | transform: translate3d(0, -100%, 0);
1633 | }
1634 | }
1635 |
1636 | @keyframes fadeOutUp {
1637 | from {
1638 | opacity: 1;
1639 | }
1640 | to {
1641 | opacity: 0;
1642 | -webkit-transform: translate3d(0, -100%, 0);
1643 | transform: translate3d(0, -100%, 0);
1644 | }
1645 | }
1646 |
1647 | .fadeOutUp {
1648 | -webkit-animation-name: fadeOutUp;
1649 | animation-name: fadeOutUp;
1650 | }
1651 |
1652 | @-webkit-keyframes fadeOutUpBig {
1653 | from {
1654 | opacity: 1;
1655 | }
1656 | to {
1657 | opacity: 0;
1658 | -webkit-transform: translate3d(0, -2000px, 0);
1659 | transform: translate3d(0, -2000px, 0);
1660 | }
1661 | }
1662 |
1663 | @keyframes fadeOutUpBig {
1664 | from {
1665 | opacity: 1;
1666 | }
1667 | to {
1668 | opacity: 0;
1669 | -webkit-transform: translate3d(0, -2000px, 0);
1670 | transform: translate3d(0, -2000px, 0);
1671 | }
1672 | }
1673 |
1674 | .fadeOutUpBig {
1675 | -webkit-animation-name: fadeOutUpBig;
1676 | animation-name: fadeOutUpBig;
1677 | }
1678 |
1679 | @-webkit-keyframes flip {
1680 | from {
1681 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
1682 | transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
1683 | -webkit-animation-timing-function: ease-out;
1684 | animation-timing-function: ease-out;
1685 | }
1686 | 40% {
1687 | -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
1688 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
1689 | -webkit-animation-timing-function: ease-out;
1690 | animation-timing-function: ease-out;
1691 | }
1692 | 50% {
1693 | -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
1694 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
1695 | -webkit-animation-timing-function: ease-in;
1696 | animation-timing-function: ease-in;
1697 | }
1698 | 80% {
1699 | -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
1700 | transform: perspective(400px) scale3d(.95, .95, .95);
1701 | -webkit-animation-timing-function: ease-in;
1702 | animation-timing-function: ease-in;
1703 | }
1704 | to {
1705 | -webkit-transform: perspective(400px);
1706 | transform: perspective(400px);
1707 | -webkit-animation-timing-function: ease-in;
1708 | animation-timing-function: ease-in;
1709 | }
1710 | }
1711 |
1712 | @keyframes flip {
1713 | from {
1714 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
1715 | transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
1716 | -webkit-animation-timing-function: ease-out;
1717 | animation-timing-function: ease-out;
1718 | }
1719 | 40% {
1720 | -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
1721 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
1722 | -webkit-animation-timing-function: ease-out;
1723 | animation-timing-function: ease-out;
1724 | }
1725 | 50% {
1726 | -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
1727 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
1728 | -webkit-animation-timing-function: ease-in;
1729 | animation-timing-function: ease-in;
1730 | }
1731 | 80% {
1732 | -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
1733 | transform: perspective(400px) scale3d(.95, .95, .95);
1734 | -webkit-animation-timing-function: ease-in;
1735 | animation-timing-function: ease-in;
1736 | }
1737 | to {
1738 | -webkit-transform: perspective(400px);
1739 | transform: perspective(400px);
1740 | -webkit-animation-timing-function: ease-in;
1741 | animation-timing-function: ease-in;
1742 | }
1743 | }
1744 |
1745 | .animated.flip {
1746 | -webkit-backface-visibility: visible;
1747 | backface-visibility: visible;
1748 | -webkit-animation-name: flip;
1749 | animation-name: flip;
1750 | }
1751 |
1752 | @-webkit-keyframes flipInX {
1753 | from {
1754 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
1755 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
1756 | -webkit-animation-timing-function: ease-in;
1757 | animation-timing-function: ease-in;
1758 | opacity: 0;
1759 | }
1760 | 40% {
1761 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
1762 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
1763 | -webkit-animation-timing-function: ease-in;
1764 | animation-timing-function: ease-in;
1765 | }
1766 | 60% {
1767 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
1768 | transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
1769 | opacity: 1;
1770 | }
1771 | 80% {
1772 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
1773 | transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
1774 | }
1775 | to {
1776 | -webkit-transform: perspective(400px);
1777 | transform: perspective(400px);
1778 | }
1779 | }
1780 |
1781 | @keyframes flipInX {
1782 | from {
1783 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
1784 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
1785 | -webkit-animation-timing-function: ease-in;
1786 | animation-timing-function: ease-in;
1787 | opacity: 0;
1788 | }
1789 | 40% {
1790 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
1791 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
1792 | -webkit-animation-timing-function: ease-in;
1793 | animation-timing-function: ease-in;
1794 | }
1795 | 60% {
1796 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
1797 | transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
1798 | opacity: 1;
1799 | }
1800 | 80% {
1801 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
1802 | transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
1803 | }
1804 | to {
1805 | -webkit-transform: perspective(400px);
1806 | transform: perspective(400px);
1807 | }
1808 | }
1809 |
1810 | .flipInX {
1811 | -webkit-backface-visibility: visible !important;
1812 | backface-visibility: visible !important;
1813 | -webkit-animation-name: flipInX;
1814 | animation-name: flipInX;
1815 | }
1816 |
1817 | @-webkit-keyframes flipInY {
1818 | from {
1819 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1820 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1821 | -webkit-animation-timing-function: ease-in;
1822 | animation-timing-function: ease-in;
1823 | opacity: 0;
1824 | }
1825 | 40% {
1826 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
1827 | transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
1828 | -webkit-animation-timing-function: ease-in;
1829 | animation-timing-function: ease-in;
1830 | }
1831 | 60% {
1832 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
1833 | transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
1834 | opacity: 1;
1835 | }
1836 | 80% {
1837 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
1838 | transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
1839 | }
1840 | to {
1841 | -webkit-transform: perspective(400px);
1842 | transform: perspective(400px);
1843 | }
1844 | }
1845 |
1846 | @keyframes flipInY {
1847 | from {
1848 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1849 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1850 | -webkit-animation-timing-function: ease-in;
1851 | animation-timing-function: ease-in;
1852 | opacity: 0;
1853 | }
1854 | 40% {
1855 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
1856 | transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
1857 | -webkit-animation-timing-function: ease-in;
1858 | animation-timing-function: ease-in;
1859 | }
1860 | 60% {
1861 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
1862 | transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
1863 | opacity: 1;
1864 | }
1865 | 80% {
1866 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
1867 | transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
1868 | }
1869 | to {
1870 | -webkit-transform: perspective(400px);
1871 | transform: perspective(400px);
1872 | }
1873 | }
1874 |
1875 | .flipInY {
1876 | -webkit-backface-visibility: visible !important;
1877 | backface-visibility: visible !important;
1878 | -webkit-animation-name: flipInY;
1879 | animation-name: flipInY;
1880 | }
1881 |
1882 | @-webkit-keyframes flipOutX {
1883 | from {
1884 | -webkit-transform: perspective(400px);
1885 | transform: perspective(400px);
1886 | }
1887 | 30% {
1888 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
1889 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
1890 | opacity: 1;
1891 | }
1892 | to {
1893 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
1894 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
1895 | opacity: 0;
1896 | }
1897 | }
1898 |
1899 | @keyframes flipOutX {
1900 | from {
1901 | -webkit-transform: perspective(400px);
1902 | transform: perspective(400px);
1903 | }
1904 | 30% {
1905 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
1906 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
1907 | opacity: 1;
1908 | }
1909 | to {
1910 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
1911 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
1912 | opacity: 0;
1913 | }
1914 | }
1915 |
1916 | .flipOutX {
1917 | -webkit-animation-name: flipOutX;
1918 | animation-name: flipOutX;
1919 | -webkit-backface-visibility: visible !important;
1920 | backface-visibility: visible !important;
1921 | }
1922 |
1923 | @-webkit-keyframes flipOutY {
1924 | from {
1925 | -webkit-transform: perspective(400px);
1926 | transform: perspective(400px);
1927 | }
1928 | 30% {
1929 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
1930 | transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
1931 | opacity: 1;
1932 | }
1933 | to {
1934 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1935 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1936 | opacity: 0;
1937 | }
1938 | }
1939 |
1940 | @keyframes flipOutY {
1941 | from {
1942 | -webkit-transform: perspective(400px);
1943 | transform: perspective(400px);
1944 | }
1945 | 30% {
1946 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
1947 | transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
1948 | opacity: 1;
1949 | }
1950 | to {
1951 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1952 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
1953 | opacity: 0;
1954 | }
1955 | }
1956 |
1957 | .flipOutY {
1958 | -webkit-backface-visibility: visible !important;
1959 | backface-visibility: visible !important;
1960 | -webkit-animation-name: flipOutY;
1961 | animation-name: flipOutY;
1962 | }
1963 |
1964 | @-webkit-keyframes lightSpeedIn {
1965 | from {
1966 | -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
1967 | transform: translate3d(100%, 0, 0) skewX(-30deg);
1968 | opacity: 0;
1969 | }
1970 | 60% {
1971 | -webkit-transform: skewX(20deg);
1972 | transform: skewX(20deg);
1973 | opacity: 1;
1974 | }
1975 | 80% {
1976 | -webkit-transform: skewX(-5deg);
1977 | transform: skewX(-5deg);
1978 | opacity: 1;
1979 | }
1980 | to {
1981 | -webkit-transform: none;
1982 | transform: none;
1983 | opacity: 1;
1984 | }
1985 | }
1986 |
1987 | @keyframes lightSpeedIn {
1988 | from {
1989 | -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
1990 | transform: translate3d(100%, 0, 0) skewX(-30deg);
1991 | opacity: 0;
1992 | }
1993 | 60% {
1994 | -webkit-transform: skewX(20deg);
1995 | transform: skewX(20deg);
1996 | opacity: 1;
1997 | }
1998 | 80% {
1999 | -webkit-transform: skewX(-5deg);
2000 | transform: skewX(-5deg);
2001 | opacity: 1;
2002 | }
2003 | to {
2004 | -webkit-transform: none;
2005 | transform: none;
2006 | opacity: 1;
2007 | }
2008 | }
2009 |
2010 | .lightSpeedIn {
2011 | -webkit-animation-name: lightSpeedIn;
2012 | animation-name: lightSpeedIn;
2013 | -webkit-animation-timing-function: ease-out;
2014 | animation-timing-function: ease-out;
2015 | }
2016 |
2017 | @-webkit-keyframes lightSpeedOut {
2018 | from {
2019 | opacity: 1;
2020 | }
2021 | to {
2022 | -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
2023 | transform: translate3d(100%, 0, 0) skewX(30deg);
2024 | opacity: 0;
2025 | }
2026 | }
2027 |
2028 | @keyframes lightSpeedOut {
2029 | from {
2030 | opacity: 1;
2031 | }
2032 | to {
2033 | -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
2034 | transform: translate3d(100%, 0, 0) skewX(30deg);
2035 | opacity: 0;
2036 | }
2037 | }
2038 |
2039 | .lightSpeedOut {
2040 | -webkit-animation-name: lightSpeedOut;
2041 | animation-name: lightSpeedOut;
2042 | -webkit-animation-timing-function: ease-in;
2043 | animation-timing-function: ease-in;
2044 | }
2045 |
2046 | @-webkit-keyframes rotateIn {
2047 | from {
2048 | -webkit-transform-origin: center;
2049 | transform-origin: center;
2050 | -webkit-transform: rotate3d(0, 0, 1, -200deg);
2051 | transform: rotate3d(0, 0, 1, -200deg);
2052 | opacity: 0;
2053 | }
2054 | to {
2055 | -webkit-transform-origin: center;
2056 | transform-origin: center;
2057 | -webkit-transform: none;
2058 | transform: none;
2059 | opacity: 1;
2060 | }
2061 | }
2062 |
2063 | @keyframes rotateIn {
2064 | from {
2065 | -webkit-transform-origin: center;
2066 | transform-origin: center;
2067 | -webkit-transform: rotate3d(0, 0, 1, -200deg);
2068 | transform: rotate3d(0, 0, 1, -200deg);
2069 | opacity: 0;
2070 | }
2071 | to {
2072 | -webkit-transform-origin: center;
2073 | transform-origin: center;
2074 | -webkit-transform: none;
2075 | transform: none;
2076 | opacity: 1;
2077 | }
2078 | }
2079 |
2080 | .rotateIn {
2081 | -webkit-animation-name: rotateIn;
2082 | animation-name: rotateIn;
2083 | }
2084 |
2085 | @-webkit-keyframes rotateInDownLeft {
2086 | from {
2087 | -webkit-transform-origin: left bottom;
2088 | transform-origin: left bottom;
2089 | -webkit-transform: rotate3d(0, 0, 1, -45deg);
2090 | transform: rotate3d(0, 0, 1, -45deg);
2091 | opacity: 0;
2092 | }
2093 | to {
2094 | -webkit-transform-origin: left bottom;
2095 | transform-origin: left bottom;
2096 | -webkit-transform: none;
2097 | transform: none;
2098 | opacity: 1;
2099 | }
2100 | }
2101 |
2102 | @keyframes rotateInDownLeft {
2103 | from {
2104 | -webkit-transform-origin: left bottom;
2105 | transform-origin: left bottom;
2106 | -webkit-transform: rotate3d(0, 0, 1, -45deg);
2107 | transform: rotate3d(0, 0, 1, -45deg);
2108 | opacity: 0;
2109 | }
2110 | to {
2111 | -webkit-transform-origin: left bottom;
2112 | transform-origin: left bottom;
2113 | -webkit-transform: none;
2114 | transform: none;
2115 | opacity: 1;
2116 | }
2117 | }
2118 |
2119 | .rotateInDownLeft {
2120 | -webkit-animation-name: rotateInDownLeft;
2121 | animation-name: rotateInDownLeft;
2122 | }
2123 |
2124 | @-webkit-keyframes rotateInDownRight {
2125 | from {
2126 | -webkit-transform-origin: right bottom;
2127 | transform-origin: right bottom;
2128 | -webkit-transform: rotate3d(0, 0, 1, 45deg);
2129 | transform: rotate3d(0, 0, 1, 45deg);
2130 | opacity: 0;
2131 | }
2132 | to {
2133 | -webkit-transform-origin: right bottom;
2134 | transform-origin: right bottom;
2135 | -webkit-transform: none;
2136 | transform: none;
2137 | opacity: 1;
2138 | }
2139 | }
2140 |
2141 | @keyframes rotateInDownRight {
2142 | from {
2143 | -webkit-transform-origin: right bottom;
2144 | transform-origin: right bottom;
2145 | -webkit-transform: rotate3d(0, 0, 1, 45deg);
2146 | transform: rotate3d(0, 0, 1, 45deg);
2147 | opacity: 0;
2148 | }
2149 | to {
2150 | -webkit-transform-origin: right bottom;
2151 | transform-origin: right bottom;
2152 | -webkit-transform: none;
2153 | transform: none;
2154 | opacity: 1;
2155 | }
2156 | }
2157 |
2158 | .rotateInDownRight {
2159 | -webkit-animation-name: rotateInDownRight;
2160 | animation-name: rotateInDownRight;
2161 | }
2162 |
2163 | @-webkit-keyframes rotateInUpLeft {
2164 | from {
2165 | -webkit-transform-origin: left bottom;
2166 | transform-origin: left bottom;
2167 | -webkit-transform: rotate3d(0, 0, 1, 45deg);
2168 | transform: rotate3d(0, 0, 1, 45deg);
2169 | opacity: 0;
2170 | }
2171 | to {
2172 | -webkit-transform-origin: left bottom;
2173 | transform-origin: left bottom;
2174 | -webkit-transform: none;
2175 | transform: none;
2176 | opacity: 1;
2177 | }
2178 | }
2179 |
2180 | @keyframes rotateInUpLeft {
2181 | from {
2182 | -webkit-transform-origin: left bottom;
2183 | transform-origin: left bottom;
2184 | -webkit-transform: rotate3d(0, 0, 1, 45deg);
2185 | transform: rotate3d(0, 0, 1, 45deg);
2186 | opacity: 0;
2187 | }
2188 | to {
2189 | -webkit-transform-origin: left bottom;
2190 | transform-origin: left bottom;
2191 | -webkit-transform: none;
2192 | transform: none;
2193 | opacity: 1;
2194 | }
2195 | }
2196 |
2197 | .rotateInUpLeft {
2198 | -webkit-animation-name: rotateInUpLeft;
2199 | animation-name: rotateInUpLeft;
2200 | }
2201 |
2202 | @-webkit-keyframes rotateInUpRight {
2203 | from {
2204 | -webkit-transform-origin: right bottom;
2205 | transform-origin: right bottom;
2206 | -webkit-transform: rotate3d(0, 0, 1, -90deg);
2207 | transform: rotate3d(0, 0, 1, -90deg);
2208 | opacity: 0;
2209 | }
2210 | to {
2211 | -webkit-transform-origin: right bottom;
2212 | transform-origin: right bottom;
2213 | -webkit-transform: none;
2214 | transform: none;
2215 | opacity: 1;
2216 | }
2217 | }
2218 |
2219 | @keyframes rotateInUpRight {
2220 | from {
2221 | -webkit-transform-origin: right bottom;
2222 | transform-origin: right bottom;
2223 | -webkit-transform: rotate3d(0, 0, 1, -90deg);
2224 | transform: rotate3d(0, 0, 1, -90deg);
2225 | opacity: 0;
2226 | }
2227 | to {
2228 | -webkit-transform-origin: right bottom;
2229 | transform-origin: right bottom;
2230 | -webkit-transform: none;
2231 | transform: none;
2232 | opacity: 1;
2233 | }
2234 | }
2235 |
2236 | .rotateInUpRight {
2237 | -webkit-animation-name: rotateInUpRight;
2238 | animation-name: rotateInUpRight;
2239 | }
2240 |
2241 | @-webkit-keyframes rotateOut {
2242 | from {
2243 | -webkit-transform-origin: center;
2244 | transform-origin: center;
2245 | opacity: 1;
2246 | }
2247 | to {
2248 | -webkit-transform-origin: center;
2249 | transform-origin: center;
2250 | -webkit-transform: rotate3d(0, 0, 1, 200deg);
2251 | transform: rotate3d(0, 0, 1, 200deg);
2252 | opacity: 0;
2253 | }
2254 | }
2255 |
2256 | @keyframes rotateOut {
2257 | from {
2258 | -webkit-transform-origin: center;
2259 | transform-origin: center;
2260 | opacity: 1;
2261 | }
2262 | to {
2263 | -webkit-transform-origin: center;
2264 | transform-origin: center;
2265 | -webkit-transform: rotate3d(0, 0, 1, 200deg);
2266 | transform: rotate3d(0, 0, 1, 200deg);
2267 | opacity: 0;
2268 | }
2269 | }
2270 |
2271 | .rotateOut {
2272 | -webkit-animation-name: rotateOut;
2273 | animation-name: rotateOut;
2274 | }
2275 |
2276 | @-webkit-keyframes rotateOutDownLeft {
2277 | from {
2278 | -webkit-transform-origin: left bottom;
2279 | transform-origin: left bottom;
2280 | opacity: 1;
2281 | }
2282 | to {
2283 | -webkit-transform-origin: left bottom;
2284 | transform-origin: left bottom;
2285 | -webkit-transform: rotate3d(0, 0, 1, 45deg);
2286 | transform: rotate3d(0, 0, 1, 45deg);
2287 | opacity: 0;
2288 | }
2289 | }
2290 |
2291 | @keyframes rotateOutDownLeft {
2292 | from {
2293 | -webkit-transform-origin: left bottom;
2294 | transform-origin: left bottom;
2295 | opacity: 1;
2296 | }
2297 | to {
2298 | -webkit-transform-origin: left bottom;
2299 | transform-origin: left bottom;
2300 | -webkit-transform: rotate3d(0, 0, 1, 45deg);
2301 | transform: rotate3d(0, 0, 1, 45deg);
2302 | opacity: 0;
2303 | }
2304 | }
2305 |
2306 | .rotateOutDownLeft {
2307 | -webkit-animation-name: rotateOutDownLeft;
2308 | animation-name: rotateOutDownLeft;
2309 | }
2310 |
2311 | @-webkit-keyframes rotateOutDownRight {
2312 | from {
2313 | -webkit-transform-origin: right bottom;
2314 | transform-origin: right bottom;
2315 | opacity: 1;
2316 | }
2317 | to {
2318 | -webkit-transform-origin: right bottom;
2319 | transform-origin: right bottom;
2320 | -webkit-transform: rotate3d(0, 0, 1, -45deg);
2321 | transform: rotate3d(0, 0, 1, -45deg);
2322 | opacity: 0;
2323 | }
2324 | }
2325 |
2326 | @keyframes rotateOutDownRight {
2327 | from {
2328 | -webkit-transform-origin: right bottom;
2329 | transform-origin: right bottom;
2330 | opacity: 1;
2331 | }
2332 | to {
2333 | -webkit-transform-origin: right bottom;
2334 | transform-origin: right bottom;
2335 | -webkit-transform: rotate3d(0, 0, 1, -45deg);
2336 | transform: rotate3d(0, 0, 1, -45deg);
2337 | opacity: 0;
2338 | }
2339 | }
2340 |
2341 | .rotateOutDownRight {
2342 | -webkit-animation-name: rotateOutDownRight;
2343 | animation-name: rotateOutDownRight;
2344 | }
2345 |
2346 | @-webkit-keyframes rotateOutUpLeft {
2347 | from {
2348 | -webkit-transform-origin: left bottom;
2349 | transform-origin: left bottom;
2350 | opacity: 1;
2351 | }
2352 | to {
2353 | -webkit-transform-origin: left bottom;
2354 | transform-origin: left bottom;
2355 | -webkit-transform: rotate3d(0, 0, 1, -45deg);
2356 | transform: rotate3d(0, 0, 1, -45deg);
2357 | opacity: 0;
2358 | }
2359 | }
2360 |
2361 | @keyframes rotateOutUpLeft {
2362 | from {
2363 | -webkit-transform-origin: left bottom;
2364 | transform-origin: left bottom;
2365 | opacity: 1;
2366 | }
2367 | to {
2368 | -webkit-transform-origin: left bottom;
2369 | transform-origin: left bottom;
2370 | -webkit-transform: rotate3d(0, 0, 1, -45deg);
2371 | transform: rotate3d(0, 0, 1, -45deg);
2372 | opacity: 0;
2373 | }
2374 | }
2375 |
2376 | .rotateOutUpLeft {
2377 | -webkit-animation-name: rotateOutUpLeft;
2378 | animation-name: rotateOutUpLeft;
2379 | }
2380 |
2381 | @-webkit-keyframes rotateOutUpRight {
2382 | from {
2383 | -webkit-transform-origin: right bottom;
2384 | transform-origin: right bottom;
2385 | opacity: 1;
2386 | }
2387 | to {
2388 | -webkit-transform-origin: right bottom;
2389 | transform-origin: right bottom;
2390 | -webkit-transform: rotate3d(0, 0, 1, 90deg);
2391 | transform: rotate3d(0, 0, 1, 90deg);
2392 | opacity: 0;
2393 | }
2394 | }
2395 |
2396 | @keyframes rotateOutUpRight {
2397 | from {
2398 | -webkit-transform-origin: right bottom;
2399 | transform-origin: right bottom;
2400 | opacity: 1;
2401 | }
2402 | to {
2403 | -webkit-transform-origin: right bottom;
2404 | transform-origin: right bottom;
2405 | -webkit-transform: rotate3d(0, 0, 1, 90deg);
2406 | transform: rotate3d(0, 0, 1, 90deg);
2407 | opacity: 0;
2408 | }
2409 | }
2410 |
2411 | .rotateOutUpRight {
2412 | -webkit-animation-name: rotateOutUpRight;
2413 | animation-name: rotateOutUpRight;
2414 | }
2415 |
2416 | @-webkit-keyframes hinge {
2417 | 0% {
2418 | -webkit-transform-origin: top left;
2419 | transform-origin: top left;
2420 | -webkit-animation-timing-function: ease-in-out;
2421 | animation-timing-function: ease-in-out;
2422 | }
2423 | 20%,
2424 | 60% {
2425 | -webkit-transform: rotate3d(0, 0, 1, 80deg);
2426 | transform: rotate3d(0, 0, 1, 80deg);
2427 | -webkit-transform-origin: top left;
2428 | transform-origin: top left;
2429 | -webkit-animation-timing-function: ease-in-out;
2430 | animation-timing-function: ease-in-out;
2431 | }
2432 | 40%,
2433 | 80% {
2434 | -webkit-transform: rotate3d(0, 0, 1, 60deg);
2435 | transform: rotate3d(0, 0, 1, 60deg);
2436 | -webkit-transform-origin: top left;
2437 | transform-origin: top left;
2438 | -webkit-animation-timing-function: ease-in-out;
2439 | animation-timing-function: ease-in-out;
2440 | opacity: 1;
2441 | }
2442 | to {
2443 | -webkit-transform: translate3d(0, 700px, 0);
2444 | transform: translate3d(0, 700px, 0);
2445 | opacity: 0;
2446 | }
2447 | }
2448 |
2449 | @keyframes hinge {
2450 | 0% {
2451 | -webkit-transform-origin: top left;
2452 | transform-origin: top left;
2453 | -webkit-animation-timing-function: ease-in-out;
2454 | animation-timing-function: ease-in-out;
2455 | }
2456 | 20%,
2457 | 60% {
2458 | -webkit-transform: rotate3d(0, 0, 1, 80deg);
2459 | transform: rotate3d(0, 0, 1, 80deg);
2460 | -webkit-transform-origin: top left;
2461 | transform-origin: top left;
2462 | -webkit-animation-timing-function: ease-in-out;
2463 | animation-timing-function: ease-in-out;
2464 | }
2465 | 40%,
2466 | 80% {
2467 | -webkit-transform: rotate3d(0, 0, 1, 60deg);
2468 | transform: rotate3d(0, 0, 1, 60deg);
2469 | -webkit-transform-origin: top left;
2470 | transform-origin: top left;
2471 | -webkit-animation-timing-function: ease-in-out;
2472 | animation-timing-function: ease-in-out;
2473 | opacity: 1;
2474 | }
2475 | to {
2476 | -webkit-transform: translate3d(0, 700px, 0);
2477 | transform: translate3d(0, 700px, 0);
2478 | opacity: 0;
2479 | }
2480 | }
2481 |
2482 | .hinge {
2483 | -webkit-animation-name: hinge;
2484 | animation-name: hinge;
2485 | }
2486 |
2487 |
2488 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
2489 |
2490 | @-webkit-keyframes rollIn {
2491 | from {
2492 | opacity: 0;
2493 | -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
2494 | transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
2495 | }
2496 | to {
2497 | opacity: 1;
2498 | -webkit-transform: none;
2499 | transform: none;
2500 | }
2501 | }
2502 |
2503 | @keyframes rollIn {
2504 | from {
2505 | opacity: 0;
2506 | -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
2507 | transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
2508 | }
2509 | to {
2510 | opacity: 1;
2511 | -webkit-transform: none;
2512 | transform: none;
2513 | }
2514 | }
2515 |
2516 | .rollIn {
2517 | -webkit-animation-name: rollIn;
2518 | animation-name: rollIn;
2519 | }
2520 |
2521 |
2522 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
2523 |
2524 | @-webkit-keyframes rollOut {
2525 | from {
2526 | opacity: 1;
2527 | }
2528 | to {
2529 | opacity: 0;
2530 | -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
2531 | transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
2532 | }
2533 | }
2534 |
2535 | @keyframes rollOut {
2536 | from {
2537 | opacity: 1;
2538 | }
2539 | to {
2540 | opacity: 0;
2541 | -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
2542 | transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
2543 | }
2544 | }
2545 |
2546 | .rollOut {
2547 | -webkit-animation-name: rollOut;
2548 | animation-name: rollOut;
2549 | }
2550 |
2551 | @-webkit-keyframes zoomIn {
2552 | from {
2553 | opacity: 0;
2554 | -webkit-transform: scale3d(.3, .3, .3);
2555 | transform: scale3d(.3, .3, .3);
2556 | }
2557 | 50% {
2558 | opacity: 1;
2559 | }
2560 | }
2561 |
2562 | @keyframes zoomIn {
2563 | from {
2564 | opacity: 0;
2565 | -webkit-transform: scale3d(.3, .3, .3);
2566 | transform: scale3d(.3, .3, .3);
2567 | }
2568 | 50% {
2569 | opacity: 1;
2570 | }
2571 | }
2572 |
2573 | .zoomIn {
2574 | -webkit-animation-name: zoomIn;
2575 | animation-name: zoomIn;
2576 | }
2577 |
2578 | @-webkit-keyframes zoomInDown {
2579 | from {
2580 | opacity: 0;
2581 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
2582 | transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
2583 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2584 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2585 | }
2586 | 60% {
2587 | opacity: 1;
2588 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
2589 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
2590 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2591 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2592 | }
2593 | }
2594 |
2595 | @keyframes zoomInDown {
2596 | from {
2597 | opacity: 0;
2598 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
2599 | transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
2600 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2601 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2602 | }
2603 | 60% {
2604 | opacity: 1;
2605 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
2606 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
2607 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2608 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2609 | }
2610 | }
2611 |
2612 | .zoomInDown {
2613 | -webkit-animation-name: zoomInDown;
2614 | animation-name: zoomInDown;
2615 | }
2616 |
2617 | @-webkit-keyframes zoomInLeft {
2618 | from {
2619 | opacity: 0;
2620 | -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
2621 | transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
2622 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2623 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2624 | }
2625 | 60% {
2626 | opacity: 1;
2627 | -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
2628 | transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
2629 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2630 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2631 | }
2632 | }
2633 |
2634 | @keyframes zoomInLeft {
2635 | from {
2636 | opacity: 0;
2637 | -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
2638 | transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
2639 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2640 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2641 | }
2642 | 60% {
2643 | opacity: 1;
2644 | -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
2645 | transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
2646 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2647 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2648 | }
2649 | }
2650 |
2651 | .zoomInLeft {
2652 | -webkit-animation-name: zoomInLeft;
2653 | animation-name: zoomInLeft;
2654 | }
2655 |
2656 | @-webkit-keyframes zoomInRight {
2657 | from {
2658 | opacity: 0;
2659 | -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
2660 | transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
2661 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2662 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2663 | }
2664 | 60% {
2665 | opacity: 1;
2666 | -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
2667 | transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
2668 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2669 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2670 | }
2671 | }
2672 |
2673 | @keyframes zoomInRight {
2674 | from {
2675 | opacity: 0;
2676 | -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
2677 | transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
2678 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2679 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2680 | }
2681 | 60% {
2682 | opacity: 1;
2683 | -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
2684 | transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
2685 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2686 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2687 | }
2688 | }
2689 |
2690 | .zoomInRight {
2691 | -webkit-animation-name: zoomInRight;
2692 | animation-name: zoomInRight;
2693 | }
2694 |
2695 | @-webkit-keyframes zoomInUp {
2696 | from {
2697 | opacity: 0;
2698 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
2699 | transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
2700 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2701 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2702 | }
2703 | 60% {
2704 | opacity: 1;
2705 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
2706 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
2707 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2708 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2709 | }
2710 | }
2711 |
2712 | @keyframes zoomInUp {
2713 | from {
2714 | opacity: 0;
2715 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
2716 | transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
2717 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2718 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2719 | }
2720 | 60% {
2721 | opacity: 1;
2722 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
2723 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
2724 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2725 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2726 | }
2727 | }
2728 |
2729 | .zoomInUp {
2730 | -webkit-animation-name: zoomInUp;
2731 | animation-name: zoomInUp;
2732 | }
2733 |
2734 | @-webkit-keyframes zoomOut {
2735 | from {
2736 | opacity: 1;
2737 | }
2738 | 50% {
2739 | opacity: 0;
2740 | -webkit-transform: scale3d(.3, .3, .3);
2741 | transform: scale3d(.3, .3, .3);
2742 | }
2743 | to {
2744 | opacity: 0;
2745 | }
2746 | }
2747 |
2748 | @keyframes zoomOut {
2749 | from {
2750 | opacity: 1;
2751 | }
2752 | 50% {
2753 | opacity: 0;
2754 | -webkit-transform: scale3d(.3, .3, .3);
2755 | transform: scale3d(.3, .3, .3);
2756 | }
2757 | to {
2758 | opacity: 0;
2759 | }
2760 | }
2761 |
2762 | .zoomOut {
2763 | -webkit-animation-name: zoomOut;
2764 | animation-name: zoomOut;
2765 | }
2766 |
2767 | @-webkit-keyframes zoomOutDown {
2768 | 40% {
2769 | opacity: 1;
2770 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
2771 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
2772 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2773 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2774 | }
2775 | to {
2776 | opacity: 0;
2777 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
2778 | transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
2779 | -webkit-transform-origin: center bottom;
2780 | transform-origin: center bottom;
2781 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2782 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2783 | }
2784 | }
2785 |
2786 | @keyframes zoomOutDown {
2787 | 40% {
2788 | opacity: 1;
2789 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
2790 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
2791 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2792 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2793 | }
2794 | to {
2795 | opacity: 0;
2796 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
2797 | transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
2798 | -webkit-transform-origin: center bottom;
2799 | transform-origin: center bottom;
2800 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2801 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2802 | }
2803 | }
2804 |
2805 | .zoomOutDown {
2806 | -webkit-animation-name: zoomOutDown;
2807 | animation-name: zoomOutDown;
2808 | }
2809 |
2810 | @-webkit-keyframes zoomOutLeft {
2811 | 40% {
2812 | opacity: 1;
2813 | -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
2814 | transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
2815 | }
2816 | to {
2817 | opacity: 0;
2818 | -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
2819 | transform: scale(.1) translate3d(-2000px, 0, 0);
2820 | -webkit-transform-origin: left center;
2821 | transform-origin: left center;
2822 | }
2823 | }
2824 |
2825 | @keyframes zoomOutLeft {
2826 | 40% {
2827 | opacity: 1;
2828 | -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
2829 | transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
2830 | }
2831 | to {
2832 | opacity: 0;
2833 | -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
2834 | transform: scale(.1) translate3d(-2000px, 0, 0);
2835 | -webkit-transform-origin: left center;
2836 | transform-origin: left center;
2837 | }
2838 | }
2839 |
2840 | .zoomOutLeft {
2841 | -webkit-animation-name: zoomOutLeft;
2842 | animation-name: zoomOutLeft;
2843 | }
2844 |
2845 | @-webkit-keyframes zoomOutRight {
2846 | 40% {
2847 | opacity: 1;
2848 | -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
2849 | transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
2850 | }
2851 | to {
2852 | opacity: 0;
2853 | -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
2854 | transform: scale(.1) translate3d(2000px, 0, 0);
2855 | -webkit-transform-origin: right center;
2856 | transform-origin: right center;
2857 | }
2858 | }
2859 |
2860 | @keyframes zoomOutRight {
2861 | 40% {
2862 | opacity: 1;
2863 | -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
2864 | transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
2865 | }
2866 | to {
2867 | opacity: 0;
2868 | -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
2869 | transform: scale(.1) translate3d(2000px, 0, 0);
2870 | -webkit-transform-origin: right center;
2871 | transform-origin: right center;
2872 | }
2873 | }
2874 |
2875 | .zoomOutRight {
2876 | -webkit-animation-name: zoomOutRight;
2877 | animation-name: zoomOutRight;
2878 | }
2879 |
2880 | @-webkit-keyframes zoomOutUp {
2881 | 40% {
2882 | opacity: 1;
2883 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
2884 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
2885 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2886 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2887 | }
2888 | to {
2889 | opacity: 0;
2890 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
2891 | transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
2892 | -webkit-transform-origin: center bottom;
2893 | transform-origin: center bottom;
2894 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2895 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2896 | }
2897 | }
2898 |
2899 | @keyframes zoomOutUp {
2900 | 40% {
2901 | opacity: 1;
2902 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
2903 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
2904 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2905 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
2906 | }
2907 | to {
2908 | opacity: 0;
2909 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
2910 | transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
2911 | -webkit-transform-origin: center bottom;
2912 | transform-origin: center bottom;
2913 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2914 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
2915 | }
2916 | }
2917 |
2918 | .zoomOutUp {
2919 | -webkit-animation-name: zoomOutUp;
2920 | animation-name: zoomOutUp;
2921 | }
2922 |
2923 | @-webkit-keyframes slideInDown {
2924 | from {
2925 | -webkit-transform: translate3d(0, -100%, 0);
2926 | transform: translate3d(0, -100%, 0);
2927 | visibility: visible;
2928 | }
2929 | to {
2930 | -webkit-transform: translate3d(0, 0, 0);
2931 | transform: translate3d(0, 0, 0);
2932 | }
2933 | }
2934 |
2935 | @keyframes slideInDown {
2936 | from {
2937 | -webkit-transform: translate3d(0, -100%, 0);
2938 | transform: translate3d(0, -100%, 0);
2939 | visibility: visible;
2940 | }
2941 | to {
2942 | -webkit-transform: translate3d(0, 0, 0);
2943 | transform: translate3d(0, 0, 0);
2944 | }
2945 | }
2946 |
2947 | .slideInDown {
2948 | -webkit-animation-name: slideInDown;
2949 | animation-name: slideInDown;
2950 | }
2951 |
2952 | @-webkit-keyframes slideInLeft {
2953 | from {
2954 | -webkit-transform: translate3d(-100%, 0, 0);
2955 | transform: translate3d(-100%, 0, 0);
2956 | visibility: visible;
2957 | }
2958 | to {
2959 | -webkit-transform: translate3d(0, 0, 0);
2960 | transform: translate3d(0, 0, 0);
2961 | }
2962 | }
2963 |
2964 | @keyframes slideInLeft {
2965 | from {
2966 | -webkit-transform: translate3d(-100%, 0, 0);
2967 | transform: translate3d(-100%, 0, 0);
2968 | visibility: visible;
2969 | }
2970 | to {
2971 | -webkit-transform: translate3d(0, 0, 0);
2972 | transform: translate3d(0, 0, 0);
2973 | }
2974 | }
2975 |
2976 | .slideInLeft {
2977 | -webkit-animation-name: slideInLeft;
2978 | animation-name: slideInLeft;
2979 | }
2980 |
2981 | @-webkit-keyframes slideInRight {
2982 | from {
2983 | -webkit-transform: translate3d(100%, 0, 0);
2984 | transform: translate3d(100%, 0, 0);
2985 | visibility: visible;
2986 | }
2987 | to {
2988 | -webkit-transform: translate3d(0, 0, 0);
2989 | transform: translate3d(0, 0, 0);
2990 | }
2991 | }
2992 |
2993 | @keyframes slideInRight {
2994 | from {
2995 | -webkit-transform: translate3d(100%, 0, 0);
2996 | transform: translate3d(100%, 0, 0);
2997 | visibility: visible;
2998 | }
2999 | to {
3000 | -webkit-transform: translate3d(0, 0, 0);
3001 | transform: translate3d(0, 0, 0);
3002 | }
3003 | }
3004 |
3005 | .slideInRight {
3006 | -webkit-animation-name: slideInRight;
3007 | animation-name: slideInRight;
3008 | }
3009 |
3010 | @-webkit-keyframes slideInUp {
3011 | from {
3012 | -webkit-transform: translate3d(0, 100%, 0);
3013 | transform: translate3d(0, 100%, 0);
3014 | visibility: visible;
3015 | }
3016 | to {
3017 | -webkit-transform: translate3d(0, 0, 0);
3018 | transform: translate3d(0, 0, 0);
3019 | }
3020 | }
3021 |
3022 | @keyframes slideInUp {
3023 | from {
3024 | -webkit-transform: translate3d(0, 100%, 0);
3025 | transform: translate3d(0, 100%, 0);
3026 | visibility: visible;
3027 | }
3028 | to {
3029 | -webkit-transform: translate3d(0, 0, 0);
3030 | transform: translate3d(0, 0, 0);
3031 | }
3032 | }
3033 |
3034 | .slideInUp {
3035 | -webkit-animation-name: slideInUp;
3036 | animation-name: slideInUp;
3037 | }
3038 |
3039 | @-webkit-keyframes slideOutDown {
3040 | from {
3041 | -webkit-transform: translate3d(0, 0, 0);
3042 | transform: translate3d(0, 0, 0);
3043 | }
3044 | to {
3045 | visibility: hidden;
3046 | -webkit-transform: translate3d(0, 100%, 0);
3047 | transform: translate3d(0, 100%, 0);
3048 | }
3049 | }
3050 |
3051 | @keyframes slideOutDown {
3052 | from {
3053 | -webkit-transform: translate3d(0, 0, 0);
3054 | transform: translate3d(0, 0, 0);
3055 | }
3056 | to {
3057 | visibility: hidden;
3058 | -webkit-transform: translate3d(0, 100%, 0);
3059 | transform: translate3d(0, 100%, 0);
3060 | }
3061 | }
3062 |
3063 | .slideOutDown {
3064 | -webkit-animation-name: slideOutDown;
3065 | animation-name: slideOutDown;
3066 | }
3067 |
3068 | @-webkit-keyframes slideOutLeft {
3069 | from {
3070 | -webkit-transform: translate3d(0, 0, 0);
3071 | transform: translate3d(0, 0, 0);
3072 | }
3073 | to {
3074 | visibility: hidden;
3075 | -webkit-transform: translate3d(-100%, 0, 0);
3076 | transform: translate3d(-100%, 0, 0);
3077 | }
3078 | }
3079 |
3080 | @keyframes slideOutLeft {
3081 | from {
3082 | -webkit-transform: translate3d(0, 0, 0);
3083 | transform: translate3d(0, 0, 0);
3084 | }
3085 | to {
3086 | visibility: hidden;
3087 | -webkit-transform: translate3d(-100%, 0, 0);
3088 | transform: translate3d(-100%, 0, 0);
3089 | }
3090 | }
3091 |
3092 | .slideOutLeft {
3093 | -webkit-animation-name: slideOutLeft;
3094 | animation-name: slideOutLeft;
3095 | }
3096 |
3097 | @-webkit-keyframes slideOutRight {
3098 | from {
3099 | -webkit-transform: translate3d(0, 0, 0);
3100 | transform: translate3d(0, 0, 0);
3101 | }
3102 | to {
3103 | visibility: hidden;
3104 | -webkit-transform: translate3d(100%, 0, 0);
3105 | transform: translate3d(100%, 0, 0);
3106 | }
3107 | }
3108 |
3109 | @keyframes slideOutRight {
3110 | from {
3111 | -webkit-transform: translate3d(0, 0, 0);
3112 | transform: translate3d(0, 0, 0);
3113 | }
3114 | to {
3115 | visibility: hidden;
3116 | -webkit-transform: translate3d(100%, 0, 0);
3117 | transform: translate3d(100%, 0, 0);
3118 | }
3119 | }
3120 |
3121 | .slideOutRight {
3122 | -webkit-animation-name: slideOutRight;
3123 | animation-name: slideOutRight;
3124 | }
3125 |
3126 | @-webkit-keyframes slideOutUp {
3127 | from {
3128 | -webkit-transform: translate3d(0, 0, 0);
3129 | transform: translate3d(0, 0, 0);
3130 | }
3131 | to {
3132 | visibility: hidden;
3133 | -webkit-transform: translate3d(0, -100%, 0);
3134 | transform: translate3d(0, -100%, 0);
3135 | }
3136 | }
3137 |
3138 | @keyframes slideOutUp {
3139 | from {
3140 | -webkit-transform: translate3d(0, 0, 0);
3141 | transform: translate3d(0, 0, 0);
3142 | }
3143 | to {
3144 | visibility: hidden;
3145 | -webkit-transform: translate3d(0, -100%, 0);
3146 | transform: translate3d(0, -100%, 0);
3147 | }
3148 | }
3149 |
3150 | .slideOutUp {
3151 | -webkit-animation-name: slideOutUp;
3152 | animation-name: slideOutUp;
3153 | }
--------------------------------------------------------------------------------