diff --git a/README.md b/README.md index 1154c8f..b73906f 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -# Hellohao图床 - 全新响应式UI +# Hellohao图床 - 强大的图像托管服务程序 ![Visual Studio Marketplace Rating (Stars)](https://img.shields.io/visual-studio-marketplace/stars/ritwickdey.LiveServer?style=flat-square) ![https://img.shields.io/badge/license-AGPL-blue.svg?style=flat-square](https://img.shields.io/badge/license-AGPL-blue.svg?longCache=true&style=flat-square) ![https://img.shields.io/badge/language-java-orange.svg?style=flat-square](https://img.shields.io/badge/language-java-yellow.svg?longCache=true&style=popout-square) -> 这是一个基于多家对象存储源的SpringBoot开源图床项目。 -> 本项目使用 Spring Boot 搭建, 针对用户更方便的管理自己的图片管理拓展功能, 支持对接`本地`、`网易`,`阿里`,`又拍`,`七牛`、`腾讯`、`FTP`等多家对象存储. +> 这是一个基于多家对象存储源的SpringBoot开源图片托管程序。 +> 本项目使用 Spring Boot 搭建, 针对用户更方便的管理自己的图片管理拓展功能, 支持对接`本地`、`网易`,`阿里`,`又拍`,`七牛`、`腾讯`、`FTP`、`u-file`,`B2`等多家对象存储. > 后台对用户管理。 > 支持配置多家存储源。 > 用户注册邮箱验证,以及后台配置邮箱服务器。 @@ -13,9 +13,11 @@ ## 主要功能支持: +- 多主题支持:炫酷壁纸、简约蓝白 - 支持 图片拖拽、截图软件直接(Ctrl+V)和图片URL地址上传。 -- 支持对接本地、网易、阿里、又拍、七牛、腾讯、FTP等各大对象存储平台。 +- 支持对接本地、网易、阿里、又拍、七牛、腾讯、FTP、u-file、B2等各大对象存储平台。 - 支持图片定期暂存(到期自动删除) +- 支持画廊分享模式(用户可把自己当前上传的图片以图片集的形式批量分享给好友) - 支持上传者IP记录,并可配置IP黑名单操作 - 支持链接生成二维码。 - 支持开启/关闭API接口。 @@ -25,129 +27,36 @@ - 邮箱注册激活。 - 站点样式设置和上传规则配置等。 -主站地址: [http://tc.hellohao.cn/](http://tc.hellohao.cn/) +主站地址: [http://tbed.hellohao.cn/](http://tbed.hellohao.cn/) -体验地址(用户名/密码均为admin):[http://129.28.173.126:8088/](http://129.28.173.126:8088/) +文档地址: [http://tbed.hellohao.cn/doc](http://tbed.hellohao.cn/doc) -文档地址: [http://doc.wwery.com/](http://doc.wwery.com/) - -编译包下载: [https://github.com/Hello-hao/Tbed/releases/](https://github.com/Hello-hao/Tbed/releases/) - -捐赠列表:[http://doc.wwery.com/#/reward?id=捐赠者名单](http://doc.wwery.com/#/reward?id=捐赠者名单) +开源版编译包下载(内部版请前往主站获取): [https://github.com/Hello-hao/Tbed/releases/](https://github.com/Hello-hao/Tbed/releases/) 全套部署视频教程:[https://www.bilibili.com/video/av79137056/](https://www.bilibili.com/video/av79137056/) ## 系统预览 -![Hellohao.png](http://cdn.wwery.com/Hellohao/6071c0825062730.png) - -![Hellohao2.png](http://cdn.wwery.com/Hellohao/eeeed0825062727.png) +![Hellohao/dec2d0616104505.png](http://cdn.wwery.com/Hellohao/dec2d0616104505.png) ![图床后台管理.png](http://cdn.wwery.com/Hellohao/c208e0825054822.png) ![图床后台管理2.png](http://cdn.wwery.com/Hellohao/6c7690825054822.png) ![图床后台管理3.png](http://cdn.wwery.com/Hellohao/2a79b0825054822.png) ![图床后台管理4.png](http://cdn.wwery.com/Hellohao/5c1800825054824.png) -## 更新日志 - -**2019-11-18** - -√ 增加上传者ip记录 - -√ 增加临时期限照片显示。 - -√ 加固系统安全性验证,防止一些非法操作。 - -√ 优化后台上传图片算法。 - -#### 修复 - -修复上传时总是提示非法调用问题 -修复系统部署的严重BUG -修复上传者IP地址显示准确问题 -修复注册用户BUG - -#### 注意: - -- 如果你的图床已经在使用了。直接执行 `patch.sql` 补丁sql即可,不用清空之前的数据。 -- 如果你是2019年09月份之前的版本,或者第一次安装本程序需要执行 `picturebed.sql` 完成sql文件 - - ## 运行环境 - JDK 1.8 -- MySQL +- MySQL5.5+ -## 一:项目编译 -(如果你的目的是为了部署自己的图床项目,可以下滑直接用编译包按照部署教程,直接可以部署。) +## 部署 -### 下载项目 - -```git -git clone https://github.com/Hello-hao/Tbed.git -``` - -### 导入项目 - -使用自己的 Intellij IDEA 或者 Eclipse 均可. - -### 导入数据库 - -创建数据库`picturebed`, 字符集选择 `utf8`, 排序规则选择 `utf8_general_ci`. -导入picturebed.sql - -### 配置文件 +### 修改配置文件 打开 `application.properties` 修改 `MySQL` 和 `服务器端口` 等连接信息. -```properties -#数据库账号 -spring.datasource.username=root -#数据库密码 -spring.datasource.password=root -#数据库链接地址 -spring.datasource.url=jdbc:mysql://localhost:3306/picturebed?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 -#端口 -server.port=8088 -#鉴黄周期表达式 下方表达式为每天七点半执行 -#不懂请勿乱修改。具体可以参考官方文档http://doc.wwery.com -Expression=0 30 04 * * ? - - -#下边的配置项不需要修改。 -mybatis.configuration.map-underscore-to-camel-case=true -mybatis.mapper-locations=classpath:mapper/*.xml -logging.level.cn.hellohao.dao=debug -spring.jackson.date-format=yyyy-MM-dd HH:mm:ss -spring.jackson.time-zone=GMT+8 -spring.datasource.driver-class-name=com.mysql.jdbc.Driver -spring.datasource.type=com.alibaba.druid.pool.DruidDataSource -spring.thymeleaf.cache=false -multipart.maxFileSize=10240KB -multipart.maxRequestSize=10240KB -spring.thymeleaf.mode = LEGACYHTML5 -spring.http.multipart.location=/data/upload_tmp - -``` - -### 启动项目 - -在完成了上述步骤后,找到 TbedApplication 启动类, 启动即可. - -初始用户名:admin -初始邮箱:admin -初始密码`admin` - -启动后访问地址为:http://localhost:8088 , `8088`就是你配置`server.port=8088`的端口. - - - -## 二:编译包直接部署 - -> **项目搭建部署教程:** [**http://www.hellohao.cn/?p=201**](http://www.hellohao.cn/?p=201 "点击查看搭建文档") - ### 部署 前提是你的服务器必须要有`JDK1.8`环境,和`mysql`数据库。 @@ -157,8 +66,6 @@ spring.http.multipart.location=/data/upload_tmp yum install java-1.8* ``` -如果你是宝塔环境,也可以在应用商店安装一个`Tomcat8`因该是自带JDK1.8环境。 - 把`Tbed.jar`和`application.properties`放到服务器你想存放的目录比如`/home`,注意这两个文件必须要在同一目录下不能分开。 依次运行如下命令: @@ -168,23 +75,32 @@ cd /home java -jar Tbed.jar ``` -然后访问`http://服务器IP:8088/`即可。 + +### 启动项目 + +启动后访问地址为:http://localhost:8088 , `8088`就是你配置`server.port=8088`的端口. + +初始用户名:admin +初始邮箱:admin +初始密码`admin` + + 注意:上边的`/home`是你的jar包和application.properties文件放的目录。 项目运行起来不要关闭xshell窗口,否则项目将不能访问。可以使用一些后台命令把项目锁定后台。如`nohup`或`screen`,推荐使用`screen` ### PC客户端 -![khd.gif](http://cdn.wwery.com/Hellohao/b1bb70927045346.gif) - -如果你想让自己的图床拥有自己的客户端,可以加下方群,联系群主帮你对接(前提是你使用的是Hellohao图床程序搭建的网站。) +作者精力不够,工作繁忙,暂停更新 ### 声明 -本程序免费提供给个人用户使用,未经允许不得作为盈利商业使用,如果你想商用,请先与我们联系,分享你的利益。 +本程序免费提供给个人用户使用,未经允许不得作为盈利商业使用,如果你想商用或程序定制,请先与我们联系,分享你的利益。 +源码仅供感兴趣的开发者做开发逻辑参考,不得在未经开发者同意的情况下以他人名义修改并发布使用编译包。 +如果你想个人修改并使用我的源码,请保留原作者的版权,并开源你修改过的源码。 ### 反馈交流 - **如果你遇到BUG可以去我的博客反馈** +**如果你遇到BUG可以去我的博客反馈** Hellohao博客: [http://www.hellohao.cn/](http://www.hellohao.cn/) 欢迎加入Hellohao开发者交流群,群聊号码:**864800972** @@ -193,4 +109,5 @@ Hellohao博客: [http://www.hellohao.cn/](http://www.hellohao.cn/) **如果你也支持Hellohao图床,可以请我喝杯咖啡。我会持续更新Hellohao图床** -![](http://cdn.wwery.com/Hellohao/df2710722111702.jpg) +**捐赠地址:** [**http://tbed.hellohao.cn/pay**](http://tbed.hellohao.cn/pay) + diff --git a/pom.xml b/pom.xml index 4a2fe48..e50457b 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,7 @@ 1.8 + 9.0.30 springboot @@ -68,6 +69,12 @@ java-sdk 4.1.2 + + + org.apache.commons + commons-text + 1.8 + com.qiniu @@ -100,7 +107,6 @@ 4.5.16 - org.quartz-scheduler diff --git a/sql/picturebed.sql b/sql/picturebed.sql index 0125012..42537de 100644 --- a/sql/picturebed.sql +++ b/sql/picturebed.sql @@ -11,12 +11,24 @@ Target Server Version : 50720 File Encoding : 65001 - Date: 07/11/2019 21:25:39 + Date: 15/03/2021 10:08:10 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; +-- ---------------------------- +-- Table structure for album +-- ---------------------------- +DROP TABLE IF EXISTS `album`; +CREATE TABLE `album` ( + `albumkey` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `albumtitle` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `createdate` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `userid` int(10) NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + -- ---------------------------- -- Table structure for code -- ---------------------------- @@ -37,26 +49,27 @@ CREATE TABLE `config` ( `sourcekey` int(4) NULL DEFAULT NULL, `emails` int(4) NULL DEFAULT NULL COMMENT '邮箱配置', `webname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '网站名', - `explain` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '首页左下角说明', - `video` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '视频地址', + `explain` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `video` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `backtype` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '背景类型', - `links` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备案号', - `notice` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公告', - `baidu` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '百度统计', - `domain` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '站点域名', - `background1` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '首页背景图', - `background2` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '上传页面背景图', + `links` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `notice` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `baidu` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `domain` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `background1` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `background2` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `sett` int(2) NOT NULL COMMENT '首页样式', - `webms` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `webkeywords` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, - `webfavicons` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `webms` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `webkeywords` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `webfavicons` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `theme` int(4) NULL DEFAULT 1 COMMENT '主题', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of config -- ---------------------------- -INSERT INTO `config` VALUES (1, 7, 1, 'Hellohao', '网站由JAVA语言编写应用SpringBoot框架开发,前端全部组件由BootStrap/Layui框架编写。由作者个人更新维护,后期会加入更全面的功能供大家使用,如有BUG请与我反馈。', 'https://hellohao-cloud.oss-cn-beijing.aliyuncs.com/Pexels.mp4', '1', 'Hellohao开发制作', '也许...|这将是最好用的图床', 'console.log(\'百度统计JS代码\');', 'http://127.0.0.1:8088', 'https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1565769264&di=74d809d6cfae81bbab83bf9d573d8f9a&src=http://pic17.nipic.com/20110917/7420038_160826355111_2.jpg', 'https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1565769264&di=74d809d6cfae81bbab83bf9d573d8f9a&src=http://pic17.nipic.com/20110917/7420038_160826355111_2.jpg', 1, NULL, NULL, NULL); +INSERT INTO `config` VALUES (1, 9, 1, 'Hellohao', '网站由JAVA语言编写应用SpringBoot框架开发,前端全部组件由BootStrap/Layui框架编写。由作者个人更新维护,感谢使用者的支持。', '', '1', '© 2019 Hellohao - All Rights Reserved - Collect from Hellohao博客', '也许...|这将是最好用的图床', 'console.log(\'百度统计JS代码\');', 'http://127.0.0.1:8088', 'https://s1.ax1x.com/2020/05/26/tPM6qU.jpg', '', 1, '', '', '', 1); -- ---------------------------- -- Table structure for emailconfig @@ -86,13 +99,24 @@ CREATE TABLE `group` ( `id` int(255) NOT NULL AUTO_INCREMENT, `groupname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '组名称', `keyid` int(255) NULL DEFAULT NULL, + `usertype` int(255) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of group -- ---------------------------- -INSERT INTO `group` VALUES (1, '默认群组', 5); +INSERT INTO `group` VALUES (1, '默认群组', 5, 0); + +-- ---------------------------- +-- Table structure for imgandalbum +-- ---------------------------- +DROP TABLE IF EXISTS `imgandalbum`; +CREATE TABLE `imgandalbum` ( + `imgname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `albumkey` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `notes` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT ' ' +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for imgdata @@ -108,8 +132,11 @@ CREATE TABLE `imgdata` ( `abnormal` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `source` int(2) NULL DEFAULT NULL COMMENT '存储源', `imgtype` int(2) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + `explains` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `md5key` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + INDEX `index_md5key_url`(`md5key`, `imgurl`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 58 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compressed; -- ---------------------------- -- Table structure for imgreview @@ -128,7 +155,7 @@ CREATE TABLE `imgreview` ( -- ---------------------------- -- Records of imgreview -- ---------------------------- -INSERT INTO `imgreview` VALUES (1, NULL, NULL, NULL, 0, 0); +INSERT INTO `imgreview` VALUES (1, '', '', '', 0, 0); -- ---------------------------- -- Table structure for keys @@ -150,13 +177,13 @@ CREATE TABLE `keys` ( -- ---------------------------- INSERT INTO `keys` VALUES (1, '', '', '', '', '', 1); INSERT INTO `keys` VALUES (2, '', '', '', '', '', 2); -INSERT INTO `keys` VALUES (3, '', '', '0', '', '', 3); -INSERT INTO `keys` VALUES (4, '', '', '', '', '', 4); +INSERT INTO `keys` VALUES (3, '1', '1', '0', '1', 'http://127.0.0.1', 3); +INSERT INTO `keys` VALUES (4, '', '', '0', '', '', 4); INSERT INTO `keys` VALUES (5, '0', '0', '0', '0', '0', 5); INSERT INTO `keys` VALUES (6, '', '', '', '', '', 6); -INSERT INTO `keys` VALUES (7, '', '', '', '', '', 7); -INSERT INTO `keys` VALUES (8, '', '', '', '', '', 8); -INSERT INTO `keys` VALUES (9, '', '', '', '', '', 9); +INSERT INTO `keys` VALUES (7, '1', '1', '127.0.0.1:21', '', 'http://127.0.0.1', 7); +INSERT INTO `keys` VALUES (8, '111', '222', '0', '333', 'http://127.0.0.1/', 8); +INSERT INTO `keys` VALUES (9, 'test', 'test', '123', 'testimg', 'test', 9); INSERT INTO `keys` VALUES (10, '0', '', '0', '0', '0', 10); -- ---------------------------- @@ -199,13 +226,14 @@ CREATE TABLE `uploadconfig` ( `api` int(2) NOT NULL COMMENT '开启api', `visitormemory` int(10) NULL DEFAULT NULL COMMENT '游客限制大小', `usermemory` int(10) NULL DEFAULT 0 COMMENT '用户默认大小', + `blacklist` varchar(4000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of uploadconfig -- ---------------------------- -INSERT INTO `uploadconfig` VALUES (1, 3, 5, 1, 5, 'gif,jpg,jpeg,bmp,png', 1, 1, 1, 500, 1024); +INSERT INTO `uploadconfig` VALUES (1, 3, 10, 1, 5, 'gif,jpg,jpeg,bmp,png', 1, 0, 1, 500, 1024, ''); -- ---------------------------- -- Table structure for user @@ -215,7 +243,7 @@ CREATE TABLE `user` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键', `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名', `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码', - `email` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '邮箱', + `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `birthder` date NULL DEFAULT NULL COMMENT '注册时间', `level` int(10) NULL DEFAULT NULL COMMENT '等级', `uid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户唯一标识', @@ -223,12 +251,12 @@ CREATE TABLE `user` ( `memory` int(10) NULL DEFAULT NULL COMMENT '用户内存大小', `groupid` int(255) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of user -- ---------------------------- -INSERT INTO `user` VALUES (1, 'admin', 'YWRtaW4=', 'admin', '2019-06-12', 2, 'admin', 1, 1024, 1); +INSERT INTO `user` VALUES (1, 'admin', 'YWRtaW4=', 'admin', '2019-06-12', 2, '6dfbc6d4063b484e97955148dbeab429', 1, 1024, 1); -- ---------------------------- -- Table structure for usergroup diff --git a/src/main/java/cn/hellohao/TbedApplication.java b/src/main/java/cn/hellohao/TbedApplication.java index 917c34e..a953294 100644 --- a/src/main/java/cn/hellohao/TbedApplication.java +++ b/src/main/java/cn/hellohao/TbedApplication.java @@ -7,6 +7,7 @@ import cn.hellohao.utils.Print; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.MultipartConfigFactory; +import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @@ -19,6 +20,7 @@ import java.util.Scanner; @SpringBootApplication @Configuration +@ServletComponentScan @EnableTransactionManagement(proxyTargetClass = true) public class TbedApplication { @@ -37,6 +39,8 @@ public static void main(String[] args) { factory.setMaxFileSize("102400KB"); // KB,MB /// 总上传数据大小 factory.setMaxRequestSize("102400KB"); + //factory.setLocation("/tmp"); + return factory.createMultipartConfig(); } diff --git a/src/main/java/cn/hellohao/controller/AdminController.java b/src/main/java/cn/hellohao/controller/AdminController.java index 274b115..648a6ce 100644 --- a/src/main/java/cn/hellohao/controller/AdminController.java +++ b/src/main/java/cn/hellohao/controller/AdminController.java @@ -3,6 +3,7 @@ package cn.hellohao.controller; import cn.hellohao.pojo.*; import cn.hellohao.pojo.vo.PageResultBean; import cn.hellohao.service.*; +import cn.hellohao.service.impl.AlbumServiceI; import cn.hellohao.service.impl.ImgServiceImpl; import cn.hellohao.service.impl.UserServiceImpl; import cn.hellohao.utils.*; @@ -45,10 +46,16 @@ public class AdminController { private UploadConfigService uploadConfigService; @Autowired private CodeService codeService; - + @Autowired + private ImgAndAlbumService imgAndAlbumService; + @Autowired + private AlbumService albumService; + @Autowired + AlbumServiceI albumServiceI; @RequestMapping(value = "/goadmin") public String goadmin1(HttpSession session, Model model, HttpServletRequest request) { + Config config = configService.getSourceype(); User user = (User) session.getAttribute("user"); UploadConfig uploadConfig = uploadConfigService.getUpdateConfig(); Integer usermemory = imgService.getusermemory(user.getId()); @@ -65,7 +72,7 @@ public class AdminController { model.addAttribute("levels", user.getLevel()); model.addAttribute("username", user.getUsername()); model.addAttribute("api", uploadConfig.getApi()); - + model.addAttribute("config", config); model.addAttribute("memory",u.getMemory());//单位M if(usermemory==null){ model.addAttribute("usermemory", 0);//单位M @@ -102,7 +109,6 @@ public class AdminController { model.addAttribute("sysetmname",sysetmname); model.addAttribute("isarch", isarch); model.addAttribute("jdk", jdk); - //空间大小 UploadConfig uploadConfig = uploadConfigService.getUpdateConfig(); Integer usermemory = imgService.getusermemory(u.getId()); @@ -125,7 +131,6 @@ public class AdminController { model.addAttribute("usermemory", 0);//单位M }else{ float d = (float) (Math.round((usermemory/1024.0F) * 100.0) / 100.0); - //Print.Normal(); model.addAttribute("usermemory", d);//单位M } } @@ -147,8 +152,9 @@ public class AdminController { if(uploadConfig.getIsupdate()!=1){ jsonObject.put("VisitorUpload", 0);//是否禁用了游客上传 }else{ + Integer temp = imgService.getusermemory(0); jsonObject.put("VisitorUpload", uploadConfig.getIsupdate());//是否禁用了游客上传 - jsonObject.put("UsedSize", (imgService.getusermemory(0)/1024));//访客已用大小 + jsonObject.put("UsedSize", (temp == null ? 0 : temp/1024));//访客已用大小 jsonObject.put("VisitorMemory", uploadConfig.getVisitormemory());//访客共大小 } return jsonObject.toString(); @@ -177,9 +183,13 @@ public class AdminController { if (u.getLevel() > 1) { if (selecttype == 1) { images = imgService.selectimg(img); - } else { + } else if(selecttype == 2) { img.setUserid(u.getId()); images = imgService.selectimg(img); + }else{ + img.setUserid(u.getId()); + img.setSelecttype(3); + images = imgService.selectimg(img); } } else { img.setUserid(u.getId()); @@ -189,8 +199,6 @@ public class AdminController { return new PageResultBean<>(rolePageInfo.getTotal(), rolePageInfo.getList()); } - - @RequestMapping(value = "/selectusertable") @ResponseBody public Map selectByFy12(HttpSession session, @RequestParam(required = false, defaultValue = "1") int page, @@ -216,19 +224,12 @@ public class AdminController { @PostMapping("/deleimg") @ResponseBody - public String deleimg(HttpSession session, Integer id, Integer sourcekey) { + public String deleimg(HttpSession session, Integer id, Integer sourcekey,String imgname) { JSONObject jsonObject = new JSONObject(); User u = (User) session.getAttribute("user"); Images images = imgService.selectByPrimaryKey(id); Keys key = keysService.selectKeys(sourcekey); Integer Sourcekey = GetCurrentSource.GetSource(u.getId()); - Boolean b =false; - if(Sourcekey==5){ - b =true; - }else{ - b = StringUtils.doNull(Sourcekey,key);//判断对象是否有空值 - } - if(b){ ImgServiceImpl de = new ImgServiceImpl(); if (key.getStorageType() == 1) { de.delect(key, images.getImgname()); @@ -244,57 +245,53 @@ public class AdminController { de.delectCOS(key, images.getImgname()); }else if (key.getStorageType() == 7) { de.delectFTP(key, images.getImgname()); + }else if (key.getStorageType() == 8) { + de.delectUFile(key, images.getImgname()); }else { System.err.println("未获取到对象存储参数,删除失败。"); } Integer ret = imgService.deleimg(id); + if(ret>0){ imgAndAlbumService.deleteImgAndAlbum(imgname);} Integer count = 0; if (ret > 0) { jsonObject.put("usercount", imgService.countimg(u.getId())); jsonObject.put("count", imgService.counts(null)); count = 1; + imgAndAlbumService.deleteImgAndAlbum(imgname);//关联表删除关于这张照片的所有记录 } else { count = 0; } jsonObject.put("val", count); - }else{ - jsonObject.put("val", 0); - } return jsonObject.toString(); } @PostMapping("/deleallimg") @ResponseBody - public String deleallimg(HttpSession session, @RequestParam("ids[]") Integer[] ids) { + public String deleallimg(HttpSession session, @RequestParam("ids[]") Integer[] ids,@RequestParam("sources[]") Integer[] sources, + @RequestParam("imgnames[]") String[] imgnames) { JSONObject jsonObject = new JSONObject(); Integer v = 0; ImgServiceImpl de = new ImgServiceImpl(); User u = (User) session.getAttribute("user"); Integer Sourcekey = GetCurrentSource.GetSource(u.getId()); for (int i = 0; i < ids.length; i++) { - Images images = imgService.selectByPrimaryKey(ids[i]); - Keys key = keysService.selectKeys(images.getSource()); - Boolean b =false; - if(Sourcekey==5){ - b =true; - }else{ - b = StringUtils.doNull(Sourcekey,key);//判断对象是否有空值 - } - if(b){ + Keys key = keysService.selectKeys(sources[i]); if (key.getStorageType() == 1) { - de.delect(key, images.getImgname()); + de.delect(key, imgnames[i]); } else if (key.getStorageType() == 2) { - de.delectOSS(key, images.getImgname()); + de.delectOSS(key, imgnames[i]); } else if (key.getStorageType() == 3) { - de.delectUSS(key, images.getImgname()); + de.delectUSS(key, imgnames[i]); } else if (key.getStorageType() == 4) { - de.delectKODO(key, images.getImgname()); + de.delectKODO(key, imgnames[i]); } else if (key.getStorageType() == 5) { - LocUpdateImg.deleteLOCImg(images.getImgname()); + LocUpdateImg.deleteLOCImg(imgnames[i]); }else if (key.getStorageType() == 6) { - de.delectCOS(key, images.getImgname()); + de.delectCOS(key, imgnames[i]); }else if (key.getStorageType() == 7) { - de.delectFTP(key, images.getImgname()); + de.delectFTP(key, imgnames[i]); + }else if (key.getStorageType() == 8) { + de.delectUFile(key, imgnames[i]); }else { System.err.println("未获取到对象存储参数,删除失败。"); } @@ -303,10 +300,8 @@ public class AdminController { v = 0; } else { v = 1; + imgAndAlbumService.deleteImgAndAlbum(imgnames[i]);//关联表删除关于这张照片的所有记录 } - }else { - v = 0; - } } jsonObject.put("val", v); jsonObject.put("usercount", imgService.countimg(u.getId())); @@ -344,7 +339,6 @@ public class AdminController { session.removeAttribute("user"); session.invalidate(); } - // -1 用户名重复 return jsonArray.toString(); } //进入api @@ -359,7 +353,6 @@ public class AdminController { return "admin/api"; } - @PostMapping(value = "/kuorong") @ResponseBody public String kuorong(HttpSession session, String codestring) { @@ -397,4 +390,61 @@ public class AdminController { } + @RequestMapping(value = "/albumlist") + public String albumlist(HttpSession session, Model model) { + Config config = configService.getSourceype(); + User u = (User) session.getAttribute("user"); + model.addAttribute("config", config); + model.addAttribute("level", u.getLevel()); + model.addAttribute("email", u.getEmail()); + model.addAttribute("loginid", 100); + + return "admin/albumlist"; + } + + @PostMapping("/getAlbumURLList") + @ResponseBody + public Map getAlbumURLList (HttpSession session,@RequestParam(required = false, defaultValue = "1") int page, + @RequestParam(required = false) int limit,Album album){ + User u = (User) session.getAttribute("user"); + PageHelper.startPage(page, limit); + List list = null; + if (u.getLevel() == 2) { + album.setUserid(null); + list = albumServiceI.selectAlbumURLList(album); + PageInfo rolePageInfo = new PageInfo<>(list); + Map map = new HashMap(); + map.put("code", 0); + map.put("msg", ""); + map.put("count", rolePageInfo.getTotal()); + map.put("data", rolePageInfo.getList()); + return map; + } else { + album.setUserid(u.getId()); + list = albumServiceI.selectAlbumURLList(album); + PageInfo rolePageInfo = new PageInfo<>(list); + Map map = new HashMap(); + map.put("code", 0); + map.put("msg", ""); + map.put("count", rolePageInfo.getTotal()); + map.put("data", rolePageInfo.getList()); + return map; + } + } + + @RequestMapping("/delAlbum") + @ResponseBody + public Integer delAlbum(String albumkey){ + Integer ret = albumServiceI.delete(albumkey); + return ret; + } + + @RequestMapping("/delAlbumAll") + @ResponseBody + public Integer delAlbumAll( @RequestParam("albumkeyArr[]") String[] albumkeyArr ){ + Integer ret = albumServiceI.deleteAll(albumkeyArr); + return ret; + } + + } diff --git a/src/main/java/cn/hellohao/controller/AdminRootController.java b/src/main/java/cn/hellohao/controller/AdminRootController.java index 56d46ba..263c5e8 100644 --- a/src/main/java/cn/hellohao/controller/AdminRootController.java +++ b/src/main/java/cn/hellohao/controller/AdminRootController.java @@ -8,6 +8,7 @@ import cn.hellohao.utils.Print; import cn.hellohao.utils.StringUtils; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; @@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.HashMap; +import java.util.List; @Controller @RequestMapping("/admin/root") @@ -55,17 +57,15 @@ public class AdminRootController { User u = (User) session.getAttribute("user"); Integer Sourcekey = GetCurrentSource.GetSource(u.getId()); Keys key= keysService.selectKeys(Sourcekey); - Boolean b = StringUtils.doNull(Sourcekey,key); + //Boolean b = StringUtils.doNull(Sourcekey,key); Integer StorageType = 0; if(Sourcekey!=5){ - if(b){ - model.addAttribute("AccessKey", key.getAccessKey()); - model.addAttribute("AccessSecret", key.getAccessSecret()); - model.addAttribute("Endpoint", key.getEndpoint()); - model.addAttribute("Bucketname", key.getBucketname()); - model.addAttribute("RequestAddress", key.getRequestAddress()); - model.addAttribute("StorageType", Sourcekey); - } + model.addAttribute("AccessKey", key.getAccessKey()); + model.addAttribute("AccessSecret", key.getAccessSecret()); + model.addAttribute("Endpoint", key.getEndpoint()); + model.addAttribute("Bucketname", key.getBucketname()); + model.addAttribute("RequestAddress", key.getRequestAddress()); + model.addAttribute("StorageType", Sourcekey); if(Sourcekey==4){ model.addAttribute("Endpoint2", key.getEndpoint()); }else{ @@ -107,12 +107,11 @@ public class AdminRootController { config.setSourcekey(key.getStorageType()); Integer val = configService.setSourceype(config); Integer ret = -2; - //修改完初始化 if(key.getStorageType()==1){ - ret =nOSImageupload.Initialize(key);//实例化网易 + ret =nOSImageupload.Initialize(key); }else if (key.getStorageType()==2){ ret = OSSImageupload.Initialize(key); - }else if(key.getStorageType()==3){ + }else if(key.getStorageType()==3 ){ ret = USSImageupload.Initialize(key); }else if(key.getStorageType()==4){ ret = KODOImageupload.Initialize(key); @@ -120,6 +119,8 @@ public class AdminRootController { ret = COSImageupload.Initialize(key); }else if(key.getStorageType()==7){ ret = FTPImageupload.Initialize(key); + }else if(key.getStorageType()==8){ + ret = UFileImageupload.Initialize(key); } else{ Print.Normal("为获取到存储参数,或者使用存储源是本地的。"); @@ -127,7 +128,6 @@ public class AdminRootController { if(ret>0){ ret = keysService.updateKey(key); } - //-1 对象存储有参数为空,初始化失败 //0,保存失败 //1 正确 @@ -200,9 +200,14 @@ public class AdminRootController { @PostMapping("/setisok") @ResponseBody public String setisok(HttpSession session, User user) { - Integer ret = userService.setisok(user); JSONArray jsonArray = new JSONArray(); - jsonArray.add(ret); + User u = (User) session.getAttribute("user"); + if(u.getId()==user.getId()){ + jsonArray.add(-2); + }else{ + Integer ret = userService.setisok(user); + jsonArray.add(ret); + } return jsonArray.toString(); } @@ -261,4 +266,40 @@ public class AdminRootController { return Integer.parseInt( result ); } + @PostMapping("/tocheck") + @ResponseBody + public JSONObject tocheck() { + JSONObject jsonObject = new JSONObject(); + List keylist = keysService.getKeys(); + for (Keys key : keylist) { + if(key.getStorageType()!=0 && key.getStorageType()!=null){ + int ret =0; + if(key.getStorageType()==1){ + ret =NOSImageupload.Initialize(key); + jsonObject.put(key.getStorageType().toString(),ret); + }else if (key.getStorageType()==2){ + ret =OSSImageupload.Initialize(key); + jsonObject.put(key.getStorageType().toString(),ret); + }else if(key.getStorageType()==3){ + ret = USSImageupload.Initialize(key); + jsonObject.put(key.getStorageType().toString(),ret); + }else if(key.getStorageType()==4){ + ret = KODOImageupload.Initialize(key); + jsonObject.put(key.getStorageType().toString(),ret); + }else if(key.getStorageType()==6){ + ret = COSImageupload.Initialize(key); + jsonObject.put(key.getStorageType().toString(),ret); + }else if(key.getStorageType()==7){ + ret = FTPImageupload.Initialize(key); + jsonObject.put(key.getStorageType().toString(),ret); + }else if(key.getStorageType()==8){ + ret = UFileImageupload.Initialize(key); + jsonObject.put(key.getStorageType().toString(),ret); + } + } + } + jsonObject.put("5",1); + return jsonObject; + } + } diff --git a/src/main/java/cn/hellohao/controller/AlbumController.java b/src/main/java/cn/hellohao/controller/AlbumController.java new file mode 100644 index 0000000..01514cb --- /dev/null +++ b/src/main/java/cn/hellohao/controller/AlbumController.java @@ -0,0 +1,179 @@ +package cn.hellohao.controller; + +import cn.hellohao.pojo.*; +import cn.hellohao.service.*; +import cn.hellohao.service.impl.AlbumServiceI; +import cn.hellohao.service.impl.ImgAndAlbumServiceImpl; +import cn.hellohao.utils.GetCurrentSource; +import cn.hellohao.utils.Print; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpSession; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * @author Hellohao + * @version 1.0 + * @date 2019/12/17 11:25 + */ +@Controller +public class AlbumController { + @Autowired + AlbumServiceI albumServiceI; + @Autowired + private ConfigService configService; + @Autowired + private ImgService imgService; + @Autowired + ImgAndAlbumService imgAndAlbumService; + @Autowired + private UploadConfigService uploadConfigService; + + @RequestMapping("/addalbum") + public String addalbum(HttpSession session,Model model) { + UploadConfig updateConfig = uploadConfigService.getUpdateConfig(); + User u = (User) session.getAttribute("user"); + Integer sourcekey = 0; + if (u == null) { + sourcekey = GetCurrentSource.GetSource(null); + } else { + sourcekey = GetCurrentSource.GetSource(u.getId()); + } + model.addAttribute("urltype",updateConfig.getUrltype()); + model.addAttribute("sourcekey",sourcekey); + return "album/addalbum"; + } + + @PostMapping("/SaveForAlbum") + @ResponseBody + public Msg SaveForAlbum(HttpSession session,@RequestParam("imgarr[]") String[] imgarr, @RequestParam("aboutarr[]") String[] aboutarr, + String albumtitle, String password){ + Msg msg = new Msg(); + User u = (User) session.getAttribute("user"); + String uuid = "TOALBUM"+ UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5)+"N"; + Integer ret =0; + Integer temp = 0; + Integer temp2 = 0; + SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + for (int i = 0; i < imgarr.length; i++) { + Album album = new Album(); + ImgAndAlbum imgAndAlbum = new ImgAndAlbum(); + album.setAlbumtitle(albumtitle); + album.setCreatedate(df.format(new Date())); + album.setPassword(password); + album.setAlbumkey(uuid); + if(u==null){ + album.setUserid(0); + }else{ + album.setUserid(u.getId()); + } + String imgurl = ""; + Integer sourcekey = 0; + UploadConfig updateConfig = uploadConfigService.getUpdateConfig(); + if(updateConfig.getUrltype()==2){ + imgurl = imgarr[i]; + }else{ + if (u == null) { + //sourcekey = GetCurrentSource.GetSource(null); + imgurl="tourist/"+imgarr[i]; + } else { + //sourcekey = GetCurrentSource.GetSource(u.getId()); + imgurl=u.getUsername()+"/"+imgarr[i]; + } + } + + imgAndAlbum.setImgname(imgarr[i]); + imgAndAlbum.setAlbumkey(uuid); + imgAndAlbum.setNotes(aboutarr[i]); + if(temp==0){ + temp2 = albumServiceI.addAlbum(album); + temp = 1; + } + if(temp2>0){ + ret = albumServiceI.addAlbumForImgAndAlbumMapper(imgAndAlbum); + } + } + if(ret>0){ + msg.setCode("200"); + msg.setInfo("成功创建画廊链接:"); + msg.setData(configService.getSourceype().getDomain()+"/"+uuid); + }else{ + msg.setCode("500"); + msg.setInfo("创建画廊链接失败:"); + } + return msg; + } + + @RequestMapping("/TOALBUM{key}N") + public String selectByFy(@PathVariable("key") String key, Model model) { + Album album = new Album(); + album.setAlbumkey("TOALBUM"+key+"N"); + Album a = albumServiceI.selectAlbum(album); + Config config = configService.getSourceype(); + model.addAttribute("webname",config.getWebname()); + model.addAttribute("domain",config.getDomain()); + model.addAttribute("ico",config.getWebfavicons()); + if(a!=null){ + model.addAttribute("obj",a); + model.addAttribute("album",1); + if(a.getPassword()!=null && !a.getPassword().equals("")){ + model.addAttribute("passType","1"); + }else{ + model.addAttribute("passType","0"); + } + }else{ + model.addAttribute("album",0); + } + return "album/album_new"; + } + + @PostMapping("/getAlbumList") + @ResponseBody + public Msg getAlbumList(String albumkey,String password){ + Msg msg = new Msg(); + Album album = new Album(); + album.setAlbumkey(albumkey); + Album a = albumServiceI.selectAlbum(album); + if(a==null){ + msg.setCode("404"); + msg.setInfo("画廊地址不存在"); + return msg; + } + Config config = configService.getSourceype(); + JSONObject jsonObject = new JSONObject(); + if(a!=null){ + if(a.getPassword()==null){ + List imagesList = imgAndAlbumService.selectImgForAlbumkey(albumkey); + msg.setCode("200"); + jsonObject.put("imagesList",imagesList); + }else{ + if(a.getPassword().equals(password)){ + List imagesList = imgAndAlbumService.selectImgForAlbumkey(albumkey); + msg.setCode("200"); + jsonObject.put("imagesList",imagesList); + }else{ + msg.setCode("403"); + msg.setInfo("画廊密码错误"); + } + } + jsonObject.put("titlename",a.getAlbumtitle()); + } + jsonObject.put("webname",config.getWebname()); + msg.setData(jsonObject); + return msg; + } + + + @RequestMapping("/addalbum_new") + public String addalbum2() { + return "album/album_new"; + } + +} diff --git a/src/main/java/cn/hellohao/controller/ClientController.java b/src/main/java/cn/hellohao/controller/ClientController.java index ad93090..370b908 100644 --- a/src/main/java/cn/hellohao/controller/ClientController.java +++ b/src/main/java/cn/hellohao/controller/ClientController.java @@ -4,6 +4,7 @@ import cn.hellohao.pojo.*; import cn.hellohao.service.*; import cn.hellohao.service.impl.*; import cn.hellohao.utils.*; +import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Autowired; @@ -13,7 +14,11 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; -import java.io.FileInputStream; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; import java.text.SimpleDateFormat; import java.util.*; @@ -47,7 +52,7 @@ public class ClientController { @Autowired private FTPImageupload ftpImageupload; @Autowired - private DomainService domainService; + private UFileImageupload uFileImageupload; @Autowired private ImgService imgService; @@ -64,15 +69,13 @@ public class ClientController { UploadConfig uploadConfig = uploadConfigService.getUpdateConfig(); if (uploadConfig.getApi() == 1) { if (email != null && pass != null) { - Integer ret = userService.login(email, Base64Encryption.encryptBASE64(pass.getBytes())); + Integer ret = userService.login(email, Base64Encryption.encryptBASE64(pass.getBytes()),null); if (ret > 0) { User user = userService.getUsers(email); if (user.getIsok() == 1) { User u = userService.getUsers(email); Config config = configService.getSourceype();//查询当前系统使用的存储源类型。 - Integer Sourcekey = GetCurrentSource.GetSource(u.getId()); - Keys key = keysService.selectKeys(Sourcekey); if (key.getStorageType() != 0 && key.getStorageType() != null) { if (key.getStorageType() == 1) { @@ -87,133 +90,129 @@ public class ClientController { COSImageupload.Initialize(key); } else if (key.getStorageType() == 7) { FTPImageupload.Initialize(key); - } else { + } else if(key.getStorageType()==8){ + UFileImageupload.Initialize(key); + }else { System.err.println("客户端:未获取到对象存储参数,初始化失败。"); } } Print.Normal("客户端:初始化上传。"); - Boolean b = false; - if (Sourcekey == 5) { - b = true; + long stime = System.currentTimeMillis(); + String userpath = "tourist"; + if (uploadConfig.getUrltype() == 2) { + java.text.DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); + userpath = dateFormat.format(new Date()); } else { - b = StringUtils.doNull(Sourcekey, key);//判断对象是否有空值 + if (u != null) { + userpath = u.getUsername(); + } } - if (b) { - long stime = System.currentTimeMillis(); - String userpath = "tourist"; - if (uploadConfig.getUrltype() == 2) { - java.text.DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); - userpath = dateFormat.format(new Date()); - } else { - if (u != null) { - userpath = u.getUsername(); - } + Map map = new HashMap<>(); + for (MultipartFile multipartFile : file) { + //获取文件名 + String fileName = multipartFile.getOriginalFilename(); + String lastname = fileName.substring(fileName.lastIndexOf(".") + 1);//获取文件后缀 + if (!multipartFile.isEmpty()) { //判断文件是否为空 + map.put(lastname, multipartFile); } - Map map = new HashMap<>(); - for (MultipartFile multipartFile : file) { - //获取文件名 - String fileName = multipartFile.getOriginalFilename(); - String lastname = fileName.substring(fileName.lastIndexOf(".") + 1);//获取文件后缀 - if (!multipartFile.isEmpty()) { //判断文件是否为空 - map.put(lastname, multipartFile); + } + Map m = null; + Map m2 = null; + if (key.getStorageType() == 1) { + m = nOSImageupload.clientuploadNOS(map, userpath, uploadConfig); + } else if (key.getStorageType() == 2) { + m = ossImageupload.clientuploadOSS(map, userpath, uploadConfig); + } else if (key.getStorageType() == 3) { + m = ussImageupload.clientuploadUSS(map, userpath, uploadConfig); + } else if (key.getStorageType() == 4) { + m = kodoImageupload.clientuploadKODO(map, userpath, uploadConfig); + } else if (key.getStorageType() == 5) { + m2 = LocUpdateImg.clientLocUpdateImg(map, userpath, uploadConfig); + } else if (key.getStorageType() == 6) { + m = cosImageupload.clientuploadCOS(map, userpath, uploadConfig); + } else if (key.getStorageType() == 7) { + m = ftpImageupload.clientuploadFTP(map, userpath, uploadConfig); + } else if (key.getStorageType() == 8) { + m = uFileImageupload.clientuploadUSS(map, userpath, uploadConfig); + } else { + System.err.println("未获取到对象存储参数,上传失败。"); + } + Images img = new Images(); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String times = df.format(new Date()); + System.out.println("上传图片的时间是:" + times); + if (key.getStorageType() == 5) { + for (Map.Entry entry : m2.entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("Imgname", entry.getKey().getImgname()); + if (key.getStorageType() == 5) { + if (config.getDomain() != null) { + jsonObject.put("Imgurl", config.getDomain() + "/" + entry.getKey().getImgurl()); + img.setImgurl(config.getDomain() + "/" + entry.getKey().getImgurl());//图片链接 + } else { + jsonObject.put("Imgurl", config.getDomain() + "/" + entry.getKey().getImgurl()); + img.setImgurl("http://" + IPPortUtil.getLocalIP() + ":" + IPPortUtil.getLocalPort() + "/" + entry.getKey().getImgurl());//图片链接 + } + } else { + jsonObject.put("Imgname", entry.getKey().getImgurl()); + img.setImgurl(entry.getKey().getImgurl());//图片链接 } - } - Map m = null; - Map m2 = null; - if (key.getStorageType() == 1) { - m = nOSImageupload.clientuploadNOS(map, userpath, uploadConfig); - } else if (key.getStorageType() == 2) { - m = ossImageupload.clientuploadOSS(map, userpath, uploadConfig); - } else if (key.getStorageType() == 3) { - m = ussImageupload.clientuploadUSS(map, userpath, uploadConfig); - } else if (key.getStorageType() == 4) { - m = kodoImageupload.clientuploadKODO(map, userpath, uploadConfig); - } else if (key.getStorageType() == 5) { - m2 = LocUpdateImg.clientuploadFTP(map, userpath, uploadConfig); - } else if (key.getStorageType() == 6) { - m = cosImageupload.clientuploadCOS(map, userpath, uploadConfig); - } else if (key.getStorageType() == 7) { - m = ftpImageupload.clientuploadFTP(map, userpath, uploadConfig); - } else { - System.err.println("未获取到对象存储参数,上传失败。"); - } - Images img = new Images(); - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - String times = df.format(new Date()); - System.out.println("上传图片的时间是:" + times); - if (key.getStorageType() == 5) { - for (Map.Entry entry : m2.entrySet()) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("Imgname", entry.getKey().getImgname()); - if (key.getStorageType() == 5) { - if (config.getDomain() != null) { - jsonObject.put("Imgurl", config.getDomain() + "/links/" + entry.getKey().getImgurl()); - img.setImgurl(config.getDomain() + "/links/" + entry.getKey().getImgurl());//图片链接 - } else { - jsonObject.put("Imgurl", config.getDomain() + "/links/" + entry.getKey().getImgurl()); - img.setImgurl("http://" + IPPortUtil.getLocalIP() + ":" + IPPortUtil.getLocalPort() + "/links/" + entry.getKey().getImgurl());//图片链接 - } - } else { - jsonObject.put("Imgname", entry.getKey().getImgurl()); - img.setImgurl(entry.getKey().getImgurl());//图片链接 - } - img.setUpdatetime(times); - img.setSource(key.getStorageType()); - if (u == null) { - img.setUserid(0);//用户id - } else { - img.setUserid(u.getId());//用户id - } - img.setSizes((entry.getValue())); - img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); - img.setAbnormal(userip); - img.setImgtype(0); - //-1证明超出大小, - if (entry.getValue() != -1) { - userService.insertimg(img); - } - long etime = System.currentTimeMillis(); - System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); - jsonArray.add(jsonObject); + img.setUpdatetime(times); + img.setSource(key.getStorageType()); + if (u == null) { + img.setUserid(0);//用户id + } else { + img.setUserid(u.getId());//用户id } - } else { - for (Map.Entry entry : m.entrySet()) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("Imgname", entry.getKey().getImgname()); - if (key.getStorageType() == 5) { - if (config.getDomain() != null) { - jsonObject.put("Imgurl", config.getDomain() + "/links/" + entry.getKey().getImgurl()); - img.setImgurl(config.getDomain() + "/links/" + entry.getKey().getImgurl());//图片链接 - } else { - jsonObject.put("Imgurl", config.getDomain() + "/links/" + entry.getKey().getImgurl()); - img.setImgurl("http://" + IPPortUtil.getLocalIP() + ":" + IPPortUtil.getLocalPort() + "/links/" + entry.getKey().getImgurl());//图片链接 - } - } else { - jsonObject.put("Imgurl", entry.getKey().getImgurl()); - img.setImgurl(entry.getKey().getImgurl());//图片链接 - } - img.setUpdatetime(times); - img.setSource(key.getStorageType()); - if (u == null) { - img.setUserid(0);//用户id - } else { - img.setUserid(u.getId());//用户id - } - img.setSizes((entry.getValue())/1024); - img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); - img.setAbnormal(userip); - img.setImgtype(0); - //-1证明超出大小, - if (entry.getValue() != -1) { - userService.insertimg(img); - } - long etime = System.currentTimeMillis(); - System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); - jsonArray.add(jsonObject); + img.setSizes((entry.getValue())); + img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + img.setAbnormal(userip); + img.setImgtype(0); + //-1证明超出大小, + if (entry.getValue() != -1) { + userService.insertimg(img); } + long etime = System.currentTimeMillis(); + System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); + jsonArray.add(jsonObject); } - resultBean = ResultBean.success(jsonArray); - } else {resultBean = ResultBean.error(-1, "服务器内部错误,请联系管理员");} + } else { + for (Map.Entry entry : m.entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("Imgname", entry.getKey().getImgname()); + if (key.getStorageType() == 5) { + if (config.getDomain() != null) { + jsonObject.put("Imgurl", config.getDomain() + "/" + entry.getKey().getImgurl()); + img.setImgurl(config.getDomain() + "/" + entry.getKey().getImgurl());//图片链接 + } else { + jsonObject.put("Imgurl", config.getDomain() + "/" + entry.getKey().getImgurl()); + img.setImgurl("http://" + IPPortUtil.getLocalIP() + ":" + IPPortUtil.getLocalPort() + "/" + entry.getKey().getImgurl());//图片链接 + } + } else { + jsonObject.put("Imgurl", entry.getKey().getImgurl()); + img.setImgurl(entry.getKey().getImgurl());//图片链接 + } + img.setUpdatetime(times); + img.setSource(key.getStorageType()); + if (u == null) { + img.setUserid(0);//用户id + } else { + img.setUserid(u.getId());//用户id + } + img.setSizes((entry.getValue())/1024); + img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + img.setAbnormal(userip); + img.setImgtype(0); + //-1证明超出大小, + if (entry.getValue() != -1) { + userService.insertimg(img); + } + long etime = System.currentTimeMillis(); + System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); + jsonArray.add(jsonObject); + } + } + resultBean = ResultBean.success(jsonArray); } } else {resultBean = ResultBean.error(-2, "此用户信息不正确。");} } else {resultBean = ResultBean.error(-3, "邮箱密码为空");} @@ -232,7 +231,7 @@ public class ClientController { UploadConfig uploadConfig = uploadConfigService.getUpdateConfig(); if (uploadConfig.getApi() == 1) { if (email != null && pass != null) { - Integer ret = userService.login(email, Base64Encryption.encryptBASE64(pass.getBytes())); + Integer ret = userService.login(email, Base64Encryption.encryptBASE64(pass.getBytes()),null); if (ret > 0) { User u = userService.getUsers(email); Config config = configService.getSourceype();//查询当前系统使用的存储源类型。 @@ -262,11 +261,6 @@ public class ClientController { Integer youke = uploadConfig.getFilesizetourists(); Integer yonghu = uploadConfig.getFilesizeuser(); String uuid= UUID.randomUUID().toString().replace("-", ""); - Boolean bo =false; - if(Sourcekey==5){ - bo =true; - }else{bo = StringUtils.doNull(Sourcekey,key);//判断对象是否有空值 - } // //容量判断 if(u==null){ memory = uploadConfig.getVisitormemory(); @@ -278,191 +272,186 @@ public class ClientController { if(usermemory==null){usermemory = 0;} } Print.warning("上传地址是:"+request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); - if(bo){ - if(usermemory/10240 && imgsize<=(yonghu*1024*1024)){ - try{ - boolean bl =ImgUrlUtil.downLoadFromUrl(imgurl, - uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); - if(bl==true){ - FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); - byte[] b = new byte[3]; - is.read(b, 0, b.length); - String xxx = ImgUrlUtil.bytesToHexString(b); - xxx = xxx.toUpperCase(); - String ooo = TypeDict.checkType(xxx); - if(is!=null){ - is.close(); + if(usermemory/10240 && imgsize<=(yonghu*1024*1024)){ + try{ + boolean bl =ImgUrlUtil.downLoadFromUrl(imgurl, + uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); + if(bl==true){ + FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + byte[] b = new byte[3]; + is.read(b, 0, b.length); + String xxx = ImgUrlUtil.bytesToHexString(b); + xxx = xxx.toUpperCase(); + String ooo = TypeDict.checkType(xxx); + if(is!=null){ + is.close(); + } + if(!ooo.equals("0000")){ + Map map = new HashMap<>(); + map.put(ooo, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + Map m = null; + if(key.getStorageType()==1){ + m = nOSImageupload.Imageupload(null, userpath,map,setday); + }else if (key.getStorageType()==2){ + m = ossImageupload.ImageuploadOSS(null, userpath,map,setday); + }else if(key.getStorageType()==3 ){ + m = ussImageupload.ImageuploadUSS(null, userpath,map,setday); + }else if(key.getStorageType()==4){ + m = kodoImageupload.ImageuploadKODO(null, userpath,map,setday); + }else if(key.getStorageType()==5){ + m = LocUpdateImg.ImageuploadLOC(null,userpath,map,setday); + }else if(key.getStorageType()==6){ + m = cosImageupload.ImageuploadCOS(null,userpath,map,setday); + }else if(key.getStorageType()==7){ + m = ftpImageupload.ImageuploadFTP(null,userpath,map,setday); + }else if(key.getStorageType()==8){ + m = uFileImageupload.ImageuploadUSS(null, userpath,map,setday); } - if(!ooo.equals("0000")){ - Map map = new HashMap<>(); - map.put(ooo, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); - Map m = null; - if(key.getStorageType()==1){ - m = nOSImageupload.Imageupload(null, userpath,map,setday); - }else if (key.getStorageType()==2){ - m = ossImageupload.ImageuploadOSS(null, userpath,map,setday); - }else if(key.getStorageType()==3){ - m = ussImageupload.ImageuploadUSS(null, userpath,map,setday); - }else if(key.getStorageType()==4){ - m = kodoImageupload.ImageuploadKODO(null, userpath,map,setday); - }else if(key.getStorageType()==5){ - m = LocUpdateImg.ImageuploadLOC(null,userpath,map,setday); - }else if(key.getStorageType()==6){ - m = cosImageupload.ImageuploadCOS(null,userpath,map,setday); - }else if(key.getStorageType()==7){ - m = ftpImageupload.ImageuploadFTP(null,userpath,map,setday); - } - else{ - System.err.println("未获取到对象存储参数,上传失败。"); - } - Images img = new Images(); - SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); - String times = df.format(new Date()); - System.out.println("上传图片的时间是:"+times); - for (Map.Entry entry : m.entrySet()) { - if(key.getStorageType()==5){ - if(config.getDomain()!=null){ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 - }else{ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 - } + else{ + System.err.println("未获取到对象存储参数,上传失败。"); + } + Images img = new Images(); + SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + String times = df.format(new Date()); + System.out.println("上传图片的时间是:"+times); + for (Map.Entry entry : m.entrySet()) { + if(key.getStorageType()==5){ + if(config.getDomain()!=null){ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 }else{ - jsonArray.add(entry.getKey().getImgurl()); - img.setImgurl(entry.getKey().getImgurl()); + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 } - img.setUpdatetime(times); - img.setSource(key.getStorageType()); - if (u == null) { - img.setUserid(0); - } else { - img.setUserid(u.getId()); - } - img.setSizes((entry.getValue())); - img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); - img.setAbnormal(userip); - img.setImgtype(0); - userService.insertimg(img); - long etime = System.currentTimeMillis(); - System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); + }else{ + jsonArray.add(entry.getKey().getImgurl()); + img.setImgurl(entry.getKey().getImgurl()); + } + img.setUpdatetime(times); + img.setSource(key.getStorageType()); + if (u == null) { + img.setUserid(0); + } else { + img.setUserid(u.getId()); } - resultBean = ResultBean.success(jsonArray); - }else{ - resultBean = ResultBean.error(-3,"文件类型不符合要求"); + img.setSizes((entry.getValue())); + img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + img.setAbnormal(userip); + img.setImgtype(0); + userService.insertimg(img); + long etime = System.currentTimeMillis(); + System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); } + resultBean = ResultBean.success(jsonArray); + }else{ + resultBean = ResultBean.error(-3,"文件类型不符合要求"); } - }catch (Exception e) { - // TODO: handle exception - Print.warning(e.toString()); - resultBean = ResultBean.error(-4,"该文件不支持上传"); } - }else{ - resultBean = ResultBean.error(-2,"文件过大"); + }catch (Exception e) { + // TODO: handle exception + Print.warning(e.toString()); + resultBean = ResultBean.error(-4,"该文件不支持上传"); } }else{ - if(imgsize>0 && imgsize<=(youke*1024*1024)){ - try{ - boolean bl = ImgUrlUtil.downLoadFromUrl(imgurl, - uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); - if(bl==true){ - FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); - byte[] b = new byte[3]; - is.read(b, 0, b.length); - String xxx = ImgUrlUtil.bytesToHexString(b); - xxx = xxx.toUpperCase(); - String ooo = TypeDict.checkType(xxx); - if(is!=null){ - is.close(); - } - if(!xxx.equals("0000")){ - Map map = new HashMap<>(); - map.put(ooo, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); - Map m = null; - if(key.getStorageType()==1){ - m = nOSImageupload.Imageupload(null, userpath,map,setday); - }else if (key.getStorageType()==2){ - m = ossImageupload.ImageuploadOSS(null, userpath,map,setday); - }else if(key.getStorageType()==3){ - m = ussImageupload.ImageuploadUSS(null, userpath,map,setday); - }else if(key.getStorageType()==4){ - m = kodoImageupload.ImageuploadKODO(null, userpath,map,setday); - }else if(key.getStorageType()==5){ - m =LocUpdateImg.ImageuploadLOC(null,userpath, map,setday); - }else if(key.getStorageType()==6){ - m =cosImageupload.ImageuploadCOS(null,userpath, map,setday); - }else if(key.getStorageType()==7){ - m = ftpImageupload.ImageuploadFTP(null,userpath,map,setday); - } - else{ - System.err.println("未获取到对象存储参数,上传失败。"); - } - Images img = new Images(); - SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); - String times = df.format(new Date()); - System.out.println("上传图片的时间是:"+times); - for (Map.Entry entry : m.entrySet()) { - if(key.getStorageType()==5){ - if(config.getDomain()!=null){ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 - }else{ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 - } - }else{ - jsonArray.add(entry.getKey().getImgurl()); - img.setImgurl(entry.getKey().getImgurl());//图片链接 - } - img.setUpdatetime(times); - img.setSource(key.getStorageType()); - if (u == null) { - img.setUserid(0);//用户id - } else { - img.setUserid(u.getId());//用户id - } - img.setSizes((entry.getValue())); - img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); - img.setAbnormal(userip); - img.setImgtype(0); - userService.insertimg(img); - long etime = System.currentTimeMillis(); - System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); - } - resultBean = ResultBean.success(jsonArray); - }else{ - resultBean = ResultBean.error(-3,"文件类型不符合要求"); - } - } - }catch (Exception e) { - // TODO: handle exception - Print.warning(e.toString()); - resultBean = ResultBean.error(-4,"文件类型不符合要求"); - } - }else{ - resultBean = ResultBean.error(-2,"图片太大或不存在"); - } + resultBean = ResultBean.error(-2,"文件过大"); } }else{ - resultBean = ResultBean.error(-5,"可用空间不足"); + if(imgsize>0 && imgsize<=(youke*1024*1024)){ + try{ + boolean bl = ImgUrlUtil.downLoadFromUrl(imgurl, + uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); + if(bl==true){ + FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + byte[] b = new byte[3]; + is.read(b, 0, b.length); + String xxx = ImgUrlUtil.bytesToHexString(b); + xxx = xxx.toUpperCase(); + String ooo = TypeDict.checkType(xxx); + if(is!=null){ + is.close(); + } + if(!xxx.equals("0000")){ + Map map = new HashMap<>(); + map.put(ooo, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + Map m = null; + if(key.getStorageType()==1){ + m = nOSImageupload.Imageupload(null, userpath,map,setday); + }else if (key.getStorageType()==2){ + m = ossImageupload.ImageuploadOSS(null, userpath,map,setday); + }else if(key.getStorageType()==3 ){ + m = ussImageupload.ImageuploadUSS(null, userpath,map,setday); + }else if(key.getStorageType()==4){ + m = kodoImageupload.ImageuploadKODO(null, userpath,map,setday); + }else if(key.getStorageType()==5){ + m =LocUpdateImg.ImageuploadLOC(null,userpath, map,setday); + }else if(key.getStorageType()==6){ + m =cosImageupload.ImageuploadCOS(null,userpath, map,setday); + }else if(key.getStorageType()==7){ + m = ftpImageupload.ImageuploadFTP(null,userpath,map,setday); + }else if(key.getStorageType()==8){ + m = uFileImageupload.ImageuploadUSS(null, userpath,map,setday); + } + else{ + System.err.println("未获取到对象存储参数,上传失败。"); + } + Images img = new Images(); + SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + String times = df.format(new Date()); + System.out.println("上传图片的时间是:"+times); + for (Map.Entry entry : m.entrySet()) { + if(key.getStorageType()==5){ + if(config.getDomain()!=null){ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 + }else{ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 + } + }else{ + jsonArray.add(entry.getKey().getImgurl()); + img.setImgurl(entry.getKey().getImgurl());//图片链接 + } + img.setUpdatetime(times); + img.setSource(key.getStorageType()); + if (u == null) { + img.setUserid(0);//用户id + } else { + img.setUserid(u.getId());//用户id + } + img.setSizes((entry.getValue())); + img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + img.setAbnormal(userip); + img.setImgtype(0); + userService.insertimg(img); + long etime = System.currentTimeMillis(); + System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); + } + resultBean = ResultBean.success(jsonArray); + }else{ + resultBean = ResultBean.error(-3,"文件类型不符合要求"); + } + } + }catch (Exception e) { + // TODO: handle exception + Print.warning(e.toString()); + resultBean = ResultBean.error(-4,"文件类型不符合要求"); + } + }else{ + resultBean = ResultBean.error(-2,"图片太大或不存在"); + } } }else{ - resultBean = ResultBean.error(-1,"未配置存储源"); + resultBean = ResultBean.error(-5,"可用空间不足"); } + }else {resultBean = ResultBean.error(-2, "此用户信息不正确。");} }else {resultBean = ResultBean.error(-3, "邮箱或密码为空");} }else{resultBean = ResultBean.error(-4, "管理员关闭了API接口");} Print.Normal(resultBean.toString()); return resultBean; -/** - * 错误返回值含义: - * -1 存储源key未配置 - * -2 目标图片太大或者不存在 - * -3 文件类型不符合要求 - * */ } @RequestMapping("/clientlogin") @@ -470,7 +459,7 @@ Print.Normal(resultBean.toString()); public String login( HttpSession httpSession, String email, String password) { JSONArray jsonArray = new JSONArray(); String basepass = Base64Encryption.encryptBASE64(password.getBytes()); - Integer ret = userService.login(email, basepass); + Integer ret = userService.login(email, basepass,null); if (ret > 0) { User user = userService.getUsers(email); if (user.getIsok() == 1) { @@ -489,21 +478,39 @@ Print.Normal(resultBean.toString()); @GetMapping (value = "/notices") @ResponseBody public String notices() throws Exception { - return "-1";//-1就是没有公告,客户端不显示 - } - //主端接口 - @PostMapping("/systemupdate") - @ResponseBody - public String sysupdate(String dates) { - Integer i=dates.compareTo(systemupdate);//小于0则需要更新 - return i.toString(); - } - //主端接口 - @PostMapping("/getdomain") - @ResponseBody - public String getdomain(String domain) { - Integer count = domainService.getDomain(domain); - return count.toString(); + return "-1"; } + @GetMapping("/getNotice") + @ResponseBody + public Msg getNotice() { + Msg msg = new Msg(); + String url = "http://tc.hellohao.cn/getNoticeText"; + try { + URL u = new URL("http://tc.hellohao.cn/getNoticeText"); + HttpURLConnection uConnection = (HttpURLConnection) u.openConnection(); + uConnection.connect(); + System.out.println(uConnection.getResponseCode()); + if(uConnection.getResponseCode()==200){ + if(TestUrl.testUrlWithTimeOut(url,2000)){ + String urls =url; + msg.setData(HttpUtil.get(urls)); + }else{ + msg.setData("暂无公告"); + } + }else{ + msg.setData("暂无公告"); + } + uConnection.disconnect(); + } catch (Exception e) { + //e.printStackTrace(); + Print.warning("connect failed"); + msg.setData("暂无公告"); + } + return msg; + } + + + + } diff --git a/src/main/java/cn/hellohao/controller/ExceptionHandling.java b/src/main/java/cn/hellohao/controller/ExceptionHandling.java index 1f7c515..8e0188b 100644 --- a/src/main/java/cn/hellohao/controller/ExceptionHandling.java +++ b/src/main/java/cn/hellohao/controller/ExceptionHandling.java @@ -2,8 +2,10 @@ package cn.hellohao.controller; import cn.hellohao.exception.StorageSourceInitException; import cn.hellohao.utils.Print; +import org.springframework.ui.Model; import org.springframework.validation.BindException; import org.springframework.validation.ObjectError; +import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; @@ -50,6 +52,20 @@ public class ExceptionHandling { return e.getMessage(); } + @ExceptionHandler + public String test3(HttpRequestMethodNotSupportedException e,Model model){ + + ModelAndView modelAndView = new ModelAndView("/index"); + Print.Normal("URL访问类型不正确:"+ e.getMessage()); + //e.printStackTrace(); + modelAndView.addObject("error","URL访问类型不正确。"); + model.addAttribute("error","URL访问类型不正确。"); + //返回错误信息,并显示给用户 + //return e.getMessage(); + return "exception"; + } + + // @ExceptionHandler // public String methodArgumentNotValid(BindException e) { diff --git a/src/main/java/cn/hellohao/controller/GroupController.java b/src/main/java/cn/hellohao/controller/GroupController.java index 512607d..a679790 100644 --- a/src/main/java/cn/hellohao/controller/GroupController.java +++ b/src/main/java/cn/hellohao/controller/GroupController.java @@ -72,19 +72,19 @@ public class GroupController { @RequestMapping(value = "/addisgroup") @ResponseBody public Integer addisgroup(Group group) { - boolean b =false; - if(group.getKeyid()==5){ - b =true; - }else{ - Keys key = keysService.selectKeys(group.getKeyid()); - b = StringUtils.doNull(group.getKeyid(),key); - } + //boolean b =false; + //if(group.getKeyid()==5){ + // b =true; + //}else{ + //Keys key = keysService.selectKeys(group.getKeyid()); + //b = StringUtils.doNull(group.getKeyid(),key); + //} Integer ret = 0; - if(b){ + //if(b){ ret = groupService.addgroup(group); - }else{ - ret = -1; - } + //}else{ + // ret = -1; + //} return ret; } @RequestMapping(value = "/delegroup") diff --git a/src/main/java/cn/hellohao/controller/UpdateImgController.java b/src/main/java/cn/hellohao/controller/UpdateImgController.java index 23daff4..8695d48 100644 --- a/src/main/java/cn/hellohao/controller/UpdateImgController.java +++ b/src/main/java/cn/hellohao/controller/UpdateImgController.java @@ -4,22 +4,29 @@ import cn.hellohao.pojo.*; import cn.hellohao.service.*; import cn.hellohao.service.impl.*; import cn.hellohao.utils.*; +import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import org.apache.commons.text.StringEscapeUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpRequest; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.view.RedirectView; +import javax.imageio.ImageIO; +import javax.imageio.ImageWriteParam; +import javax.imageio.ImageWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import java.io.FileInputStream; -import java.io.IOException; +import java.awt.image.BufferedImage; +import java.io.*; import java.text.SimpleDateFormat; import java.util.*; @@ -32,8 +39,6 @@ public class UpdateImgController { @Autowired private KeysService keysService; @Autowired - private OSSImageupload ossImageupload; - @Autowired private ConfigService configService; @Autowired private UploadConfigService uploadConfigService; @@ -47,9 +52,13 @@ public class UpdateImgController { private FTPImageupload ftpImageupload; @Autowired private ImgService imgService; + @Autowired + private UploadServicel uploadServicel; private String[] iparr; + public static String vu; + @RequestMapping({"/", "/index"}) public String indexImg(Model model, HttpSession httpSession, HttpServletRequest request, HttpServletResponse response) { Print.Normal("当前项目路径:"+System.getProperty("user.dir")); @@ -66,7 +75,7 @@ public class UpdateImgController { if(uploadConfig.getImgcounttourists()!=null){imgcounttourists = uploadConfig.getImgcounttourists();} if(uploadConfig.getImgcountuser()!=null){imgcountuser = uploadConfig.getImgcountuser();} if (email != null) { - Integer ret = userService.login(u.getEmail(), u.getPassword()); + Integer ret = userService.login(u.getEmail(), u.getPassword(),null); if (ret > 0) { User user = userService.getUsers(u.getEmail()); model.addAttribute("username", user.getUsername()); @@ -91,115 +100,22 @@ public class UpdateImgController { isupdate = (u == null) ? 0: 1; } model.addAttribute("VisitorUpload", isupdate); - return "index"; + vu = IdUtil.simpleUUID(); + model.addAttribute("vu",vu); + if(config.getTheme()==1){ + return "index"; + }else{ + return "index-Minimalism"; + } } @RequestMapping(value = "/upimg") @ResponseBody - public String upimg( HttpSession session,HttpServletRequest request + public Msg upimg( HttpSession session,HttpServletRequest request , @RequestParam(value = "file", required = false) MultipartFile multipartFile,Integer setday,String upurlk) throws Exception { - String userip = GetIPS.getIpAddr(request); - Print.Normal("上传者ip:"+userip); - java.text.DateFormat dateFormat = new java.text.SimpleDateFormat("yyyy/MM/dd"); - JSONArray jsonArray = new JSONArray(); - JSONObject jsonObject = new JSONObject(); - Config config = configService.getSourceype(); - UploadConfig uploadConfig = uploadConfigService.getUpdateConfig(); - User u = (User) session.getAttribute("user"); - Integer usermemory =0; - Integer memory =0; - Integer sourcekey=0; - Integer maxsize = 0; - String userpath = "tourist"; - Boolean b =false; - if(uploadConfig.getBlacklist()!=null){ - iparr = uploadConfig.getBlacklist().split(";"); - for (String s : iparr) { - if(s.equals(userip)){ - jsonObject.put("imgurls",911); - return jsonObject.toString(); - } - } - } - if(Integer.parseInt(Base64Encryption.decryptBASE64(upurlk))!=yzupdate()){ - jsonObject.put("imgurls",403); - return jsonObject.toString(); - } - if(u==null){ - sourcekey = GetCurrentSource.GetSource(null); - memory = uploadConfig.getVisitormemory(); - maxsize = uploadConfig.getFilesizetourists(); - usermemory= imgService.getusermemory(0); - if(usermemory==null){usermemory = 0;} - }else{ - userpath = u.getUsername(); - sourcekey = GetCurrentSource.GetSource(u.getId()); - memory = userService.getUsers(u.getEmail()).getMemory(); - maxsize = uploadConfig.getFilesizeuser(); - usermemory= imgService.getusermemory(u.getId()); - if(usermemory==null){usermemory = 0;} - } - if(uploadConfig.getUrltype()==2){ - userpath = dateFormat.format(new Date()); - } - Keys key = keysService.selectKeys(sourcekey); - if(sourcekey==5){b =true;} - else{b = StringUtils.doNull(sourcekey,key);} - if(!b){ - jsonObject.put("imgurls",-1); - return jsonObject.toString(); - } - int tmp =(memory==-1? -2:(usermemory/1024)); - if(tmp>=memory){ - jsonObject.put("imgurls",-5); - return jsonObject.toString(); - } - long stime = System.currentTimeMillis(); - Map map = new HashMap<>(); - Print.Normal("文件大小:"+multipartFile.getSize()); - if(multipartFile.getSize()>maxsize*1024*1024){ - jsonObject.put("imgurls",-6); - return jsonObject.toString(); - } - String fileName = multipartFile.getOriginalFilename(); - String lastname = fileName.substring(fileName.lastIndexOf(".") + 1); - if (!multipartFile.isEmpty()) { - map.put(lastname, multipartFile); - } - Map m = null; - m = GetSource.storageSource(key.getStorageType(),map, userpath,null,setday); - Images img = new Images(); - SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); - Print.Normal("上传图片的时间是:"+df.format(new Date())); - for (Map.Entry entry : m.entrySet()) { - if(key.getStorageType()==5){ - if(config.getDomain()!=null){ - jsonObject.put("imgurls",config.getDomain()+"/links/"+entry.getKey().getImgurl()); - jsonObject.put("imgnames",entry.getKey().getImgname()); - img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - }else{ - jsonObject.put("imgurls",config.getDomain()+"/links/"+entry.getKey().getImgurl()); - jsonObject.put("imgnames",entry.getKey().getImgname()); - img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 - } - }else{ - jsonObject.put("imgurls",entry.getKey().getImgurl()); - jsonObject.put("imgnames",entry.getKey().getImgname()); - img.setImgurl(entry.getKey().getImgurl()); - } - jsonArray.add(jsonObject); - img.setUpdatetime(df.format(new Date())); - img.setSource(key.getStorageType()); - img.setUserid(u == null?0:u.getId()); - img.setSizes((entry.getValue()) / 1024); - img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); - img.setImgtype(setday>0?1:0); - img.setAbnormal(userip); - userService.insertimg(img); - long etime = System.currentTimeMillis(); - Print.Normal("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); - } - return jsonObject.toString(); + Msg msg = new Msg(); + msg = uploadServicel.uploadForLoc(session,request,multipartFile,setday,upurlk,iparr); + return msg; } //根据网络图片url上传 @@ -239,7 +155,8 @@ public class UpdateImgController { java.text.DateFormat dateFormat = new java.text.SimpleDateFormat("yyyy/MM/dd"); userpath = dateFormat.format(new Date()); } - if(Integer.parseInt(Base64Encryption.decryptBASE64(upurlk))!=yzupdate()){ + //if(Integer.parseInt(Base64Encryption.decryptBASE64(upurlk))!=yzupdate()){ + if (!upurlk.equals(UpdateImgController.vu)) { jsonArray.add(-403); return jsonArray.toString(); } @@ -248,12 +165,12 @@ public class UpdateImgController { Integer youke = uploadConfig.getFilesizetourists(); Integer yonghu = uploadConfig.getFilesizeuser(); String uuid= UUID.randomUUID().toString().replace("-", ""); - Boolean bo =false; - bo = Sourcekey==5?true:StringUtils.doNull(Sourcekey,key); - if(!bo){ - jsonArray.add(-1); - return jsonArray.toString(); - } + //Boolean bo =false; + //bo = Sourcekey==5?true:StringUtils.doNull(Sourcekey,key); +// if(!bo){ +// jsonArray.add(-1); +// return jsonArray.toString(); +// } Print.warning("上传地址是:"+request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); if(usermemory/1024>=memory) { @@ -268,9 +185,9 @@ public class UpdateImgController { } try{ boolean bl =ImgUrlUtil.downLoadFromUrl(imgurl, - uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); + uuid, request.getSession().getServletContext().getRealPath("/")+File.separator+"hellohaotmp"+File.separator); if(bl==true){ - FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+File.separator+"hellohaotmp"+File.separator+uuid); byte[] b = new byte[3]; is.read(b, 0, b.length); String xxx = ImgUrlUtil.bytesToHexString(b); @@ -281,7 +198,7 @@ public class UpdateImgController { return jsonArray.toString(); } Map map = new HashMap<>(); - map.put(TypeDict.checkType(xxx), request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + map.put(TypeDict.checkType(xxx), request.getSession().getServletContext().getRealPath("/")+"hellohaotmp"+ File.separator+uuid); Map m = null; m = GetSource.storageSource(key.getStorageType(), null, userpath,map,setday); Images img = new Images(); @@ -291,11 +208,11 @@ public class UpdateImgController { for (Map.Entry entry : m.entrySet()) { if(key.getStorageType()==5){ if(config.getDomain()!=null){ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 + jsonArray.add(config.getDomain()+"/"+entry.getKey().getImgurl()); + img.setImgurl(config.getDomain()+"/"+entry.getKey().getImgurl());//图片链接 }else{ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 + jsonArray.add(config.getDomain()+"/"+entry.getKey().getImgurl()); + img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/"+entry.getKey().getImgurl());//图片链接 } }else{ jsonArray.add(entry.getKey().getImgurl()); @@ -305,7 +222,8 @@ public class UpdateImgController { img.setSource(key.getStorageType()); img.setUserid(u == null?0:u.getId()); img.setSizes((entry.getValue())); - img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + //img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + img.setImgname(entry.getKey().getImgurl()); img.setAbnormal(userip); if(setday>0){img.setImgtype(1);} else{img.setImgtype(0);} @@ -326,9 +244,9 @@ public class UpdateImgController { } try{ boolean bl = ImgUrlUtil.downLoadFromUrl(imgurl, - uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); + uuid, request.getSession().getServletContext().getRealPath("/")+"hellohaotmp"+File.separator); if(bl==true){ - FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"hellohaotmp"+File.separator+uuid); byte[] b = new byte[3]; is.read(b, 0, b.length); String xxx = ImgUrlUtil.bytesToHexString(b); @@ -339,7 +257,7 @@ public class UpdateImgController { return jsonArray.toString(); } Map map = new HashMap<>(); - map.put(TypeDict.checkType(xxx), request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + map.put(TypeDict.checkType(xxx), request.getSession().getServletContext().getRealPath("/")+File.separator+"hellohaotmp"+File.separator+uuid); Map m = null; m = GetSource.storageSource(key.getStorageType(), null, userpath,map,setday); Images img = new Images(); @@ -349,11 +267,11 @@ public class UpdateImgController { for (Map.Entry entry : m.entrySet()) { if(key.getStorageType()==5){ if(config.getDomain()!=null){ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + jsonArray.add(config.getDomain()+"/"+entry.getKey().getImgurl()); + img.setImgurl(config.getDomain()+"/"+entry.getKey().getImgurl()); }else{ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 + jsonArray.add(config.getDomain()+"/"+entry.getKey().getImgurl()); + img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/"+entry.getKey().getImgurl());//图片链接 } }else{ jsonArray.add(entry.getKey().getImgurl()); @@ -419,6 +337,128 @@ public class UpdateImgController { } + @RequestMapping("/{key1}/TOIMG{key2}N.{key3}") + public ResponseEntity selectByFyOne(final HttpServletRequest request, + HttpServletResponse response, + @PathVariable("key1") String key1, @PathVariable("key2") String key2, + @PathVariable("key3") String key3, Model model){ + MediaType mediaType =null; + File file = new File(File.separator+"HellohaoData"+File.separator+key1+"/TOIMG"+key2+"N."+key3); + if (!file.exists()) { + try { + response.sendRedirect("/404"); + } catch (IOException e) { + e.printStackTrace(); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body("

404 FILE NOT FOUND

"); + } + } + if(key3.equals("png")){ + mediaType = MediaType.IMAGE_PNG; + }else if(key3.equals("gif")){ + mediaType = MediaType.IMAGE_GIF; + }else{ + mediaType = MediaType.IMAGE_JPEG; + } + HttpHeaders headers = new HttpHeaders(); + headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); + // headers.setContentDispositionFormData("attachment", URLUtil.encode(file.getName())); + headers.add("Pragma", "no-cache"); + headers.add("Expires", "0"); + headers.add("Last-Modified", new Date().toString()); + headers.add("ETag", String.valueOf(System.currentTimeMillis())); + return ResponseEntity + .ok() + .headers(headers) + .contentLength(file.length()) + .contentType(mediaType) + .body(new FileSystemResource(file)); + + //return "forward:/links/"+key1+"/TOIMG"+key2+"N."+key3; + } + + // @RequestMapping("/{key1:\\d+}/{key2}/{key3}/TOIMG{key4}N.{key5}") + public void selectByFy2(HttpServletRequest request, HttpServletResponse response, + @PathVariable("key1") String key1,@PathVariable("key2") String key2, + @PathVariable("key3") String key3,@PathVariable("key4") String key4, + @PathVariable("key5") String key5,Model model) { + String head = "jpg"; + if(key5.equals("jpg")||key5.equals("jpeg")){ + head = "jpeg"; + }else if(key5.equals("png")){ + head = "png"; + }else if(key5.equals("bmp")){ + head = "bmp"; + }else if(key5.equals("gif")){ + head = "gif"; + }else{ + head = key5; + } + response.setHeader("Pragma", "no-cache"); + response.setHeader("Cache-Control", "no-cache"); + response.setDateHeader("Expires", 0); + response.setContentType("image/"+head); + //InputStream is= null; + BufferedImage bi=null; + try { + //is = new FileInputStream(new File(File.separator+"HellohaoData"+File.separator+key1+"/"+key2+"/"+key3+"/TOIMG"+key4+"N."+key5)); + bi= ImageIO.read(new File(File.separator+"HellohaoData"+File.separator+key1+"/"+key2+"/"+key3+"/TOIMG"+key4+"N."+key5)); + //is.close(); + //将图片输出给浏览器 + BufferedImage image = (bi) ; + OutputStream os = response.getOutputStream(); + ImageIO.write(image, head, os); + } catch (Exception e) { + Print.warning("寻找本地文件出错:"+e.getMessage()); + e.printStackTrace(); + try { + response.sendRedirect("/404"); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + } + + @GetMapping("/{key1:\\d+}/{key2}/{key3}/TOIMG{key4}N.{key5}") + @ResponseBody + public ResponseEntity selectByFyTow(final HttpServletRequest request, + HttpServletResponse response, + @PathVariable("key1") String key1, + @PathVariable("key2") String key2, + @PathVariable("key3") String key3, + @PathVariable("key4") String key4, + @PathVariable("key5") String key5) { + MediaType mediaType =null; + File file = new File(File.separator+"HellohaoData"+File.separator+key1+"/"+key2+"/"+key3+"/TOIMG"+key4+"N."+key5); + if (!file.exists()) { + try { + response.sendRedirect("/404"); + } catch (IOException e) { + e.printStackTrace(); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body("

404 FILE NOT FOUND

"); + } + } + if(key5.equals("png")){ + mediaType = MediaType.IMAGE_PNG; + }else if(key5.equals("gif")){ + mediaType = MediaType.IMAGE_GIF; + }else{ + mediaType = MediaType.IMAGE_JPEG; + } + HttpHeaders headers = new HttpHeaders(); + headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); + // headers.setContentDispositionFormData("attachment", URLUtil.encode(file.getName())); + headers.add("Pragma", "no-cache"); + headers.add("Expires", "0"); + headers.add("Last-Modified", new Date().toString()); + headers.add("ETag", String.valueOf(System.currentTimeMillis())); + return ResponseEntity + .ok() + .headers(headers) + .contentLength(file.length()) + .contentType(mediaType) + .body(new FileSystemResource(file)); + } + private Integer yzupdate(){ Calendar cal = Calendar.getInstance(); int y=cal.get(Calendar.YEAR); @@ -434,4 +474,5 @@ public class UpdateImgController { return "err"; } + } diff --git a/src/main/java/cn/hellohao/controller/UserController.java b/src/main/java/cn/hellohao/controller/UserController.java index 7756f73..fa6809c 100644 --- a/src/main/java/cn/hellohao/controller/UserController.java +++ b/src/main/java/cn/hellohao/controller/UserController.java @@ -1,5 +1,6 @@ package cn.hellohao.controller; +import java.net.URLDecoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @@ -7,7 +8,9 @@ import java.util.Random; import java.util.UUID; import javax.mail.internet.MimeMessage; +import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.validation.Valid; @@ -108,16 +111,20 @@ public class UserController { @RequestMapping("/login") @ResponseBody - public String login( HttpSession httpSession, String email, String password,Integer logotmp) { + public String login( HttpServletResponse response,HttpSession httpSession, String email, String password,Integer logotmp) { JSONArray jsonArray = new JSONArray(); if((logotmp-number1)==(istmp1-number1)){ String basepass = Base64Encryption.encryptBASE64(password.getBytes()); - Integer ret = userService.login(email, basepass); + Integer ret = userService.login(email, basepass,null); if (ret > 0) { User user = userService.getUsers(email); if (user.getIsok() == 1) { httpSession.setAttribute("user", user); httpSession.setAttribute("email", user.getEmail()); + Cookie cookie = new Cookie("Hellohao_UniqueUserKey", userService.getUsers(user.getEmail()).getUid()); + cookie.setMaxAge(60*60*24*90); + cookie.setPath("/"); + response.addCookie(cookie); jsonArray.add(1); } else if(ret==-1){ jsonArray.add(-1); @@ -133,11 +140,48 @@ public class UserController { return jsonArray.toString(); } + + @RequestMapping("/login_c") + @ResponseBody + public String login( HttpSession httpSession, String Hellohao_UniqueUserKey) { + JSONArray jsonArray = new JSONArray(); + Integer ret = userService.login(null, null,Hellohao_UniqueUserKey); + if (ret > 0) { + User user = userService.getUsersMail(Hellohao_UniqueUserKey); + if (user.getIsok() == 1) { + httpSession.setAttribute("user", user); + httpSession.setAttribute("email", user.getEmail()); + jsonArray.add(1); + } else if(ret==-1){ + jsonArray.add(-1); + }else { + jsonArray.add(-2); + } + } else { + jsonArray.add(0); + } + return jsonArray.toString(); + } + //退出 @RequestMapping(value = "/exit.do") @ResponseBody - public String exit(Model model, HttpServletRequest request, HttpSession session) { + public String exit(Model model, HttpServletRequest request, HttpServletResponse response, HttpSession session) { JSONObject jsonObject = new JSONObject(); + Cookie[] cookies = request.getCookies(); + if(cookies!=null){ + for (Cookie cookie : cookies) { + Cookie c = null; + cookie.setPath("/"); + if(cookie.getName().equals("Hellohao_UniqueUserKey")){ + //cookie.setValue(null); + c = new Cookie("Hellohao_UniqueUserKey",""); + c.setPath("/"); + cookie.setMaxAge(0);//60*60*24*90 + response.addCookie(c); + } + } + } //注销,移除session User user = (User) session.getAttribute("user"); if (user.getEmail() != null && user.getPassword() != null) { diff --git a/src/main/java/cn/hellohao/dao/AlbumMapper.java b/src/main/java/cn/hellohao/dao/AlbumMapper.java new file mode 100644 index 0000000..2cd8b51 --- /dev/null +++ b/src/main/java/cn/hellohao/dao/AlbumMapper.java @@ -0,0 +1,25 @@ +package cn.hellohao.dao; + +import cn.hellohao.pojo.Album; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import javax.validation.constraints.Max; +import java.util.List; + +/** + * @author Hellohao + * @version 1.0 + * @date 2019-12-18 22:15 + */ +@Mapper +public interface AlbumMapper { + + Album selectAlbum(Album album); + + Integer addAlbum(Album album); + + Integer deleteAlbum(@Param("albumkey") String albumkey); + + List selectAlbumURLList(Album album); +} diff --git a/src/main/java/cn/hellohao/dao/DomainMapper.java b/src/main/java/cn/hellohao/dao/DomainMapper.java deleted file mode 100644 index d86b2bb..0000000 --- a/src/main/java/cn/hellohao/dao/DomainMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.hellohao.dao; - -import cn.hellohao.pojo.Domain; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -/** - * @author Hellohao - * @version 1.0 - * @date 2019/8/21 9:46 - */ -@Mapper -public interface DomainMapper { - Integer getDomain(@Param("domain") String domain); - -} diff --git a/src/main/java/cn/hellohao/dao/ImgAndAlbumMapper.java b/src/main/java/cn/hellohao/dao/ImgAndAlbumMapper.java new file mode 100644 index 0000000..79c77a8 --- /dev/null +++ b/src/main/java/cn/hellohao/dao/ImgAndAlbumMapper.java @@ -0,0 +1,26 @@ +package cn.hellohao.dao; + +import cn.hellohao.pojo.Images; +import cn.hellohao.pojo.ImgAndAlbum; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Hellohao + * @version 1.0 + * @date 2019-12-18 22:15 + */ +@Mapper +public interface ImgAndAlbumMapper { + Integer addImgAndAlbum(ImgAndAlbum imgAndAlbum); + + List getAlbumForImgname(@Param("imgname") String imgname); + + Integer deleteImgAndAlbum(@Param("imgname") String imgname); + + Integer deleteImgAndAlbumForKey(@Param("albumkey") String albumkey); + + List selectImgForAlbumkey(@Param("albumkey") String albumkey); +} diff --git a/src/main/java/cn/hellohao/dao/ImgMapper.java b/src/main/java/cn/hellohao/dao/ImgMapper.java index cae5602..cf66f10 100644 --- a/src/main/java/cn/hellohao/dao/ImgMapper.java +++ b/src/main/java/cn/hellohao/dao/ImgMapper.java @@ -20,7 +20,7 @@ public interface ImgMapper { Integer counts(@Param("userid") Integer userid); - Integer setabnormal(@Param("imgname") String imgname,@Param("abnormal") String abnormal); + Integer setImg(Images images); Integer deleimgname(@Param("imgname") String imgname); Integer deleall(@Param("id") Integer id); @@ -28,4 +28,10 @@ public interface ImgMapper { List gettimeimg(@Param("time") String time); Integer getusermemory(@Param("userid") Integer userid); + + Integer md5Count(@Param("md5key") String md5key); + + Images selectImgUrlByMD5(@Param("md5key") String md5key); + + } diff --git a/src/main/java/cn/hellohao/dao/UserMapper.java b/src/main/java/cn/hellohao/dao/UserMapper.java index ed4023e..6a4f831 100644 --- a/src/main/java/cn/hellohao/dao/UserMapper.java +++ b/src/main/java/cn/hellohao/dao/UserMapper.java @@ -14,7 +14,7 @@ public interface UserMapper { Integer register(User user); //登录 - Integer login(@Param("email") String email, @Param("password") String password); + Integer login(@Param("email") String email, @Param("password") String password,@Param("uid") String uid); //获取用户信息 User getUsers(@Param("email") String email); diff --git a/src/main/java/cn/hellohao/interceptor/InterceptorConfig.java b/src/main/java/cn/hellohao/interceptor/InterceptorConfig.java index 8fc4cac..04453f1 100644 --- a/src/main/java/cn/hellohao/interceptor/InterceptorConfig.java +++ b/src/main/java/cn/hellohao/interceptor/InterceptorConfig.java @@ -1,13 +1,20 @@ package cn.hellohao.interceptor; import java.io.PrintWriter; +import java.net.URLDecoder; +import java.net.URLEncoder; +import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import cn.hellohao.pojo.User; +import cn.hellohao.service.impl.NOSImageupload; +import cn.hellohao.service.impl.UserServiceImpl; +import cn.hellohao.utils.Base64Encryption; import cn.hellohao.utils.Print; +import cn.hellohao.utils.SpringContextHolder; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; @@ -25,17 +32,40 @@ public class InterceptorConfig implements HandlerInterceptor { */ //这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + UserServiceImpl userService = SpringContextHolder.getBean(UserServiceImpl.class); HttpSession session = request.getSession(); - //这里的User是登陆时放入session的 - User user = (User) session.getAttribute("user"); + //这里的User是登陆时放入session的 +// User user = (User) session.getAttribute("user"); +// if(user==null){ +// Cookie[] cookies = request.getCookies(); +// String Hellohao_UniqueUserKey = ""; +// for (Cookie cookie : cookies) { +// if(cookie.getName().equals("Hellohao_UniqueUserKey") && Hellohao_UniqueUserKey.equals("")){ +// Hellohao_UniqueUserKey = URLDecoder.decode(cookie.getValue(), "GBK"); +// } +// } +// +// if(Hellohao_UniqueUserKey!=null && !Hellohao_UniqueUserKey.equals("")){ +// //String basepass = Base64Encryption.encryptBASE64(pass.getBytes()); +// Integer ret = userService.login(null, null,Hellohao_UniqueUserKey); +// if (ret > 0) { +// User u = userService.getUsersMail(Hellohao_UniqueUserKey); +// if (u.getIsok() == 1) { +// session.setAttribute("user", u); +// session.setAttribute("email", u.getEmail()); +// //request.getRequestDispatcher("/admin/goadmin").forward(request, response); +// } +// } +// } +// +// } + User suser = (User) session.getAttribute("user"); String email = null; Integer level = 0; - if (user != null) { - email = user.getEmail(); - level = user.getLevel(); + if (suser != null) { + email = suser.getEmail(); + level = suser.getLevel(); } - // String email = (String) session.getAttribute("email"); - //如果session中没有user,表示没登陆 if (email == null) { //这个方法返回false表示忽略当前请求,如果一个用户调用了需要登陆才能使用的接口,如果他没有登陆这里会直接忽略掉 //当然你可以利用response给用户返回一些提示信息,告诉他没登陆 @@ -43,7 +73,6 @@ public class InterceptorConfig implements HandlerInterceptor { request.getRequestDispatcher("/err").forward(request, response); return false; } else { - //System.out.println("进入成功"); return true; //如果session里有user,表示该用户已经登陆,放行,用户即可继续调用自己需要的接口 } diff --git a/src/main/java/cn/hellohao/interceptor/WebAppConfig.java b/src/main/java/cn/hellohao/interceptor/WebAppConfig.java index 94893a4..8375495 100644 --- a/src/main/java/cn/hellohao/interceptor/WebAppConfig.java +++ b/src/main/java/cn/hellohao/interceptor/WebAppConfig.java @@ -18,6 +18,8 @@ public class WebAppConfig implements WebMvcConfigurer { private InterceptorConfig interceptorConfig; @Autowired private InterceptorConfigTwo interceptorConfigTwo; + @Autowired + private InterceptorConfigWeb interceptorConfigWeb; // 这个方法是用来配置静态资源的,比如html,js,css,等等 @@ -31,8 +33,13 @@ public class WebAppConfig implements WebMvcConfigurer { // addPathPatterns("/**") 表示拦截所有的请求, // excludePathPatterns("/login", "/register") 表示除了登陆与注册之外,因为登陆注册不需要登陆也可以访问 //registry.addInterceptor(interceptorConfig).addPathPatterns("admin/**").excludePathPatterns("/login", "/register"); - registry.addInterceptor(interceptorConfig).addPathPatterns("/admin/**"); - registry.addInterceptor(interceptorConfigTwo).addPathPatterns("/admin/root/**"); + registry.addInterceptor(interceptorConfigWeb).addPathPatterns("/**") + .excludePathPatterns("/static/**","/**/*.css", "/**/*.js", "/**/*.png", "/**/*.jpg", + "/**/*.jpeg", "/**/*.gif", "/**/fonts/*", "/**/*.svg","/**/*.*", + "/clientupimg/**","/clientupurlimg/**","/clientlogin/**","/notices/**","/systemupdate/**","/getdomain/**", + "/getNoticeText/**","/getNotice/**","/addalbum/**","/addalbum/**","/SaveForAlbum/**","/TOALBUM*N/**","/TOALBUM*N/**"); + registry.addInterceptor(interceptorConfig).addPathPatterns("/admin/**").excludePathPatterns("/**/*.*"); + registry.addInterceptor(interceptorConfigTwo).addPathPatterns("/admin/root/**").excludePathPatterns("/**/*.*"); diff --git a/src/main/java/cn/hellohao/pojo/Album.java b/src/main/java/cn/hellohao/pojo/Album.java new file mode 100644 index 0000000..899147a --- /dev/null +++ b/src/main/java/cn/hellohao/pojo/Album.java @@ -0,0 +1,75 @@ +package cn.hellohao.pojo; + +/** + * @author Hellohao + * @version 1.0 + * @date 2019-12-18 22:13 + */ +public class Album { + private String albumkey; + private String albumtitle; + private String createdate; + private String password; + private Integer userid; + private String username; + + public Album() { + } + + public Album(String albumkey, String albumtitle, String createdate, String password, Integer userid, String username) { + this.albumkey = albumkey; + this.albumtitle = albumtitle; + this.createdate = createdate; + this.password = password; + this.userid = userid; + this.username = username; + } + + public String getAlbumkey() { + return albumkey; + } + + public void setAlbumkey(String albumkey) { + this.albumkey = albumkey; + } + + public String getAlbumtitle() { + return albumtitle; + } + + public void setAlbumtitle(String albumtitle) { + this.albumtitle = albumtitle; + } + + public String getCreatedate() { + return createdate; + } + + public void setCreatedate(String createdate) { + this.createdate = createdate; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Integer getUserid() { + return userid; + } + + public void setUserid(Integer userid) { + this.userid = userid; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } +} diff --git a/src/main/java/cn/hellohao/pojo/Config.java b/src/main/java/cn/hellohao/pojo/Config.java index 586370d..0d5ebec 100644 --- a/src/main/java/cn/hellohao/pojo/Config.java +++ b/src/main/java/cn/hellohao/pojo/Config.java @@ -18,11 +18,12 @@ public class Config { private String webms; private String webkeywords; private String webfavicons; + private Integer theme; public Config() { } - public Config(Integer id, Integer sourcekey, Integer emails, String webname, String explain, String video, Integer backtype, String links, String notice, String baidu, String domain, String background1, String background2, String sett, String webms, String webkeywords, String webfavicons) { + public Config(Integer id, Integer sourcekey, Integer emails, String webname, String explain, String video, Integer backtype, String links, String notice, String baidu, String domain, String background1, String background2, String sett, String webms, String webkeywords, String webfavicons, Integer theme) { this.id = id; this.sourcekey = sourcekey; this.emails = emails; @@ -40,6 +41,7 @@ public class Config { this.webms = webms; this.webkeywords = webkeywords; this.webfavicons = webfavicons; + this.theme = theme; } public Integer getId() { @@ -177,4 +179,12 @@ public class Config { public void setWebfavicons(String webfavicons) { this.webfavicons = webfavicons; } + + public Integer getTheme() { + return theme; + } + + public void setTheme(Integer theme) { + this.theme = theme; + } } diff --git a/src/main/java/cn/hellohao/pojo/Images.java b/src/main/java/cn/hellohao/pojo/Images.java index 77a8ea6..0de666b 100644 --- a/src/main/java/cn/hellohao/pojo/Images.java +++ b/src/main/java/cn/hellohao/pojo/Images.java @@ -2,6 +2,9 @@ package cn.hellohao.pojo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; public class Images { // 默认的时间字符串格式 @@ -20,13 +23,23 @@ public class Images { private Integer storageType; private String starttime; private String stoptime; - + @Length(min = 1, max = 100, message = "图片描述不得超过100个字符") + private String explains; + private String md5key; + //Album + @NotBlank(message = "画廊标题不能为空") + @Length(min = 1, max = 50, message = "画廊标题不得超过50个字符") + private String albumtitle; + @Length(min = 0, max = 10, message = "画廊密码不能超过10个字符") + private String password; + private Integer selecttype; + private String notes; public Images() { super(); } - public Images(Integer id, String imgname, String imgurl, Integer userid, Integer sizes, String abnormal, Integer source, Integer imgtype, String updatetime, String username, Integer storageType, String starttime, String stoptime) { + public Images(Integer id, String imgname, String imgurl, Integer userid, Integer sizes, String abnormal, Integer source, Integer imgtype, String updatetime, String username, Integer storageType, String starttime, String stoptime, @Length(min = 1, max = 100, message = "图片描述不得超过100个字符") String explains, String md5key, String albumtitle,String password, Integer selecttype, String notes) { this.id = id; this.imgname = imgname; this.imgurl = imgurl; @@ -40,6 +53,12 @@ public class Images { this.storageType = storageType; this.starttime = starttime; this.stoptime = stoptime; + this.explains = explains; + this.md5key = md5key; + this.albumtitle = albumtitle; + this.password = password; + this.selecttype = selecttype; + this.notes = notes; } public Integer getId() { @@ -145,6 +164,54 @@ public class Images { public void setStoptime(String stoptime) { this.stoptime = stoptime; } + + public String getExplains() { + return explains; + } + + public void setExplains(String explains) { + this.explains = explains; + } + + public String getMd5key() { + return md5key; + } + + public void setMd5key(String md5key) { + this.md5key = md5key; + } + + public String getAlbumtitle() { + return albumtitle; + } + + public void setAlbumtitle(String albumtitle) { + this.albumtitle = albumtitle; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Integer getSelecttype() { + return selecttype; + } + + public void setSelecttype(Integer selecttype) { + this.selecttype = selecttype; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } } diff --git a/src/main/java/cn/hellohao/pojo/ImgAndAlbum.java b/src/main/java/cn/hellohao/pojo/ImgAndAlbum.java new file mode 100644 index 0000000..1895c8c --- /dev/null +++ b/src/main/java/cn/hellohao/pojo/ImgAndAlbum.java @@ -0,0 +1,45 @@ +package cn.hellohao.pojo; + +/** + * @author Hellohao + * @version 1.0 + * @date 2019-12-18 22:12 + */ +public class ImgAndAlbum { + private String imgname; + private String albumkey; + private String notes; + + public ImgAndAlbum() { + } + + public ImgAndAlbum(String imgname, String albumkey, String notes) { + this.imgname = imgname; + this.albumkey = albumkey; + this.notes = notes; + } + + public String getImgname() { + return imgname; + } + + public void setImgname(String imgname) { + this.imgname = imgname; + } + + public String getAlbumkey() { + return albumkey; + } + + public void setAlbumkey(String albumkey) { + this.albumkey = albumkey; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } +} diff --git a/src/main/java/cn/hellohao/pojo/Msg.java b/src/main/java/cn/hellohao/pojo/Msg.java new file mode 100644 index 0000000..57a2804 --- /dev/null +++ b/src/main/java/cn/hellohao/pojo/Msg.java @@ -0,0 +1,112 @@ +package cn.hellohao.pojo; + +import java.io.Serializable; + +/** + * 交互消息,默认成功 + * @author Hellohao + * + */ +public class Msg implements Serializable { + + private static final long serialVersionUID = 5196249482551119279L; + + //返回码 + private String code ="200"; + + //提示信息 + private String info="操作成功"; + + //返回数据 + private Object data; + + //异常 + private String exceptions; + + + public Msg() {} + + public void set(String code, String info){ + this.code = code; + this.info = info; + } + + /** + * 默认成功操作 + * @param data + */ + public Msg(Object data) { + super(); + this.data = data; + } + + public Msg(String code, String info) { + super(); + this.code = code; + this.info = info; + } + + + public Msg(String code, String info, Object data) { + super(); + this.code = code; + this.info = info; + this.data = data; + } + + + public Msg(String code, String info, Object data, String exceptions) { + super(); + this.code = code; + this.info = info; + this.data = data; + this.exceptions = exceptions; + } + + + public String getCode() { + return code; + } + + + public void setCode(String code) { + this.code = code; + } + + + public String getInfo() { + return info; + } + + + public void setInfo(String info) { + this.info = info; + } + + + public Object getData() { + return data; + } + + + public void setData(Object data) { + this.data = data; + } + + + public String getExceptions() { + return exceptions; + } + + + public void setExceptions(String exceptions) { + this.exceptions = exceptions; + } + + @Override + public String toString() { + return "Msg [code=" + code + ", info=" + info + ", data=" + data + + ", exceptions=" + exceptions + "]"; + } + +} diff --git a/src/main/java/cn/hellohao/quartz/SchedulerTask.java b/src/main/java/cn/hellohao/quartz/SchedulerTask.java index 03d94a0..14ee7d7 100644 --- a/src/main/java/cn/hellohao/quartz/SchedulerTask.java +++ b/src/main/java/cn/hellohao/quartz/SchedulerTask.java @@ -6,7 +6,9 @@ import cn.hellohao.pojo.Keys; import cn.hellohao.service.impl.ImgServiceImpl; import cn.hellohao.service.impl.ImgreviewServiceImpl; import cn.hellohao.service.impl.KeysServiceImpl; +import cn.hellohao.service.impl.NOSImageupload; import cn.hellohao.utils.LocUpdateImg; +import cn.hellohao.utils.SpringContextHolder; import com.alibaba.fastjson.JSON; import com.baidu.aip.contentcensor.AipContentCensor; import com.baidu.aip.contentcensor.EImgType; @@ -90,25 +92,28 @@ public class SchedulerTask { schedulerTask.imgreviewService.updateByPrimaryKeySelective(imgreview1); Keys key =null; if(images.getSource()==1){ - key = keysService.selectKeys(images.getSource()); + key =schedulerTask.keysService.selectKeys(images.getSource()); schedulerTask.imgService.delect(key, images.getImgname()); }else if (images.getSource()==2){ - key = keysService.selectKeys(images.getSource()); + key = schedulerTask.keysService.selectKeys(images.getSource()); schedulerTask.imgService.delectOSS(key, images.getImgname()); }else if(images.getSource()==3){ - key = keysService.selectKeys(images.getSource()); + key = schedulerTask.keysService.selectKeys(images.getSource()); schedulerTask.imgService.delectUSS(key, images.getImgname()); }else if(images.getSource()==4){ - key = keysService.selectKeys(images.getSource()); + key = schedulerTask.keysService.selectKeys(images.getSource()); schedulerTask.imgService.delectKODO(key, images.getImgname()); }else if(images.getSource()==5){ LocUpdateImg.deleteLOCImg(images.getImgname()); }else if(images.getSource()==6){ - key = keysService.selectKeys(images.getSource()); + key = schedulerTask.keysService.selectKeys(images.getSource()); schedulerTask.imgService.delectCOS(key, images.getImgname()); }else if(images.getSource()==7){ - key = keysService.selectKeys(images.getSource()); + key = schedulerTask.keysService.selectKeys(images.getSource()); schedulerTask.imgService.delectFTP(key, images.getImgname()); + }else if(images.getSource()==8){ + key = schedulerTask.keysService.selectKeys(images.getSource()); + schedulerTask.imgService.delectUFile(key, images.getImgname()); }else{ System.err.println("未获取到对象存储参数,上传失败。"); } diff --git a/src/main/java/cn/hellohao/quartz/TempImgTask.java b/src/main/java/cn/hellohao/quartz/TempImgTask.java index b91d679..4fb41aa 100644 --- a/src/main/java/cn/hellohao/quartz/TempImgTask.java +++ b/src/main/java/cn/hellohao/quartz/TempImgTask.java @@ -1,5 +1,6 @@ package cn.hellohao.quartz; +import cn.hellohao.pojo.FixedResources; import cn.hellohao.pojo.Keys; import cn.hellohao.service.impl.ImgServiceImpl; import cn.hellohao.service.impl.KeysServiceImpl; @@ -42,6 +43,10 @@ public class TempImgTask { public void start() throws InterruptedException { + File f = new File(FixedResources.LOCPATH); + if (!f.exists()) { + f.mkdirs(); + } List list = new ArrayList<>(); File file = new File(File.separator + "HellohaoData"+File.separator+"img.ini"); //判断文件是否存在 @@ -52,7 +57,6 @@ public class TempImgTask { String s = null; while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行 result.append(System.lineSeparator() + s); - //Print.Normal( s); String str = s; String[] strArr = str.split("\\|"); System.out.println(strArr.length); //这里输出3 diff --git a/src/main/java/cn/hellohao/service/AlbumService.java b/src/main/java/cn/hellohao/service/AlbumService.java new file mode 100644 index 0000000..fd9a7d6 --- /dev/null +++ b/src/main/java/cn/hellohao/service/AlbumService.java @@ -0,0 +1,24 @@ +package cn.hellohao.service; + +import cn.hellohao.pojo.Album; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author Hellohao + * @version 1.0 + * @date 2019-12-18 22:15 + */ +@Service +public interface AlbumService { + + Album selectAlbum(Album album); + + Integer addAlbum(Album album); + + Integer deleteAlbum(String albumkey); + + List selectAlbumURLList(Album album); +} diff --git a/src/main/java/cn/hellohao/service/DomainService.java b/src/main/java/cn/hellohao/service/DomainService.java deleted file mode 100644 index 0decf77..0000000 --- a/src/main/java/cn/hellohao/service/DomainService.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.hellohao.service; - -import cn.hellohao.pojo.Domain; -import org.springframework.stereotype.Service; - -/** - * @author Hellohao - * @version 1.0 - * @date 2019/8/21 9:50 - */ -@Service -public interface DomainService { - Integer getDomain(String domain); -} diff --git a/src/main/java/cn/hellohao/service/ImgAndAlbumService.java b/src/main/java/cn/hellohao/service/ImgAndAlbumService.java new file mode 100644 index 0000000..80b95a9 --- /dev/null +++ b/src/main/java/cn/hellohao/service/ImgAndAlbumService.java @@ -0,0 +1,25 @@ +package cn.hellohao.service; + +import cn.hellohao.pojo.Images; +import cn.hellohao.pojo.ImgAndAlbum; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author Hellohao + * @version 1.0 + * @date 2019-12-18 22:29 + */ +@Service +public interface ImgAndAlbumService { + Integer addImgAndAlbum(ImgAndAlbum imgAndAlbum); + + List getAlbumForImgname(String imgname); + + Integer deleteImgAndAlbum(String imgname); + + Integer deleteImgAndAlbumForKey(String albumkey); + + List selectImgForAlbumkey(String albumkey); +} diff --git a/src/main/java/cn/hellohao/service/ImgService.java b/src/main/java/cn/hellohao/service/ImgService.java index 843d518..338be78 100644 --- a/src/main/java/cn/hellohao/service/ImgService.java +++ b/src/main/java/cn/hellohao/service/ImgService.java @@ -6,7 +6,9 @@ import java.util.List; import org.apache.ibatis.annotations.Param; import cn.hellohao.pojo.Images; +import org.springframework.stereotype.Service; +@Service public interface ImgService { List selectimg(Images images); @@ -18,7 +20,7 @@ public interface ImgService { Integer counts(Integer userid); - Integer setabnormal(String imgname,String abnormal); + Integer setImg(Images images); Integer deleimgname(String imgname); @@ -27,4 +29,9 @@ public interface ImgService { List gettimeimg(String time); Integer getusermemory(Integer userid); + + Integer md5Count(String md5key); + + Images selectImgUrlByMD5(String md5key); + } diff --git a/src/main/java/cn/hellohao/service/ImgreviewService.java b/src/main/java/cn/hellohao/service/ImgreviewService.java index 8214532..f665556 100644 --- a/src/main/java/cn/hellohao/service/ImgreviewService.java +++ b/src/main/java/cn/hellohao/service/ImgreviewService.java @@ -1,7 +1,9 @@ package cn.hellohao.service; import cn.hellohao.pojo.Imgreview; +import org.springframework.stereotype.Service; +@Service public interface ImgreviewService { int deleteByPrimaryKey(Integer id); diff --git a/src/main/java/cn/hellohao/service/KeysService.java b/src/main/java/cn/hellohao/service/KeysService.java index 540e390..177ece2 100644 --- a/src/main/java/cn/hellohao/service/KeysService.java +++ b/src/main/java/cn/hellohao/service/KeysService.java @@ -2,9 +2,11 @@ package cn.hellohao.service; import cn.hellohao.pojo.Keys; +import org.springframework.stereotype.Service; import java.util.List; +@Service public interface KeysService { //查询密钥 Keys selectKeys(Integer storageType); diff --git a/src/main/java/cn/hellohao/service/NoticeService.java b/src/main/java/cn/hellohao/service/NoticeService.java index 498356e..1fe01c4 100644 --- a/src/main/java/cn/hellohao/service/NoticeService.java +++ b/src/main/java/cn/hellohao/service/NoticeService.java @@ -1,5 +1,8 @@ package cn.hellohao.service; +import org.springframework.stereotype.Service; + +@Service public interface NoticeService { String getNotice(); diff --git a/src/main/java/cn/hellohao/service/UserService.java b/src/main/java/cn/hellohao/service/UserService.java index afd17f9..031e29a 100644 --- a/src/main/java/cn/hellohao/service/UserService.java +++ b/src/main/java/cn/hellohao/service/UserService.java @@ -3,15 +3,17 @@ package cn.hellohao.service; import cn.hellohao.pojo.Images; import cn.hellohao.pojo.User; import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; import java.util.List; +@Service public interface UserService { //注册 Integer register(User user); //登录 - Integer login(String email, String password); + Integer login(String email, String password,String uid); //获取用户信息 User getUsers(String email); diff --git a/src/main/java/cn/hellohao/service/impl/AlbumServiceI.java b/src/main/java/cn/hellohao/service/impl/AlbumServiceI.java new file mode 100644 index 0000000..71049af --- /dev/null +++ b/src/main/java/cn/hellohao/service/impl/AlbumServiceI.java @@ -0,0 +1,89 @@ +package cn.hellohao.service.impl; + +import cn.hellohao.dao.AlbumMapper; +import cn.hellohao.dao.ConfigMapper; +import cn.hellohao.dao.ImgAndAlbumMapper; +import cn.hellohao.exception.CodeException; +import cn.hellohao.pojo.Album; +import cn.hellohao.pojo.ImgAndAlbum; +import cn.hellohao.pojo.Msg; +import cn.hellohao.service.AlbumService; +import com.alibaba.fastjson.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.UUID; + +/** + * @author Hellohao + * @version 1.0 + * @date 2019-12-18 22:30 + */ +@Service +public class AlbumServiceI implements AlbumService { + @Autowired + AlbumMapper albumMapper; + @Autowired + ImgAndAlbumMapper andAlbumMapper; + @Autowired + ConfigMapper configMapper; + + @Override + public Album selectAlbum(Album album) { + return albumMapper.selectAlbum(album); + } + + @Override + public Integer addAlbum(Album album) { + return albumMapper.addAlbum(album); + } + + @Transactional + public Integer addAlbumForImgAndAlbumMapper(ImgAndAlbum imgAndAlbum) { + Integer tem = 0; + Integer r2 = andAlbumMapper.addImgAndAlbum(imgAndAlbum); + if(r2>0){ + tem = 1; + }else{ + throw new CodeException("插入画廊数据失败,回滚"); + } + return tem; + } + + @Override + public Integer deleteAlbum(String albumkey) { + return albumMapper.deleteAlbum(albumkey); + } + + @Override + public List selectAlbumURLList(Album album) { + return albumMapper.selectAlbumURLList(album); + } + + @Transactional + public Integer delete(String albumkey) { + Integer ret1 = albumMapper.deleteAlbum(albumkey); + if(ret1>0){ + ret1 = andAlbumMapper.deleteImgAndAlbumForKey(albumkey); + }else{ + throw new CodeException("删除画廊失败。"); + } + return ret1; + } + + @Transactional + public Integer deleteAll(String[] albumkeyArr) { + Integer ret1 = 0 ; + for (String s : albumkeyArr) { + ret1 = albumMapper.deleteAlbum(s); + if(ret1>0){ + ret1 = andAlbumMapper.deleteImgAndAlbumForKey(s); + }else{ + throw new CodeException("删除画廊失败。"); + } + } + return ret1; + } +} diff --git a/src/main/java/cn/hellohao/service/impl/COSImageupload.java b/src/main/java/cn/hellohao/service/impl/COSImageupload.java index 487a799..085bd86 100644 --- a/src/main/java/cn/hellohao/service/impl/COSImageupload.java +++ b/src/main/java/cn/hellohao/service/impl/COSImageupload.java @@ -3,10 +3,7 @@ package cn.hellohao.service.impl; import cn.hellohao.pojo.Keys; import cn.hellohao.pojo.ReturnImage; import cn.hellohao.pojo.UploadConfig; -import cn.hellohao.utils.DateUtils; -import cn.hellohao.utils.DeleImg; -import cn.hellohao.utils.ImgUrlUtil; -import cn.hellohao.utils.Print; +import cn.hellohao.utils.*; import com.netease.cloud.auth.BasicCredentials; import com.netease.cloud.auth.Credentials; import com.netease.cloud.services.nos.NosClient; @@ -18,9 +15,7 @@ import com.qcloud.cos.auth.BasicCOSCredentials; import com.qcloud.cos.auth.COSCredentials; import com.qcloud.cos.exception.CosClientException; import com.qcloud.cos.exception.CosServiceException; -import com.qcloud.cos.model.Bucket; -import com.qcloud.cos.model.PutObjectRequest; -import com.qcloud.cos.model.PutObjectResult; +import com.qcloud.cos.model.*; import com.qcloud.cos.region.Region; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -36,94 +31,91 @@ public class COSImageupload { static Keys key; public Map ImageuploadCOS(Map fileMap, String username, - Map fileMap2,Integer setday) throws Exception { + Map fileMap2,Integer setday) { // 要上传文件的路径 if(fileMap2==null){ File file = null; Map ImgUrl = new HashMap<>(); - for (Map.Entry entry : fileMap.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - file = changeFile(entry.getValue()); - try { - // 指定要上传到的存储桶 - String bucketName = BarrelName; - // 指定要上传到 COS 上对象键 - String userkey =username + "/" + uuid+times + "." + entry.getKey(); - PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, userkey, file); - PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgname(entry.getValue().getOriginalFilename()); - returnImage.setImgurl(key.getRequestAddress() + "/" + userkey); - ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "6"); + try { + for (Map.Entry entry : fileMap.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + file = SetFiles.changeFile(entry.getValue()); + try { + // 指定要上传到的存储桶 + String bucketName = BarrelName; + // 指定要上传到 COS 上对象键 + String userkey =username + "/" + uuid+times + "." + entry.getKey(); + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, userkey, file); + PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgname(userkey);//entry.getValue().getOriginalFilename() + returnImage.setImgurl(key.getRequestAddress() + "/" + userkey); + ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "6"); + } + } catch (CosServiceException serverException) { + serverException.printStackTrace(); + } catch (CosClientException clientException) { + clientException.printStackTrace(); } - } catch (CosServiceException serverException) { - serverException.printStackTrace(); - } catch (CosClientException clientException) { - clientException.printStackTrace(); } + }catch(Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; }else{ Map ImgUrl = new HashMap<>(); ObjectMetadata meta = new ObjectMetadata(); meta.setHeader("Content-Disposition", "inline"); - for (Map.Entry entry : fileMap2.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - String imgurl = entry.getValue(); - File file = new File(imgurl); - FileInputStream fileInputStream = new FileInputStream(file); - try { - String userkey =username + "/" + uuid+times + "." + entry.getKey(); - PutObjectRequest putObjectRequest = new PutObjectRequest(BarrelName, userkey, file); - PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgurl(key.getRequestAddress() + "/" + userkey); - ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "6"); + try { + for (Map.Entry entry : fileMap2.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + String imgurl = entry.getValue(); + File file = new File(imgurl); + FileInputStream fileInputStream = new FileInputStream(file); + try { + String userkey =username + "/" + uuid+times + "." + entry.getKey(); + PutObjectRequest putObjectRequest = new PutObjectRequest(BarrelName, userkey, file); + PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgurl(key.getRequestAddress() + "/" + userkey); + ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "6"); + } + boolean bb= new File(imgurl).getAbsoluteFile().delete(); + Print.Normal("删除情况"+bb); + } catch (Exception e) { + System.err.println("上传报错:" + e.getMessage()); + } + if(fileInputStream!=null){ + fileInputStream.close(); + Print.Normal("流已经关闭"); } - boolean bb= new File(imgurl).getAbsoluteFile().delete(); - Print.Normal("删除情况"+bb); - } catch (Exception e) { - System.err.println("上传报错:" + e.getMessage()); - } - if(fileInputStream!=null){ - fileInputStream.close(); - Print.Normal("流已经关闭"); } + }catch(Exception e){ + ImgUrl.put(null, 500); } cosClient.shutdown(); return ImgUrl; } } - // 转换文件方法 - private File changeFile(MultipartFile multipartFile) throws Exception { - // 获取文件名 - String fileName = multipartFile.getOriginalFilename(); - // 获取文件后缀 - String prefix = fileName.substring(fileName.lastIndexOf(".")); - // todo 修改临时文件文件名 - File file = File.createTempFile(fileName, prefix); - multipartFile.transferTo(file); - return file; - } - //初始化网易NOS对象存储 public static Integer Initialize(Keys k) { int ret = -1; if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getEndpoint()!=null && k.getBucketname()!=null && k.getRequestAddress()!=null ) { - if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("") - && !k.getBucketname().equals("") && !k.getRequestAddress().equals("") ) { + if (!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("") + && !k.getBucketname().equals("") && !k.getRequestAddress().equals("")) { String secretId = k.getAccessKey(); String secretKey = k.getAccessSecret(); COSCredentials cred = new BasicCOSCredentials(secretId, secretKey); @@ -131,8 +123,20 @@ public class COSImageupload { ClientConfig clientConfig = new ClientConfig(region); cosClient = new COSClient(cred, clientConfig); BarrelName = k.getBucketname(); - key = k; - ret = 1; + + ListObjectsRequest listObjectsRequest = new ListObjectsRequest(); + listObjectsRequest.setBucketName(k.getBucketname()); + listObjectsRequest.setDelimiter("/"); + listObjectsRequest.setMaxKeys(1); + ObjectListing objectListing = null; + try { + objectListing = cosClient.listObjects(listObjectsRequest); + key = k; + ret = 1; + } catch (Exception e) { + System.out.println("COS - Waiting for configuration。"); + ret = -1; + } } } return ret; @@ -148,7 +152,7 @@ public class COSImageupload { String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); String times = format1.format(new Date()); - file = changeFile(entry.getValue()); + file = SetFiles.changeFile_c(entry.getValue()); try { ReturnImage returnImage = new ReturnImage(); if(entry.getValue().getSize()/1024<=uploadConfig.getFilesizeuser()*1024){ diff --git a/src/main/java/cn/hellohao/service/impl/DomainServiceImpl.java b/src/main/java/cn/hellohao/service/impl/DomainServiceImpl.java deleted file mode 100644 index 02be1cd..0000000 --- a/src/main/java/cn/hellohao/service/impl/DomainServiceImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.hellohao.service.impl; - -import cn.hellohao.dao.DomainMapper; -import cn.hellohao.pojo.Domain; -import cn.hellohao.service.DomainService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -/** - * @author Hellohao - * @version 1.0 - * @date 2019/8/21 9:51 - */ -@Service -public class DomainServiceImpl implements DomainService { - @Autowired - private DomainMapper domainMapper; - - @Override - public Integer getDomain(String domain) { - return domainMapper.getDomain(domain); - } -} diff --git a/src/main/java/cn/hellohao/service/impl/FTPImageupload.java b/src/main/java/cn/hellohao/service/impl/FTPImageupload.java index b8d0c28..c4d65cd 100644 --- a/src/main/java/cn/hellohao/service/impl/FTPImageupload.java +++ b/src/main/java/cn/hellohao/service/impl/FTPImageupload.java @@ -21,7 +21,7 @@ public class FTPImageupload { static Keys key; public Map ImageuploadFTP(Map fileMap, String username, - Map fileMap2,Integer setday) throws Exception { + Map fileMap2,Integer setday) { String[] host = key.getEndpoint().split("\\:"); String h = host[0]; Integer p = Integer.parseInt(host[1]); @@ -32,68 +32,66 @@ public class FTPImageupload { File file = null; Map ImgUrl = new HashMap<>(); ftps.mkDir(File.separator+username); - for (Map.Entry entry : fileMap.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - file = changeFile(entry.getValue()); - String userkey =username + File.separator+ uuid+times + "." + entry.getKey(); - if (flag) { - ftps.upload(file, File.separator+userkey, ""); - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgname(entry.getValue().getOriginalFilename()); - returnImage.setImgurl(key.getRequestAddress() + File.separator+ userkey); - ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "7"); + try { + for (Map.Entry entry : fileMap.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + file = SetFiles.changeFile(entry.getValue()); + String userkey =username + "/"+ uuid+times + "." + entry.getKey(); + if (flag) { + ftps.upload(file, File.separator+userkey, ""); + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgname(userkey);//entry.getValue().getOriginalFilename() + returnImage.setImgurl(key.getRequestAddress() + "/"+ userkey); + ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "7"); + } + ftps.close(); } - ftps.close(); - } - Print.Normal("要上传的文件路径:"+File.separator+userkey); + Print.Normal("要上传的文件路径:"+File.separator+userkey); + } + }catch (Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; }else{ Map ImgUrl = new HashMap<>(); - for (Map.Entry entry : fileMap2.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - String imgurl = entry.getValue(); - File file = new File(imgurl); - String userkey =username + File.separator+ uuid+times + "." + entry.getKey(); - ftps.mkDir(File.separator+username); - if (flag) { - ftps.upload(file, File.separator+userkey, ""); - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgurl(key.getRequestAddress() + File.separator+ userkey); - ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "7"); + try { + for (Map.Entry entry : fileMap2.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + String imgurl = entry.getValue(); + File file = new File(imgurl); + String userkey =username + File.separator+ uuid+times + "." + entry.getKey(); + ftps.mkDir(File.separator+username); + if (flag) { + ftps.upload(file, File.separator+userkey, ""); + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgurl(key.getRequestAddress() + File.separator+ userkey); + ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "7"); + } + ftps.close(); } - ftps.close(); + boolean bb= new File(imgurl).getAbsoluteFile().delete(); + Print.Normal("删除情况"+bb); } - boolean bb= new File(imgurl).getAbsoluteFile().delete(); - Print.Normal("删除情况"+bb); + }catch (Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; } } - // 转换文件方法 - private File changeFile(MultipartFile multipartFile) throws Exception { - // 获取文件名 - String fileName = multipartFile.getOriginalFilename(); - // 获取文件后缀 - String prefix = fileName.substring(fileName.lastIndexOf(".")); - // todo 修改临时文件文件名 - File file = File.createTempFile(fileName, prefix); - multipartFile.transferTo(file); - return file; - } - //初始化FTP对象存储 public static Integer Initialize(Keys k) { int ret = -1; @@ -101,37 +99,39 @@ public class FTPImageupload { if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("") && !k.getRequestAddress().equals("") ) { FTPClient ftp = new FTPClient(); int flag = k.getEndpoint().indexOf(":"); - if(flag>0){ - String[] host = k.getEndpoint().split("\\:"); - String h = host[0]; - Integer p = Integer.parseInt(host[1]); - try { - if(!ftp.isConnected()){ - ftp.connect(h,p); - } - ftp.login(k.getAccessKey(), k.getAccessSecret()); - } catch (IOException e) { - e.printStackTrace(); - } - //获取服务器返回的状态码 - int reply = ftp.getReplyCode(); - /* - * 判断是否连接成功 - * 所有以2开头的代码是正完成响应。 - * FTP服务器将在最终发送一个肯定的完成响应成功完成命令。 - */ - if (!FTPReply.isPositiveCompletion(reply)) { + if(flag>0){ + String[] host = k.getEndpoint().split("\\:"); + String h = host[0]; + Integer p = Integer.parseInt(host[1]); try { - ftp.disconnect(); - }catch (IOException e){ - e.printStackTrace(); + if(!ftp.isConnected()){ + ftp.connect(h,p); + } + ftp.login(k.getAccessKey(), k.getAccessSecret()); + //获取服务器返回的状态码 + int reply = ftp.getReplyCode(); + /* + * 判断是否连接成功 + * 所有以2开头的代码是正完成响应。 + * FTP服务器将在最终发送一个肯定的完成响应成功完成命令。 + */ + if (!FTPReply.isPositiveCompletion(reply)) { + System.out.println("FTP - Waiting for configuration"); + ftp.disconnect(); + return -1; + } + ftpClient1 = ftp; + key = k; + ret = 1; + // if(ftp.printWorkingDirectory()==null){ + // Print.warning("FTP初始化失败,配置项错误"); + // return -1; + // } + } catch (IOException e) { + System.out.println("FTP - Waiting for configuration"); + return -1; } - ret = -1; - } - ftpClient1 = ftp; - key = k; - ret = 1; - } + } } } return ret; @@ -152,7 +152,7 @@ public class FTPImageupload { String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); String times = format1.format(new Date()); - file = changeFile(entry.getValue()); + file = SetFiles.changeFile_c(entry.getValue()); String userkey =username + File.separator+ uuid+times + "." + entry.getKey(); ftps.mkDir(File.separator+username); if (flag) { diff --git a/src/main/java/cn/hellohao/service/impl/ImgAndAlbumServiceImpl.java b/src/main/java/cn/hellohao/service/impl/ImgAndAlbumServiceImpl.java new file mode 100644 index 0000000..58da05b --- /dev/null +++ b/src/main/java/cn/hellohao/service/impl/ImgAndAlbumServiceImpl.java @@ -0,0 +1,45 @@ +package cn.hellohao.service.impl; + +import cn.hellohao.dao.ImgAndAlbumMapper; +import cn.hellohao.pojo.Images; +import cn.hellohao.pojo.ImgAndAlbum; +import cn.hellohao.service.ImgAndAlbumService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author Tiansh + * @version 1.0 + * @date 2019/12/19 15:40 + */ +@Service +public class ImgAndAlbumServiceImpl implements ImgAndAlbumService { + @Autowired + ImgAndAlbumMapper imgAndAlbumMapper; + @Override + public Integer addImgAndAlbum(ImgAndAlbum imgAndAlbum) { + return imgAndAlbumMapper.addImgAndAlbum(imgAndAlbum); + } + + @Override + public List getAlbumForImgname(String imgname) { + return imgAndAlbumMapper.getAlbumForImgname(imgname); + } + + @Override + public Integer deleteImgAndAlbum(String imgname) { + return imgAndAlbumMapper.deleteImgAndAlbum(imgname); + } + + @Override + public Integer deleteImgAndAlbumForKey(String albumkey) { + return imgAndAlbumMapper.deleteImgAndAlbumForKey(albumkey); + } + + @Override + public List selectImgForAlbumkey(String albumkey) { + return imgAndAlbumMapper.selectImgForAlbumkey(albumkey); + } +} diff --git a/src/main/java/cn/hellohao/service/impl/ImgServiceImpl.java b/src/main/java/cn/hellohao/service/impl/ImgServiceImpl.java index 30d34a0..d3e0381 100644 --- a/src/main/java/cn/hellohao/service/impl/ImgServiceImpl.java +++ b/src/main/java/cn/hellohao/service/impl/ImgServiceImpl.java @@ -107,6 +107,17 @@ public class ImgServiceImpl implements ImgService { e.printStackTrace(); } } + + public void delectUFile(Keys key, String fileName) { + UpYun upyun = new UpYun(key.getBucketname(), key.getAccessKey(), key.getAccessSecret()); + try { + boolean result = upyun.deleteFile(fileName, null); + } catch (IOException e) { + e.printStackTrace(); + } catch (UpException e) { + e.printStackTrace(); + } + } public void delectKODO(Keys key, String fileName) { Configuration cfg; if(key.getEndpoint().equals("1")){cfg = new Configuration(Zone.zone0());} @@ -169,8 +180,8 @@ public class ImgServiceImpl implements ImgService { } @Override - public Integer setabnormal(String imgname,String abnormal) { - return imgMapper.setabnormal(imgname,abnormal); + public Integer setImg(Images images) { + return imgMapper.setImg(images); } @Override @@ -192,4 +203,14 @@ public class ImgServiceImpl implements ImgService { public Integer getusermemory(Integer userid) { return imgMapper.getusermemory(userid); } + + @Override + public Integer md5Count(String md5key) { + return imgMapper.md5Count(md5key); + } + + @Override + public Images selectImgUrlByMD5(String md5key) { + return imgMapper.selectImgUrlByMD5(md5key); + } } diff --git a/src/main/java/cn/hellohao/service/impl/InitializationStorage.java b/src/main/java/cn/hellohao/service/impl/InitializationStorage.java index 4fe637b..00d8c63 100644 --- a/src/main/java/cn/hellohao/service/impl/InitializationStorage.java +++ b/src/main/java/cn/hellohao/service/impl/InitializationStorage.java @@ -8,6 +8,7 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; +import java.lang.management.ManagementFactory; import java.util.List; /** @@ -17,13 +18,18 @@ import java.util.List; */ @Component -@Order(2) //通过order值的大小来决定启动的顺序 +@Order(2) public class InitializationStorage implements CommandLineRunner { @Autowired private KeysMapper keysMapper; @Override public void run(String... args) throws Exception { + String name = ManagementFactory.getRuntimeMXBean().getName(); + //System.out.println(name); +// get pid + String pid = name.split("@")[0]; + //System.out.println("Pid is:" + pid); intiStorage(); sout(); } @@ -33,7 +39,7 @@ public class InitializationStorage implements CommandLineRunner { if(key.getStorageType()!=0 && key.getStorageType()!=null){ int ret =0; if(key.getStorageType()==1){ - ret =NOSImageupload.Initialize(key);//实例化网易 + ret =NOSImageupload.Initialize(key); }else if (key.getStorageType()==2){ ret =OSSImageupload.Initialize(key); }else if(key.getStorageType()==3){ @@ -44,15 +50,17 @@ public class InitializationStorage implements CommandLineRunner { ret = COSImageupload.Initialize(key); }else if(key.getStorageType()==7){ ret = FTPImageupload.Initialize(key); + }else if(key.getStorageType()==8){ + ret = UFileImageupload.Initialize(key); } } } - Print.Normal("初始化完成"); + //Print.Normal("66666666"); } public void sout(){ Print.Normal("______________________________________________"); - Print.Normal(" Hellohao-Pro "); + Print.Normal(" Hellohao-Open source "); Print.Normal(" Successful startup of the program "); Print.Normal(" is OK! Open http://your ip:port "); Print.Normal("______________________________________________"); diff --git a/src/main/java/cn/hellohao/service/impl/KODOImageupload.java b/src/main/java/cn/hellohao/service/impl/KODOImageupload.java index 6d14888..3d95768 100644 --- a/src/main/java/cn/hellohao/service/impl/KODOImageupload.java +++ b/src/main/java/cn/hellohao/service/impl/KODOImageupload.java @@ -3,9 +3,7 @@ package cn.hellohao.service.impl; import cn.hellohao.pojo.Keys; import cn.hellohao.pojo.ReturnImage; import cn.hellohao.pojo.UploadConfig; -import cn.hellohao.utils.DateUtils; -import cn.hellohao.utils.DeleImg; -import cn.hellohao.utils.ImgUrlUtil; +import cn.hellohao.utils.*; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.ObjectMetadata; import com.google.gson.Gson; @@ -16,6 +14,7 @@ import com.qiniu.storage.BucketManager; import com.qiniu.storage.Configuration; import com.qiniu.storage.UploadManager; import com.qiniu.storage.model.DefaultPutRet; +import com.qiniu.storage.model.FileInfo; import com.qiniu.util.Auth; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -33,80 +32,89 @@ public class KODOImageupload { static Keys key; public Map ImageuploadKODO(Map fileMap, String username, - Map fileMap2,Integer setday) throws Exception { + Map fileMap2,Integer setday){ if(fileMap2==null){ File file = null; Map ImgUrl = new HashMap<>(); - - for (Map.Entry entry : fileMap.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - file = changeFile(entry.getValue()); - try { - Response response = uploadManager.put(file,username + "/" + uuid+times + "." + entry.getKey(),upToken); - DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgname(entry.getValue().getOriginalFilename()); - returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); - ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "4"); - } - } catch (QiniuException ex) { - Response r = ex.response; - System.err.println(r.toString()); + try { + for (Map.Entry entry : fileMap.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + file = SetFiles.changeFile(entry.getValue()); try { - System.err.println(r.bodyString()); - } catch (QiniuException ex2) { + Response response = uploadManager.put(file,username + "/" + uuid+times + "." + entry.getKey(),upToken); + DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgname(username + "/" + uuid+times + "." + entry.getKey());//entry.getValue().getOriginalFilename() + returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); + ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "4"); + } + } catch (QiniuException ex) { + Response r = ex.response; + System.err.println(r.toString()); + try { + System.err.println(r.bodyString()); + } catch (QiniuException ex2) { + } } } + }catch (Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; }else{ Map ImgUrl = new HashMap<>(); - for (Map.Entry entry : fileMap2.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - String imgurl = entry.getValue(); - System.out.println("待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey()); - try { - Response response = uploadManager.put(new File(imgurl),username + "/" + uuid+times + "." + entry.getKey(),upToken); - DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); - ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "4"); - } - new File(imgurl).delete(); - } catch (QiniuException ex) { - Response r = ex.response; - System.err.println(r.toString()); + try { + for (Map.Entry entry : fileMap2.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + String imgurl = entry.getValue(); + System.out.println("待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey()); try { - System.err.println(r.bodyString()); - } catch (QiniuException ex2) { + Response response = uploadManager.put(new File(imgurl),username + "/" + uuid+times + "." + entry.getKey(),upToken); + DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); + ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "4"); + } + new File(imgurl).delete(); + } catch (QiniuException ex) { + Response r = ex.response; + System.err.println(r.toString()); + try { + System.err.println(r.bodyString()); + } catch (QiniuException ex2) { + } } } + }catch (Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; } } // 转换文件方法 - private File changeFile(MultipartFile multipartFile) throws Exception { - // 获取文件名 - String fileName = multipartFile.getOriginalFilename(); - // 获取文件后缀 - String prefix = fileName.substring(fileName.lastIndexOf(".")); - // todo 修改临时文件文件名 - File file = File.createTempFile(fileName, prefix); - multipartFile.transferTo(file); - return file; - } +// private File changeFile(MultipartFile multipartFile) throws Exception { +// // 获取文件名 +// String fileName = multipartFile.getOriginalFilename(); +// // 获取文件后缀 +// String prefix = fileName.substring(fileName.lastIndexOf(".")); +// // todo 修改临时文件文件名 +// File file = File.createTempFile(fileName, prefix); +// multipartFile.transferTo(file); +// return file; +// } //初始化 public static Integer Initialize(Keys k) { @@ -130,8 +138,20 @@ public class KODOImageupload { uploadManager = new UploadManager(cfg); Auth auth = Auth.create(k.getAccessKey(), k.getAccessSecret()); upToken = auth.uploadToken(k.getBucketname()); - key = k; - ret = 1; + BucketManager bucketManager = new BucketManager(auth, cfg); + BucketManager.FileListIterator fileListIterator = null; + try { + fileListIterator = bucketManager.createFileListIterator(k.getBucketname(), "", 1, "/"); + FileInfo[] items = fileListIterator.next(); + System.out.println(items!=null); + if(items!=null){ + key = k; + ret = 1; + } + }catch (Exception e){ + System.out.println("KODO - Waiting for configuration"); + ret = -1; + } } } return ret; @@ -147,7 +167,7 @@ public class KODOImageupload { String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); String times = format1.format(new Date()); - file = changeFile(entry.getValue()); + file = SetFiles.changeFile_c(entry.getValue()); System.out.println("待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey()); try { ReturnImage returnImage = new ReturnImage(); diff --git a/src/main/java/cn/hellohao/service/impl/KeysServiceImpl.java b/src/main/java/cn/hellohao/service/impl/KeysServiceImpl.java index ccfffd6..1cfa45f 100644 --- a/src/main/java/cn/hellohao/service/impl/KeysServiceImpl.java +++ b/src/main/java/cn/hellohao/service/impl/KeysServiceImpl.java @@ -29,7 +29,7 @@ public class KeysServiceImpl implements KeysService { @Override public List getKeys() { - return null; + return keysMapper.getKeys(); } } diff --git a/src/main/java/cn/hellohao/service/impl/NOSImageupload.java b/src/main/java/cn/hellohao/service/impl/NOSImageupload.java index 528a71b..d84c24a 100644 --- a/src/main/java/cn/hellohao/service/impl/NOSImageupload.java +++ b/src/main/java/cn/hellohao/service/impl/NOSImageupload.java @@ -2,19 +2,14 @@ package cn.hellohao.service.impl; import java.io.File; import java.io.FileInputStream; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; +import java.util.*; import cn.hellohao.exception.StorageSourceInitException; import cn.hellohao.pojo.ReturnImage; import cn.hellohao.pojo.UploadConfig; -import cn.hellohao.utils.DateUtils; -import cn.hellohao.utils.DeleImg; -import cn.hellohao.utils.ImgUrlUtil; -import cn.hellohao.utils.Print; +import cn.hellohao.utils.*; +import com.netease.cloud.services.nos.model.NOSObjectSummary; +import com.netease.cloud.services.nos.model.ObjectListing; import com.netease.cloud.services.nos.model.ObjectMetadata; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -34,68 +29,79 @@ public class NOSImageupload { static Keys key; public Map Imageupload(Map fileMap, String username, - Map fileMap2,Integer setday) throws Exception { + Map fileMap2,Integer setday){ if(fileMap2==null){ File file = null; Map ImgUrl = new HashMap<>(); - for (Map.Entry entry : fileMap.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - file = changeFile(entry.getValue()); - nosClient.putObject(BarrelName, username + "/" + uuid+times + "." + entry.getKey(), file); - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgname(entry.getValue().getOriginalFilename()); - returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); - ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); - if(setday>0){ - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid+times + "." + entry.getKey()+"-"+deleimg+"-"+"1"); + try { + for (Map.Entry entry : fileMap.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + file = SetFiles.changeFile(entry.getValue()); + nosClient.putObject(BarrelName, username + "/" + uuid+times + "." + entry.getKey(), file); + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgname(username + "/" + uuid+times + "." + entry.getKey());//entry.getValue().getOriginalFilename() + returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); + ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); + if(setday>0){ + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid+times + "." + entry.getKey()+"-"+deleimg+"-"+"1"); + } } + }catch (Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; }else{ Map ImgUrl = new HashMap<>(); ObjectMetadata meta = new ObjectMetadata(); meta.setHeader("Content-Disposition", "inline"); - for (Map.Entry entry : fileMap2.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - String imgurl = entry.getValue(); - String head = ""; - if(entry.getKey().equals("jpg")||entry.getKey().equals("jpeg")){ - head = "image/jpeg"; - }else if(entry.getKey().equals("png")){ - head = "image/png"; - }else if(entry.getKey().equals("bmp")){ - head = "image/bmp"; - }else if(entry.getKey().equals("gif")){ - head = "image/gif"; - }else{ - System.err.println("未知格式文件,无法定义header头。"); - } - meta.setHeader("Content-Type", head);//image/jpeg - File file = new File(imgurl); - FileInputStream fileInputStream = new FileInputStream(file); - try { - nosClient.putObject(BarrelName, username + "/" + uuid+times + "." + entry.getKey(), fileInputStream,meta); - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); - ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "-" + deleimg + "-" + "1"); + try { + for (Map.Entry entry : fileMap2.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + String imgurl = entry.getValue(); + String head = ""; + if(entry.getKey().equals("jpg")||entry.getKey().equals("jpeg")){ + head = "image/jpeg"; + }else if(entry.getKey().equals("png")){ + head = "image/png"; + }else if(entry.getKey().equals("bmp")){ + head = "image/bmp"; + }else if(entry.getKey().equals("gif")){ + head = "image/gif"; + }else{ + //System.err.println("未知格式文件,无法定义header头。"); + head = "image/"+entry.getKey(); + } + meta.setHeader("Content-Type", head);//image/jpeg + File file = new File(imgurl); + FileInputStream fileInputStream = new FileInputStream(file); + try { + nosClient.putObject(BarrelName, username + "/" + uuid+times + "." + entry.getKey(), fileInputStream,meta); + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); + ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "-" + deleimg + "-" + "1"); + } + boolean bb= new File(imgurl).getAbsoluteFile().delete(); + Print.Normal("删除情况"+bb); + } catch (Exception e) { + System.err.println("上传报错:" + e.getMessage()); + } + if(fileInputStream!=null){ + fileInputStream.close(); + Print.Normal("流已经关闭"); } - boolean bb= new File(imgurl).getAbsoluteFile().delete(); - Print.Normal("删除情况"+bb); - } catch (Exception e) { - System.err.println("上传报错:" + e.getMessage()); - } - if(fileInputStream!=null){ - fileInputStream.close(); - Print.Normal("流已经关闭"); } + }catch (Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; } @@ -103,17 +109,17 @@ public class NOSImageupload { } // 转换文件方法 - private File changeFile(MultipartFile multipartFile) throws Exception { - // 获取文件名 - String fileName = multipartFile.getOriginalFilename(); - // 获取文件后缀 - String prefix = fileName.substring(fileName.lastIndexOf(".")); - // todo 修改临时文件文件名 - File file = File.createTempFile(fileName, prefix); - // MultipartFile to File - multipartFile.transferTo(file); - return file; - } +// private File changeFile(MultipartFile multipartFile) throws Exception { +// // 获取文件名 +// String fileName = multipartFile.getOriginalFilename(); +// // 获取文件后缀 +// String prefix = fileName.substring(fileName.lastIndexOf(".")); +// // todo 修改临时文件文件名 +// File file = File.createTempFile(fileName, prefix); +// // MultipartFile to File +// multipartFile.transferTo(file); +// return file; +// } //初始化网易NOS对象存储 @@ -127,28 +133,19 @@ public class NOSImageupload { Credentials credentials = new BasicCredentials(k.getAccessKey(), k.getAccessSecret()); nosClient = new NosClient(credentials); nosClient.setEndpoint(k.getEndpoint()); - // 列举桶 - ArrayList bucketList = new ArrayList(); - //加入传入的key值不正确,这里会报异常,页面500,如何捕捉异常处理。 BarrelName = k.getBucketname(); - // for (Bucket bucket : nosClient.listBuckets()) { - // bucketList.add(bucket.getName()); - // } - - // for (Object object : bucketList) { - // if (object.toString().equals(k.getBucketname())) { - // BarrelName = object.toString(); - // } - // } - key = k; - ret = 1; - }else{ - ret = -1; + ObjectListing objectListing = null; + try { + objectListing = nosClient.listObjects(k.getBucketname()); + key = k; + ret = 1; + }catch (Exception e){ + System.out.println("NOS - Waiting for configuration"); + ret = -1; + } } - }else{ - ret = -1; - //throw new StorageSourceInitException("当前数据源配置不完整,请管理员前往后台配置。"); } + //throw new StorageSourceInitException("当前数据源配置不完整,请管理员前往后台配置。"); return ret; } @@ -162,7 +159,7 @@ public class NOSImageupload { String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); String times = format1.format(new Date()); - file = changeFile(entry.getValue()); + file = SetFiles.changeFile_c(entry.getValue()); try { Print.warning(entry.getValue().getSize()); ReturnImage returnImage = new ReturnImage(); diff --git a/src/main/java/cn/hellohao/service/impl/OSSImageupload.java b/src/main/java/cn/hellohao/service/impl/OSSImageupload.java index d45ebd9..37b7113 100644 --- a/src/main/java/cn/hellohao/service/impl/OSSImageupload.java +++ b/src/main/java/cn/hellohao/service/impl/OSSImageupload.java @@ -5,15 +5,14 @@ import cn.hellohao.pojo.ReturnImage; import cn.hellohao.pojo.UploadConfig; import cn.hellohao.utils.*; import com.aliyun.oss.OSSClient; +import com.aliyun.oss.model.OSSObjectSummary; +import com.aliyun.oss.model.ObjectListing; import com.aliyun.oss.model.ObjectMetadata; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.File; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; +import java.util.*; @Service public class OSSImageupload { @@ -22,74 +21,86 @@ public class OSSImageupload { static Keys key; public Map ImageuploadOSS(Map fileMap, String username, - Map fileMap2,Integer setday) throws Exception { + Map fileMap2,Integer setday){ if(fileMap2==null){ File file = null; Map ImgUrl = new HashMap<>(); ObjectMetadata meta = new ObjectMetadata(); meta.setHeader("Content-Disposition", "inline"); - for (Map.Entry entry : fileMap.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - file = SetFiles.changeFile(entry.getValue()); - String head = ""; - if(entry.getKey().equals("jpg")||entry.getKey().equals("jpeg")){ - head = "image/jpeg"; - }else if(entry.getKey().equals("png")){ - head = "image/png"; - }else if(entry.getKey().equals("bmp")){ - head = "image/bmp"; - }else if(entry.getKey().equals("gif")){ - head = "image/gif"; - }else{ - System.err.println("位置格式文件,无法定义header头。"); - } - meta.setHeader("Content-Type", head);//image/jpeg - System.out.println("待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey()); - ossClient.putObject(key.getBucketname(), username + "/" + uuid+times + "." + entry.getKey(),file,meta); - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgname(entry.getValue().getOriginalFilename()); - returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); - ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "2"); + try { + for (Map.Entry entry : fileMap.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + file = SetFiles.changeFile(entry.getValue()); + String head = ""; + if(entry.getKey().equals("jpg")||entry.getKey().equals("jpeg")){ + head = "image/jpeg"; + }else if(entry.getKey().equals("png")){ + head = "image/png"; + }else if(entry.getKey().equals("bmp")){ + head = "image/bmp"; + }else if(entry.getKey().equals("gif")){ + head = "image/gif"; + }else{ + //System.err.println("位置格式文件,无法定义header头。"); + head = "image/"+entry.getKey(); + } + meta.setHeader("Content-Type", head);//image/jpeg + System.out.println("待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey()); + ossClient.putObject(key.getBucketname(), username + "/" + uuid+times + "." + entry.getKey(),file,meta); + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgname(username + "/" + uuid+times + "." + entry.getKey());//entry.getValue().getOriginalFilename() + returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); + ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "2"); + } } + }catch (Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; }else{ Map ImgUrl = new HashMap<>(); ObjectMetadata meta = new ObjectMetadata(); meta.setHeader("Content-Disposition", "inline"); - for (Map.Entry entry : fileMap2.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - String imgurl = entry.getValue(); - String head = ""; - if(entry.getKey().equals("jpg")||entry.getKey().equals("jpeg")){ - head = "image/jpeg"; - }else if(entry.getKey().equals("png")){ - head = "image/png"; - }else if(entry.getKey().equals("bmp")){ - head = "image/bmp"; - }else if(entry.getKey().equals("gif")){ - head = "image/gif"; - }else{ - System.err.println("位置格式文件,无法定义header头。"); - } - meta.setHeader("Content-Type", head);//image/jpeg - System.out.println("待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey()); - ossClient.putObject(key.getBucketname(), username + "/" + uuid+times + "." + entry.getKey(),new File(imgurl),meta); - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); - ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); - new File(imgurl).delete(); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "2"); + try { + for (Map.Entry entry : fileMap2.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + String imgurl = entry.getValue(); + String head = ""; + if(entry.getKey().equals("jpg")||entry.getKey().equals("jpeg")){ + head = "image/jpeg"; + }else if(entry.getKey().equals("png")){ + head = "image/png"; + }else if(entry.getKey().equals("bmp")){ + head = "image/bmp"; + }else if(entry.getKey().equals("gif")){ + head = "image/gif"; + }else{ + //System.err.println("位置格式文件,无法定义header头。"); + head = "image/"+entry.getKey(); + } + meta.setHeader("Content-Type", head);//image/jpeg + System.out.println("待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey()); + ossClient.putObject(key.getBucketname(), username + "/" + uuid+times + "." + entry.getKey(),new File(imgurl),meta); + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); + ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); + new File(imgurl).delete(); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "2"); + } } + }catch (Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; } @@ -98,19 +109,27 @@ public class OSSImageupload { //初始化 public static Integer Initialize(Keys k) { int ret = -1; + ObjectListing objectListing = null; if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getEndpoint()!=null && k.getBucketname()!=null && k.getRequestAddress()!=null ) { if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("") && !k.getBucketname().equals("") && !k.getRequestAddress().equals("") ) { ossClient = new OSSClient(k.getEndpoint(), k.getAccessKey(), k.getAccessSecret()); - key = k; - ret=1; + try { + objectListing = ossClient.listObjects(k.getBucketname()); + key = k; + ret=1; + } catch (Exception e) { + System.out.println("OSS - Waiting for configuration"); + ret = -1; + } } } return ret; } + /** * 客户端接口 * */ @@ -123,7 +142,7 @@ public class OSSImageupload { String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); String times = format1.format(new Date()); - file = SetFiles.changeFile(entry.getValue()); + file = SetFiles.changeFile_c(entry.getValue()); String head = ""; if(entry.getKey().equals("jpg")||entry.getKey().equals("jpeg")){ head = "image/jpeg"; @@ -134,7 +153,8 @@ public class OSSImageupload { }else if(entry.getKey().equals("gif")){ head = "image/gif"; }else{ - System.err.println("位置格式文件,无法定义header头。"); + //System.err.println("位置格式文件,无法定义header头。"); + head = "image/"+entry.getKey(); } meta.setHeader("Content-Type", head);//image/jpeg ReturnImage returnImage = new ReturnImage(); diff --git a/src/main/java/cn/hellohao/service/impl/USSImageupload.java b/src/main/java/cn/hellohao/service/impl/USSImageupload.java index bf0bcad..9b06c21 100644 --- a/src/main/java/cn/hellohao/service/impl/USSImageupload.java +++ b/src/main/java/cn/hellohao/service/impl/USSImageupload.java @@ -3,21 +3,17 @@ package cn.hellohao.service.impl; import cn.hellohao.pojo.Keys; import cn.hellohao.pojo.ReturnImage; import cn.hellohao.pojo.UploadConfig; -import cn.hellohao.utils.DateUtils; -import cn.hellohao.utils.DeleImg; -import cn.hellohao.utils.ImgUrlUtil; -import cn.hellohao.utils.Print; +import cn.hellohao.utils.*; import com.UpYun; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.ObjectMetadata; +import com.upyun.UpException; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.File; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; +import java.io.IOException; +import java.util.*; @Service public class USSImageupload { @@ -25,74 +21,69 @@ public class USSImageupload { static Keys key; public Map ImageuploadUSS(Map fileMap, String username, - Map fileMap2,Integer setday) throws Exception { + Map fileMap2,Integer setday) { if(fileMap2==null){ File file = null; Map ImgUrl = new HashMap<>(); ObjectMetadata meta = new ObjectMetadata(); meta.setHeader("Content-Disposition", "inline"); - for (Map.Entry entry : fileMap.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - file = changeFile(entry.getValue()); - upyun.setContentMD5(UpYun.md5(file)); - boolean result = upyun.writeFile(username + "/" + uuid+times + "." + entry.getKey(), file, true); - if(result){ - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgname(entry.getValue().getOriginalFilename()); - returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); - ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "3"); + try { + for (Map.Entry entry : fileMap.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + file = SetFiles.changeFile(entry.getValue()); + upyun.setContentMD5(UpYun.md5(file)); + boolean result = upyun.writeFile(username + "/" + uuid+times + "." + entry.getKey(), file, true); + if(result){ + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgname(username + "/" + uuid+times + "." + entry.getKey());//entry.getValue().getOriginalFilename() + returnImage.setImgurl(key.getRequestAddress() + "/" +username + "/" + uuid+times + "." + entry.getKey());//key.getRequestAddress() + "/" + + ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "3"); + } + }else{ + System.err.println("上传失败"); } - }else{ - System.err.println("上传失败"); } - + }catch (Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; }else{ Map ImgUrl = new HashMap<>(); ObjectMetadata meta = new ObjectMetadata(); meta.setHeader("Content-Disposition", "inline"); - for (Map.Entry entry : fileMap2.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 - java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); - String times = format1.format(new Date()); - String imgurl = entry.getValue(); - upyun.setContentMD5(UpYun.md5(new File(imgurl))); - boolean result = upyun.writeFile(username + "/" + uuid+times + "." + entry.getKey(), new File(imgurl), true); - if(result){ - ReturnImage returnImage = new ReturnImage(); - returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); - ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); - if(setday>0) { - String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "3"); + try { + for (Map.Entry entry : fileMap2.entrySet()) { + String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); + String times = format1.format(new Date()); + String imgurl = entry.getValue(); + upyun.setContentMD5(UpYun.md5(new File(imgurl))); + boolean result = upyun.writeFile(username + "/" + uuid+times + "." + entry.getKey(), new File(imgurl), true); + if(result){ + ReturnImage returnImage = new ReturnImage(); + returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey()); + ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl))); + if(setday>0) { + String deleimg = DateUtils.plusDay(setday); + DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "3"); + } + }else{ + Print.warning("上传失败"); } - }else{ - Print.warning("上传失败"); + new File(imgurl).delete(); } - new File(imgurl).delete(); + }catch (Exception e){ + e.printStackTrace(); + ImgUrl.put(null, 500); } return ImgUrl; } - - } - - // 转换文件方法 - private File changeFile(MultipartFile multipartFile) throws Exception { - // 获取文件名 - String fileName = multipartFile.getOriginalFilename(); - // 获取文件后缀 - String prefix = fileName.substring(fileName.lastIndexOf(".")); - // todo 修改临时文件文件名 - File file = File.createTempFile(fileName, prefix); - // MultipartFile to File - multipartFile.transferTo(file); - return file; } //初始化 @@ -105,8 +96,15 @@ public class USSImageupload { // 初始化 // 创建UpYun实例。 upyun = new UpYun(k.getBucketname(), k.getAccessKey(), k.getAccessSecret()); - key = k; - ret = 1; + List items = null; + try { + items = upyun.readDir("/",null); + key = k; + ret = 1; + } catch (Exception e) { + System.out.println("USS - Waiting for configuration"); + ret = -1; + } } } return ret; @@ -126,7 +124,7 @@ public class USSImageupload { String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); String times = format1.format(new Date()); - file = changeFile(entry.getValue()); + file = SetFiles.changeFile_c(entry.getValue()); // 上传文件流。 System.out.println("客户端:待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey()); ReturnImage returnImage = new ReturnImage(); diff --git a/src/main/java/cn/hellohao/service/impl/UploadServicel.java b/src/main/java/cn/hellohao/service/impl/UploadServicel.java new file mode 100644 index 0000000..689ce62 --- /dev/null +++ b/src/main/java/cn/hellohao/service/impl/UploadServicel.java @@ -0,0 +1,213 @@ +package cn.hellohao.service.impl; + +import cn.hellohao.controller.UpdateImgController; +import cn.hellohao.dao.*; +import cn.hellohao.pojo.*; +import cn.hellohao.utils.*; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.codec.digest.DigestUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * @author Hellohao + * @version 1.0 + * @date 2020/1/9 15:46 + */ + +@Service +public class UploadServicel { + @Autowired + ConfigMapper configMapper; + @Autowired + UploadConfigMapper uploadConfigMapper; + @Autowired + KeysMapper keysMapper; + @Autowired + ImgMapper imgMapper; + @Autowired + UserMapper userMapper; + + + public Msg uploadForLoc(HttpSession session, HttpServletRequest request, + MultipartFile multipartFile, Integer setday, String upurlk, String[] iparr) { + Msg msg = new Msg(); + JSONArray jsonArray = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + Config config = configMapper.getSourceype(); + UploadConfig uploadConfig = uploadConfigMapper.getUpdateConfig(); + String userip = GetIPS.getIpAddr(request); + java.text.DateFormat dateFormat = new java.text.SimpleDateFormat("yyyy/MM/dd"); + User u = (User) session.getAttribute("user"); + Integer usermemory = 0; + Integer memory = 0; + Integer sourcekey = 0; + Integer maxsize = 0; + String userpath = "tourist"; + String md5key = ""; + //FileInputStream fis = null; + File file = SetFiles.changeFile_new(multipartFile); + try { + md5key = DigestUtils.md5Hex(new FileInputStream(file)); + if(!TypeDict.checkImgType(file)) { + msg.setCode("4000"); + return msg; + } + } catch (Exception e) { + e.printStackTrace(); + msg.setCode("5000"); + return msg; + } + //判断图片是否存在 + if(imgMapper.md5Count(md5key)>0){ + Print.warning("图片存在啦"); + Images images = imgMapper.selectImgUrlByMD5(md5key); + jsonObject.put("imgurls", images.getImgurl()); + jsonObject.put("imgnames",file.getName()); + jsonArray.add(jsonObject); + msg.setData(jsonArray); + return msg; + } + String prefix = file.getName().substring(file.getName().lastIndexOf(".")+1); + MultipartFile mf =null; + try{ + InputStream inputStream = new FileInputStream(file); + mf = new MockMultipartFile(file.getName(), inputStream); + inputStream.close(); + }catch (Exception e){ + System.out.println("0000000"); + } + + if (uploadConfig.getBlacklist() != null) { + iparr = uploadConfig.getBlacklist().split(";"); + for (String s : iparr) { + if (s.equals(userip)) { + msg.setCode("911"); + return msg; + } + } + } +// if (Integer.parseInt(Base64Encryption.decryptBASE64(upurlk)) != yzupdate()) { + if (!upurlk.equals(UpdateImgController.vu)) { + msg.setCode("4003"); + return msg; + } + //验证文件是否是图片 + if (u == null) { + sourcekey = GetCurrentSource.GetSource(null); + memory = uploadConfig.getVisitormemory(); + maxsize = uploadConfig.getFilesizetourists(); + usermemory = imgMapper.getusermemory(0); + if (usermemory == null) { + usermemory = 0; + } + } else { + userpath = u.getUsername(); + sourcekey = GetCurrentSource.GetSource(u.getId()); + memory = userMapper.getUsers(u.getEmail()).getMemory(); + maxsize = uploadConfig.getFilesizeuser(); + usermemory = imgMapper.getusermemory(u.getId()); + if (usermemory == null) { + usermemory = 0; + } + } + if (uploadConfig.getUrltype() == 2) { + userpath = dateFormat.format(new Date()); + } + Keys key = keysMapper.selectKeys(sourcekey); + int tmp = (memory == -1 ? -2 : (usermemory / 1024)); + if (tmp >= memory) { + msg.setCode("4005"); + return msg; + } + long stime = System.currentTimeMillis(); + Map map = new HashMap<>(); + if (mf.getSize() > maxsize * 1024 * 1024) { + msg.setCode("4006"); + return msg; + } + String fileName = mf.getOriginalFilename(); + if (!mf.isEmpty()) { + map.put(prefix, mf);//prefix + } + Map m = null; + m = GetSource.storageSource(key.getStorageType(), map, userpath, null, setday); + Images img = new Images(); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + for (Map.Entry entry : m.entrySet()) { + if(entry.getKey()!=null){ + if (key.getStorageType() == 5) { + if (config.getDomain() != null) { + jsonObject.put("imgurls", config.getDomain() +"/"+ entry.getKey().getImgurl()); + jsonObject.put("imgnames", entry.getKey().getImgname()); + img.setImgurl(config.getDomain() +"/"+ entry.getKey().getImgurl()); + } else { + jsonObject.put("imgurls", config.getDomain() +"/"+ entry.getKey().getImgurl()); + jsonObject.put("imgnames", entry.getKey().getImgname()); + img.setImgurl("http://" + IPPortUtil.getLocalIP() + ":" + IPPortUtil.getLocalPort() +"/"+ entry.getKey().getImgurl());//图片链接 + } + } else { + jsonObject.put("imgurls", entry.getKey().getImgurl()); + jsonObject.put("imgnames", entry.getKey().getImgname()); + img.setImgurl( entry.getKey().getImgurl()); + } + jsonArray.add(jsonObject); + img.setUpdatetime(df.format(new Date())); + img.setSource(key.getStorageType()); + img.setUserid(u == null ? 0 : u.getId()); + img.setSizes((entry.getValue()) / 1024); + if(uploadConfig.getUrltype()==2){ + //img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), "", "")); + String[] imgname = entry.getKey().getImgurl().split ("/"); + String name = ""; + for (int i = 0; i < imgname.length; i++) { + if(i>2 && i!=imgname.length-1){ + name+=imgname[i]+"/"; + } + if(i==imgname.length-1){ + name+=imgname[i]; + } + } + img.setImgname(entry.getKey().getImgname()); + }else{ + img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + } + img.setImgtype(setday > 0 ? 1 : 0); + img.setAbnormal(userip); + img.setMd5key(md5key); + userMapper.insertimg(img); + long etime = System.currentTimeMillis(); + Print.Normal("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); + }else{ + msg.setCode("5001"); + return msg; + } + } + msg.setData(jsonArray); + return msg; + } + + public String uploadForURL() { + return ""; + } + + private Integer yzupdate() { + Calendar cal = Calendar.getInstance(); + int y = cal.get(Calendar.YEAR); + int m = cal.get(Calendar.MONTH); + int d = cal.get(Calendar.DATE); + //int h=cal.get(Calendar.HOUR_OF_DAY); + //int mm=cal.get(Calendar.MINUTE); + return y + m + d + 999; + } +} diff --git a/src/main/java/cn/hellohao/service/impl/UserServiceImpl.java b/src/main/java/cn/hellohao/service/impl/UserServiceImpl.java index fd349c1..c54a9bc 100644 --- a/src/main/java/cn/hellohao/service/impl/UserServiceImpl.java +++ b/src/main/java/cn/hellohao/service/impl/UserServiceImpl.java @@ -26,9 +26,9 @@ public class UserServiceImpl implements UserService { } @Override - public Integer login(String email, String password) { + public Integer login(String email, String password,String uid) { // TODO Auto-generated method stub - return userMapper.login(email, password); + return userMapper.login(email, password,uid); } @Override diff --git a/src/main/java/cn/hellohao/test/App.java b/src/main/java/cn/hellohao/test/App.java deleted file mode 100644 index 0539788..0000000 --- a/src/main/java/cn/hellohao/test/App.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.hellohao.test; - -import cn.hellohao.utils.Print; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintWriter; -import java.net.URL; -import java.net.URLConnection; -import java.util.List; -import java.util.Map; - -/** - * Hello world! - */ -class GetPostTest { - public static String sendGet(String url, String param) { - String result = ""; - String urlName = "https://v1.hitokoto.cn/"; - try { - URL realURL = new URL(urlName); - URLConnection conn = realURL.openConnection(); - conn.setRequestProperty("accept", "*/*"); - conn.setRequestProperty("connection", "Keep-Alive"); - conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"); - conn.connect(); - Map> map = conn.getHeaderFields(); - for (String s : map.keySet()) { - System.out.println(s + "-->" + map.get(s)); - } - BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); - String line; - while ((line = in.readLine()) != null) { - result += "\n" + line; - } - } catch (IOException e) { - e.printStackTrace(); - } - return result; - } - - public static String sendPost(String url,String param){ - String result = ""; - try { - URL realUrl = new URL(url); - URLConnection conn = realUrl.openConnection(); - conn.setRequestProperty("accept", "*/*"); - conn.setRequestProperty("connection", "Keep-Alive"); - conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"); - //post设置如下两行 - conn.setDoOutput(true); - conn.setDoInput(true); - PrintWriter out = new PrintWriter(conn.getOutputStream()); - out.print(param); - out.flush(); - BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8")); - String line; - while((line = in.readLine()) != null){ - result +="\n" + line; - } - } catch (IOException e) { - e.printStackTrace(); - } - return result; - } - - public static void main(String[] args) { - Print.warning(GetPostTest.sendGet("","")); - } -} - -//public class App { -// public static void main(String[] args) throws Exception { -// System.out.println("hello world"); -// String sendRecvGet =GetPostTest.sendGet("http://localhost:8989/testServletEncoding/encodingTest","param=xxxxx嘻嘻嘻"); -// System.out.println(sendRecvGet); -// //String sendRecvPost =GetPostTest.sendPost("http://localhost:8989/testServletEncoding/encodingTest","param=就是我"); -// //System.out.println(sendRecvPost); -// } -//} \ No newline at end of file diff --git a/src/main/java/cn/hellohao/test/FTP.java b/src/main/java/cn/hellohao/test/FTP.java deleted file mode 100644 index 903a519..0000000 --- a/src/main/java/cn/hellohao/test/FTP.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.hellohao.test; - -import cn.hellohao.utils.Print; -import org.apache.commons.net.ftp.FTPClient; -import org.apache.commons.net.ftp.FTPReply; - -import java.io.FileInputStream; - -/** - * @author Hellohao - * @version 1.0 - * @date 2019/7/29 17:38 - * https://blog.csdn.net/WatsonYee/article/details/82389769 - */ -public class FTP { - public static void main(String[] args) throws Exception{ - - //创建FTP客户端,所有的操作都基于FTPClinet - FTPClient ftp = new FTPClient(); - //连接FTP服务器 - ftp.connect("hellohao.cn",21); - //如果是需要认证的服务器,就需要账号和密码来登录 - ftp.login("test", "test"); - //获取服务器返回的状态码 - int reply = ftp.getReplyCode(); - System.out.println(reply); - /* - * 判断是否连接成功 - * 所有以2开头的代码是正完成响应。 - * FTP服务器将在最终发送一个肯定的完成响应成功完成命令。 - */ - if (!FTPReply.isPositiveCompletion(reply)) { - ftp.disconnect(); - System.out.println("连接失败"); - return; - } - System.out.println("连接成功"); - //返回一个布尔类型的值,来表示是否创建成功 - boolean isCreate = ftp.makeDirectory("/ftp"); - //设置文件上传类型 - ftp.setFileType(ftp.BINARY_FILE_TYPE); - //获取文件的输入流 - FileInputStream fis = new FileInputStream("C:\\Users\\tiansh\\Desktop\\11.jpg"); - //调用storeFile方法将文件上传到FTP服务器 - //第一个参数是上传到服务器的路径,包含了文件名 - boolean isUpload = ftp.storeFile("/ftp/upload22.jpg", fis); - boolean isUpload2 = ftp.storeFile("/ftp/upload222.jpg", fis); - Print.warning(isUpload+"=="+isUpload2); - Print.Normal(isUpload); - //设置文件权限 - boolean isSet = ftp.sendSiteCommand("chmod 744 " + "/ftp/upload.jpg"); - //ftp.deleteFile("/ftp/upload.jpg"); - } -} diff --git a/src/main/java/cn/hellohao/test/test1.java b/src/main/java/cn/hellohao/test/test1.java deleted file mode 100644 index 99dae87..0000000 --- a/src/main/java/cn/hellohao/test/test1.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.hellohao.test; - - -import cn.hellohao.utils.Print; -import cn.hutool.crypto.SecureUtil; -import org.apache.commons.codec.binary.Base64; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.io.ClassPathResource; - -import javax.crypto.Cipher; -import javax.crypto.KeyGenerator; -import javax.crypto.SecretKey; -import java.io.*; -import java.security.SecureRandom; -import java.util.Date; - -public class test1 { - public static void main(String[] args) throws Exception { - readFile(File.separator + "HellohaoData"+File.separator+"img.ini"); - //charu("Hellohao/b3da10930021007.png|"); - } - - public static void charu(String src) { - String filePath =File.separator + "HellohaoData" ; - File file = new File(filePath); - File file1 = new File(filePath+File.separator+"img.ini"); - if(!file.exists()){ - file.mkdirs(); - } - if(!file1.exists()){ - try { - file1.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - FileWriter fw = null; - try { - //如果文件存在,则追加内容;如果文件不存在,则创建文件 - fw = new FileWriter(file1, true); - } catch (IOException e) { - e.printStackTrace(); - } - PrintWriter pw = new PrintWriter(fw); - pw.println(src);//插入每行的内容 - pw.flush(); - try { - fw.flush(); - pw.close(); - fw.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - - // 读取文件内容 - public static String readFile(String path) {//路径 - File file = new File(path); - StringBuilder result = new StringBuilder(); - try { - BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "GBK"));//构造一个BufferedReader类来读取文件 - String s = null; - while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行 - result.append(System.lineSeparator() + s); - Print.Normal( s); - } - br.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return result.toString(); - } - -} diff --git a/src/main/java/cn/hellohao/utils/FirstRun.java b/src/main/java/cn/hellohao/utils/FirstRun.java index 08d4c0f..b7b10c9 100644 --- a/src/main/java/cn/hellohao/utils/FirstRun.java +++ b/src/main/java/cn/hellohao/utils/FirstRun.java @@ -6,6 +6,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; +import java.io.File; +import java.sql.SQLException; +import java.util.UUID; + /** * @author Hellohao * @version 1.0 @@ -29,22 +33,114 @@ public class FirstRun implements InitializingBean { RunSqlScript.PASSWORD = jdbcpass; RunSqlScript.DBURL = jdbcurl; Print.Normal("正在校验数据库参数..."); + RunSqlScript.RunInsert(dynamic); + RunSqlScript.RunInsert(compressed); + + String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase(); + RunSqlScript.RunInsert("update user set uid='"+uid+"' where id = 1"); + Integer ret1 = RunSqlScript.RunSelectCount(sql1); if(ret1==0){ Print.Normal("In execution..."); RunSqlScript.RunInsert(sql2); + ; }else{ if(ret1>0){ - Print.Normal("Good! No action required!"); + Print.Normal("Stage 1"); }else{ Print.Normal("Mysql 报了一个错"); } } + Integer imgandalbum = RunSqlScript.RunSelectCount(judgeTable+"'imgandalbum'"); + if(imgandalbum==0){ + RunSqlScript.RunInsert(sql3); + Print.Normal("Stage 2"); + } + Integer album = RunSqlScript.RunSelectCount(judgeTable+"'album'"); + if(album==0){ + RunSqlScript.RunInsert(sql4); + Print.Normal("Stage 3"); + } + Integer ret2 = RunSqlScript.RunSelectCount(judgeTable+"'imgdata' and column_name = 'explains'"); + if(ret2==0){ + RunSqlScript.RunInsert(sql6); + Print.Normal("Stage 4"); + } + Integer ret3 = RunSqlScript.RunSelectCount(judgeTable+"'album' and column_name = 'userid'"); + if(ret3==0){ + RunSqlScript.RunInsert(sql7); + Print.Normal("Stage 5"); + } + Integer ret4 = RunSqlScript.RunSelectCount(judgeTable+"'imgdata' and column_name = 'md5key'"); + if(ret4==0){ + RunSqlScript.RunInsert(sql8); + Print.Normal("Stage 6"); + } + Integer ret5 = RunSqlScript.RunSelectCount(judgeTable+"'config' and column_name = 'theme'"); + if(ret5==0){ + RunSqlScript.RunInsert(sql9); + Print.Normal("Stage 7"); + } + + Integer ret6 = RunSqlScript.RunSelectCount(judgeTable+"'imgandalbum' and column_name = 'notes' and TABLE_SCHEMA='picturebed'"); + if(ret6==0){ + RunSqlScript.RunInsert(sql11); + Print.Normal("Stage 8"); + } + + RunSqlScript.RunInsert(sql10); + + //RunSqlScript.RunInsert("alter table imgdata drop index index_md5key_url"); + RunSqlScript.RunInsert(inddx_md5key); + RunSqlScript.RunInsert("UPDATE `keys` SET `Endpoint` = '0' WHERE `id` = 8"); + Print.Normal("Stage success"); } + //检查表是否存在,后边加'imgdata' and column_name = 'explains' 检查字段是否存在 + private String judgeTable = "select count(*) from information_schema.columns where table_name = "; //创建blacklist 2019-11-29 private String sql1 = "select count(*) from information_schema.columns where table_name = 'uploadconfig' and column_name = 'blacklist'"; private String sql2 = "alter table uploadconfig add blacklist varchar(500);"; + //创建imgandalbum和album 添加imgdata表字段explain 2019-12-20 + private String sql3 ="CREATE TABLE `imgandalbum` (`imgname` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`albumkey` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic"; + private String sql4 ="CREATE TABLE `album` (`albumkey` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`albumtitle` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`createdate` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `password` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic"; + private String sql6 = "alter table imgdata add explains varchar(5000)"; + //添加album表字段userid + private String sql7 = "alter table album add userid int(10)"; + //添加imgdata表字段md5key + private String sql8 = "alter table imgdata add md5key varchar(5000)"; + private String sql9 = "ALTER TABLE config ADD theme int(4) DEFAULT '1' COMMENT '主题' "; +//修改字段长度 + private String sql10 = "alter table config modify column `explain` varchar(1000),modify column links varchar(1000),modify column notice varchar(1000),modify column baidu varchar(1000)"; + + //添加imgandalbum字段notes(添加画廊图片说明) + private String sql11 = "alter table imgandalbum add notes varchar(1000) DEFAULT ' '"; + + private String inddx_md5key = "ALTER TABLE imgdata ADD INDEX index_md5key_url ( md5key,imgurl)"; + // create index yarn_app_result_i4 on yarn_app_result (flow_exec_id(100), another_column(50)); + + private String dynamic = "alter table imgdata row_format=dynamic"; + private String compressed = "alter table imgdata row_format=compressed"; + + private void clears(){ + File file1 = new File(File.separator+"HellohaoData"+File.separator+"hellohaotempimg"); + File file2 = new File(File.separator+"HellohaoData"+File.separator+"hellohaotempwatermarimg"); + + //判断目录有没有创建 + File file = new File(File.separator+"HellohaoData"); + if(!file.exists()){ + file.mkdirs(); + file1.mkdirs(); + file2.mkdirs(); + }else{ + if(!file1.exists()){ + file1.mkdirs(); + }else if(!file2.exists()){ + file2.mkdirs(); + } + } + } + } diff --git a/src/main/java/cn/hellohao/utils/GetSource.java b/src/main/java/cn/hellohao/utils/GetSource.java index 76625f1..6930fbf 100644 --- a/src/main/java/cn/hellohao/utils/GetSource.java +++ b/src/main/java/cn/hellohao/utils/GetSource.java @@ -21,13 +21,14 @@ public class GetSource { KODOImageupload kodoImageupload = SpringContextHolder.getBean(KODOImageupload.class); COSImageupload cosImageupload = SpringContextHolder.getBean(COSImageupload.class); FTPImageupload ftpImageupload = SpringContextHolder.getBean(FTPImageupload.class); + UFileImageupload uFileImageupload = SpringContextHolder.getBean(UFileImageupload.class); Map m = null; try { if(type==1){ m = nosImageupload.Imageupload(fileMap, userpath,filename,setday); }else if (type==2){ m = ossImageupload.ImageuploadOSS(fileMap, userpath,filename,setday); - }else if(type==3){ + }else if(type==3 ){ m = ussImageupload.ImageuploadUSS(fileMap, userpath,filename,setday); }else if(type==4){ m = kodoImageupload.ImageuploadKODO(fileMap, userpath,filename,setday); @@ -37,6 +38,8 @@ public class GetSource { m = cosImageupload.ImageuploadCOS(fileMap, userpath,filename,setday); }else if(type==7){ m = ftpImageupload.ImageuploadFTP(fileMap, userpath,filename,setday); + }else if(type==8){ + m = uFileImageupload.ImageuploadUSS(fileMap, userpath,filename,setday); } else{ new StorageSourceInitException("GetSource类捕捉异常:未找到存储源"); diff --git a/src/main/java/cn/hellohao/utils/IPPortUtil.java b/src/main/java/cn/hellohao/utils/IPPortUtil.java index 7f6e63c..85dc726 100644 --- a/src/main/java/cn/hellohao/utils/IPPortUtil.java +++ b/src/main/java/cn/hellohao/utils/IPPortUtil.java @@ -20,10 +20,15 @@ public class IPPortUtil { * @throws MalformedObjectNameException * 获取当前机器的端口号 */ - public static String getLocalPort() throws MalformedObjectNameException { + public static String getLocalPort() {//throws MalformedObjectNameException MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer(); - Set objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"), - Query.match(Query.attr("protocol"), Query.value("HTTP/1.1"))); + Set objectNames = null; + try { + objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"), + Query.match(Query.attr("protocol"), Query.value("HTTP/1.1"))); + } catch (MalformedObjectNameException e) { + e.printStackTrace(); + } String port = objectNames.iterator().next().getKeyProperty("port"); return port; } diff --git a/src/main/java/cn/hellohao/utils/ImgUrlUtil.java b/src/main/java/cn/hellohao/utils/ImgUrlUtil.java index eda0612..51daace 100644 --- a/src/main/java/cn/hellohao/utils/ImgUrlUtil.java +++ b/src/main/java/cn/hellohao/utils/ImgUrlUtil.java @@ -54,8 +54,6 @@ public class ImgUrlUtil { * @param savePath * @throws IOException */ - - public static boolean downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException{ URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); diff --git a/src/main/java/cn/hellohao/utils/LocUpdateImg.java b/src/main/java/cn/hellohao/utils/LocUpdateImg.java index 2531b1c..b086fb2 100644 --- a/src/main/java/cn/hellohao/utils/LocUpdateImg.java +++ b/src/main/java/cn/hellohao/utils/LocUpdateImg.java @@ -24,18 +24,20 @@ public class LocUpdateImg { File file = null; Map ImgUrl = new HashMap<>(); for (Map.Entry entry : fileMap.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + String uuid = "TOIMG"+UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); String times = format1.format(new Date()); // 上传文件流。 - System.out.println("待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey()); - File dest = new File(filePath + username + File.separator+ uuid+times + "." + entry.getKey()); + System.out.println("待上传的图片:"+username + File.separator + uuid+times + "N." + entry.getKey()); + File dest = new File(filePath + username + File.separator+ uuid+times + "N." + entry.getKey()); + File temppath = new File(filePath + username+ File.separator ); if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); } try { MultipartFile multipartFile = entry.getValue(); - FileInputStream fileInputStream = (FileInputStream) multipartFile.getInputStream(); + //FileInputStream fileInputStream = (FileInputStream) multipartFile.getInputStream(); + InputStream fileInputStream = (InputStream)multipartFile.getInputStream(); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest)); byte[] bs = new byte[1024]; int len; @@ -45,12 +47,12 @@ public class LocUpdateImg { bos.flush(); bos.close(); ReturnImage returnImage = new ReturnImage(); - returnImage.setImgname(entry.getValue().getOriginalFilename()); - returnImage.setImgurl(username + "/" + uuid+times + "." + entry.getKey()); + returnImage.setImgname(username + "/" +uuid+times + "N." + entry.getKey());//entry.getValue().getOriginalFilename() + returnImage.setImgurl(username + "/" + uuid+times + "N." + entry.getKey()); ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); if(setday>0) { String deleimg = DateUtils.plusDay(setday); - DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "5"); + DeleImg.charu(username + "/" + uuid + times + "N." + entry.getKey() + "|" + deleimg + "|" + "5"); } } catch (IOException e) { e.printStackTrace(); @@ -61,20 +63,22 @@ public class LocUpdateImg { }else{ Map ImgUrl = new HashMap<>(); for (Map.Entry entry : fileMap2.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + String uuid = "TOIMG"+UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); String times = format1.format(new Date()); String oldfilePath = entry.getValue(); - String newfilePath = File.separator + "HellohaoData" + File.separator + username + File.separator+ uuid+times + "." + entry.getKey();// + String newfilePath = File.separator + "HellohaoData" + File.separator + username + File.separator+ uuid+times + "N." + entry.getKey(); + String tempfilePath = File.separator + "HellohaoData" + File.separator + username+ File.separator ; File file = new File(oldfilePath); - File targetFile =new File(newfilePath); + File targetFile =new File(tempfilePath); if(!targetFile.getParentFile().exists()) { targetFile.mkdirs(); } file.renameTo(new File(newfilePath)); - // 例2:采用数据流模式上传文件(节省内存),自动创建父级目录 + //采用数据流模式上传文件(节省内存),自动创建父级目录 ReturnImage returnImage = new ReturnImage(); - returnImage.setImgurl(username + "/" + uuid+times + "." + entry.getKey()); + //username + "/" + uuid+times + "." + entry.getKey() + returnImage.setImgurl(username + "/" + uuid+times + "N." + entry.getKey()); ImgUrl.put( returnImage, ImgUrlUtil.getFileSize2(new File(newfilePath))); if(setday>0) { String deleimg = DateUtils.plusDay(setday); @@ -88,18 +92,18 @@ public class LocUpdateImg { /** * 客户端接口 * */ - public static Map clientuploadFTP(Map fileMap, String username, UploadConfig uploadConfig) { + public static Map clientLocUpdateImg(Map fileMap, String username, UploadConfig uploadConfig) { String filePath =File.separator + "HellohaoData" + File.separator; File file = null; Map ImgUrl = new HashMap<>(); for (Map.Entry entry : fileMap.entrySet()) { - String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 + String uuid = "TOIMG"+UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位 java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss"); String times = format1.format(new Date()); - System.out.println("待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey()); + System.out.println("待上传的图片:"+username + "/" + uuid+times + "N." + entry.getKey()); ReturnImage returnImage = new ReturnImage(); if(entry.getValue().getSize()/1024<=uploadConfig.getFilesizeuser()*1024){ - File dest = new File(filePath + username + File.separator+ uuid+times + "." + entry.getKey()); + File dest = new File(filePath + username + File.separator+ uuid+times + "N." + entry.getKey()); if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); } @@ -115,8 +119,8 @@ public class LocUpdateImg { bos.flush(); bos.close(); returnImage.setImgname(entry.getValue().getOriginalFilename()); - returnImage.setImgurl(username + "/" + uuid+times + "." + entry.getKey()); - ImgUrl.put(returnImage, (int) (entry.getValue().getSize())); + returnImage.setImgurl(username + "/" + uuid+times + "N." + entry.getKey()); + ImgUrl.put(returnImage, (int) (entry.getValue().getSize())/1024); } catch (IOException e) { e.printStackTrace(); System.err.println("上传失败"); diff --git a/src/main/java/cn/hellohao/utils/SetFiles.java b/src/main/java/cn/hellohao/utils/SetFiles.java index 4cc0a69..a040dda 100644 --- a/src/main/java/cn/hellohao/utils/SetFiles.java +++ b/src/main/java/cn/hellohao/utils/SetFiles.java @@ -2,18 +2,61 @@ package cn.hellohao.utils; import org.springframework.web.multipart.MultipartFile; -import java.io.File; +import java.io.*; public class SetFiles { // 转换文件方法 - public static File changeFile(MultipartFile multipartFile) throws Exception { + public static File changeFile(MultipartFile multipartFile) { // 获取文件名 - String fileName = multipartFile.getOriginalFilename(); + String fileName = multipartFile.getName();//multipartFile.getOriginalFilename(); // 获取文件后缀 String prefix = fileName.substring(fileName.lastIndexOf(".")); // todo 修改临时文件文件名 - File file = File.createTempFile(fileName, prefix); - multipartFile.transferTo(file); + File file = null; + try { + file = File.createTempFile(fileName, prefix); + multipartFile.transferTo(file); + } catch (IOException e) { + e.printStackTrace(); + } return file; } + public static File changeFile_c(MultipartFile multipartFile) { + // 获取文件名 + String fileName = multipartFile.getOriginalFilename();//multipartFile.getOriginalFilename(); + // 获取文件后缀 + String prefix = fileName.substring(fileName.lastIndexOf(".")); + // todo 修改临时文件文件名 + File file = null; + try { + file = File.createTempFile(fileName, prefix); + multipartFile.transferTo(file); + } catch (IOException e) { + e.printStackTrace(); + } + return file; + } + + // 转换文件方法 + public static File changeFile_new(MultipartFile multipartFile) { + // 获取文件名 + String fileName = multipartFile.getOriginalFilename();//getOriginalFilename + // 获取文件后缀 + String prefix = fileName.substring(fileName.lastIndexOf(".")); + // todo 修改临时文件文件名 + File file = null; + try { + file = File.createTempFile(fileName, prefix); + multipartFile.transferTo(file); + } catch (IOException e) { + e.printStackTrace(); + } + return file; + } + + + + + + } diff --git a/src/main/java/cn/hellohao/utils/SqlHelper.java b/src/main/java/cn/hellohao/utils/SqlHelper.java index d307d12..cb3f3fb 100644 --- a/src/main/java/cn/hellohao/utils/SqlHelper.java +++ b/src/main/java/cn/hellohao/utils/SqlHelper.java @@ -76,7 +76,7 @@ final class RunSqlScript { try { Class.forName(DBDRIVER); } catch (ClassNotFoundException e) { - e.printStackTrace(); + Print.Normal("SqlHelper.java - ClassNotFoundException"); } //2、连接数据库 //通过连接管理器连接数据库 @@ -84,25 +84,29 @@ final class RunSqlScript { //在连接的时候直接输入用户名和密码才可以连接 conn = DriverManager.getConnection(DBURL,USERNAME,PASSWORD); } catch (SQLException e) { - e.printStackTrace(); + Print.Normal("SqlHelper.java - SQLException1"); } try { stmt = conn.createStatement(); } catch (SQLException e) { - e.printStackTrace(); + Print.Normal("SqlHelper.java - SQLException2"); } //4、执行语句 try { count = stmt.executeUpdate(sql); } catch (SQLException e) { - e.printStackTrace(); + if(e.getMessage().contains("Duplicate key name") && e.getMessage().contains("index_md5key_url")){ + Print.Normal("Database index already exists, skip this step."); + }else{ + e.printStackTrace(); + } } //5、关闭操作 try { stmt.close(); conn.close(); } catch (SQLException e) { - e.printStackTrace(); + Print.Normal("SqlHelper.java - SQLException4"); } return count; } diff --git a/src/main/java/cn/hellohao/utils/StringUtils.java b/src/main/java/cn/hellohao/utils/StringUtils.java index 328c511..ecdc9f0 100644 --- a/src/main/java/cn/hellohao/utils/StringUtils.java +++ b/src/main/java/cn/hellohao/utils/StringUtils.java @@ -7,6 +7,7 @@ import java.util.Collection; import java.util.Map; public class StringUtils { + //此方法目前未使用2020-04-06 public static Boolean doNull(Integer sourcekey,Keys k) { if(sourcekey==1){ if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getEndpoint()!=null diff --git a/src/main/java/cn/hellohao/utils/TypeDict.java b/src/main/java/cn/hellohao/utils/TypeDict.java index 8ee3e67..8cbeb61 100644 --- a/src/main/java/cn/hellohao/utils/TypeDict.java +++ b/src/main/java/cn/hellohao/utils/TypeDict.java @@ -1,5 +1,10 @@ package cn.hellohao.utils; +import javax.imageio.ImageIO; +import java.awt.*; +import java.io.File; +import java.io.IOException; + public class TypeDict { /** 常用文件的文件头如下:(以前六位为准) @@ -43,9 +48,22 @@ MIDI (mid),文件头:4D546864 case "474946": return "jif"; case "47494638": return "gif"; case "424D": return "bmp"; - + case "424D36": return "bmp"; default: return "0000"; } } + public static Boolean checkImgType(File file) { + try { + // 通过ImageReader来解码这个file并返回一个BufferedImage对象 + // 如果找不到合适的ImageReader则会返回null,我们可以认为这不是图片文件 + // 或者在解析过程中报错,也返回false + Image image = ImageIO.read(file); + return image != null; + } catch(IOException ex) { + return false; + } + } + + } \ No newline at end of file diff --git a/src/main/java/cn/hellohao/utils/demo.java b/src/main/java/cn/hellohao/utils/demo.java deleted file mode 100644 index be45d38..0000000 --- a/src/main/java/cn/hellohao/utils/demo.java +++ /dev/null @@ -1,146 +0,0 @@ -package cn.hellohao.utils; - -import jdk.nashorn.internal.objects.annotations.Where; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.mime.MultipartEntityBuilder; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.util.EntityUtils; -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.web.multipart.MultipartFile; - -import java.io.*; -import java.net.URL; -import java.net.URLConnection; - -/** - * @author Hellohao - * @version 1.0 - * @date 2019/10/11 17:26 - */ -public class demo { - /** - * 向指定 URL 发送POST方法的请求 - * - * @param url - * 发送请求的 URL - * @param string - * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 - * @return 所代表远程资源的响应结果 - */ - public static String sendPost(String url, String string,Integer i) { - String intFlag = String.valueOf((int)(Math.random() * 1000000)); - PrintWriter out = null; - BufferedReader in = null; - String result = ""; - try { - URL realUrl = new URL(url); - // 打开和URL之间的连接 - URLConnection conn = realUrl.openConnection(); - // 设置通用的请求属性 - conn.setRequestProperty("accept", "*/*"); - conn.setRequestProperty("connection", "Keep-Alive"); - conn.setRequestProperty("user-agent", - "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); - // 发送POST请求必须设置如下两行 - conn.setDoOutput(true); - conn.setDoInput(true); - // 获取URLConnection对象对应的输出流 - out = new PrintWriter(conn.getOutputStream()); - // 发送请求参数 - out.print(string); - // flush输出流的缓冲 - out.flush(); - // 定义BufferedReader输入流来读取URL的响应 - in = new BufferedReader( - new InputStreamReader(conn.getInputStream())); - String line; - while ((line = in.readLine()) != null) { - result += line; - } - } catch (Exception e) { - System.out.println("发送 POST 请求出现异常!"+e); - e.printStackTrace(); - } - //使用finally块来关闭输出流、输入流 - finally{ - try{ - if(out!=null){ - out.close(); - } - if(in!=null){ - in.close(); - } - } - catch(IOException ex){ - ex.printStackTrace(); - } - } - System.out.println("已成功执行"+i+"次"); - return result; - } - - - //文件上传 - public static String uploadFileToOSS(MultipartFile multfile,String isurl) { - CloseableHttpClient client = null; - String result = null; - try { - client = HttpClients.createDefault(); - HttpPost httpPost = new HttpPost(isurl); - MultipartEntityBuilder builder = MultipartEntityBuilder.create(); - //addTextBody(String,String)该方法可以传入参数,例如请求的地址需要接受一个id - //builder.addTextBody("id", "1"); - // builder.addTextBody("arg", "value"); - //addBinaryBody()该方法传入二进制内容,可以传入InputStream,File, 参数三是传入的类型,参数四是文件名称 - builder.addBinaryBody("file", multfile.getInputStream(), ContentType.MULTIPART_FORM_DATA, "1.png"); - httpPost.setEntity(builder.build()); - HttpResponse response = client.execute(httpPost); - if (response.getStatusLine().getStatusCode() == 200) { - // 取回服务器端的响应结果 - result = EntityUtils.toString(response.getEntity(), "utf-8"); - } - } catch (Exception e) { - e.printStackTrace(); - }finally { - try { - client.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return result; - } - - - public static void main(String[] args)throws Exception { - File file = new File("D:/22.png"); -// for(int i=1;i<99999999;i++){ -// String intFlag = String.valueOf((int)(Math.random() * 1000000)); -// //sendPost("http://shenhhh.net/index.php?m=User&a=signup","phone=13232"+intFlag+"&password=asd"+intFlag+"",i); -// //String ret = sendPost("https://test.demo-1s.com/register","name=jbb"+intFlag+"&email=jbb"+intFlag+"@jbb.com&password=jbb"+intFlag,i); -// -// String ret = sendPost("https://www.png8.com/upload/localhost","file="+file,i); -// System.out.println("账号:goto"+intFlag+"-- 密码:baa"+intFlag+"-- 邮箱:jbb"+intFlag+"@jbb.com -- 返回值:"+ret); -// } - - - - //文件上传 - //while (true){ - FileInputStream fileInputStream = new FileInputStream(file); - MultipartFile multipartFile = new MockMultipartFile(file.getName(), file.getName(), - ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream); - - String a =uploadFileToOSS(multipartFile ,"https://tu.sunpma.com/upload/localhost"); - System.out.println(""); - Print.Normal("【"+a+"】"); - System.out.println(""); - - } - - // } - -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 0dace0b..ff65c0c 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,26 +6,41 @@ spring.datasource.password=root spring.datasource.url=jdbc:mysql://localhost:3306/picturebed?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 #端口 server.port=8088 -#鉴黄周期表达式 下方表达式为每天七点半执行 -#不懂请勿乱修改。具体可以参考官方文档http://doc.wwery.com +#鉴黄周期表达式 下方表达式为每天四点半执行0 30 04 * * ? Expression=0 30 04 * * ? #下边的配置项不需要修改。 +logging.config=classpath:logback-spring.xml +logging.file.path=/HellohaoData/tbedlog +spring.thymeleaf.suffix=.html mybatis.configuration.map-underscore-to-camel-case=true mybatis.mapper-locations=classpath:mapper/*.xml -logging.level.cn.hellohao.dao=debug +#logging.level.cn.hellohao.dao=debug spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 -spring.datasource.driver-class-name=com.mysql.jdbc.Driver +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.thymeleaf.cache=false multipart.maxFileSize=10240KB multipart.maxRequestSize=10240KB spring.thymeleaf.mode = LEGACYHTML5 spring.http.multipart.location=/data/upload_tmp -systemupdate=2019-11-29 +systemupdate=2020-05-26 +spring.datasource.druid.filter.config.enabled=false +spring.datasource.druid.web-stat-filter.enabled=false +spring.datasource.druid.web-stat-filter.session-stat-enable=false +spring.datasource.druid.stat-view-servlet.reset-enable=false - - +spring.datasource.druid.filter.stat.enabled=false +spring.datasource.druid.filter.wall.enabled=false +spring.datasource.druid.filter.slf4j.enabled=false +spring.datasource.druid.filter.log4j2.enabled=false +spring.datasource.druid.filter.log4j.enabled=false +spring.datasource.druid.filter.commons-log.enabled=false +spring.datasource.druid.stat-view-servlet.enabled=false +spring.datasource.druid.stat-view-servlet.login-username=hellohao@dealer +spring.datasource.druid.stat-view-servlet.login-password=52BNmXPJL0rQQ3CU +spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 +spring.datasource.druid.web-stat-filter.exclusions=false diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..789d843 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,197 @@ + + + + + + + + + + logback + + + + + + + + + + + + + + + + + DEBUG + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + + + + + + + ${log.path}/log_debug.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + ${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + debug + ACCEPT + DENY + + + + + + + ${log.path}/log_info.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + ${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + info + ACCEPT + DENY + + + + + + + ${log.path}/log_warn.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + ${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + warn + ACCEPT + DENY + + + + + + + + ${log.path}/log_error.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + ${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + ERROR + ACCEPT + DENY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/AlbumMapper.xml b/src/main/resources/mapper/AlbumMapper.xml new file mode 100644 index 0000000..0a4e5cd --- /dev/null +++ b/src/main/resources/mapper/AlbumMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + insert into `album` (albumkey,albumtitle,createdate,`password`,userid) + values (#{albumkey},#{albumtitle},#{createdate},#{password},#{userid}) + + + + delete from album where albumkey=#{albumkey} + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/ConfigMapper.xml b/src/main/resources/mapper/ConfigMapper.xml index 2d350f2..2bb8cad 100644 --- a/src/main/resources/mapper/ConfigMapper.xml +++ b/src/main/resources/mapper/ConfigMapper.xml @@ -57,6 +57,10 @@ `webfavicons` = #{webfavicons}, + + `theme` = #{theme}, + + diff --git a/src/main/resources/mapper/DomainMapper.xml b/src/main/resources/mapper/DomainMapper.xml deleted file mode 100644 index ae1dc6c..0000000 --- a/src/main/resources/mapper/DomainMapper.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/mapper/ImgAndAlbumMapper.xml b/src/main/resources/mapper/ImgAndAlbumMapper.xml new file mode 100644 index 0000000..0565f0a --- /dev/null +++ b/src/main/resources/mapper/ImgAndAlbumMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + insert into `imgandalbum` (imgname,albumkey,notes) values (#{imgname},#{albumkey},#{notes}) + + + + delete from imgandalbum where imgname=#{imgname} + + + + delete from imgandalbum where albumkey=#{albumkey} + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/ImgMapper.xml b/src/main/resources/mapper/ImgMapper.xml index 7ccfdb4..9a90eaf 100644 --- a/src/main/resources/mapper/ImgMapper.xml +++ b/src/main/resources/mapper/ImgMapper.xml @@ -13,29 +13,42 @@ a.sizes, a.abnormal, a.source, - a.imgtype + a.imgtype, + a.explains, + a.md5key FROM imgdata a LEFT JOIN user b ON a.userid = b.id where 1=1 - - and - userid = #{userid} - and - source = #{source} + a.source = #{source} and - updatetime >= #{starttime} + a.updatetime >= #{starttime} and - updatetime <= #{stoptime} + a.updatetime <= #{stoptime} - order by id desc + + + + + and + a.userid not in (#{userid}) + + + and + a.userid = #{userid} + + + + + + order by a.id desc - - UPDATE imgdata set abnormal=#{abnormal} where imgname=#{imgname} + + UPDATE imgdata + + + abnormal=#{abnormal} + + + explains=#{explains} + + + where imgname=#{imgname} @@ -78,7 +100,23 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/NoticeMapper.xml b/src/main/resources/mapper/NoticeMapper.xml index 366ce1f..c8793ae 100644 --- a/src/main/resources/mapper/NoticeMapper.xml +++ b/src/main/resources/mapper/NoticeMapper.xml @@ -2,7 +2,7 @@ \ No newline at end of file diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index 83f1aff..b65d446 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -18,6 +18,7 @@ select COUNT(*) from user where email = #{email} + @@ -29,8 +30,21 @@ @@ -81,8 +95,8 @@ - INSERT INTO imgdata (id, imgname, imgurl, userid, updatetime,sizes,abnormal,source,imgtype) - VALUES (NULL, #{imgname}, #{imgurl}, #{userid}, #{updatetime},#{sizes},#{abnormal},#{source},#{imgtype}) + INSERT INTO imgdata (id, imgname, imgurl, userid, updatetime,sizes,abnormal,source,imgtype,md5key) + VALUES (NULL, #{imgname}, #{imgurl}, #{userid}, #{updatetime},#{sizes},#{abnormal},#{source},#{imgtype},#{md5key}) diff --git a/src/main/resources/rebel.xml b/src/main/resources/rebel.xml index bfeb0c5..9fd1980 100644 --- a/src/main/resources/rebel.xml +++ b/src/main/resources/rebel.xml @@ -2,12 +2,14 @@ - + + + Tbed - + diff --git a/src/main/resources/static/css/Mini/reset.css b/src/main/resources/static/css/Mini/reset.css new file mode 100644 index 0000000..1ed8e11 --- /dev/null +++ b/src/main/resources/static/css/Mini/reset.css @@ -0,0 +1,35 @@ +@charset "utf-8"; +/* CSS Document */ +/*Reset*/ +*{box-sizing:content-box;} +a:hover, a:focus{text-decoration:none;} +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;} +table{border-collapse:collapse;border-spacing:0;} +body{-webkit-text-size-adjust:none;} +fieldset,img{border:0;} +img{ vertical-align: top; max-width: 100%; } +address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal;} +ol,ul{list-style:none;} +caption,th{text-align:left;} +h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;} +q:before,q:after{content:'';} +abbr,acronym {border:0;} +.clearfix:after{visibility:hidden;display: block;font-size:0;content:" ";clear:both;height:0;} +* html .clearfix{ zoom: 1; } /* IE6 */ +*:first-child+html .clearfix { zoom: 1; } /* IE7 */ +.cli{ clear:both; font-size:0; height:0; overflow:hidden;display:block;} +.lclear{clear:left;font-size:0;height:0;overflow:hidden;} +.fl{float:left;} +.fr{float:right;} + +/* ֹ +iframe{nifm2:expression(this.src='about:blank',this.outerHTML='');} +script{no2js:expression((this.src.toLowerCase().indexOf('http')==0)?document.close():'');} +*/ +/* ıԼ˶ +div{word-wrap: break-word;word-break: normal;} +p{text-align:justify; text-justify:inter-ideograph;} +*/ +/*general*/ +body{font-size:12px;font-family:'微软雅黑',"宋体","Arial Narrow",Helvetica,sans-serif;color:#000;line-height:1.2;text-align:left;} +a{color:#333;text-decoration:none;} diff --git a/src/main/resources/static/css/Mini/style.css b/src/main/resources/static/css/Mini/style.css new file mode 100644 index 0000000..21c2f6c --- /dev/null +++ b/src/main/resources/static/css/Mini/style.css @@ -0,0 +1,113 @@ +html,body{ + width:100%; + height:100%; +} + +canvas{ + display:block; + vertical-align:bottom; +} + +.count-particles{ + background: #000022; + position: absolute; + top: 48px; + left: 0; + width: 80px; + color: #13E8E9; + font-size: .8em; + text-align: left; + text-indent: 4px; + line-height: 14px; + padding-bottom: 2px; + font-family: Helvetica, Arial, sans-serif; + font-weight: bold; +} + +.js-count-particles{ + font-size: 1.1em; +} + +#stats, +.count-particles{ + -webkit-user-select: none; + margin-top: 5px; + margin-left: 5px; +} + +#stats{ + border-radius: 3px 3px 0 0; + overflow: hidden; +} + +.count-particles{ + border-radius: 0 0 3px 3px; +} + + +/* #particles-js{ + width: 100%; + height: 100%; + position: relative; + background-image: url(../img/bg.jpg); + background-position: 50% 50%; + background-size: cover; + background-repeat: no-repeat; + margin-left: auto; + margin-right: auto; +} */ + +.sk-rotating-plane { + display: none; + width: 80px; + height: 80px; + margin: auto; + background-color: white; + -webkit-animation: sk-rotating-plane 1.2s infinite ease-in-out; + animation: sk-rotating-plane 1.2s infinite ease-in-out; + z-index: 1; + position: absolute; + top: 50%; + left: 50%; + margin-left: -40px; + margin-top: -80px; +} +.sk-rotating-plane.active{display: block;} + +@keyframes sk-rotating-plane{ + 0% { + -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg); + transform: perspective(120px) rotateX(0deg) rotateY(0deg); + } + 50% { + -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); + transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); + } + 100% { + -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); + transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); + } +} + +@keyframes login-small{ + 0%{ + transform: scale(1);-moz-transform: scale(1); /* Firefox 4 */-webkit-transform: scale(1); /* Safari 和 Chrome */-o-transform: scale(1); /* Opera */-ms-transform:scale(1); /* IE 9 */ + } + 100%{ + transform: scale(0.2);-moz-transform: scale(0.1); /* Firefox 4 */-webkit-transform: scale(0.2); /* Safari 和 Chrome */-o-transform: scale(0.1); /* Opera */-ms-transform:scale(0.1); /* IE 9 */ + } +} + +.login{z-index: 2;position:absolute;width: 350px;border-radius: 5px;height: 500px;background: white;box-shadow: 0px 0px 5px #333333;top: 50%;left: 50%;margin-top: -250px;margin-left: -175px;transition: all 1s;-moz-transition: all 1s; /* Firefox 4 */-webkit-transition: all 1s; /* Safari 和 Chrome */-o-transition: all 1s; /* Opera */} +.login-top{font-size: 24px;margin-top: 100px;padding-left: 40px;box-sizing: border-box;color: #333333;margin-bottom: 50px;} +.login-center{width: 100%;box-sizing: border-box;padding: 0 40px;margin-bottom: 30px;} +.login-center-img{width: 20px;height: 20px;float: left;margin-top: 5px;} +.login-center-img>img{width: 100%;} +.login-center-input{float: left;width: 265px/*230px*/;margin-left: 0px;height: 30px;position: relative;} +.login-center-input input{z-index: 2;transition: all 0.5s;padding-left: 10px;color: #333333;width: 105%;height: 30px;border: 0;border-bottom: 1px solid #cccccc;border-top: 1px solid #ffffff;border-left: 1px solid #ffffff;border-right: 1px solid #ffffff;box-sizing: border-box;outline: none;position: relative;} +.login-center-input input:focus{border: 1px solid dodgerblue;} +.login-center-input-text{background: white;padding: 0 5px;position: absolute;z-index: 0;opacity: 0;height: 20px;top: 50%;margin-top: -10px;font-size: 14px;left: 5px;color: dodgerblue;line-height: 20px;transition: all 0.5s;-moz-transition: all 0.5s; /* Firefox 4 */-webkit-transition: all 0.5s; /* Safari 和 Chrome */-o-transition: all 0.5s; /* Opera */} +.login-center-input input:focus~.login-center-input-text{top: 0;z-index: 3;opacity: 1;margin-top: -15px;} +.login.active{-webkit-animation: login-small 0.8s ; animation: login-small 0.8s ;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards} +.login-button{cursor: pointer;width: 250px;text-align: center;height: 40px;line-height: 40px;background-color: dodgerblue;border-radius: 5px;margin: 0 auto;margin-top: 50px;color: white;} + diff --git a/src/main/resources/static/css/animate.min.css b/src/main/resources/static/css/animate.min.css index 74ee7c1..f3f1068 100644 --- a/src/main/resources/static/css/animate.min.css +++ b/src/main/resources/static/css/animate.min.css @@ -1,42 +1,11 @@ -@charset "UTF-8";/*! -Animate.css - http://daneden.me/animate -Licensed under the MIT license - http://opensource.org/licenses/MIT +@charset "UTF-8"; -Copyright (c) 2014 Daniel Eden -*/.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}@-webkit-keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}@keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{visibility:visible !important;-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{visibility:visible !important;-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{visibility:visible;opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none;visibility:visible;}}@keyframes fadeInLeft{0%{visibility:visible;opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{visibility:visible;opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{visibility:visible !important;-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}100%{visibility:hidden;opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}100%{visibility:hidden;opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideInDown{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}100%{-webkit-transform:translateY(0);transform:translateY(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);visibility:visible}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);visibility:visible}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translateX(100%);transform:translateX(100%);visibility:visible}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight{0%{-webkit-transform:translateX(100%);transform:translateX(100%);visibility:visible}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translateY(100%);transform:translateY(100%);visibility:visible}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideInUp{0%{-webkit-transform:translateY(100%);transform:translateY(100%);visibility:visible}100%{-webkit-transform:translateY(0);transform:translateY(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes slideOutDown{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{visibility:hidden;-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes slideOutLeft{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{visibility:hidden;-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{visibility:hidden;-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes slideOutRight{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{visibility:hidden;-webkit-transform:translateX(100%);transform:translateX(100%)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{visibility:hidden;-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes slideOutUp{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{visibility:hidden;-webkit-transform:translateY(-100%);transform:translateY(-100%)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}@-webkit-keyframes fadeInUpPace{0%{opacity:0;-webkit-transform:translate3d(0,50px,0);transform:translate3d(0,50px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpPace{0%{opacity:0;-webkit-transform:translate3d(0,50px,0);transform:translate3d(0,50px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpPace{-webkit-animation-name:fadeInUpPace;animation-name:fadeInUpPace}@-webkit-keyframes fadeOutUpPace{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}}@keyframes fadeOutUpPace{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}}.fadeOutUpPace{-webkit-animation-name:fadeOutUpPace;animation-name:fadeOutUpPace;}@-moz-keyframes spin{from{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(360deg)}}@-webkit-keyframes spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@-o-keyframes spin{from{-o-transform:rotate(0deg)}to{-o-transform:rotate(360deg)}}@-ms-keyframes spin{from{-ms-transform:rotate(0deg)}to{-ms-transform:rotate(360deg)}}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.floating{animation-name:floating;-webkit-animation-name:floating;animation-duration:1.5s;-webkit-animation-duration:1.5s;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;}@keyframes floating{0%{transform:translateY(0%) rotateX(60deg) scale(0.5,0.5)}50%{transform:translateY(3%) rotateX(60deg) scale(0.5,0.5)}100%{transform:translateY(0%) rotateX(60deg) scale(0.5,0.5)}}@-webkit-keyframes floating{0%{-webkit-transform:translateY(0%) rotateX(60deg) scale(0.5,0.5)}50%{-webkit-transform:translateY(3%) rotateX(60deg) scale(0.5,0.5)}100%{-webkit-transform:translateY(0%) rotateX(60deg) scale(0.5,0.5)}}@-ms-keyframes floating{0%{-ms-transform:translateY(1%) rotateX(60deg) scale(0.5,0.5)}50%{-ms-transform:translateY(3%) rotateX(60deg) scale(0.5,0.5)}100%{-ms-transform:translateY(1%) rotateX(60deg) scale(0.5,0.5)}} -@-webkit-keyframes fadeInRightMenu{0%{opacity:0;-webkit-transform:translateX(100%) translateY(-50%);transform:translateX(100%) translateY(-50%)}100%{opacity:1;-webkit-transform:transform:translateX(0) translateY(-50%);transform:transform:translateX(0) translateY(-50%);z-index:4;}}@keyframes fadeInRightMenu{0%{opacity:0;-webkit-transform:translateX(100%) translateY(-50%);transform:translateX(100%) translateY(-50%)}100%{opacity:1;-webkit-transform:translateX(0) translateY(-50%);transform:translateX(0) translateY(-50%);z-index:4;}}.fadeInRightMenu{-webkit-animation-name:fadeInRightMenu;animation-name:fadeInRightMenu} -@-webkit-keyframes loaderAnim{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loaderAnim{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} +/*! + * animate.css -https://daneden.github.io/animate.css/ + * Version - 3.7.2 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2019 Daniel Eden + */ -@-webkit-keyframes fadeInDownDiamond{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0) rotate(45deg);transform:translate3d(0,-100%,0) rotate(45deg);}100%{opacity:1;-webkit-transform:rotate(45.1deg);transform:rotate(45.1deg);}}@keyframes fadeInDownDiamond{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0) rotate(45deg);transform:translate3d(0,-100%,0) rotate(45deg);}100%{opacity:1;-webkit-transform:rotate(45.1deg);transform:rotate(45.1deg);}}.fadeInDownDiamond{visibility:visible !important;-webkit-animation-name:fadeInDownDiamond;animation-name:fadeInDownDiamond;} - -@-webkit-keyframes fadeInUpDiamond{0%{opacity:0;-webkit-transform:translate3d(0,100%,0) rotate(45deg);transform:translate3d(0,100%,0) rotate(45deg);}100%{opacity:1;-webkit-transform:rotate(45.1deg);transform:rotate(45.1deg);}}@keyframes fadeInUpDiamond{0%{opacity:0;-webkit-transform:translate3d(0,100%,0) rotate(45deg);transform:translate3d(0,100%,0) rotate(45deg);}100%{opacity:1;-webkit-transform:rotate(45.1deg);transform:rotate(45.1deg);}}.fadeInUpDiamond{visibility:visible !important;-webkit-animation-name:fadeInUpDiamond;animation-name:fadeInUpDiamond} - -@-webkit-keyframes fadeInRightDiamond{0%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(45deg);transform:translate3d(100%,0,0) rotate(45deg);}100%{opacity:1;-webkit-transform:rotate(45.1deg);transform:rotate(45.1deg);}}@keyframes fadeInRightDiamond{0%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(45deg);transform:translate3d(100%,0,0) rotate(45deg);}100%{opacity:1;-webkit-transform:rotate(45.1deg);transform:rotate(45.1deg);}}.fadeInRightDiamond{visibility:visible !important;-webkit-animation-name:fadeInRightDiamond;animation-name:fadeInRightDiamond;} - -@-webkit-keyframes fadeInLeftDiamond{0%{visibility:visible;opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(45deg);transform:translate3d(-100%,0,0) rotate(45deg);}100%{opacity:1;-webkit-transform:rotate(45.1deg);transform:rotate(45.1deg);visibility:visible;}}@keyframes fadeInLeftDiamond{0%{visibility:visible;opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(45deg);transform:translate3d(-100%,0,0) rotate(45deg);}100%{visibility:visible;opacity:1;-webkit-transform:rotate(45.1deg);transform:rotate(45.1deg);}}.fadeInLeftDiamond{-webkit-animation-name:fadeInLeftDiamond;animation-name:fadeInLeftDiamond} - -@-webkit-keyframes fadeOutDownDiamond{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0) rotate(45.1deg);transform:translate3d(0,100%,0) rotate(45.1deg);}}@keyframes fadeOutDownDiamond{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0) rotate(45.1deg);transform:translate3d(0,100%,0) rotate(45.1deg);}}.fadeOutDownDiamond{-webkit-animation-name:fadeOutDownDiamond;animation-name:fadeOutDownDiamond} - -@-webkit-keyframes fadeOutUpDiamond{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0) rotate(45.1deg);transform:translate3d(0,-100%,0) rotate(45.1deg);}}@keyframes fadeOutUpDiamond{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0) rotate(45.1deg);transform:translate3d(0,-100%,0) rotate(45.1deg);}}.fadeOutUpDiamond{-webkit-animation-name:fadeOutUpDiamond;animation-name:fadeOutUpDiamond} - -@-webkit-keyframes fadeOutRightDiamond{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(45.1deg);transform:translate3d(100%,0,0) rotate(45.1deg);}}@keyframes fadeOutRightDiamond{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(45.1deg);transform:translate3d(100%,0,0) rotate(45.1deg);}}.fadeOutRightDiamond{-webkit-animation-name:fadeOutRightDiamond;animation-name:fadeOutRightDiamond} - -@-webkit-keyframes fadeOutLeftDiamond{0%{opacity:1}100%{visibility:hidden;opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(45.1deg);transform:translate3d(-100%,0,0) rotate(45.1deg);}}@keyframes fadeOutLeftDiamond{0%{opacity:1}100%{visibility:hidden;opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(45.1deg);transform:translate3d(-100%,0,0) rotate(45.1deg);}}.fadeOutLeftDiamond{-webkit-animation-name:fadeOutLeftDiamond;animation-name:fadeOutLeftDiamond} - -@-webkit-keyframes fadeOutDown{0%{visibility:visible;opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:hidden !important;}}@keyframes fadeOutDown{0%{visibility:visible;opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:hidden !important;}}.fadeOutDown{visibility:visible !important;-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown} - -@-webkit-keyframes fadeInUp{0%{visibility:visible;opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{visibility:visible;opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{0%{visibility:visible;opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{visibility:visible;opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{visibility:visible !important;-webkit-animation-name:fadeInUp;animation-name:fadeInUp} - -@-webkit-keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:hidden !important;}}@keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:hidden !important;}}.fadeOutUp{visibility:visible !important;-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp} - -@-webkit-keyframes fadeInDownCenterX{0%{opacity:0;-webkit-transform:translate3d(-50%,-100%,0);transform:translate3d(-50%,-100%,0);}100%{opacity:1;-webkit-transform:translate3d(-50%,0%,0);transform:translate3d(-50%,0%,0);}}@keyframes fadeInDownCenterX{0%{opacity:0;-webkit-transform:translate3d(-50%,-100%,0);transform:translate3d(-50%,-100%,0);}100%{opacity:1;-webkit-transform:translate3d(-50%,0%,0);transform:translate3d(-50%,0%,0);}}.fadeInDownCenterX{visibility:visible !important;-webkit-animation-name:fadeInDownCenterX;animation-name:fadeInDownCenterX;} - -@-webkit-keyframes fadeInUpCenterX{0%{visibility:visible;opacity:0;-webkit-transform:translate3d(-50%,100%,0);transform:translate3d(-50%,100%,0)}100%{visibility:visible;opacity:1;-webkit-transform:translate3d(-50%,0%,0);transform:translate3d(-50%,0%,0);}}@keyframes fadeInUpCenterX{0%{visibility:visible;opacity:0;-webkit-transform:translate3d(-50%,100%,0);transform:translate3d(-50%,100%,0)}100%{visibility:visible;opacity:1;-webkit-transform:translate3d(-50%,0%,0);transform:translate3d(-50%,0%,0);}}.fadeInUpCenterX{visibility:visible !important;-webkit-animation-name:fadeInUpCenterX;animation-name:fadeInUpCenterX} - -@-webkit-keyframes fadeOut{0%{opacity:1;visibility:visible;}100%{opacity:0;visibility:hidden;}}@keyframes fadeOut{0%{opacity:1;visibility:visible;}100%{opacity:0; visibility:hidden;}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut;} - -@-webkit-keyframes flipInY{0%{visibility:visible;hid-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{visibility:visible; opacity:1; -webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{visibility:visible;-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{visibility:visible; opacity:1; -webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY} - -@-webkit-keyframes zoomInSmall{0%{opacity:0;visibility:visible;-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%{opacity:1;visibility:visible;}100%{opacity:1;visibility:visible;}}@keyframes zoomInSmall{0%{opacity:0;visibility:visible;-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%{opacity:1;visibility:visible;}100%{opacity:1;visibility:visible;}}.zoomInSmall{-webkit-animation-name:zoomInSmall;animation-name:zoomInSmall} - -@-webkit-keyframes zoomOutSmall{0%{opacity:1;visibility:visible;}50%{opacity:0;visibility:hidden;-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}100%{opacity:0;visibility:hidden;}}@keyframes zoomOutSmall{0%{opacity:1;visibility:visible;}50%{opacity:0;visibility:hidden;-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}100%{opacity:0;visibility:hidden;}}.zoomOutSmall{-webkit-animation-name:zoomOutSmall;animation-name:zoomOutSmall} \ No newline at end of file +@-webkit-keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.delay-1s{-webkit-animation-delay:1s;animation-delay:1s}.animated.delay-2s{-webkit-animation-delay:2s;animation-delay:2s}.animated.delay-3s{-webkit-animation-delay:3s;animation-delay:3s}.animated.delay-4s{-webkit-animation-delay:4s;animation-delay:4s}.animated.delay-5s{-webkit-animation-delay:5s;animation-delay:5s}.animated.fast{-webkit-animation-duration:.8s;animation-duration:.8s}.animated.faster{-webkit-animation-duration:.5s;animation-duration:.5s}.animated.slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.slower{-webkit-animation-duration:3s;animation-duration:3s}@media (prefers-reduced-motion:reduce),(print){.animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}} \ No newline at end of file diff --git a/src/main/resources/static/css/bootstrap.min.css b/src/main/resources/static/css/bootstrap.min.css deleted file mode 100644 index 55a5321..0000000 --- a/src/main/resources/static/css/bootstrap.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Bootstrap v3.3.2 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{text-decoration:none}a:focus,a:hover{}a:focus{outline:none;}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important;visibility:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:'Dosis', sans-serif;font-size:12px;font-weight:400;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=100);opacity:1}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:8px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:9px 15px 8px 15px;color:#111111;text-transform:uppercase;text-align:center;text-decoration:none;background-color:white;border-radius:0px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:white}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:white}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:white}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:white}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:white}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:white}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}*{outline:none;} \ No newline at end of file diff --git a/src/main/resources/static/css/default.css b/src/main/resources/static/css/default.css new file mode 100644 index 0000000..e91f6ba --- /dev/null +++ b/src/main/resources/static/css/default.css @@ -0,0 +1,7465 @@ +/*! +* Bootstrap v4.0.0-beta.2 (https://getbootstrap.com) +* Copyright 2011-2017 The Bootstrap Authors +* Copyright 2011-2017 Twitter, Inc. +* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)*/ +:root { + --blue: #0000ff; + --indigo: #3d5afe; + --purple: #aa00ff; + --pink: #f50057; + --red: #ff1744; + --orange: #ffd700; + --yellow: #ffff00; + --green: #00e676; + --teal: #1de9b6; + --cyan: #00e5ff; + --white: #ffffff; + --gray: #868e96; + --gray-dark: #343a40; + --primary: #ffd700; + --secondary: #0000ff; + --success: #00e676; + --info: #00e5ff; + --warning: #ffff00; + --danger: #ff1744; + --light: #f8f9fa; + --dark: #212529; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } + +*, +*::before, +*::after { + box-sizing: border-box; } + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent; } + +@-ms-viewport { + width: device-width; } + +article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; } + +body { + margin: 0; + font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #343a40; + text-align: left; + background-color: #ffffff; } + +[tabindex="-1"]:focus { + outline: 0 !important; } + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; } + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; } + +p { + margin-top: 0; + margin-bottom: 1rem; } + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; } + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; } +.tlinks{text-indent:-9999px;height:0;line-height:0;font-size:0;overflow:hidden;} +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; } + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; } + +dt { + font-weight: 700; } + +dd { + margin-bottom: .5rem; + margin-left: 0; } + +blockquote { + margin: 0 0 1rem; } + +dfn { + font-style: italic; } + +b, +strong { + font-weight: bolder; } + +small { + font-size: 80%; } + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; } + +sub { + bottom: -.25em; } + +sup { + top: -.5em; } + +a { + color: #343a40; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects; } + a:hover { + color: #000000; + text-decoration: none; } + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; } + a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; } + a:not([href]):not([tabindex]):focus { + outline: 0; } + +pre, +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; } + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; } + +figure { + margin: 0 0 1rem; } + +img { + vertical-align: middle; + border-style: none; } + +svg:not(:root) { + overflow: hidden; } + +table { + border-collapse: collapse; } + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #868e96; + text-align: left; + caption-side: bottom; } + +th { + text-align: inherit; } + +label { + display: inline-block; + margin-bottom: .5rem; } + +button { + border-radius: 0; } + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; } + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; } + +button, +input { + overflow: visible; } + +button, +select { + text-transform: none; } + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; } + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; } + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; } + +textarea { + overflow: auto; + resize: vertical; } + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; } + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; } + +progress { + vertical-align: baseline; } + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; } + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; } + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; } + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; } + +output { + display: inline-block; } + +summary { + display: list-item; + cursor: pointer; } + +template { + display: none; } + +[hidden] { + display: none !important; } + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.5; + color: #000000; } + +h1, .h1 { + font-size: 2.5rem; } + +h2, .h2 { + font-size: 1.75rem; } + +h3, .h3 { + font-size: 1.5rem; } + +h4, .h4 { + font-size: 1.375rem; } + +h5, .h5 { + font-size: 1.25rem; } + +h6, .h6 { + font-size: 1rem; } + +.lead { + font-size: 1.2rem; + font-weight: 400; } + +.display-1 { + font-size: 5rem; + font-weight: 300; + line-height: 1.5; } + +.display-2 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.5; } + +.display-3 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.5; } + +.display-4 { + font-size: 2.5rem; + font-weight: 300; + line-height: 1.5; } + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 2px solid rgba(0, 0, 0, 0.1); } + +small, +.small { + font-size: 80%; + font-weight: 400; } + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; } + +.list-unstyled { + padding-left: 0; + list-style: none; } + +.list-inline { + padding-left: 0; + list-style: none; } + +.list-inline-item { + display: inline-block; } + .list-inline-item:not(:last-child) { + margin-right: 0.5rem; } + +.initialism { + font-size: 90%; + text-transform: uppercase; } + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; } + +.blockquote-footer { + display: block; + font-size: 80%; + color: #868e96; } + .blockquote-footer::before { + content: "\2014 \00A0"; } + +.img-fluid { + max-width: 100%; + height: auto; } + +.img-thumbnail { + padding: 0px; + background-color: #ffffff; + border: 2px solid #f8f9fa; + border-radius: 0.25rem; + max-width: 100%; + height: auto; } + +.figure { + display: inline-block; } + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; } + +.figure-caption { + font-size: 90%; + color: #ced4da; } + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } + +code { + font-size: 87.5%; + color: #f50057; + word-break: break-word; } + a > code { + color: inherit; } + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #ffffff; + background-color: #212529; + border-radius: 0.2rem; } + kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; } + +pre { + display: block; + font-size: 87.5%; + color: #212529; } + pre code { + font-size: inherit; + color: inherit; + word-break: normal; } + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; } + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; } + @media (min-width: 576px) { + .container { + max-width: 540px; } } + @media (min-width: 768px) { + .container { + max-width: 720px; } } + @media (min-width: 992px) { + .container { + max-width: 960px; } } + @media (min-width: 1200px) { + .container { + max-width: 1140px; } } + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; } + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; } + +.no-gutters { + margin-right: 0; + margin-left: 0; } + .no-gutters > .col, + .no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; } + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; } + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; } + +.col-1 { + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + +.col-2 { + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + +.col-4 { + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + +.col-5 { + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + +.col-7 { + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + +.col-8 { + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + +.col-10 { + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + +.col-11 { + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + +.order-first { + -ms-flex-order: -1; + order: -1; } + +.order-last { + -ms-flex-order: 13; + order: 13; } + +.order-0 { + -ms-flex-order: 0; + order: 0; } + +.order-1 { + -ms-flex-order: 1; + order: 1; } + +.order-2 { + -ms-flex-order: 2; + order: 2; } + +.order-3 { + -ms-flex-order: 3; + order: 3; } + +.order-4 { + -ms-flex-order: 4; + order: 4; } + +.order-5 { + -ms-flex-order: 5; + order: 5; } + +.order-6 { + -ms-flex-order: 6; + order: 6; } + +.order-7 { + -ms-flex-order: 7; + order: 7; } + +.order-8 { + -ms-flex-order: 8; + order: 8; } + +.order-9 { + -ms-flex-order: 9; + order: 9; } + +.order-10 { + -ms-flex-order: 10; + order: 10; } + +.order-11 { + -ms-flex-order: 11; + order: 11; } + +.order-12 { + -ms-flex-order: 12; + order: 12; } + +.offset-1 { + margin-left: 8.33333%; } + +.offset-2 { + margin-left: 16.66667%; } + +.offset-3 { + margin-left: 25%; } + +.offset-4 { + margin-left: 33.33333%; } + +.offset-5 { + margin-left: 41.66667%; } + +.offset-6 { + margin-left: 50%; } + +.offset-7 { + margin-left: 58.33333%; } + +.offset-8 { + margin-left: 66.66667%; } + +.offset-9 { + margin-left: 75%; } + +.offset-10 { + margin-left: 83.33333%; } + +.offset-11 { + margin-left: 91.66667%; } + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; } + .col-sm-1 { + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-sm-2 { + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-sm-4 { + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-sm-5 { + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-sm-7 { + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-sm-8 { + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-sm-10 { + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-sm-11 { + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-sm-first { + -ms-flex-order: -1; + order: -1; } + .order-sm-last { + -ms-flex-order: 13; + order: 13; } + .order-sm-0 { + -ms-flex-order: 0; + order: 0; } + .order-sm-1 { + -ms-flex-order: 1; + order: 1; } + .order-sm-2 { + -ms-flex-order: 2; + order: 2; } + .order-sm-3 { + -ms-flex-order: 3; + order: 3; } + .order-sm-4 { + -ms-flex-order: 4; + order: 4; } + .order-sm-5 { + -ms-flex-order: 5; + order: 5; } + .order-sm-6 { + -ms-flex-order: 6; + order: 6; } + .order-sm-7 { + -ms-flex-order: 7; + order: 7; } + .order-sm-8 { + -ms-flex-order: 8; + order: 8; } + .order-sm-9 { + -ms-flex-order: 9; + order: 9; } + .order-sm-10 { + -ms-flex-order: 10; + order: 10; } + .order-sm-11 { + -ms-flex-order: 11; + order: 11; } + .order-sm-12 { + -ms-flex-order: 12; + order: 12; } + .offset-sm-0 { + margin-left: 0; } + .offset-sm-1 { + margin-left: 8.33333%; } + .offset-sm-2 { + margin-left: 16.66667%; } + .offset-sm-3 { + margin-left: 25%; } + .offset-sm-4 { + margin-left: 33.33333%; } + .offset-sm-5 { + margin-left: 41.66667%; } + .offset-sm-6 { + margin-left: 50%; } + .offset-sm-7 { + margin-left: 58.33333%; } + .offset-sm-8 { + margin-left: 66.66667%; } + .offset-sm-9 { + margin-left: 75%; } + .offset-sm-10 { + margin-left: 83.33333%; } + .offset-sm-11 { + margin-left: 91.66667%; } } + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; } + .col-md-1 { + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-md-2 { + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-md-4 { + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-md-5 { + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-md-7 { + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-md-8 { + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-md-10 { + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-md-11 { + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-md-first { + -ms-flex-order: -1; + order: -1; } + .order-md-last { + -ms-flex-order: 13; + order: 13; } + .order-md-0 { + -ms-flex-order: 0; + order: 0; } + .order-md-1 { + -ms-flex-order: 1; + order: 1; } + .order-md-2 { + -ms-flex-order: 2; + order: 2; } + .order-md-3 { + -ms-flex-order: 3; + order: 3; } + .order-md-4 { + -ms-flex-order: 4; + order: 4; } + .order-md-5 { + -ms-flex-order: 5; + order: 5; } + .order-md-6 { + -ms-flex-order: 6; + order: 6; } + .order-md-7 { + -ms-flex-order: 7; + order: 7; } + .order-md-8 { + -ms-flex-order: 8; + order: 8; } + .order-md-9 { + -ms-flex-order: 9; + order: 9; } + .order-md-10 { + -ms-flex-order: 10; + order: 10; } + .order-md-11 { + -ms-flex-order: 11; + order: 11; } + .order-md-12 { + -ms-flex-order: 12; + order: 12; } + .offset-md-0 { + margin-left: 0; } + .offset-md-1 { + margin-left: 8.33333%; } + .offset-md-2 { + margin-left: 16.66667%; } + .offset-md-3 { + margin-left: 25%; } + .offset-md-4 { + margin-left: 33.33333%; } + .offset-md-5 { + margin-left: 41.66667%; } + .offset-md-6 { + margin-left: 50%; } + .offset-md-7 { + margin-left: 58.33333%; } + .offset-md-8 { + margin-left: 66.66667%; } + .offset-md-9 { + margin-left: 75%; } + .offset-md-10 { + margin-left: 83.33333%; } + .offset-md-11 { + margin-left: 91.66667%; } } + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; } + .col-lg-1 { + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-lg-2 { + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-lg-4 { + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-lg-5 { + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-lg-7 { + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-lg-8 { + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-lg-10 { + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-lg-11 { + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-lg-first { + -ms-flex-order: -1; + order: -1; } + .order-lg-last { + -ms-flex-order: 13; + order: 13; } + .order-lg-0 { + -ms-flex-order: 0; + order: 0; } + .order-lg-1 { + -ms-flex-order: 1; + order: 1; } + .order-lg-2 { + -ms-flex-order: 2; + order: 2; } + .order-lg-3 { + -ms-flex-order: 3; + order: 3; } + .order-lg-4 { + -ms-flex-order: 4; + order: 4; } + .order-lg-5 { + -ms-flex-order: 5; + order: 5; } + .order-lg-6 { + -ms-flex-order: 6; + order: 6; } + .order-lg-7 { + -ms-flex-order: 7; + order: 7; } + .order-lg-8 { + -ms-flex-order: 8; + order: 8; } + .order-lg-9 { + -ms-flex-order: 9; + order: 9; } + .order-lg-10 { + -ms-flex-order: 10; + order: 10; } + .order-lg-11 { + -ms-flex-order: 11; + order: 11; } + .order-lg-12 { + -ms-flex-order: 12; + order: 12; } + .offset-lg-0 { + margin-left: 0; } + .offset-lg-1 { + margin-left: 8.33333%; } + .offset-lg-2 { + margin-left: 16.66667%; } + .offset-lg-3 { + margin-left: 25%; } + .offset-lg-4 { + margin-left: 33.33333%; } + .offset-lg-5 { + margin-left: 41.66667%; } + .offset-lg-6 { + margin-left: 50%; } + .offset-lg-7 { + margin-left: 58.33333%; } + .offset-lg-8 { + margin-left: 66.66667%; } + .offset-lg-9 { + margin-left: 75%; } + .offset-lg-10 { + margin-left: 83.33333%; } + .offset-lg-11 { + margin-left: 91.66667%; } } + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; } + .col-xl-1 { + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; } + .col-xl-2 { + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; } + .col-xl-4 { + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; } + .col-xl-5 { + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; } + .col-xl-7 { + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; } + .col-xl-8 { + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; } + .col-xl-10 { + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; } + .col-xl-11 { + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; } + .order-xl-first { + -ms-flex-order: -1; + order: -1; } + .order-xl-last { + -ms-flex-order: 13; + order: 13; } + .order-xl-0 { + -ms-flex-order: 0; + order: 0; } + .order-xl-1 { + -ms-flex-order: 1; + order: 1; } + .order-xl-2 { + -ms-flex-order: 2; + order: 2; } + .order-xl-3 { + -ms-flex-order: 3; + order: 3; } + .order-xl-4 { + -ms-flex-order: 4; + order: 4; } + .order-xl-5 { + -ms-flex-order: 5; + order: 5; } + .order-xl-6 { + -ms-flex-order: 6; + order: 6; } + .order-xl-7 { + -ms-flex-order: 7; + order: 7; } + .order-xl-8 { + -ms-flex-order: 8; + order: 8; } + .order-xl-9 { + -ms-flex-order: 9; + order: 9; } + .order-xl-10 { + -ms-flex-order: 10; + order: 10; } + .order-xl-11 { + -ms-flex-order: 11; + order: 11; } + .order-xl-12 { + -ms-flex-order: 12; + order: 12; } + .offset-xl-0 { + margin-left: 0; } + .offset-xl-1 { + margin-left: 8.33333%; } + .offset-xl-2 { + margin-left: 16.66667%; } + .offset-xl-3 { + margin-left: 25%; } + .offset-xl-4 { + margin-left: 33.33333%; } + .offset-xl-5 { + margin-left: 41.66667%; } + .offset-xl-6 { + margin-left: 50%; } + .offset-xl-7 { + margin-left: 58.33333%; } + .offset-xl-8 { + margin-left: 66.66667%; } + .offset-xl-9 { + margin-left: 75%; } + .offset-xl-10 { + margin-left: 83.33333%; } + .offset-xl-11 { + margin-left: 91.66667%; } } + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; + background-color: transparent; } + .table th, + .table td { + padding: 0.75rem; + vertical-align: top; + border-top: 2px solid #f8f9fa; } + .table thead th { + vertical-align: bottom; + border-bottom: 4px solid #f8f9fa; } + .table tbody + tbody { + border-top: 4px solid #f8f9fa; } + .table .table { + background-color: #ffffff; } + +.table-sm th, +.table-sm td { + padding: 0.3rem; } + +.table-bordered { + border: 2px solid #f8f9fa; } + .table-bordered th, + .table-bordered td { + border: 2px solid #f8f9fa; } + .table-bordered thead th, + .table-bordered thead td { + border-bottom-width: 4px; } + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); } + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, 0.075); } + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #fff4b8; } + +.table-hover .table-primary:hover { + background-color: #fff09f; } + .table-hover .table-primary:hover > td, + .table-hover .table-primary:hover > th { + background-color: #fff09f; } + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #b8b8ff; } + +.table-hover .table-secondary:hover { + background-color: #9f9fff; } + .table-hover .table-secondary:hover > td, + .table-hover .table-secondary:hover > th { + background-color: #9f9fff; } + +.table-success, +.table-success > th, +.table-success > td { + background-color: #b8f8d9; } + +.table-hover .table-success:hover { + background-color: #a1f6cd; } + .table-hover .table-success:hover > td, + .table-hover .table-success:hover > th { + background-color: #a1f6cd; } + +.table-info, +.table-info > th, +.table-info > td { + background-color: #b8f8ff; } + +.table-hover .table-info:hover { + background-color: #9ff5ff; } + .table-hover .table-info:hover > td, + .table-hover .table-info:hover > th { + background-color: #9ff5ff; } + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #ffffb8; } + +.table-hover .table-warning:hover { + background-color: #ffff9f; } + .table-hover .table-warning:hover > td, + .table-hover .table-warning:hover > th { + background-color: #ffff9f; } + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #ffbecb; } + +.table-hover .table-danger:hover { + background-color: #ffa5b7; } + .table-hover .table-danger:hover > td, + .table-hover .table-danger:hover > th { + background-color: #ffa5b7; } + +.table-light, +.table-light > th, +.table-light > td { + background-color: #fdfdfe; } + +.table-hover .table-light:hover { + background-color: #ececf6; } + .table-hover .table-light:hover > td, + .table-hover .table-light:hover > th { + background-color: #ececf6; } + +.table-dark, +.table-dark > th, +.table-dark > td { + background-color: #c1c2c3; } + +.table-hover .table-dark:hover { + background-color: #b4b5b6; } + .table-hover .table-dark:hover > td, + .table-hover .table-dark:hover > th { + background-color: #b4b5b6; } + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); } + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); } + .table-hover .table-active:hover > td, + .table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); } + +.table .thead-dark th { + color: #ffffff; + background-color: #212529; + border-color: #32383e; } + +.table .thead-light th { + color: #495057; + background-color: #f8f9fa; + border-color: #f8f9fa; } + +.table-dark { + color: #ffffff; + background-color: #212529; } + .table-dark th, + .table-dark td, + .table-dark thead th { + border-color: #32383e; } + .table-dark.table-bordered { + border: 0; } + .table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); } + .table-dark.table-hover tbody tr:hover { + background-color: rgba(255, 255, 255, 0.075); } + +@media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .table-responsive-sm > .table-bordered { + border: 0; } } + +@media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .table-responsive-md > .table-bordered { + border: 0; } } + +@media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .table-responsive-lg > .table-bordered { + border: 0; } } + +@media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .table-responsive-xl > .table-bordered { + border: 0; } } + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } + .table-responsive > .table-bordered { + border: 0; } + +.form-control { + display: block; + width: 100%; + padding: 0.75rem 1.5rem; + font-size: 1rem; + line-height: 1.5; + color: #495057; + background-color: #ffffff; + background-clip: padding-box; + border: 2px solid #f8f9fa; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + .form-control::-ms-expand { + background-color: transparent; + border: 0; } + .form-control:focus { + color: #495057; + background-color: #ffffff; + border-color: #dee2e6; + outline: 0; + box-shadow: none; } + .form-control::-webkit-input-placeholder { + color: #adb5bd; + opacity: 1; } + .form-control:-ms-input-placeholder { + color: #adb5bd; + opacity: 1; } + .form-control::-ms-input-placeholder { + color: #adb5bd; + opacity: 1; } + .form-control::placeholder { + color: #adb5bd; + opacity: 1; } + .form-control:disabled, .form-control[readonly] { + background-color: #f8f9fa; + opacity: 1; } + +select.form-control:not([size]):not([multiple]) { + height: calc(2.5rem + 4px); } + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #ffffff; } + +.form-control-file, +.form-control-range { + display: block; + width: 100%; } + +.col-form-label { + padding-top: calc(0.75rem + 2px); + padding-bottom: calc(0.75rem + 2px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; } + +.col-form-label-lg { + padding-top: calc(0.75rem + 2px); + padding-bottom: calc(0.75rem + 2px); + font-size: 1.25rem; + line-height: 1.5; } + +.col-form-label-sm { + padding-top: calc(0.375rem + 2px); + padding-bottom: calc(0.375rem + 2px); + font-size: 0.875rem; + line-height: 1.5; } + +.form-control-plaintext { + display: block; + width: 100%; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + margin-bottom: 0; + line-height: 1.5; + background-color: transparent; + border: solid transparent; + border-width: 2px 0; } + .form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control, + .input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text, + .input-group-sm > .input-group-append > .form-control-plaintext.input-group-text, + .input-group-sm > .input-group-prepend > .form-control-plaintext.btn, + .input-group-sm > .input-group-append > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control, + .input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text, + .input-group-lg > .input-group-append > .form-control-plaintext.input-group-text, + .input-group-lg > .input-group-prepend > .form-control-plaintext.btn, + .input-group-lg > .input-group-append > .form-control-plaintext.btn { + padding-right: 0; + padding-left: 0; } + +.form-control-sm, .input-group-sm > .form-control, +.input-group-sm > .input-group-prepend > .input-group-text, +.input-group-sm > .input-group-append > .input-group-text, +.input-group-sm > .input-group-prepend > .btn, +.input-group-sm > .input-group-append > .btn { + padding: 0.375rem 1rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; } + +select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), +.input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), +.input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]), +.input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]), +.input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]) { + height: calc(2.0625rem + 4px); } + +.form-control-lg, .input-group-lg > .form-control, +.input-group-lg > .input-group-prepend > .input-group-text, +.input-group-lg > .input-group-append > .input-group-text, +.input-group-lg > .input-group-prepend > .btn, +.input-group-lg > .input-group-append > .btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; } + +select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), +.input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), +.input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]), +.input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]), +.input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]) { + height: calc(3.375rem + 4px); } + +.form-group { + margin-bottom: 1rem; } + +.form-text { + display: block; + margin-top: 0.25rem; } + +.form-row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; } + .form-row > .col, + .form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; } + +.form-check { + position: relative; + display: block; + padding-left: 1.25rem; } + +.form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; } + .form-check-input:disabled ~ .form-check-label { + color: #868e96; } + +.form-check-label { + margin-bottom: 0; } + +.form-check-inline { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; } + .form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; } + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #00e676; } + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(0, 230, 118, 0.8); + border-radius: .2rem; } + +.was-validated .form-control:valid, .form-control.is-valid, .was-validated +.custom-select:valid, +.custom-select.is-valid { + border-color: #00e676; } + .was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated + .custom-select:valid:focus, + .custom-select.is-valid:focus { + border-color: #00e676; + box-shadow: 0 0 0 0.2rem rgba(0, 230, 118, 0.25); } + .was-validated .form-control:valid ~ .valid-feedback, + .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, + .form-control.is-valid ~ .valid-tooltip, .was-validated + .custom-select:valid ~ .valid-feedback, + .was-validated + .custom-select:valid ~ .valid-tooltip, + .custom-select.is-valid ~ .valid-feedback, + .custom-select.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #00e676; } + +.was-validated .form-check-input:valid ~ .valid-feedback, +.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, +.form-check-input.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { + color: #00e676; } + .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + background-color: #67ffb5; } + +.was-validated .custom-control-input:valid ~ .valid-feedback, +.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, +.custom-control-input.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + background-color: #1aff8f; } + +.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #ffffff, 0 0 0 0.2rem rgba(0, 230, 118, 0.25); } + +.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #00e676; } + .was-validated .custom-file-input:valid ~ .custom-file-label::before, .custom-file-input.is-valid ~ .custom-file-label::before { + border-color: inherit; } + +.was-validated .custom-file-input:valid ~ .valid-feedback, +.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, +.custom-file-input.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 0.2rem rgba(0, 230, 118, 0.25); } + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #ff1744; } + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(255, 23, 68, 0.8); + border-radius: .2rem; } + +.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated +.custom-select:invalid, +.custom-select.is-invalid { + border-color: #ff1744; } + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated + .custom-select:invalid:focus, + .custom-select.is-invalid:focus { + border-color: #ff1744; + box-shadow: 0 0 0 0.2rem rgba(255, 23, 68, 0.25); } + .was-validated .form-control:invalid ~ .invalid-feedback, + .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, + .form-control.is-invalid ~ .invalid-tooltip, .was-validated + .custom-select:invalid ~ .invalid-feedback, + .was-validated + .custom-select:invalid ~ .invalid-tooltip, + .custom-select.is-invalid ~ .invalid-feedback, + .custom-select.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #ff1744; } + +.was-validated .form-check-input:invalid ~ .invalid-feedback, +.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, +.form-check-input.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { + color: #ff1744; } + .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + background-color: #ff97ab; } + +.was-validated .custom-control-input:invalid ~ .invalid-feedback, +.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, +.custom-control-input.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + background-color: #ff4a6d; } + +.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #ffffff, 0 0 0 0.2rem rgba(255, 23, 68, 0.25); } + +.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #ff1744; } + .was-validated .custom-file-input:invalid ~ .custom-file-label::before, .custom-file-input.is-invalid ~ .custom-file-label::before { + border-color: inherit; } + +.was-validated .custom-file-input:invalid ~ .invalid-feedback, +.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, +.custom-file-input.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + box-shadow: 0 0 0 0.2rem rgba(255, 23, 68, 0.25); } + +.form-inline { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; } + .form-inline .form-check { + width: 100%; } + @media (min-width: 576px) { + .form-inline label { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; } + .form-inline .form-group { + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; } + .form-inline .form-control-plaintext { + display: inline-block; } + .form-inline .input-group { + width: auto; } + .form-inline .form-check { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + padding-left: 0; } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; } + .form-inline .custom-control { + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; } + .form-inline .custom-control-label { + margin-bottom: 0; } } + +.btn { + display: inline-block; + font-weight: 700; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 2px solid transparent; + padding: 0.5rem 1.5rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; + transition: all 0.2s; } + .btn:hover, .btn:focus { + text-decoration: none; } + .btn:focus, .btn.focus { + outline: 0; + box-shadow: none; } + .btn.disabled, .btn:disabled { + opacity: 0.65; } + .btn:not(:disabled):not(.disabled) { + cursor: pointer; } + .btn:not(:disabled):not(.disabled):active, .btn:not(:disabled):not(.disabled).active { + background-image: none; } + +a.btn.disabled, +fieldset:disabled a.btn { + pointer-events: none; } + +.btn-primary { + color: #212529; + background-color: #ffd700; + border-color: #ffd700; } + .btn-primary:hover { + color: #212529; + background-color: #d9b700; + border-color: #ccac00; } + .btn-primary:focus, .btn-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 215, 0, 0.5); } + .btn-primary.disabled, .btn-primary:disabled { + color: #212529; + background-color: #ffd700; + border-color: #ffd700; } + .btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, + .show > .btn-primary.dropdown-toggle { + color: #212529; + background-color: #ccac00; + border-color: #bfa100; } + .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, + .show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 215, 0, 0.5); } + +.btn-secondary { + color: #ffffff; + background-color: #0000ff; + border-color: #0000ff; } + .btn-secondary:hover { + color: #ffffff; + background-color: #0000d9; + border-color: #0000cc; } + .btn-secondary:focus, .btn-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 0, 255, 0.5); } + .btn-secondary.disabled, .btn-secondary:disabled { + color: #ffffff; + background-color: #0000ff; + border-color: #0000ff; } + .btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, + .show > .btn-secondary.dropdown-toggle { + color: #ffffff; + background-color: #0000cc; + border-color: #0000bf; } + .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, + .show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 0, 255, 0.5); } + +.btn-success { + color: #ffffff; + background-color: #00e676; + border-color: #00e676; } + .btn-success:hover { + color: #ffffff; + background-color: #00c062; + border-color: #00b35c; } + .btn-success:focus, .btn-success.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 230, 118, 0.5); } + .btn-success.disabled, .btn-success:disabled { + color: #ffffff; + background-color: #00e676; + border-color: #00e676; } + .btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, + .show > .btn-success.dropdown-toggle { + color: #ffffff; + background-color: #00b35c; + border-color: #00a655; } + .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, + .show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 230, 118, 0.5); } + +.btn-info { + color: #212529; + background-color: #00e5ff; + border-color: #00e5ff; } + .btn-info:hover { + color: #ffffff; + background-color: #00c3d9; + border-color: #00b7cc; } + .btn-info:focus, .btn-info.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 229, 255, 0.5); } + .btn-info.disabled, .btn-info:disabled { + color: #212529; + background-color: #00e5ff; + border-color: #00e5ff; } + .btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, + .show > .btn-info.dropdown-toggle { + color: #ffffff; + background-color: #00b7cc; + border-color: #00acbf; } + .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, + .show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 229, 255, 0.5); } + +.btn-warning { + color: #212529; + background-color: #ffff00; + border-color: #ffff00; } + .btn-warning:hover { + color: #212529; + background-color: #d9d900; + border-color: #cccc00; } + .btn-warning:focus, .btn-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 255, 0, 0.5); } + .btn-warning.disabled, .btn-warning:disabled { + color: #212529; + background-color: #ffff00; + border-color: #ffff00; } + .btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, + .show > .btn-warning.dropdown-toggle { + color: #212529; + background-color: #cccc00; + border-color: #bfbf00; } + .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, + .show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 255, 0, 0.5); } + +.btn-danger { + color: #ffffff; + background-color: #ff1744; + border-color: #ff1744; } + .btn-danger:hover { + color: #ffffff; + background-color: #f0002f; + border-color: #e3002c; } + .btn-danger:focus, .btn-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 23, 68, 0.5); } + .btn-danger.disabled, .btn-danger:disabled { + color: #ffffff; + background-color: #ff1744; + border-color: #ff1744; } + .btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, + .show > .btn-danger.dropdown-toggle { + color: #ffffff; + background-color: #e3002c; + border-color: #d6002a; } + .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, + .show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 23, 68, 0.5); } + +.btn-light { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; } + .btn-light:hover { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; } + .btn-light:focus, .btn-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + .btn-light.disabled, .btn-light:disabled { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; } + .btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, + .show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #dae0e5; + border-color: #d3d9df; } + .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, + .show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + +.btn-dark { + color: #ffffff; + background-color: #212529; + border-color: #212529; } + .btn-dark:hover { + color: #ffffff; + background-color: #101214; + border-color: #0a0c0d; } + .btn-dark:focus, .btn-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(33, 37, 41, 0.5); } + .btn-dark.disabled, .btn-dark:disabled { + color: #ffffff; + background-color: #212529; + border-color: #212529; } + .btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, + .show > .btn-dark.dropdown-toggle { + color: #ffffff; + background-color: #0a0c0d; + border-color: #050506; } + .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, + .show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(33, 37, 41, 0.5); } + +.btn-outline-primary { + color: #ffd700; + background-color: transparent; + background-image: none; + border-color: #ffd700; } + .btn-outline-primary:hover { + color: #212529; + background-color: #ffd700; + border-color: #ffd700; } + .btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 215, 0, 0.5); } + .btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #ffd700; + background-color: transparent; } + .btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, + .show > .btn-outline-primary.dropdown-toggle { + color: #212529; + background-color: #ffd700; + border-color: #ffd700; } + .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 215, 0, 0.5); } + +.btn-outline-secondary { + color: #0000ff; + background-color: transparent; + background-image: none; + border-color: #0000ff; } + .btn-outline-secondary:hover { + color: #ffffff; + background-color: #0000ff; + border-color: #0000ff; } + .btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 0, 255, 0.5); } + .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #0000ff; + background-color: transparent; } + .btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, + .show > .btn-outline-secondary.dropdown-toggle { + color: #ffffff; + background-color: #0000ff; + border-color: #0000ff; } + .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 0, 255, 0.5); } + +.btn-outline-success { + color: #00e676; + background-color: transparent; + background-image: none; + border-color: #00e676; } + .btn-outline-success:hover { + color: #ffffff; + background-color: #00e676; + border-color: #00e676; } + .btn-outline-success:focus, .btn-outline-success.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 230, 118, 0.5); } + .btn-outline-success.disabled, .btn-outline-success:disabled { + color: #00e676; + background-color: transparent; } + .btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, + .show > .btn-outline-success.dropdown-toggle { + color: #ffffff; + background-color: #00e676; + border-color: #00e676; } + .btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 230, 118, 0.5); } + +.btn-outline-info { + color: #00e5ff; + background-color: transparent; + background-image: none; + border-color: #00e5ff; } + .btn-outline-info:hover { + color: #212529; + background-color: #00e5ff; + border-color: #00e5ff; } + .btn-outline-info:focus, .btn-outline-info.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 229, 255, 0.5); } + .btn-outline-info.disabled, .btn-outline-info:disabled { + color: #00e5ff; + background-color: transparent; } + .btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, + .show > .btn-outline-info.dropdown-toggle { + color: #212529; + background-color: #00e5ff; + border-color: #00e5ff; } + .btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 229, 255, 0.5); } + +.btn-outline-warning { + color: #ffff00; + background-color: transparent; + background-image: none; + border-color: #ffff00; } + .btn-outline-warning:hover { + color: #212529; + background-color: #ffff00; + border-color: #ffff00; } + .btn-outline-warning:focus, .btn-outline-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 255, 0, 0.5); } + .btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #ffff00; + background-color: transparent; } + .btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, + .show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #ffff00; + border-color: #ffff00; } + .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 255, 0, 0.5); } + +.btn-outline-danger { + color: #ff1744; + background-color: transparent; + background-image: none; + border-color: #ff1744; } + .btn-outline-danger:hover { + color: #ffffff; + background-color: #ff1744; + border-color: #ff1744; } + .btn-outline-danger:focus, .btn-outline-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 23, 68, 0.5); } + .btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #ff1744; + background-color: transparent; } + .btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, + .show > .btn-outline-danger.dropdown-toggle { + color: #ffffff; + background-color: #ff1744; + border-color: #ff1744; } + .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 23, 68, 0.5); } + +.btn-outline-light { + color: #f8f9fa; + background-color: transparent; + background-image: none; + border-color: #f8f9fa; } + .btn-outline-light:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; } + .btn-outline-light:focus, .btn-outline-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + .btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent; } + .btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, + .show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; } + .btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } + +.btn-outline-dark { + color: #212529; + background-color: transparent; + background-image: none; + border-color: #212529; } + .btn-outline-dark:hover { + color: #ffffff; + background-color: #212529; + border-color: #212529; } + .btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(33, 37, 41, 0.5); } + .btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #212529; + background-color: transparent; } + .btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, + .show > .btn-outline-dark.dropdown-toggle { + color: #ffffff; + background-color: #212529; + border-color: #212529; } + .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(33, 37, 41, 0.5); } + +.btn-link { + font-weight: 400; + color: #343a40; + background-color: transparent; } + .btn-link:hover { + color: #000000; + text-decoration: none; + background-color: transparent; + border-color: transparent; } + .btn-link:focus, .btn-link.focus { + text-decoration: none; + border-color: transparent; + box-shadow: none; } + .btn-link:disabled, .btn-link.disabled { + color: #868e96; } + +.btn-lg, .btn-group-lg > .btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; } + +.btn-sm, .btn-group-sm > .btn { + padding: 0.375rem 1rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; } + +.btn-block { + display: block; + width: 100%; } + .btn-block + .btn-block { + margin-top: 0.5rem; } + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; } + +.fade { + opacity: 0; + transition: opacity 0.15s linear; } + .fade.show { + opacity: 1; } + +.collapse { + display: none; } + .collapse.show { + display: block; } + +tr.collapse.show { + display: table-row; } + +tbody.collapse.show { + display: table-row-group; } + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; } + +.dropup, +.dropdown { + position: relative; } + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; } + +.dropdown-toggle:empty::after { + margin-left: 0; } + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.75rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #343a40; + text-align: left; + list-style: none; + background-color: #ffffff; + background-clip: padding-box; + border: 2px solid #f8f9fa; + border-radius: 0.25rem; } + +.dropup .dropdown-menu { + margin-top: 0; + margin-bottom: 0.125rem; } + +.dropup .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; } + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropright .dropdown-menu { + margin-top: 0; + margin-left: 0.125rem; } + +.dropright .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; } + +.dropright .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropright .dropdown-toggle::after { + vertical-align: 0; } + +.dropleft .dropdown-menu { + margin-top: 0; + margin-right: 0.125rem; } + +.dropleft .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; } + +.dropleft .dropdown-toggle::after { + display: none; } + +.dropleft .dropdown-toggle::before { + display: inline-block; + width: 0; + height: 0; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; } + +.dropleft .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropleft .dropdown-toggle::before { + vertical-align: 0; } + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #f8f9fa; } + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #495057; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; } + .dropdown-item:hover, .dropdown-item:focus { + color: #212529; + text-decoration: none; + background-color: #f8f9fa; } + .dropdown-item.active, .dropdown-item:active { + color: #ffffff; + text-decoration: none; + background-color: #ffd700; } + .dropdown-item.disabled, .dropdown-item:disabled { + color: #868e96; + background-color: transparent; } + +.dropdown-menu.show { + display: block; } + +.dropdown-header { + display: block; + padding: 0.75rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #ced4da; + white-space: nowrap; } + +.btn-group, +.btn-group-vertical { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; } + .btn-group > .btn, + .btn-group-vertical > .btn { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; } + .btn-group > .btn:hover, + .btn-group-vertical > .btn:hover { + z-index: 1; } + .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, + .btn-group-vertical > .btn:focus, + .btn-group-vertical > .btn:active, + .btn-group-vertical > .btn.active { + z-index: 1; } + .btn-group .btn + .btn, + .btn-group .btn + .btn-group, + .btn-group .btn-group + .btn, + .btn-group .btn-group + .btn-group, + .btn-group-vertical .btn + .btn, + .btn-group-vertical .btn + .btn-group, + .btn-group-vertical .btn-group + .btn, + .btn-group-vertical .btn-group + .btn-group { + margin-left: -2px; } + +.btn-toolbar { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: start; + justify-content: flex-start; } + .btn-toolbar .input-group { + width: auto; } + +.btn-group > .btn:first-child { + margin-left: 0; } + +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.dropdown-toggle-split { + padding-right: 1.125rem; + padding-left: 1.125rem; } + .dropdown-toggle-split::after { + margin-left: 0; } + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; } + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 1.125rem; + padding-left: 1.125rem; } + +.btn-group-vertical { + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: center; + justify-content: center; } + .btn-group-vertical .btn, + .btn-group-vertical .btn-group { + width: 100%; } + .btn-group-vertical > .btn + .btn, + .btn-group-vertical > .btn + .btn-group, + .btn-group-vertical > .btn-group + .btn, + .btn-group-vertical > .btn-group + .btn-group { + margin-top: -2px; + margin-left: 0; } + .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), + .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.btn-group-toggle > .btn, +.btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; } + .btn-group-toggle > .btn input[type="radio"], + .btn-group-toggle > .btn input[type="checkbox"], + .btn-group-toggle > .btn-group > .btn input[type="radio"], + .btn-group-toggle > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; } + +.input-group { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; } + .input-group > .form-control, + .input-group > .custom-select, + .input-group > .custom-file { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; } + .input-group > .form-control:focus, + .input-group > .custom-select:focus, + .input-group > .custom-file:focus { + z-index: 3; } + .input-group > .form-control + .form-control, + .input-group > .form-control + .custom-select, + .input-group > .form-control + .custom-file, + .input-group > .custom-select + .form-control, + .input-group > .custom-select + .custom-select, + .input-group > .custom-select + .custom-file, + .input-group > .custom-file + .form-control, + .input-group > .custom-file + .custom-select, + .input-group > .custom-file + .custom-file { + margin-left: -2px; } + .input-group > .form-control:not(:last-child), + .input-group > .custom-select:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .input-group > .form-control:not(:first-child), + .input-group > .custom-select:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .input-group > .custom-file { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; } + .input-group > .custom-file:not(:last-child) .custom-file-label, + .input-group > .custom-file:not(:last-child) .custom-file-label::before { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .input-group > .custom-file:not(:first-child) .custom-file-label, + .input-group > .custom-file:not(:first-child) .custom-file-label::before { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.input-group-prepend, +.input-group-append { + display: -ms-flexbox; + display: flex; } + .input-group-prepend .btn, + .input-group-append .btn { + position: relative; + z-index: 2; } + .input-group-prepend .btn + .btn, + .input-group-prepend .btn + .input-group-text, + .input-group-prepend .input-group-text + .input-group-text, + .input-group-prepend .input-group-text + .btn, + .input-group-append .btn + .btn, + .input-group-append .btn + .input-group-text, + .input-group-append .input-group-text + .input-group-text, + .input-group-append .input-group-text + .btn { + margin-left: -2px; } + +.input-group-prepend { + margin-right: -2px; } + +.input-group-append { + margin-left: -2px; } + +.input-group-text { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.75rem 1.5rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #ffffff; + text-align: center; + white-space: nowrap; + background-color: #212529; + border: 2px solid #212529; + border-radius: 0.25rem; } + .input-group-text input[type="radio"], + .input-group-text input[type="checkbox"] { + margin-top: 0; } + +.input-group > .input-group-prepend > .btn, +.input-group > .input-group-prepend > .input-group-text, +.input-group > .input-group-append:not(:last-child) > .btn, +.input-group > .input-group-append:not(:last-child) > .input-group-text, +.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group > .input-group-append > .btn, +.input-group > .input-group-append > .input-group-text, +.input-group > .input-group-prepend:not(:first-child) > .btn, +.input-group > .input-group-prepend:not(:first-child) > .input-group-text, +.input-group > .input-group-prepend:first-child > .btn:not(:first-child), +.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.custom-control { + position: relative; + display: block; + min-height: 1.5rem; + padding-left: 1.75rem; } + +.custom-control-inline { + display: -ms-inline-flexbox; + display: inline-flex; + margin-right: 1rem; } + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; } + .custom-control-input:checked ~ .custom-control-label::before { + color: #ffffff; + background-color: #ffd700; } + .custom-control-input:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #ffffff, none; } + .custom-control-input:active ~ .custom-control-label::before { + color: #ffffff; + background-color: #fff3b3; } + .custom-control-input:disabled ~ .custom-control-label { + color: #e9ecef; } + .custom-control-input:disabled ~ .custom-control-label::before { + background-color: #f8f9fa; } + +.custom-control-label { + margin-bottom: 0; } + .custom-control-label::before { + position: absolute; + top: 0.1875rem; + left: 0; + display: block; + width: 1.125rem; + height: 1.125rem; + pointer-events: none; + content: ""; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #f8f9fa; } + .custom-control-label::after { + position: absolute; + top: 0.1875rem; + left: 0; + display: block; + width: 1.125rem; + height: 1.125rem; + content: ""; + background-repeat: no-repeat; + background-position: center center; + background-size: 50% 50%; } + +.custom-checkbox .custom-control-label::before { + border-radius: 0.25rem; } + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before { + background-color: #ffd700; } + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23ffffff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); } + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + background-color: #ffd700; } + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23ffffff' d='M0 2h4'/%3E%3C/svg%3E"); } + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(255, 215, 0, 0.5); } + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(255, 215, 0, 0.5); } + +.custom-radio .custom-control-label::before { + border-radius: 50%; } + +.custom-radio .custom-control-input:checked ~ .custom-control-label::before { + background-color: #ffd700; } + +.custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23ffffff'/%3E%3C/svg%3E"); } + +.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(255, 215, 0, 0.5); } + +.custom-select { + display: inline-block; + width: 100%; + height: calc(2.5rem + 4px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: #ffffff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; + background-size: 8px 10px; + border: 2px solid #f8f9fa; + border-radius: 0.25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; } + .custom-select:focus { + border-color: #dee2e6; + outline: 0; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), none; } + .custom-select:focus::-ms-value { + color: #495057; + background-color: #ffffff; } + .custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: 0.75rem; + background-image: none; } + .custom-select:disabled { + color: #868e96; + background-color: #f8f9fa; } + .custom-select::-ms-expand { + opacity: 0; } + +.custom-select-sm { + height: calc(2.0625rem + 4px); + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 75%; } + +.custom-select-lg { + height: calc(3.375rem + 4px); + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 125%; } + +.custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(2.5rem + 4px); + margin-bottom: 0; } + +.custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(2.5rem + 4px); + margin: 0; + opacity: 0; } + .custom-file-input:focus ~ .custom-file-control { + border-color: #dee2e6; + box-shadow: none; } + .custom-file-input:focus ~ .custom-file-control::before { + border-color: #dee2e6; } + .custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; } + +.custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(2.5rem + 4px); + padding: 0.5rem 1.5rem; + line-height: 1.5; + color: #dee2e6; + background-color: #ffffff; + border: 2px solid #212529; + border-radius: 0.25rem; } + .custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: calc(calc(2.5rem + 4px) - 2px * 2); + padding: 0.5rem 1.5rem; + line-height: 1.5; + color: #ffffff; + content: "Browse"; + background-color: #212529; + border-left: 2px solid #212529; + border-radius: 0 0.25rem 0.25rem 0; } + +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + +.nav-link { + display: block; + padding: 0.25rem 1rem; } + .nav-link:hover, .nav-link:focus { + text-decoration: none; } + .nav-link.disabled { + color: #ced4da; } + +.nav-tabs { + border-bottom: 2px solid #f8f9fa; } + .nav-tabs .nav-item { + margin-bottom: -2px; } + .nav-tabs .nav-link { + border: 2px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; } + .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #f8f9fa #f8f9fa #f8f9fa; } + .nav-tabs .nav-link.disabled { + color: #ced4da; + background-color: transparent; + border-color: transparent; } + .nav-tabs .nav-link.active, + .nav-tabs .nav-item.show .nav-link { + color: #ffffff; + background-color: #212529; + border-color: #e9ecef #e9ecef #212529; } + .nav-tabs .dropdown-menu { + margin-top: -2px; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav-pills .nav-link { + border-radius: 0.25rem; } + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #ffffff; + background-color: #ffd700; } + +.nav-fill .nav-item { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; } + +.nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; } + +.tab-content > .tab-pane { + display: none; } + +.tab-content > .active { + display: block; } + +.navbar { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 2rem 1.25rem; } + .navbar > .container, + .navbar > .container-fluid { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; } + +.navbar-brand { + display: inline-block; + padding-top: 0.0625rem; + padding-bottom: 0.0625rem; + margin-right: 1.25rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; } + .navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; } + +.navbar-nav { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + .navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; } + .navbar-nav .dropdown-menu { + position: static; + float: none; } + +.navbar-text { + display: inline-block; + padding-top: 0.25rem; + padding-bottom: 0.25rem; } + +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-align: center; + align-items: center; } + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 2px solid transparent; + border-radius: 0.25rem; } + .navbar-toggler:hover, .navbar-toggler:focus { + text-decoration: none; } + .navbar-toggler:not(:disabled):not(.disabled) { + cursor: pointer; } + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; } + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; } } + +@media (min-width: 576px) { + .navbar-expand-sm { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; } + .navbar-expand-sm .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-sm .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.75rem; + padding-left: 0.75rem; } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .navbar-expand-sm .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + .navbar-expand-sm .navbar-toggler { + display: none; } + .navbar-expand-sm .dropup .dropdown-menu { + top: auto; + bottom: 100%; } } + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0; } } + +@media (min-width: 768px) { + .navbar-expand-md { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; } + .navbar-expand-md .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-md .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.75rem; + padding-left: 0.75rem; } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .navbar-expand-md .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + .navbar-expand-md .navbar-toggler { + display: none; } + .navbar-expand-md .dropup .dropdown-menu { + top: auto; + bottom: 100%; } } + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0; } } + +@media (min-width: 992px) { + .navbar-expand-lg { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; } + .navbar-expand-lg .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-lg .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.75rem; + padding-left: 0.75rem; } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .navbar-expand-lg .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + .navbar-expand-lg .navbar-toggler { + display: none; } + .navbar-expand-lg .dropup .dropdown-menu { + top: auto; + bottom: 100%; } } + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0; } } + +@media (min-width: 1200px) { + .navbar-expand-xl { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; } + .navbar-expand-xl .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xl .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.75rem; + padding-left: 0.75rem; } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .navbar-expand-xl .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + .navbar-expand-xl .navbar-toggler { + display: none; } + .navbar-expand-xl .dropup .dropdown-menu { + top: auto; + bottom: 100%; } } + +.navbar-expand { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; } + .navbar-expand > .container, + .navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0; } + .navbar-expand .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; } + .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand .navbar-nav .dropdown-menu-right { + right: 0; + left: auto; } + .navbar-expand .navbar-nav .nav-link { + padding-right: 0.75rem; + padding-left: 0.75rem; } + .navbar-expand > .container, + .navbar-expand > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + .navbar-expand .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; } + .navbar-expand .navbar-toggler { + display: none; } + .navbar-expand .dropup .dropdown-menu { + top: auto; + bottom: 100%; } + +.navbar-light .navbar-brand { + color: black; } + .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: black; } + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.7); } + .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.9); } + .navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); } + +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .nav-link.active { + color: black; } + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.1); } + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.7)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.7); } + .navbar-light .navbar-text a { + color: black; } + .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { + color: black; } + +.navbar-dark .navbar-brand { + color: #ffffff; } + .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #ffffff; } + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.9); } + .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.9); } + .navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.3); } + +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .nav-link.active { + color: #ffffff; } + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.9); + border-color: rgba(255, 255, 255, 0.1); } + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.9)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.9); } + .navbar-dark .navbar-text a { + color: #ffffff; } + .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { + color: #ffffff; } + +.card { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #ffffff; + background-clip: border-box; + border: 0px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; } + .card > hr { + margin-right: 0; + margin-left: 0; } + .card > .list-group:first-child .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; } + .card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; } + +.card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; } + +.card-title { + margin-bottom: 0.75rem; } + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; } + +.card-text:last-child { + margin-bottom: 0; } + +.card-link:hover { + text-decoration: none; } + +.card-link + .card-link { + margin-left: 1.25rem; } + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 0px solid rgba(0, 0, 0, 0.125); } + .card-header:first-child { + border-radius: calc(0.25rem - 0px) calc(0.25rem - 0px) 0 0; } + .card-header + .list-group .list-group-item:first-child { + border-top: 0; } + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 0px solid rgba(0, 0, 0, 0.125); } + .card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 0px) calc(0.25rem - 0px); } + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; } + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; } + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; } + +.card-img { + width: 100%; + border-radius: calc(0.25rem - 0px); } + +.card-img-top { + width: 100%; + border-top-left-radius: calc(0.25rem - 0px); + border-top-right-radius: calc(0.25rem - 0px); } + +.card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(0.25rem - 0px); + border-bottom-left-radius: calc(0.25rem - 0px); } + +.card-deck { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; } + .card-deck .card { + margin-bottom: 15px; } + @media (min-width: 576px) { + .card-deck { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; } + .card-deck .card { + display: -ms-flexbox; + display: flex; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; } } + +.card-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; } + .card-group > .card { + margin-bottom: 15px; } + @media (min-width: 576px) { + .card-group { + -ms-flex-flow: row wrap; + flex-flow: row wrap; } + .card-group > .card { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 0; } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; } + .card-group > .card:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .card-group > .card:first-child .card-img-top, + .card-group > .card:first-child .card-header { + border-top-right-radius: 0; } + .card-group > .card:first-child .card-img-bottom, + .card-group > .card:first-child .card-footer { + border-bottom-right-radius: 0; } + .card-group > .card:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .card-group > .card:last-child .card-img-top, + .card-group > .card:last-child .card-header { + border-top-left-radius: 0; } + .card-group > .card:last-child .card-img-bottom, + .card-group > .card:last-child .card-footer { + border-bottom-left-radius: 0; } + .card-group > .card:only-child { + border-radius: 0.25rem; } + .card-group > .card:only-child .card-img-top, + .card-group > .card:only-child .card-header { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; } + .card-group > .card:only-child .card-img-bottom, + .card-group > .card:only-child .card-footer { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; } + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) { + border-radius: 0; } + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer { + border-radius: 0; } } + +.card-columns .card { + margin-bottom: 0.75rem; } + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + column-gap: 1.25rem; } + .card-columns .card { + display: inline-block; + width: 100%; } } + +.breadcrumb { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #f8f9fa; + border-radius: 0.25rem; } + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + padding-left: 0.5rem; + color: #ced4da; + content: "/"; } + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; } + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; } + +.breadcrumb-item.active { + color: #ced4da; } + +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; } + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: 0px; + line-height: 1; + color: #ffffff; + background-color: #212529; + border: 0px solid transparent; } + .page-link:hover { + color: #f8f9fa; + text-decoration: none; + background-color: #868e96; + border-color: #495057; } + .page-link:focus { + z-index: 2; + outline: 0; + box-shadow: none; } + .page-link:not(:disabled):not(.disabled) { + cursor: pointer; } + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; } + +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; } + +.page-item.active .page-link { + z-index: 1; + color: #ffffff; + background-color: #868e96; + border-color: #495057; } + +.page-item.disabled .page-link { + color: #ffffff; + pointer-events: none; + cursor: auto; + background-color: #ced4da; + border-color: transparent; } + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; } + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; } + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; } + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; } + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; } + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; } + +.badge { + display: inline-block; + padding: 0.35em 0.5em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 4px; } + .badge:empty { + display: none; } + +.btn .badge { + position: relative; + top: -1px; } + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; } + +.badge-primary { + color: #212529; + background-color: #ffd700; } + .badge-primary[href]:hover, .badge-primary[href]:focus { + color: #212529; + text-decoration: none; + background-color: #ccac00; } + +.badge-secondary { + color: #ffffff; + background-color: #0000ff; } + .badge-secondary[href]:hover, .badge-secondary[href]:focus { + color: #ffffff; + text-decoration: none; + background-color: #0000cc; } + +.badge-success { + color: #ffffff; + background-color: #00e676; } + .badge-success[href]:hover, .badge-success[href]:focus { + color: #ffffff; + text-decoration: none; + background-color: #00b35c; } + +.badge-info { + color: #212529; + background-color: #00e5ff; } + .badge-info[href]:hover, .badge-info[href]:focus { + color: #212529; + text-decoration: none; + background-color: #00b7cc; } + +.badge-warning { + color: #212529; + background-color: #ffff00; } + .badge-warning[href]:hover, .badge-warning[href]:focus { + color: #212529; + text-decoration: none; + background-color: #cccc00; } + +.badge-danger { + color: #ffffff; + background-color: #ff1744; } + .badge-danger[href]:hover, .badge-danger[href]:focus { + color: #ffffff; + text-decoration: none; + background-color: #e3002c; } + +.badge-light { + color: #212529; + background-color: #f8f9fa; } + .badge-light[href]:hover, .badge-light[href]:focus { + color: #212529; + text-decoration: none; + background-color: #dae0e5; } + +.badge-dark { + color: #ffffff; + background-color: #212529; } + .badge-dark[href]:hover, .badge-dark[href]:focus { + color: #ffffff; + text-decoration: none; + background-color: #0a0c0d; } + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #f8f9fa; + border-radius: 0.3rem; } + @media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; } } + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; } + +.alert { + position: relative; + padding: 0.75rem 1.5rem; + margin-bottom: 1rem; + border: 2px solid transparent; + border-radius: 0.25rem; } + +.alert-heading { + color: inherit; } + +.alert-link { + font-weight: 700; } + +.alert-dismissible { + padding-right: 5rem; } + .alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.5rem; + color: inherit; } + +.alert-primary { + color: #857000; + background-color: #fffae0; + border-color: #fffae0; } + .alert-primary hr { + border-top-color: #fff6c7; } + .alert-primary .alert-link { + color: #524500; } + +.alert-secondary { + color: #000085; + background-color: #e0e0ff; + border-color: #e0e0ff; } + .alert-secondary hr { + border-top-color: #c7c7ff; } + .alert-secondary .alert-link { + color: #000052; } + +.alert-success { + color: #00783d; + background-color: #e0fcef; + border-color: #e0fcef; } + .alert-success hr { + border-top-color: #c9fae3; } + .alert-success .alert-link { + color: #004523; } + +.alert-info { + color: #007785; + background-color: #e0fcff; + border-color: #e0fcff; } + .alert-info hr { + border-top-color: #c7faff; } + .alert-info .alert-link { + color: #004952; } + +.alert-warning { + color: #858500; + background-color: lightyellow; + border-color: lightyellow; } + .alert-warning hr { + border-top-color: #ffffc7; } + .alert-warning .alert-link { + color: #525200; } + +.alert-danger { + color: #850c23; + background-color: #ffe3e9; + border-color: #ffe3e9; } + .alert-danger hr { + border-top-color: #ffcad5; } + .alert-danger .alert-link { + color: #560817; } + +.alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fefefe; } + .alert-light hr { + border-top-color: #f1f1f1; } + .alert-light .alert-link { + color: #686868; } + +.alert-dark { + color: #111315; + background-color: #e4e5e5; + border-color: #e4e5e5; } + .alert-dark hr { + border-top-color: #d7d8d8; } + .alert-dark .alert-link { + color: black; } + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 0.375rem 0; } + to { + background-position: 0 0; } } + +@keyframes progress-bar-stripes { + from { + background-position: 0.375rem 0; } + to { + background-position: 0 0; } } + +.progress { + display: -ms-flexbox; + display: flex; + height: 0.375rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; } + +.progress-bar { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + color: #ffffff; + text-align: center; + background-color: #ffd700; + transition: width 0.6s ease; } + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 0.375rem 0.375rem; } + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; } + +.media { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; } + +.media-body { + -ms-flex: 1; + flex: 1; } + +.list-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; } + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; } + .list-group-item-action:hover, .list-group-item-action:focus { + color: #495057; + text-decoration: none; + background-color: #f8f9fa; } + .list-group-item-action:active { + color: #343a40; + background-color: #f8f9fa; } + +.list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + margin-bottom: -2px; + background-color: #ffffff; + border: 2px solid rgba(0, 0, 0, 0.125); } + .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; } + .list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; } + .list-group-item:hover, .list-group-item:focus { + z-index: 1; + text-decoration: none; } + .list-group-item.disabled, .list-group-item:disabled { + color: #ced4da; + background-color: #ffffff; } + .list-group-item.active { + z-index: 2; + color: #ffffff; + background-color: #ffd700; + border-color: #ffd700; } + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; } + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; } + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0; } + +.list-group-item-primary { + color: #857000; + background-color: #fff4b8; } + .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #857000; + background-color: #fff09f; } + .list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #857000; + border-color: #857000; } + +.list-group-item-secondary { + color: #000085; + background-color: #b8b8ff; } + .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #000085; + background-color: #9f9fff; } + .list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #000085; + border-color: #000085; } + +.list-group-item-success { + color: #00783d; + background-color: #b8f8d9; } + .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #00783d; + background-color: #a1f6cd; } + .list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #00783d; + border-color: #00783d; } + +.list-group-item-info { + color: #007785; + background-color: #b8f8ff; } + .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #007785; + background-color: #9ff5ff; } + .list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #007785; + border-color: #007785; } + +.list-group-item-warning { + color: #858500; + background-color: #ffffb8; } + .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #858500; + background-color: #ffff9f; } + .list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #858500; + border-color: #858500; } + +.list-group-item-danger { + color: #850c23; + background-color: #ffbecb; } + .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #850c23; + background-color: #ffa5b7; } + .list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #850c23; + border-color: #850c23; } + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe; } + .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #818182; + background-color: #ececf6; } + .list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #818182; + border-color: #818182; } + +.list-group-item-dark { + color: #111315; + background-color: #c1c2c3; } + .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #111315; + background-color: #b4b5b6; } + .list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #111315; + border-color: #111315; } + +.close { + float: right; + font-size: 2rem; + font-weight: 700; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: .5; } + .close:hover, .close:focus { + color: #000000; + text-decoration: none; + opacity: .75; } + .close:not(:disabled):not(.disabled) { + cursor: pointer; } + +button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none; } + +.modal-open { + overflow: hidden; } + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0; } + .modal-open .modal { + overflow-x: hidden; + overflow-y: auto; } + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; } + .modal.fade .modal-dialog { + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -25%); + transform: translate(0, -25%); } + .modal.show .modal-dialog { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); } + +.modal-dialog-centered { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - (0.5rem * 2)); } + +.modal-content { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #ffffff; + background-clip: padding-box; + border: 2px solid #ffffff; + border-radius: 0.3rem; + outline: 0; } + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; } + .modal-backdrop.fade { + opacity: 0; } + .modal-backdrop.show { + opacity: 0.5; } + +.modal-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1.5rem; + border-bottom: 2px solid #ffffff; + border-top-left-radius: 0.3rem; + border-top-right-radius: 0.3rem; } + .modal-header .close { + padding: 1.5rem; + margin: -1.5rem -1.5rem -1.5rem auto; } + +.modal-title { + margin-bottom: 0; + line-height: 1.5; } + +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.5rem; } + +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1.5rem; + border-top: 2px solid #ffffff; } + .modal-footer > :not(:first-child) { + margin-left: .25rem; } + .modal-footer > :not(:last-child) { + margin-right: .25rem; } + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; } + +@media (min-width: 576px) { + .modal-dialog { + max-width: 600px; + margin: 1.75rem auto; } + .modal-dialog-centered { + min-height: calc(100% - (1.75rem * 2)); } + .modal-sm { + max-width: 400px; } } + +@media (min-width: 992px) { + .modal-lg { + max-width: 800px; } } + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; } + .tooltip.show { + opacity: 0.9; } + .tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; } + .tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; } + +.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { + padding: 0.4rem 0; } + .bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; } + .bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000000; } + +.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { + padding: 0 0.4rem; } + .bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; } + .bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000000; } + +.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { + padding: 0.4rem 0; } + .bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; } + .bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000000; } + +.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { + padding: 0 0.4rem; } + .bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; } + .bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000000; } + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #ffffff; + text-align: center; + background-color: #000000; + border-radius: 0.25rem; } + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #ffffff; + background-clip: padding-box; + border: 2px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; } + .popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; } + .popover .arrow::before, .popover .arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; } + +.bs-popover-top, .bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; } + .bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { + bottom: calc((0.5rem + 2px) * -1); } + .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, + .bs-popover-top .arrow::after, .bs-popover-auto[x-placement^="top"] .arrow::after { + border-width: 0.5rem 0.5rem 0; } + .bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before { + bottom: 0; + border-top-color: rgba(0, 0, 0, 0.25); } + .bs-popover-top .arrow::after, .bs-popover-auto[x-placement^="top"] .arrow::after { + bottom: 2px; + border-top-color: #ffffff; } + +.bs-popover-right, .bs-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; } + .bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { + left: calc((0.5rem + 2px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; } + .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, + .bs-popover-right .arrow::after, .bs-popover-auto[x-placement^="right"] .arrow::after { + border-width: 0.5rem 0.5rem 0.5rem 0; } + .bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before { + left: 0; + border-right-color: rgba(0, 0, 0, 0.25); } + .bs-popover-right .arrow::after, .bs-popover-auto[x-placement^="right"] .arrow::after { + left: 2px; + border-right-color: #ffffff; } + +.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; } + .bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { + top: calc((0.5rem + 2px) * -1); } + .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, + .bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^="bottom"] .arrow::after { + border-width: 0 0.5rem 0.5rem 0.5rem; } + .bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before { + top: 0; + border-bottom-color: rgba(0, 0, 0, 0.25); } + .bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^="bottom"] .arrow::after { + top: 2px; + border-bottom-color: #ffffff; } + .bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 2px solid #212529; } + +.bs-popover-left, .bs-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; } + .bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { + right: calc((0.5rem + 2px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; } + .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, + .bs-popover-left .arrow::after, .bs-popover-auto[x-placement^="left"] .arrow::after { + border-width: 0.5rem 0 0.5rem 0.5rem; } + .bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before { + right: 0; + border-left-color: rgba(0, 0, 0, 0.25); } + .bs-popover-left .arrow::after, .bs-popover-auto[x-placement^="left"] .arrow::after { + right: 2px; + border-left-color: #ffffff; } + +.popover-header { + padding: 0.65rem 0.85rem; + margin-bottom: 0; + font-size: 1rem; + color: #ffffff; + background-color: #212529; + border-bottom: 2px solid #16181b; + border-top-left-radius: calc(0.3rem - 2px); + border-top-right-radius: calc(0.3rem - 2px); } + .popover-header:empty { + display: none; } + +.popover-body { + padding: 0.65rem 0.85rem; + color: #343a40; } + +.carousel { + position: relative; } + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; } + +.carousel-item { + position: relative; + display: none; + -ms-flex-align: center; + align-items: center; + width: 100%; + transition: -webkit-transform 0.6s ease; + transition: transform 0.6s ease; + transition: transform 0.6s ease, -webkit-transform 0.6s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; } + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; } + +.carousel-item-next, +.carousel-item-prev { + position: absolute; + top: 0; } + +.carousel-item-next.carousel-item-left, +.carousel-item-prev.carousel-item-right { + -webkit-transform: translateX(0); + transform: translateX(0); } + @supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } + +.carousel-item-next, +.active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); } + @supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); } } + +.carousel-item-prev, +.active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); } + @supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); } } + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #ffffff; + text-align: center; + opacity: 0.5; } + .carousel-control-prev:hover, .carousel-control-prev:focus, + .carousel-control-next:hover, + .carousel-control-next:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + opacity: .9; } + +.carousel-control-prev { + left: 0; } + +.carousel-control-next { + right: 0; } + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + background-size: 100% 100%; } + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffffff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); } + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffffff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); } + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; } + .carousel-indicators li { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + background-color: rgba(255, 255, 255, 0.5); } + .carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; } + .carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; } + .carousel-indicators .active { + background-color: #ffffff; } + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; } + +.align-baseline { + vertical-align: baseline !important; } + +.align-top { + vertical-align: top !important; } + +.align-middle { + vertical-align: middle !important; } + +.align-bottom { + vertical-align: bottom !important; } + +.align-text-bottom { + vertical-align: text-bottom !important; } + +.align-text-top { + vertical-align: text-top !important; } + +.bg-primary { + background-color: #ffd700 !important; } + +a.bg-primary:hover, a.bg-primary:focus, +button.bg-primary:hover, +button.bg-primary:focus { + background-color: #ccac00 !important; } + +.bg-secondary { + background-color: #0000ff !important; } + +a.bg-secondary:hover, a.bg-secondary:focus, +button.bg-secondary:hover, +button.bg-secondary:focus { + background-color: #0000cc !important; } + +.bg-success { + background-color: #00e676 !important; } + +a.bg-success:hover, a.bg-success:focus, +button.bg-success:hover, +button.bg-success:focus { + background-color: #00b35c !important; } + +.bg-info { + background-color: #00e5ff !important; } + +a.bg-info:hover, a.bg-info:focus, +button.bg-info:hover, +button.bg-info:focus { + background-color: #00b7cc !important; } + +.bg-warning { + background-color: #ffff00 !important; } + +a.bg-warning:hover, a.bg-warning:focus, +button.bg-warning:hover, +button.bg-warning:focus { + background-color: #cccc00 !important; } + +.bg-danger { + background-color: #ff1744 !important; } + +a.bg-danger:hover, a.bg-danger:focus, +button.bg-danger:hover, +button.bg-danger:focus { + background-color: #e3002c !important; } + +.bg-light { + background-color: #f8f9fa !important; } + +a.bg-light:hover, a.bg-light:focus, +button.bg-light:hover, +button.bg-light:focus { + background-color: #dae0e5 !important; } + +.bg-dark { + background-color: #212529 !important; } + +a.bg-dark:hover, a.bg-dark:focus, +button.bg-dark:hover, +button.bg-dark:focus { + background-color: #0a0c0d !important; } + +.bg-white { + background-color: #ffffff !important; } + +.bg-transparent { + background-color: transparent !important; } + +.border { + border: 2px solid #f8f9fa !important; } + +.border-top { + border-top: 2px solid #f8f9fa !important; } + +.border-right { + border-right: 2px solid #f8f9fa !important; } + +.border-bottom { + border-bottom: 2px solid #f8f9fa !important; } + +.border-left { + border-left: 2px solid #f8f9fa !important; } + +.border-0 { + border: 0 !important; } + +.border-top-0 { + border-top: 0 !important; } + +.border-right-0 { + border-right: 0 !important; } + +.border-bottom-0 { + border-bottom: 0 !important; } + +.border-left-0 { + border-left: 0 !important; } + +.border-primary { + border-color: #ffd700 !important; } + +.border-secondary { + border-color: #0000ff !important; } + +.border-success { + border-color: #00e676 !important; } + +.border-info { + border-color: #00e5ff !important; } + +.border-warning { + border-color: #ffff00 !important; } + +.border-danger { + border-color: #ff1744 !important; } + +.border-light { + border-color: #f8f9fa !important; } + +.border-dark { + border-color: #212529 !important; } + +.border-white { + border-color: #ffffff !important; } + +.rounded { + border-radius: 0.25rem !important; } + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; } + +.rounded-right { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; } + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; } + +.rounded-left { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; } + +.rounded-circle { + border-radius: 50% !important; } + +.rounded-0 { + border-radius: 0 !important; } + +.clearfix::after { + display: block; + clear: both; + content: ""; } + +.d-none { + display: none !important; } + +.d-inline { + display: inline !important; } + +.d-inline-block { + display: inline-block !important; } + +.d-block { + display: block !important; } + +.d-table { + display: table !important; } + +.d-table-row { + display: table-row !important; } + +.d-table-cell { + display: table-cell !important; } + +.d-flex { + display: -ms-flexbox !important; + display: flex !important; } + +.d-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; } + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; } + .d-sm-inline { + display: inline !important; } + .d-sm-inline-block { + display: inline-block !important; } + .d-sm-block { + display: block !important; } + .d-sm-table { + display: table !important; } + .d-sm-table-row { + display: table-row !important; } + .d-sm-table-cell { + display: table-cell !important; } + .d-sm-flex { + display: -ms-flexbox !important; + display: flex !important; } + .d-sm-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media (min-width: 768px) { + .d-md-none { + display: none !important; } + .d-md-inline { + display: inline !important; } + .d-md-inline-block { + display: inline-block !important; } + .d-md-block { + display: block !important; } + .d-md-table { + display: table !important; } + .d-md-table-row { + display: table-row !important; } + .d-md-table-cell { + display: table-cell !important; } + .d-md-flex { + display: -ms-flexbox !important; + display: flex !important; } + .d-md-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; } + .d-lg-inline { + display: inline !important; } + .d-lg-inline-block { + display: inline-block !important; } + .d-lg-block { + display: block !important; } + .d-lg-table { + display: table !important; } + .d-lg-table-row { + display: table-row !important; } + .d-lg-table-cell { + display: table-cell !important; } + .d-lg-flex { + display: -ms-flexbox !important; + display: flex !important; } + .d-lg-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; } + .d-xl-inline { + display: inline !important; } + .d-xl-inline-block { + display: inline-block !important; } + .d-xl-block { + display: block !important; } + .d-xl-table { + display: table !important; } + .d-xl-table-row { + display: table-row !important; } + .d-xl-table-cell { + display: table-cell !important; } + .d-xl-flex { + display: -ms-flexbox !important; + display: flex !important; } + .d-xl-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +@media print { + .d-print-none { + display: none !important; } + .d-print-inline { + display: inline !important; } + .d-print-inline-block { + display: inline-block !important; } + .d-print-block { + display: block !important; } + .d-print-table { + display: table !important; } + .d-print-table-row { + display: table-row !important; } + .d-print-table-cell { + display: table-cell !important; } + .d-print-flex { + display: -ms-flexbox !important; + display: flex !important; } + .d-print-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; } } + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; } + .embed-responsive::before { + display: block; + content: ""; } + .embed-responsive .embed-responsive-item, + .embed-responsive iframe, + .embed-responsive embed, + .embed-responsive object, + .embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; } + +.embed-responsive-21by9::before { + padding-top: 42.85714%; } + +.embed-responsive-16by9::before { + padding-top: 56.25%; } + +.embed-responsive-4by3::before { + padding-top: 75%; } + +.embed-responsive-1by1::before { + padding-top: 100%; } + +.flex-row { + -ms-flex-direction: row !important; + flex-direction: row !important; } + +.flex-column { + -ms-flex-direction: column !important; + flex-direction: column !important; } + +.flex-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + +.flex-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + +.justify-content-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + +.justify-content-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + +.justify-content-center { + -ms-flex-pack: center !important; + justify-content: center !important; } + +.justify-content-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + +.align-items-start { + -ms-flex-align: start !important; + align-items: flex-start !important; } + +.align-items-end { + -ms-flex-align: end !important; + align-items: flex-end !important; } + +.align-items-center { + -ms-flex-align: center !important; + align-items: center !important; } + +.align-items-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; } + +.align-items-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; } + +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + +.align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; } + +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; } + +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + +.align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; } + +@media (min-width: 576px) { + .flex-sm-row { + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-sm-column { + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .justify-content-sm-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-sm-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-sm-center { + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-sm-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-sm-start { + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-sm-end { + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-sm-center { + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-sm-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-sm-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; } } + +@media (min-width: 768px) { + .flex-md-row { + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-md-column { + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .justify-content-md-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-md-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-md-center { + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-md-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-md-start { + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-md-end { + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-md-center { + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-md-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-md-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; } } + +@media (min-width: 992px) { + .flex-lg-row { + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-lg-column { + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .justify-content-lg-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-lg-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-lg-center { + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-lg-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-lg-start { + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-lg-end { + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-lg-center { + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-lg-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-lg-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; } } + +@media (min-width: 1200px) { + .flex-xl-row { + -ms-flex-direction: row !important; + flex-direction: row !important; } + .flex-xl-column { + -ms-flex-direction: column !important; + flex-direction: column !important; } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; } + .justify-content-xl-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; } + .justify-content-xl-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; } + .justify-content-xl-center { + -ms-flex-pack: center !important; + justify-content: center !important; } + .justify-content-xl-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; } + .align-items-xl-start { + -ms-flex-align: start !important; + align-items: flex-start !important; } + .align-items-xl-end { + -ms-flex-align: end !important; + align-items: flex-end !important; } + .align-items-xl-center { + -ms-flex-align: center !important; + align-items: center !important; } + .align-items-xl-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; } + .align-items-xl-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; } } + +.float-left { + float: left !important; } + +.float-right { + float: right !important; } + +.float-none { + float: none !important; } + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; } + .float-sm-right { + float: right !important; } + .float-sm-none { + float: none !important; } } + +@media (min-width: 768px) { + .float-md-left { + float: left !important; } + .float-md-right { + float: right !important; } + .float-md-none { + float: none !important; } } + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; } + .float-lg-right { + float: right !important; } + .float-lg-none { + float: none !important; } } + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; } + .float-xl-right { + float: right !important; } + .float-xl-none { + float: none !important; } } + +.position-static { + position: static !important; } + +.position-relative { + position: relative !important; } + +.position-absolute { + position: absolute !important; } + +.position-fixed { + position: fixed !important; } + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; } + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; } + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; } + +@supports ((position: -webkit-sticky) or (position: sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; } } + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + border: 0; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; + -webkit-clip-path: none; + clip-path: none; } + +.w-25 { + width: 25% !important; } + +.w-50 { + width: 50% !important; } + +.w-75 { + width: 75% !important; } + +.w-100 { + width: 100% !important; } + +.h-25 { + height: 25% !important; } + +.h-50 { + height: 50% !important; } + +.h-75 { + height: 75% !important; } + +.h-100 { + height: 100% !important; } + +.mw-100 { + max-width: 100% !important; } + +.mh-100 { + max-height: 100% !important; } + +.m-0 { + margin: 0 !important; } + +.mt-0, +.my-0 { + margin-top: 0 !important; } + +.mr-0, +.mx-0 { + margin-right: 0 !important; } + +.mb-0, +.my-0 { + margin-bottom: 0 !important; } + +.ml-0, +.mx-0 { + margin-left: 0 !important; } + +.m-1 { + margin: 0.25rem !important; } + +.mt-1, +.my-1 { + margin-top: 0.25rem !important; } + +.mr-1, +.mx-1 { + margin-right: 0.25rem !important; } + +.mb-1, +.my-1 { + margin-bottom: 0.25rem !important; } + +.ml-1, +.mx-1 { + margin-left: 0.25rem !important; } + +.m-2 { + margin: 0.5rem !important; } + +.mt-2, +.my-2 { + margin-top: 0.5rem !important; } + +.mr-2, +.mx-2 { + margin-right: 0.5rem !important; } + +.mb-2, +.my-2 { + margin-bottom: 0.5rem !important; } + +.ml-2, +.mx-2 { + margin-left: 0.5rem !important; } + +.m-3 { + margin: 1rem !important; } + +.mt-3, +.my-3 { + margin-top: 1rem !important; } + +.mr-3, +.mx-3 { + margin-right: 1rem !important; } + +.mb-3, +.my-3 { + margin-bottom: 1rem !important; } + +.ml-3, +.mx-3 { + margin-left: 1rem !important; } + +.m-4 { + margin: 1.5rem !important; } + +.mt-4, +.my-4 { + margin-top: 1.5rem !important; } + +.mr-4, +.mx-4 { + margin-right: 1.5rem !important; } + +.mb-4, +.my-4 { + margin-bottom: 1.5rem !important; } + +.ml-4, +.mx-4 { + margin-left: 1.5rem !important; } + +.m-5 { + margin: 3rem !important; } + +.mt-5, +.my-5 { + margin-top: 3rem !important; } + +.mr-5, +.mx-5 { + margin-right: 3rem !important; } + +.mb-5, +.my-5 { + margin-bottom: 3rem !important; } + +.ml-5, +.mx-5 { + margin-left: 3rem !important; } + +.m-6 { + margin: 6rem !important; } + +.mt-6, +.my-6 { + margin-top: 6rem !important; } + +.mr-6, +.mx-6 { + margin-right: 6rem !important; } + +.mb-6, +.my-6 { + margin-bottom: 6rem !important; } + +.ml-6, +.mx-6 { + margin-left: 6rem !important; } + +.m-7 { + margin: 9rem !important; } + +.mt-7, +.my-7 { + margin-top: 9rem !important; } + +.mr-7, +.mx-7 { + margin-right: 9rem !important; } + +.mb-7, +.my-7 { + margin-bottom: 9rem !important; } + +.ml-7, +.mx-7 { + margin-left: 9rem !important; } + +.m-8 { + margin: 12rem !important; } + +.mt-8, +.my-8 { + margin-top: 12rem !important; } + +.mr-8, +.mx-8 { + margin-right: 12rem !important; } + +.mb-8, +.my-8 { + margin-bottom: 12rem !important; } + +.ml-8, +.mx-8 { + margin-left: 12rem !important; } + +.m-9 { + margin: 15rem !important; } + +.mt-9, +.my-9 { + margin-top: 15rem !important; } + +.mr-9, +.mx-9 { + margin-right: 15rem !important; } + +.mb-9, +.my-9 { + margin-bottom: 15rem !important; } + +.ml-9, +.mx-9 { + margin-left: 15rem !important; } + +.p-0 { + padding: 0 !important; } + +.pt-0, +.py-0 { + padding-top: 0 !important; } + +.pr-0, +.px-0 { + padding-right: 0 !important; } + +.pb-0, +.py-0 { + padding-bottom: 0 !important; } + +.pl-0, +.px-0 { + padding-left: 0 !important; } + +.p-1 { + padding: 0.25rem !important; } + +.pt-1, +.py-1 { + padding-top: 0.25rem !important; } + +.pr-1, +.px-1 { + padding-right: 0.25rem !important; } + +.pb-1, +.py-1 { + padding-bottom: 0.25rem !important; } + +.pl-1, +.px-1 { + padding-left: 0.25rem !important; } + +.p-2 { + padding: 0.5rem !important; } + +.pt-2, +.py-2 { + padding-top: 0.5rem !important; } + +.pr-2, +.px-2 { + padding-right: 0.5rem !important; } + +.pb-2, +.py-2 { + padding-bottom: 0.5rem !important; } + +.pl-2, +.px-2 { + padding-left: 0.5rem !important; } + +.p-3 { + padding: 1rem !important; } + +.pt-3, +.py-3 { + padding-top: 1rem !important; } + +.pr-3, +.px-3 { + padding-right: 1rem !important; } + +.pb-3, +.py-3 { + padding-bottom: 1rem !important; } + +.pl-3, +.px-3 { + padding-left: 1rem !important; } + +.p-4 { + padding: 1.5rem !important; } + +.pt-4, +.py-4 { + padding-top: 1.5rem !important; } + +.pr-4, +.px-4 { + padding-right: 1.5rem !important; } + +.pb-4, +.py-4 { + padding-bottom: 1.5rem !important; } + +.pl-4, +.px-4 { + padding-left: 1.5rem !important; } + +.p-5 { + padding: 3rem !important; } + +.pt-5, +.py-5 { + padding-top: 3rem !important; } + +.pr-5, +.px-5 { + padding-right: 3rem !important; } + +.pb-5, +.py-5 { + padding-bottom: 3rem !important; } + +.pl-5, +.px-5 { + padding-left: 3rem !important; } + +.p-6 { + padding: 6rem !important; } + +.pt-6, +.py-6 { + padding-top: 6rem !important; } + +.pr-6, +.px-6 { + padding-right: 6rem !important; } + +.pb-6, +.py-6 { + padding-bottom: 6rem !important; } + +.pl-6, +.px-6 { + padding-left: 6rem !important; } + +.p-7 { + padding: 9rem !important; } + +.pt-7, +.py-7 { + padding-top: 2rem !important; } + +.pr-7, +.px-7 { + padding-right: 9rem !important; } + +.pb-7, +.py-7 { + padding-bottom: 2rem !important; } + +.pl-7, +.px-7 { + padding-left: 9rem !important; } + +.p-8 { + padding: 12rem !important; } + +.pt-8, +.py-8 { + padding-top: 12rem !important; } + +.pr-8, +.px-8 { + padding-right: 12rem !important; } + +.pb-8, +.py-8 { + padding-bottom: 12rem !important; } + +.pl-8, +.px-8 { + padding-left: 12rem !important; } + +.p-9 { + padding: 15rem !important; } + +.pt-9, +.py-9 { + padding-top: 15rem !important; } + +.pr-9, +.px-9 { + padding-right: 15rem !important; } + +.pb-9, +.py-9 { + padding-bottom: 15rem !important; } + +.pl-9, +.px-9 { + padding-left: 15rem !important; } + +.m-auto { + margin: auto !important; } + +.mt-auto, +.my-auto { + margin-top: auto !important; } + +.mr-auto, +.mx-auto { + margin-right: auto !important; } + +.mb-auto, +.my-auto { + margin-bottom: auto !important; } + +.ml-auto, +.mx-auto { + margin-left: auto !important; } + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; } + .m-sm-1 { + margin: 0.25rem !important; } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; } + .m-sm-2 { + margin: 0.5rem !important; } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; } + .m-sm-3 { + margin: 1rem !important; } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; } + .m-sm-4 { + margin: 1.5rem !important; } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; } + .m-sm-5 { + margin: 3rem !important; } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; } + .m-sm-6 { + margin: 6rem !important; } + .mt-sm-6, + .my-sm-6 { + margin-top: 6rem !important; } + .mr-sm-6, + .mx-sm-6 { + margin-right: 6rem !important; } + .mb-sm-6, + .my-sm-6 { + margin-bottom: 6rem !important; } + .ml-sm-6, + .mx-sm-6 { + margin-left: 6rem !important; } + .m-sm-7 { + margin: 9rem !important; } + .mt-sm-7, + .my-sm-7 { + margin-top: 9rem !important; } + .mr-sm-7, + .mx-sm-7 { + margin-right: 9rem !important; } + .mb-sm-7, + .my-sm-7 { + margin-bottom: 9rem !important; } + .ml-sm-7, + .mx-sm-7 { + margin-left: 9rem !important; } + .m-sm-8 { + margin: 12rem !important; } + .mt-sm-8, + .my-sm-8 { + margin-top: 12rem !important; } + .mr-sm-8, + .mx-sm-8 { + margin-right: 12rem !important; } + .mb-sm-8, + .my-sm-8 { + margin-bottom: 12rem !important; } + .ml-sm-8, + .mx-sm-8 { + margin-left: 12rem !important; } + .m-sm-9 { + margin: 15rem !important; } + .mt-sm-9, + .my-sm-9 { + margin-top: 15rem !important; } + .mr-sm-9, + .mx-sm-9 { + margin-right: 15rem !important; } + .mb-sm-9, + .my-sm-9 { + margin-bottom: 15rem !important; } + .ml-sm-9, + .mx-sm-9 { + margin-left: 15rem !important; } + .p-sm-0 { + padding: 0 !important; } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; } + .p-sm-1 { + padding: 0.25rem !important; } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; } + .p-sm-2 { + padding: 0.5rem !important; } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; } + .p-sm-3 { + padding: 1rem !important; } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; } + .p-sm-4 { + padding: 1.5rem !important; } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; } + .p-sm-5 { + padding: 3rem !important; } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; } + .p-sm-6 { + padding: 6rem !important; } + .pt-sm-6, + .py-sm-6 { + padding-top: 6rem !important; } + .pr-sm-6, + .px-sm-6 { + padding-right: 6rem !important; } + .pb-sm-6, + .py-sm-6 { + padding-bottom: 6rem !important; } + .pl-sm-6, + .px-sm-6 { + padding-left: 6rem !important; } + .p-sm-7 { + padding: 9rem !important; } + .pt-sm-7, + .py-sm-7 { + padding-top: 9rem !important; } + .pr-sm-7, + .px-sm-7 { + padding-right: 9rem !important; } + .pb-sm-7, + .py-sm-7 { + padding-bottom: 9rem !important; } + .pl-sm-7, + .px-sm-7 { + padding-left: 9rem !important; } + .p-sm-8 { + padding: 12rem !important; } + .pt-sm-8, + .py-sm-8 { + padding-top: 12rem !important; } + .pr-sm-8, + .px-sm-8 { + padding-right: 12rem !important; } + .pb-sm-8, + .py-sm-8 { + padding-bottom: 12rem !important; } + .pl-sm-8, + .px-sm-8 { + padding-left: 12rem !important; } + .p-sm-9 { + padding: 15rem !important; } + .pt-sm-9, + .py-sm-9 { + padding-top: 15rem !important; } + .pr-sm-9, + .px-sm-9 { + padding-right: 15rem !important; } + .pb-sm-9, + .py-sm-9 { + padding-bottom: 15rem !important; } + .pl-sm-9, + .px-sm-9 { + padding-left: 15rem !important; } + .m-sm-auto { + margin: auto !important; } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; } } + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; } + .m-md-1 { + margin: 0.25rem !important; } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; } + .m-md-2 { + margin: 0.5rem !important; } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; } + .m-md-3 { + margin: 1rem !important; } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; } + .m-md-4 { + margin: 1.5rem !important; } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; } + .m-md-5 { + margin: 3rem !important; } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; } + .m-md-6 { + margin: 6rem !important; } + .mt-md-6, + .my-md-6 { + margin-top: 6rem !important; } + .mr-md-6, + .mx-md-6 { + margin-right: 6rem !important; } + .mb-md-6, + .my-md-6 { + margin-bottom: 6rem !important; } + .ml-md-6, + .mx-md-6 { + margin-left: 6rem !important; } + .m-md-7 { + margin: 9rem !important; } + .mt-md-7, + .my-md-7 { + margin-top: 9rem !important; } + .mr-md-7, + .mx-md-7 { + margin-right: 9rem !important; } + .mb-md-7, + .my-md-7 { + margin-bottom: 9rem !important; } + .ml-md-7, + .mx-md-7 { + margin-left: 9rem !important; } + .m-md-8 { + margin: 12rem !important; } + .mt-md-8, + .my-md-8 { + margin-top: 12rem !important; } + .mr-md-8, + .mx-md-8 { + margin-right: 12rem !important; } + .mb-md-8, + .my-md-8 { + margin-bottom: 12rem !important; } + .ml-md-8, + .mx-md-8 { + margin-left: 12rem !important; } + .m-md-9 { + margin: 15rem !important; } + .mt-md-9, + .my-md-9 { + margin-top: 15rem !important; } + .mr-md-9, + .mx-md-9 { + margin-right: 15rem !important; } + .mb-md-9, + .my-md-9 { + margin-bottom: 15rem !important; } + .ml-md-9, + .mx-md-9 { + margin-left: 15rem !important; } + .p-md-0 { + padding: 0 !important; } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; } + .p-md-1 { + padding: 0.25rem !important; } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; } + .p-md-2 { + padding: 0.5rem !important; } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; } + .p-md-3 { + padding: 1rem !important; } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; } + .p-md-4 { + padding: 1.5rem !important; } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; } + .p-md-5 { + padding: 3rem !important; } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; } + .p-md-6 { + padding: 6rem !important; } + .pt-md-6, + .py-md-6 { + padding-top: 6rem !important; } + .pr-md-6, + .px-md-6 { + padding-right: 6rem !important; } + .pb-md-6, + .py-md-6 { + padding-bottom: 6rem !important; } + .pl-md-6, + .px-md-6 { + padding-left: 6rem !important; } + .p-md-7 { + padding: 9rem !important; } + .pt-md-7, + .py-md-7 { + padding-top: 9rem !important; } + .pr-md-7, + .px-md-7 { + padding-right: 9rem !important; } + .pb-md-7, + .py-md-7 { + padding-bottom: 9rem !important; } + .pl-md-7, + .px-md-7 { + padding-left: 9rem !important; } + .p-md-8 { + padding: 12rem !important; } + .pt-md-8, + .py-md-8 { + padding-top: 12rem !important; } + .pr-md-8, + .px-md-8 { + padding-right: 12rem !important; } + .pb-md-8, + .py-md-8 { + padding-bottom: 12rem !important; } + .pl-md-8, + .px-md-8 { + padding-left: 12rem !important; } + .p-md-9 { + padding: 15rem !important; } + .pt-md-9, + .py-md-9 { + padding-top: 15rem !important; } + .pr-md-9, + .px-md-9 { + padding-right: 15rem !important; } + .pb-md-9, + .py-md-9 { + padding-bottom: 15rem !important; } + .pl-md-9, + .px-md-9 { + padding-left: 15rem !important; } + .m-md-auto { + margin: auto !important; } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; } } + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; } + .m-lg-1 { + margin: 0.25rem !important; } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; } + .m-lg-2 { + margin: 0.5rem !important; } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; } + .m-lg-3 { + margin: 1rem !important; } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; } + .m-lg-4 { + margin: 1.5rem !important; } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; } + .m-lg-5 { + margin: 3rem !important; } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; } + .m-lg-6 { + margin: 6rem !important; } + .mt-lg-6, + .my-lg-6 { + margin-top: 6rem !important; } + .mr-lg-6, + .mx-lg-6 { + margin-right: 6rem !important; } + .mb-lg-6, + .my-lg-6 { + margin-bottom: 6rem !important; } + .ml-lg-6, + .mx-lg-6 { + margin-left: 6rem !important; } + .m-lg-7 { + margin: 9rem !important; } + .mt-lg-7, + .my-lg-7 { + margin-top: 9rem !important; } + .mr-lg-7, + .mx-lg-7 { + margin-right: 9rem !important; } + .mb-lg-7, + .my-lg-7 { + margin-bottom: 9rem !important; } + .ml-lg-7, + .mx-lg-7 { + margin-left: 9rem !important; } + .m-lg-8 { + margin: 12rem !important; } + .mt-lg-8, + .my-lg-8 { + margin-top: 12rem !important; } + .mr-lg-8, + .mx-lg-8 { + margin-right: 12rem !important; } + .mb-lg-8, + .my-lg-8 { + margin-bottom: 12rem !important; } + .ml-lg-8, + .mx-lg-8 { + margin-left: 12rem !important; } + .m-lg-9 { + margin: 15rem !important; } + .mt-lg-9, + .my-lg-9 { + margin-top: 15rem !important; } + .mr-lg-9, + .mx-lg-9 { + margin-right: 15rem !important; } + .mb-lg-9, + .my-lg-9 { + margin-bottom: 15rem !important; } + .ml-lg-9, + .mx-lg-9 { + margin-left: 15rem !important; } + .p-lg-0 { + padding: 0 !important; } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; } + .p-lg-1 { + padding: 0.25rem !important; } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; } + .p-lg-2 { + padding: 0.5rem !important; } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; } + .p-lg-3 { + padding: 1rem !important; } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; } + .p-lg-4 { + padding: 1.5rem !important; } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; } + .p-lg-5 { + padding: 3rem !important; } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; } + .p-lg-6 { + padding: 6rem !important; } + .pt-lg-6, + .py-lg-6 { + padding-top: 6rem !important; } + .pr-lg-6, + .px-lg-6 { + padding-right: 6rem !important; } + .pb-lg-6, + .py-lg-6 { + padding-bottom: 6rem !important; } + .pl-lg-6, + .px-lg-6 { + padding-left: 6rem !important; } + .p-lg-7 { + padding: 9rem !important; } + .pt-lg-7, + .py-lg-7 { + padding-top: 9rem !important; } + .pr-lg-7, + .px-lg-7 { + padding-right: 9rem !important; } + .pb-lg-7, + .py-lg-7 { + padding-bottom: 9rem !important; } + .pl-lg-7, + .px-lg-7 { + padding-left: 9rem !important; } + .p-lg-8 { + padding: 12rem !important; } + .pt-lg-8, + .py-lg-8 { + padding-top: 12rem !important; } + .pr-lg-8, + .px-lg-8 { + padding-right: 12rem !important; } + .pb-lg-8, + .py-lg-8 { + padding-bottom: 12rem !important; } + .pl-lg-8, + .px-lg-8 { + padding-left: 12rem !important; } + .p-lg-9 { + padding: 15rem !important; } + .pt-lg-9, + .py-lg-9 { + padding-top: 15rem !important; } + .pr-lg-9, + .px-lg-9 { + padding-right: 15rem !important; } + .pb-lg-9, + .py-lg-9 { + padding-bottom: 15rem !important; } + .pl-lg-9, + .px-lg-9 { + padding-left: 15rem !important; } + .m-lg-auto { + margin: auto !important; } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; } } + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; } + .m-xl-1 { + margin: 0.25rem !important; } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; } + .m-xl-2 { + margin: 0.5rem !important; } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; } + .m-xl-3 { + margin: 1rem !important; } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; } + .m-xl-4 { + margin: 1.5rem !important; } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; } + .m-xl-5 { + margin: 3rem !important; } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; } + .m-xl-6 { + margin: 6rem !important; } + .mt-xl-6, + .my-xl-6 { + margin-top: 6rem !important; } + .mr-xl-6, + .mx-xl-6 { + margin-right: 6rem !important; } + .mb-xl-6, + .my-xl-6 { + margin-bottom: 6rem !important; } + .ml-xl-6, + .mx-xl-6 { + margin-left: 6rem !important; } + .m-xl-7 { + margin: 9rem !important; } + .mt-xl-7, + .my-xl-7 { + margin-top: 9rem !important; } + .mr-xl-7, + .mx-xl-7 { + margin-right: 9rem !important; } + .mb-xl-7, + .my-xl-7 { + margin-bottom: 9rem !important; } + .ml-xl-7, + .mx-xl-7 { + margin-left: 9rem !important; } + .m-xl-8 { + margin: 12rem !important; } + .mt-xl-8, + .my-xl-8 { + margin-top: 12rem !important; } + .mr-xl-8, + .mx-xl-8 { + margin-right: 12rem !important; } + .mb-xl-8, + .my-xl-8 { + margin-bottom: 12rem !important; } + .ml-xl-8, + .mx-xl-8 { + margin-left: 12rem !important; } + .m-xl-9 { + margin: 15rem !important; } + .mt-xl-9, + .my-xl-9 { + margin-top: 15rem !important; } + .mr-xl-9, + .mx-xl-9 { + margin-right: 15rem !important; } + .mb-xl-9, + .my-xl-9 { + margin-bottom: 15rem !important; } + .ml-xl-9, + .mx-xl-9 { + margin-left: 15rem !important; } + .p-xl-0 { + padding: 0 !important; } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; } + .p-xl-1 { + padding: 0.25rem !important; } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; } + .p-xl-2 { + padding: 0.5rem !important; } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; } + .p-xl-3 { + padding: 1rem !important; } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; } + .p-xl-4 { + padding: 1.5rem !important; } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; } + .p-xl-5 { + padding: 3rem !important; } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; } + .p-xl-6 { + padding: 6rem !important; } + .pt-xl-6, + .py-xl-6 { + padding-top: 6rem !important; } + .pr-xl-6, + .px-xl-6 { + padding-right: 6rem !important; } + .pb-xl-6, + .py-xl-6 { + padding-bottom: 6rem !important; } + .pl-xl-6, + .px-xl-6 { + padding-left: 6rem !important; } + .p-xl-7 { + padding: 9rem !important; } + .pt-xl-7, + .py-xl-7 { + padding-top: 9rem !important; } + .pr-xl-7, + .px-xl-7 { + padding-right: 9rem !important; } + .pb-xl-7, + .py-xl-7 { + padding-bottom: 9rem !important; } + .pl-xl-7, + .px-xl-7 { + padding-left: 9rem !important; } + .p-xl-8 { + padding: 12rem !important; } + .pt-xl-8, + .py-xl-8 { + padding-top: 12rem !important; } + .pr-xl-8, + .px-xl-8 { + padding-right: 12rem !important; } + .pb-xl-8, + .py-xl-8 { + padding-bottom: 12rem !important; } + .pl-xl-8, + .px-xl-8 { + padding-left: 12rem !important; } + .p-xl-9 { + padding: 15rem !important; } + .pt-xl-9, + .py-xl-9 { + padding-top: 15rem !important; } + .pr-xl-9, + .px-xl-9 { + padding-right: 15rem !important; } + .pb-xl-9, + .py-xl-9 { + padding-bottom: 15rem !important; } + .pl-xl-9, + .px-xl-9 { + padding-left: 15rem !important; } + .m-xl-auto { + margin: auto !important; } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; } } + +.text-justify { + text-align: justify !important; } + +.text-nowrap { + white-space: nowrap !important; } + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + +.text-left { + text-align: left !important; } + +.text-right { + text-align: right !important; } + +.text-center { + text-align: center !important; } + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; } + .text-sm-right { + text-align: right !important; } + .text-sm-center { + text-align: center !important; } } + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; } + .text-md-right { + text-align: right !important; } + .text-md-center { + text-align: center !important; } } + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; } + .text-lg-right { + text-align: right !important; } + .text-lg-center { + text-align: center !important; } } + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; } + .text-xl-right { + text-align: right !important; } + .text-xl-center { + text-align: center !important; } } + +.text-lowercase { + text-transform: lowercase !important; } + +.text-uppercase { + text-transform: uppercase !important; } + +.text-capitalize { + text-transform: capitalize !important; } + +.font-weight-light { + font-weight: 300 !important; } + +.font-weight-normal { + font-weight: 400 !important; } + +.font-weight-bold { + font-weight: 700 !important; } + +.font-italic { + font-style: italic !important; } + +.text-white { + color: #fff !important; } + +.text-primary { + color: #ffd700 !important; } + +a.text-primary:hover, a.text-primary:focus { + color: #ccac00 !important; } + +.text-secondary { + color: #0000ff !important; } + +a.text-secondary:hover, a.text-secondary:focus { + color: #0000cc !important; } + +.text-success { + color: #00e676 !important; } + +a.text-success:hover, a.text-success:focus { + color: #00b35c !important; } + +.text-info { + color: #00e5ff !important; } + +a.text-info:hover, a.text-info:focus { + color: #00b7cc !important; } + +.text-warning { + color: #ffff00 !important; } + +a.text-warning:hover, a.text-warning:focus { + color: #cccc00 !important; } + +.text-danger { + color: #ff1744 !important; } + +a.text-danger:hover, a.text-danger:focus { + color: #e3002c !important; } + +.text-light { + color: #f8f9fa !important; } + +a.text-light:hover, a.text-light:focus { + color: #dae0e5 !important; } + +.text-dark { + color: #212529 !important; } + +a.text-dark:hover, a.text-dark:focus { + color: #0a0c0d !important; } + +.text-muted { + color: #868e96 !important; } + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; } + +.visible { + visibility: visible !important; } + +.invisible { + visibility: hidden !important; } + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + box-shadow: none !important; } + a:not(.btn) { + text-decoration: underline; } + abbr[title]::after { + content: " (" attr(title) ")"; } + pre { + white-space: pre-wrap !important; } + pre, + blockquote { + border: 2px solid #999; + page-break-inside: avoid; } + thead { + display: table-header-group; } + tr, + img { + page-break-inside: avoid; } + p, + h2, + h3 { + orphans: 3; + widows: 3; } + h2, + h3 { + page-break-after: avoid; } + @page { + size: a3; } + body { + min-width: 992px !important; } + .container { + min-width: 992px !important; } + .navbar { + display: none; } + .badge { + border: 2px solid #000; } + .table { + border-collapse: collapse !important; } + .table td, + .table th { + background-color: #fff !important; } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; } } + +/***************** +Custom CSS +*****************/ +.small-xl { + font-size: 90%; } + +p a, .border-link { + box-shadow: inset 0 -3px 0 0 #ffd700; + transition: all .25s ease-out; } + p a:hover, .border-link:hover { + box-shadow: none; + transition: all .25s ease-out; } + +.heading-black { + font-weight: 900; } + +.badge-feature { + font-size: 11px; + text-transform: uppercase; + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } + +.shadow-bottom { + box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); + background-color: rgba(255, 255, 255, 0.98); } + +/*Buttons */ +.btn { + transition: all .25s ease-out; } + .btn:active, .btn:focus { + box-shadow: none !important; } + +/*Navbar*/ +.navbar.navbar-shadow { + box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } + +.navbar.navbar-transparent { + opacity: 0.98; } + +@media (max-width: 992px) { + .navbar.navbar-transparent { + background-color: rgba(0, 0, 0, 0.4); } } + +.navbar .navbar-brand { + font-size: 1.5rem; + font-weight: 900; + text-transform: uppercase; } + +.navbar .navbar-nav .nav-item { + margin: 0 .7rem; } + .navbar .navbar-nav .nav-item .nav-link { + font-weight: 500; } + +/*vertical heights */ +.vh-100 { + height: 100vh; } + +@media (min-width: 576px) { + .vh-sm-100 { + height: 100vh; } } + +@media (min-width: 768px) { + .vh-md-100 { + height: 100vh; } } + +.bg-hero { + /* background-color: #ffffff; */ + background-size: cover; + background-position: center center; + position: relative; } + .bg-hero:before { + position: absolute; + z-index: 1; + width: 100%; + height: 100%; + display: block; + left: 0; + top: 0; + content: ""; + } + .bg-hero .container { + z-index: 2; + position: relative; } + +/* dot circles */ +.dot-circle:hover:before { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + transition: all .25s ease-out; } + +.dot-circle:before { + background: rgba(255, 215, 0, 0.1); + transition: all .25s ease-out; + border-radius: 0px; + -webkit-transform: rotate(0); + transform: rotate(0); + content: ""; + height: 100px; + position: absolute; + top: -30px; + width: 100px; } + +.dot-circle:not(.right):before { + left: -25px; } + +.dot-circle.right:before { + right: -25px; } + +.demo-wrapper { + margin-top: 40px; + position: relative; } + .demo-wrapper .demo-sample:before { + content: ""; + display: block; + height: 20px; + width: 1px; + background: #dee2e6; + margin: 12px 0; + position: absolute; + left: 50%; + top: -40px; } + +/**SVG illustrations */ +.illustration svg .color { + fill: #ffd700; } + +/*contact cards */ +.card-contacts .card { + background-color: inherit; + transition: all .25s ease-out; + border: 1px solid #f8f9fa; + padding: 1.5rem; } + +/*Pricing tables*/ +.pricing-table .pricing-list li { + margin-bottom: 2rem; + margin-top: 2rem; } + +.pricing-table .card { + margin-top: 2rem; + background-color: rgba(255, 215, 0, 0.1); + transition: all .25s ease-out; + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } + .pricing-table .card .card-body { + padding: 4.25rem 2rem; } + .pricing-table .card .h1 { + font-size: 5rem; + font-weight: 500; } + .pricing-table .card p { + text-transform: uppercase; + font-weight: 700; } + .pricing-table .card:hover { + background-color: rgba(255, 215, 0, 0.2); + -webkit-transform: scale(1.05); + transform: scale(1.05); + transition: all .25s ease-out; } + +/*footer*/ +footer ul > li { + padding: 0.5rem; } + +footer a { + color: rgba(0, 0, 0, 0.5); + text-decoration: none; + font-weight: 500; + transition: all 0.25s ease-out; } + footer a:hover { + color: rgba(0, 0, 0, 0.9); + text-decoration: none; + box-shadow: inset 0 -3px 0 0 #ffd700; } + +/*social icons*/ +.social a { + width: 45px; + height: 45px; + background: rgba(255, 255, 255, 0.2); + display: block; + text-align: center; + color: #ffffff; + border-radius: 4px; + font-size: 18px; + line-height: 45px; } + .social a:hover { + background: #ffd700; + transition: all .4s ease-in-out; } + +.social.social-dark a { + background: rgba(0, 0, 0, 0.6); } + .social.social-dark a:hover { + background: #ffd700; } + +.social.social-inverse a { + background: rgba(255, 215, 0, 0.6); + color: #343a40; } + .social.social-inverse a:hover { + background: #ffd700; + color: #ffffff; } + +.social.social-sm a { + width: 35px; + height: 35px; + font-size: 16px; + line-height: 35px; } + +.social.social-rounded a { + border-radius: 50%; } + +.social.social-white a { + background: #ffffff; + color: rgba(52, 58, 64, 0.7); } + .social.social-white a:hover { + color: #ffd700; } + +.social.social-white-alt a { + background: #ffffff; + color: rgba(52, 58, 64, 0.7); } + .social.social-white-alt a:hover { + background: #ffd700; + color: #ffffff; } + +/*scroll to top */ +.scroll-top { + bottom: 20px; + font-size: 20px; + height: 40px; + position: fixed; + text-align: center; + width: 40px; + z-index: 10; + cursor: pointer; + transition: .3s; + border-radius: 50%; + line-height: 40px; + right: -100px; + color: #ffffff; + background-color: rgba(255, 215, 0, 0.5); } + .scroll-top:hover { + background-color: gold; + transition: all .4s ease-in-out; } + .scroll-top.active { + right: 20px; } + +/* Icon Boxes */ +.icon-box { + position: relative; + border-radius: 50%; + display: inline-block; + vertical-align: middle; + background-color: #f8f9fa; + margin: 1rem; } + .icon-box.border-box { + border: 2px solid #ffd700; + background-color: transparent !important; } + .icon-box .icon-box-inner { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-align: center; + align-items: center; + padding: 3.25rem; } + .icon-box .icon-box-inner.small { + padding: 1.25rem; } + .icon-box .icon-box-inner.small-xs { + padding: 1rem; } + +/*all themes colors*/ +.bg-black { + background-color: #000000; } + +.bg-blue { + background-color: #0000ff; } + +.bg-indigo { + background-color: #3d5afe; } + +.bg-purple { + background-color: #aa00ff; } + +.bg-pink { + background-color: #f50057; } + +.bg-red { + background-color: #ff1744; } + +.bg-orange { + background-color: #ffd700; } + +.bg-yellow { + background-color: #ffff00; } + +.bg-green { + background-color: #00e676; } + +.bg-teal { + background-color: #1de9b6; } + +.bg-cyan { + background-color: #00e5ff; } + +/*theme switcher*/ +.switcher-wrap { + position: fixed; + top: 250px; + width: 250px; + background: #ffffff; + color: #343a40; + z-index: 100; + padding: 20px; + left: -250px; + transition: .3s; } + .switcher-wrap.active { + left: 0; } + .switcher-wrap ul { + margin: 0; + padding: 0; + list-style: none; } + .switcher-wrap ul li { + margin-bottom: .5rem; } + .switcher-wrap ul li a { + color: #343a40; } + .switcher-wrap ul li a:hover { + color: #ffd700; } + .switcher-wrap .color-switcher ul li { + width: 28px; + height: 28px; + float: left; + margin: 3px; + margin-bottom: 10px; + cursor: pointer; + transition: .3s; } + .switcher-wrap .color-switcher ul li.active { + border: 3px solid #f8f9fa; } + .switcher-wrap .switcher-trigger { + position: absolute; + left: 100%; + width: 40px; + height: 40px; + background: #ffffff; + top: 0; + font-size: 20px; + text-align: center; + color: rgba(255, 215, 0, 0.5); + cursor: pointer; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + border-radius: 0 2px 2px 0; } + .switcher-wrap .switcher-trigger:hover { + color: #ffd700; } + +@media screen and (max-width: 768px) { + .switcher-wrap { + display: none; } } diff --git a/src/main/resources/static/css/intro.css b/src/main/resources/static/css/intro.css index d5260df..1db6695 100644 --- a/src/main/resources/static/css/intro.css +++ b/src/main/resources/static/css/intro.css @@ -1,6 +1,7 @@ body{ - background-color:gray; + background-color:#FFF; + /*background: #5583EE;background: -moz-linear-gradient(right, #5583EE 0%, #41D8DD 100%);background: -webkit-linear-gradient(right, #5583EE 0%, #41D8DD 100%);background: linear-gradient(to right, #5583EE 0%, #41D8DD 100%);filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#5583EE', endColorstr='#41D8DD',GradientType=1 );*/ } h1{ color:rgb(225,223,220); diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index 0b4d8f2..c9aa49f 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -1,7 +1,7 @@ /*-- ========================================= -- 0.0 CSS IMPORT /*-- ========================================= --*/ -@import url("bootstrap.min.css"); +@import url("/static/css/bootstrap.min.css"); @import url("font-awesome.min.css"); @import url("animate.min.css"); @import url("owl.carousel.css"); @@ -371,6 +371,8 @@ a.link-1.active::before color:#262626; background:#4ebd87; width: 200px; + border-radius: 25px; + margin-top: 5px; } .button-green::before{ background:#4ebd87; @@ -1736,7 +1738,7 @@ section .half-overlay.is-visible{ top:100%; } .about-section .bg-container-static{ - background:url(../img/background/sample2.jpg) no-repeat; + /*background:url(../img/background/sample2.jpg) no-repeat;*/ background-size:cover; background-position:50% 50%; } @@ -1860,7 +1862,7 @@ section .half-overlay.is-visible{ } .works-section .bg-container-static{ - background:url(../img/background/sample3.jpg) no-repeat; + /*background:url(../img/background/sample3.jpg) no-repeat;*/ background-size:cover; background-position:50% 50%; } @@ -2163,6 +2165,7 @@ canvas#bg-canvas{ left:0px; top:0px; z-index:1; + background: rgba(38,38,38,0.7); } diff --git a/src/main/resources/static/files/files b/src/main/resources/static/files/files deleted file mode 100644 index ade7e5d..0000000 --- a/src/main/resources/static/files/files +++ /dev/null @@ -1 +0,0 @@ -临时图片路径 \ No newline at end of file diff --git a/src/main/resources/static/gallery/css/style1.css b/src/main/resources/static/gallery/css/style1.css new file mode 100644 index 0000000..ada4c1c --- /dev/null +++ b/src/main/resources/static/gallery/css/style1.css @@ -0,0 +1,211 @@ +body{ background-color:#fcfcfc;} +.grid { + position: relative; + margin: 0 auto; +} + +.js .grid::after { + content: ''; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + pointer-events: none; + background-size: 60px auto; + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; +} + +.js .grid--loaded::after { + opacity: 0; +} + +.grid__item { + width: 270px; + padding: 10px; +} + +.grid__item--current { + opacity: 0 !important; +} + +.img-wrap { + display: block; +} + +.img-wrap:focus, +.img-wrap:hover { + outline: none; +} + +.img-wrap img { + display: block; + max-width: 100%; +} + +.preview { + position: fixed; + z-index: 1000; + top: 0; + left: 0; + display: -webkit-flex; + display: -ms-flex; + display: flex; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -ms-flex-line-pack: center; + -webkit-align-content: center; + align-content: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 100%; + height: 100%; + pointer-events: none; +} + +.preview--open { + pointer-events: auto; +} + + +/* circle overlay (generated SVG) */ + +.overlay { + position: absolute; + top: 0; + left: 0; + pointer-events: none; +} + +.overlay circle { + -webkit-transition: fill-opacity 0.3s, -webkit-transform 0s 0.3s; + transition: fill-opacity 0.3s, transform 0s 0.3s; + -webkit-transition-timing-function: ease-out; + transition-timing-function: ease-out; + -webkit-transform: scale3d(0, 0, 1); + transform: scale3d(0, 0, 1); + fill: #1f1d1d; + fill-opacity: 0; +} + +.preview--open .overlay circle { + -webkit-transition: -webkit-transform 0.4s; + transition: transform 0.4s; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + fill-opacity: 1; +} + +.clone { + position: fixed; + z-index: 110; + -webkit-transition: -webkit-transform 0.6s cubic-bezier(0.5, 1, 0.2, 1); + transition: transform 0.6s cubic-bezier(0.5, 1, 0.2, 1); + -webkit-backface-visibility: hidden; +} + +.original { + position: relative; + z-index: 120; + display: block; + object-fit: contain; + -webkit-transition: opacity 0.2s; + transition: opacity 0.2s; + -webkit-backface-visibility: hidden; +} + +.preview--open .animate { + /* open */ + -webkit-transition: -webkit-transform 0.6s, opacity 0.2s; + transition: transform 0.6s, opacity 0.2s; +} + +.animate { + /* close */ + -webkit-transition: -webkit-transform 0.3s, opacity 0.2s; + transition: transform 0.3s, opacity 0.2s; +} + +.description { + color: #fff; +} + +.js .description--grid { + display: none; +} + +.description--preview { + position: fixed; + z-index: 140; + bottom: 0; + left: 0; + width: 100%; + padding: 2em 1em; + text-align: center; + opacity: 0; + background: linear-gradient(180deg, transparent, #1f1d1d); + -webkit-transition: opacity 0.3s, -webkit-transform 0.3s; + transition: opacity 0.3s, transform 0.3s; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); +} + +.preview--open .description--preview { + opacity: 1; + -webkit-transition-delay: 0.2s; + transition-delay: 0.2s; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + + +/* Close button */ + +.action { + font-size: 1.5em; + margin: 0; + padding: 0; + cursor: pointer; + vertical-align: top; + color: #6bd68a; + border: none; + background: none; +} + +.action:hover, +.action:focus { + color: #6bd68a; + outline: none; +} + +.action--close { + position: fixed; + z-index: 150; + top: 0; + right: 0; + padding: 1em; + opacity: 0; + -webkit-transition: opacity 0.3s, -webkit-transform 0.3s; + transition: opacity 0.3s, transform 0.3s; + -webkit-transform: scale3d(0.6, 0.6, 1); + transform: scale3d(0.6, 0.6, 1); +} + +.preview--image-loaded .action--close { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); +} + +.text-hidden { + position: absolute; + display: block; + overflow: hidden; + width: 0; + height: 0; + color: transparent; +} + diff --git a/src/main/resources/static/gallery/css/style_login.css b/src/main/resources/static/gallery/css/style_login.css new file mode 100644 index 0000000..347f91c --- /dev/null +++ b/src/main/resources/static/gallery/css/style_login.css @@ -0,0 +1,164 @@ +#verification{ + margin-top: 100px; +} +.container{ + color: #555; +} +.ghost { + position: relative; + animation: ghostUpdown 1s infinite alternate; + -webkit-animation: ghostUpdown 1s infinite alternate; +} + + + + + +.sign-content.popup-in-content{ + background: #fff; + border-radius: 5px; + padding: 60px 0 100px; +} +.popup-in-txt { + max-width: 500px; + margin: 0 auto; +} + +.btn.signin_btn, .btn.signin_btn:focus { + width: 90%; + padding: 0; + height: 50px; + background: #5a84fd; + color: #fff; + font-size: 14px; + text-transform: uppercase; + border-radius: 3px; + box-shadow: 0 5px 30px rgba(0,66,255,.3); + margin-top: 23px; + margin: 15px; +} +.container ul{ + padding: 0; + margin: 0 auto; + list-style: none; +} +.container ul li { + list-style: none; + +} + +/*=============Style css=========*/ +.tlinks{text-indent:-9999px;height:0;line-height:0;font-size:0;overflow:hidden;} +/*------------------------------------- + 2. Kit-name-head +--------------------------------------*/ +.kit-name-head{ + display: none; + height: 120px; +} + +.kit-name-txt{ + /*padding: 75px 0 71px;*/ + padding: 33px 0 71px; + text-align: center; +} +.kit-name-head h2 { + font-size: 33px; + font-weight: 600; + color: #fff; + margin-bottom: 8px;/*18*/ +} +.kit-name-head h2::first-letter { + text-transform: lowercase; +} +.kit-name-head h3{ + font-size: 16px; + font-weight: 500; + color: #fff; +} + +/*------------------------------------- + 3. Form-demo +--------------------------------------*/ +.single-form-demo-set { + text-align: center; + padding: 60px 0; +} +.single-form-img-content { margin-top: 60px;} +/*.form-img*/ +.form-img { + position: relative; + box-shadow:0px 5px 30px 5px rgba(154,154,154,.3); + -webkit-transition: .5s; + -moz-transition:.5s; + -ms-transition:.5s; + -o-transition:.5s; + transition: .5s; +} + +.form-img-hover{ + display: flex; + justify-content: center; + align-items: center; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background:transparent; + -webkit-transform: scale(0); + -moz-transform:scale(0); + -ms-transform:scale(0); + -o-transform:scale(0); + transform: scale(0); +} +.form-img:hover .form-img-hover{ + -webkit-transform: scale(1); + -moz-transform:scale(1); + -ms-transform:scale(1); + -o-transform:scale(1); + transform: scale(1); + -webkit-transition: .5s; + -moz-transition:.5s; + -ms-transition:.5s; + -o-transition:.5s; + transition: .5s; +} + +.form-img:hover { + box-shadow:0px 5px 30px 5px rgba(154,154,154,.7); +} +/*.form-img*/ + +/*=============================== + Scroll Top +===============================*/ +#scroll-Top .return-to-top { + position: fixed; + right: 30px; + bottom: 30px; + display: none; + width: 40px; + line-height: 40px; + height: 40px; + text-align: center; + font-size: 30px; + cursor: pointer; + color: #fff; + background:#5a84fd; + border:1px solid #5a84fd; + border-radius:5px; + -webkit-transition: .5s; + -moz-transition:.5s; + -ms-transition:.5s; + -o-transition:.5s; + transition: .5s; + z-index: 2; +} +#scroll-Top .return-to-top:hover { + background:transparent; + color: #26d9b3; + border:1px solid #26d9b3; + border-radius:50%; +} +/*========================Thank you================= \ No newline at end of file diff --git a/src/main/resources/static/gallery/js/classie.js b/src/main/resources/static/gallery/js/classie.js new file mode 100644 index 0000000..ff1dfb6 --- /dev/null +++ b/src/main/resources/static/gallery/js/classie.js @@ -0,0 +1,85 @@ +/*! + * classie v1.0.1 + * class helper functions + * from bonzo https://github.com/ded/bonzo + * MIT license + * + * classie.has( elem, 'my-class' ) -> true/false + * classie.add( elem, 'my-new-class' ) + * classie.remove( elem, 'my-unwanted-class' ) + * classie.toggle( elem, 'my-class' ) + */ + +/*jshint browser: true, strict: true, undef: true, unused: true */ +/*global define: false, module: false */ + +( function( window ) { + +'use strict'; + +// class helper functions from bonzo https://github.com/ded/bonzo + +function classReg( className ) { + return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); +} + +// classList support for class management +// altho to be fair, the api sucks because it won't accept multiple classes at once +var hasClass, addClass, removeClass; + +if ( 'classList' in document.documentElement ) { + hasClass = function( elem, c ) { + return elem.classList.contains( c ); + }; + addClass = function( elem, c ) { + elem.classList.add( c ); + }; + removeClass = function( elem, c ) { + elem.classList.remove( c ); + }; +} +else { + hasClass = function( elem, c ) { + return classReg( c ).test( elem.className ); + }; + addClass = function( elem, c ) { + if ( !hasClass( elem, c ) ) { + elem.className = elem.className + ' ' + c; + } + }; + removeClass = function( elem, c ) { + elem.className = elem.className.replace( classReg( c ), ' ' ); + }; +} + +function toggleClass( elem, c ) { + var fn = hasClass( elem, c ) ? removeClass : addClass; + fn( elem, c ); +} + +var classie = { + // full names + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + toggleClass: toggleClass, + // short names + has: hasClass, + add: addClass, + remove: removeClass, + toggle: toggleClass +}; + +// transport +if ( typeof define === 'function' && define.amd ) { + // AMD + define( classie ); +} else if ( typeof exports === 'object' ) { + // CommonJS + module.exports = classie; +} else { + // browser global + window.classie = classie; +} + +})( window ); \ No newline at end of file diff --git a/src/main/resources/static/gallery/js/html5shiv.min.js b/src/main/resources/static/gallery/js/html5shiv.min.js new file mode 100644 index 0000000..b3236fe --- /dev/null +++ b/src/main/resources/static/gallery/js/html5shiv.min.js @@ -0,0 +1 @@ +(function(k,m){var g="3.7.0";var d=k.html5||{};var h=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;var c=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;var q;var i="_html5shiv";var a=0;var o={};var e;(function(){try{var t=m.createElement("a");t.innerHTML="";q=("hidden" in t);e=t.childNodes.length==1||(function(){(m.createElement)("a");var v=m.createDocumentFragment();return(typeof v.cloneNode=="undefined"||typeof v.createDocumentFragment=="undefined"||typeof v.createElement=="undefined")}())}catch(u){q=true;e=true}}());function f(t,v){var w=t.createElement("p"),u=t.getElementsByTagName("head")[0]||t.documentElement;w.innerHTML="x";return u.insertBefore(w.lastChild,u.firstChild)}function l(){var t=j.elements;return typeof t=="string"?t.split(" "):t}function p(t){var u=o[t[i]];if(!u){u={};a++;t[i]=a;o[a]=u}return u}function n(w,t,v){if(!t){t=m}if(e){return t.createElement(w)}if(!v){v=p(t)}var u;if(v.cache[w]){u=v.cache[w].cloneNode()}else{if(c.test(w)){u=(v.cache[w]=v.createElem(w)).cloneNode()}else{u=v.createElem(w)}}return u.canHaveChildren&&!h.test(w)?v.frag.appendChild(u):u}function r(v,x){if(!v){v=m}if(e){return v.createDocumentFragment()}x=x||p(v);var y=x.frag.cloneNode(),w=0,u=l(),t=u.length;for(;wt;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,r=this.getListenersAsObject(e),o="object"==typeof n;for(i in r)r.hasOwnProperty(i)&&-1===t(r[i],n)&&r[i].push(o?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&(i=t(o[r],n),-1!==i&&o[r].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,r,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)o.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(r=t[i])&&("function"==typeof r?o.call(this,i,r):s.call(this,i,r));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,r,o,s=this.getListenersAsObject(e);for(r in s)if(s.hasOwnProperty(r))for(i=s[r].length;i--;)n=s[r][i],n.once===!0&&this.removeListener(e,n.listener),o=n.listener.apply(this,t||[]),o===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return r.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}).call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var r=function(){};n.removeEventListener?r=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(r=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var o={bind:i,unbind:r};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("wolfy87-eventemitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(window,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function r(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(r(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),a&&(this.jqDeferred=new a.Deferred);var r=this;setTimeout(function(){r.check()})}function f(e){this.img=e}function c(e){this.src=e,v[e]=this}var a=e.jQuery,u=e.console,h=u!==void 0,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);var i=n.nodeType;if(i&&(1===i||9===i||11===i))for(var r=n.querySelectorAll("img"),o=0,s=r.length;s>o;o++){var f=r[o];this.addImage(f)}}},s.prototype.addImage=function(e){var t=new f(e);this.images.push(t)},s.prototype.check=function(){function e(e,r){return t.options.debug&&h&&u.log("confirm",e,r),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return this.complete(),void 0;for(var r=0;i>r;r++){var o=this.images[r];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},a&&(a.fn.imagesLoaded=function(e,t){var n=new s(this,e,t);return n.jqDeferred.promise(a(this))}),f.prototype=new t,f.prototype.check=function(){var e=v[this.img.src]||new c(this.img.src);if(e.isConfirmed)return this.confirm(e.isLoaded,"cached was confirmed"),void 0;if(this.img.complete&&void 0!==this.img.naturalWidth)return this.confirm(0!==this.img.naturalWidth,"naturalWidth"),void 0;var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},f.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var v={};return c.prototype=new t,c.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},c.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},c.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},c.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},c.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},c.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s}); \ No newline at end of file diff --git a/src/main/resources/static/gallery/js/jq/cbpgridgallery.js b/src/main/resources/static/gallery/js/jq/cbpgridgallery.js new file mode 100644 index 0000000..8bd2b4e --- /dev/null +++ b/src/main/resources/static/gallery/js/jq/cbpgridgallery.js @@ -0,0 +1,364 @@ +/** + * cbpGridGallery.js v1.0.0 + * http://www.codrops.com + * + * Licensed under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + * + * Copyright 2014, Codrops + * http://www.codrops.com + */ +;( function( window ) { + + 'use strict'; + + var docElem = window.document.documentElement, + transEndEventNames = { + 'WebkitTransition': 'webkitTransitionEnd', + 'MozTransition': 'transitionend', + 'OTransition': 'oTransitionEnd', + 'msTransition': 'MSTransitionEnd', + 'transition': 'transitionend' + }, + transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ], + support = { + transitions : Modernizr.csstransitions, + support3d : Modernizr.csstransforms3d + }; + + function setTransform( el, transformStr ) { + el.style.WebkitTransform = transformStr; + el.style.msTransform = transformStr; + el.style.transform = transformStr; + } + + // from http://responsejs.com/labs/dimensions/ + function getViewportW() { + var client = docElem['clientWidth'], + inner = window['innerWidth']; + + if( client < inner ) + return inner; + else + return client; + } + + function extend( a, b ) { + for( var key in b ) { + if( b.hasOwnProperty( key ) ) { + a[key] = b[key]; + } + } + return a; + } + + function CBPGridGallery( el, options ) { + this.el = el; + this.options = extend( {}, this.options ); + extend( this.options, options ); + this._init(); + } + + CBPGridGallery.prototype.options = { + }; + + CBPGridGallery.prototype._init = function() { + // main grid + this.grid = this.el.querySelector( 'section.grid-wrap > ul.grid' ); + // main grid items + this.gridItems = [].slice.call( this.grid.querySelectorAll( 'li:not(.grid-sizer)' ) ); + // items total + this.itemsCount = this.gridItems.length; + // slideshow grid + this.slideshow = this.el.querySelector( 'section.slideshow > ul' ); + // slideshow grid items + this.slideshowItems = [].slice.call( this.slideshow.children ); + // index of current slideshow item + this.current = -1; + // slideshow control buttons + this.ctrlPrev = this.el.querySelector( 'section.slideshow > nav > span.nav-prev' ); + this.ctrlNext = this.el.querySelector( 'section.slideshow > nav > span.nav-next' ); + this.ctrlClose = this.el.querySelector( 'section.slideshow > nav > span.nav-close' ); + // init masonry grid + this._initMasonry(); + // init events + this._initEvents(); + }; + + CBPGridGallery.prototype._initMasonry = function() { + var grid = this.grid; + imagesLoaded( grid, function() { + new Masonry( grid, { + itemSelector: 'li', + columnWidth: grid.querySelector( '.grid-sizer' ) + }); + }); + }; + + CBPGridGallery.prototype._initEvents = function() { + var self = this; + + // open the slideshow when clicking on the main grid items + this.gridItems.forEach( function( item, idx ) { + item.addEventListener( 'click', function() { + self._openSlideshow( idx ); + } ); + } ); + + // slideshow controls + this.ctrlPrev.addEventListener( 'click', function() { self._navigate( 'prev' ); } ); + this.ctrlNext.addEventListener( 'click', function() { self._navigate( 'next' ); } ); + this.ctrlClose.addEventListener( 'click', function() { self._closeSlideshow(); } ); + + // window resize + window.addEventListener( 'resize', function() { self._resizeHandler(); } ); + + // keyboard navigation events + document.addEventListener( 'keydown', function( ev ) { + if ( self.isSlideshowVisible ) { + var keyCode = ev.keyCode || ev.which; + + switch (keyCode) { + case 37: + self._navigate( 'prev' ); + break; + case 39: + self._navigate( 'next' ); + break; + case 27: + self._closeSlideshow(); + break; + } + } + } ); + + // trick to prevent scrolling when slideshow is visible + window.addEventListener( 'scroll', function() { + if ( self.isSlideshowVisible ) { + window.scrollTo( self.scrollPosition ? self.scrollPosition.x : 0, self.scrollPosition ? self.scrollPosition.y : 0 ); + } + else { + self.scrollPosition = { x : window.pageXOffset || docElem.scrollLeft, y : window.pageYOffset || docElem.scrollTop }; + } + }); + }; + + CBPGridGallery.prototype._openSlideshow = function( pos ) { + this.isSlideshowVisible = true; + this.current = pos; + + classie.addClass( this.el, 'slideshow-open' ); + + /* position slideshow items */ + + // set viewport items (current, next and previous) + this._setViewportItems(); + + // add class "current" and "show" to currentItem + classie.addClass( this.currentItem, 'current' ); + classie.addClass( this.currentItem, 'show' ); + + // add class show to next and previous items + // position previous item on the left side and the next item on the right side + if( this.prevItem ) { + classie.addClass( this.prevItem, 'show' ); + var translateVal = Number( -1 * ( getViewportW() / 2 + this.prevItem.offsetWidth / 2 ) ); + setTransform( this.prevItem, support.support3d ? 'translate3d(' + translateVal + 'px, 0, -150px)' : 'translate(' + translateVal + 'px)' ); + } + if( this.nextItem ) { + classie.addClass( this.nextItem, 'show' ); + var translateVal = Number( getViewportW() / 2 + this.nextItem.offsetWidth / 2 ); + setTransform( this.nextItem, support.support3d ? 'translate3d(' + translateVal + 'px, 0, -150px)' : 'translate(' + translateVal + 'px)' ); + } + }; + + CBPGridGallery.prototype._navigate = function( dir ) { + if( this.isAnimating ) return; + if( dir === 'next' && this.current === this.itemsCount - 1 || dir === 'prev' && this.current === 0 ) { + this._closeSlideshow(); + return; + } + + this.isAnimating = true; + + // reset viewport items + this._setViewportItems(); + + var self = this, + itemWidth = this.currentItem.offsetWidth, + // positions for the centered/current item, both the side items and the incoming ones + transformLeftStr = support.support3d ? 'translate3d(-' + Number( getViewportW() / 2 + itemWidth / 2 ) + 'px, 0, -150px)' : 'translate(-' + Number( getViewportW() / 2 + itemWidth / 2 ) + 'px)', + transformRightStr = support.support3d ? 'translate3d(' + Number( getViewportW() / 2 + itemWidth / 2 ) + 'px, 0, -150px)' : 'translate(' + Number( getViewportW() / 2 + itemWidth / 2 ) + 'px)', + transformCenterStr = '', transformOutStr, transformIncomingStr, + // incoming item + incomingItem; + + if( dir === 'next' ) { + transformOutStr = support.support3d ? 'translate3d( -' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px, 0, -150px )' : 'translate(-' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px)'; + transformIncomingStr = support.support3d ? 'translate3d( ' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px, 0, -150px )' : 'translate(' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px)'; + } + else { + transformOutStr = support.support3d ? 'translate3d( ' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px, 0, -150px )' : 'translate(' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px)'; + transformIncomingStr = support.support3d ? 'translate3d( -' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px, 0, -150px )' : 'translate(-' + Number( (getViewportW() * 2) / 2 + itemWidth / 2 ) + 'px)'; + } + + // remove class animatable from the slideshow grid (if it has already) + classie.removeClass( self.slideshow, 'animatable' ); + + if( dir === 'next' && this.current < this.itemsCount - 2 || dir === 'prev' && this.current > 1 ) { + // we have an incoming item! + incomingItem = this.slideshowItems[ dir === 'next' ? this.current + 2 : this.current - 2 ]; + setTransform( incomingItem, transformIncomingStr ); + classie.addClass( incomingItem, 'show' ); + } + + var slide = function() { + // add class animatable to the slideshow grid + classie.addClass( self.slideshow, 'animatable' ); + + // overlays: + classie.removeClass( self.currentItem, 'current' ); + var nextCurrent = dir === 'next' ? self.nextItem : self.prevItem; + classie.addClass( nextCurrent, 'current' ); + + setTransform( self.currentItem, dir === 'next' ? transformLeftStr : transformRightStr ); + + if( self.nextItem ) { + setTransform( self.nextItem, dir === 'next' ? transformCenterStr : transformOutStr ); + } + + if( self.prevItem ) { + setTransform( self.prevItem, dir === 'next' ? transformOutStr : transformCenterStr ); + } + + if( incomingItem ) { + setTransform( incomingItem, dir === 'next' ? transformRightStr : transformLeftStr ); + } + + var onEndTransitionFn = function( ev ) { + if( support.transitions ) { + if( ev.propertyName.indexOf( 'transform' ) === -1 ) return false; + this.removeEventListener( transEndEventName, onEndTransitionFn ); + } + + if( self.prevItem && dir === 'next' ) { + classie.removeClass( self.prevItem, 'show' ); + } + else if( self.nextItem && dir === 'prev' ) { + classie.removeClass( self.nextItem, 'show' ); + } + + if( dir === 'next' ) { + self.prevItem = self.currentItem; + self.currentItem = self.nextItem; + if( incomingItem ) { + self.nextItem = incomingItem; + } + } + else { + self.nextItem = self.currentItem; + self.currentItem = self.prevItem; + if( incomingItem ) { + self.prevItem = incomingItem; + } + } + + self.current = dir === 'next' ? self.current + 1 : self.current - 1; + self.isAnimating = false; + }; + + if( support.transitions ) { + self.currentItem.addEventListener( transEndEventName, onEndTransitionFn ); + } + else { + onEndTransitionFn(); + } + }; + + setTimeout( slide, 25 ); + } + + CBPGridGallery.prototype._closeSlideshow = function( pos ) { + // remove class slideshow-open from the grid gallery elem + classie.removeClass( this.el, 'slideshow-open' ); + // remove class animatable from the slideshow grid + classie.removeClass( this.slideshow, 'animatable' ); + + var self = this, + onEndTransitionFn = function( ev ) { + if( support.transitions ) { + if( ev.target.tagName.toLowerCase() !== 'ul' ) return; + this.removeEventListener( transEndEventName, onEndTransitionFn ); + } + // remove classes show and current from the slideshow items + classie.removeClass( self.currentItem, 'current' ); + classie.removeClass( self.currentItem, 'show' ); + + if( self.prevItem ) { + classie.removeClass( self.prevItem, 'show' ); + } + if( self.nextItem ) { + classie.removeClass( self.nextItem, 'show' ); + } + + // also reset any transforms for all the items + self.slideshowItems.forEach( function( item ) { setTransform( item, '' ); } ); + + self.isSlideshowVisible = false; + }; + + if( support.transitions ) { + this.el.addEventListener( transEndEventName, onEndTransitionFn ); + } + else { + onEndTransitionFn(); + } + }; + + CBPGridGallery.prototype._setViewportItems = function() { + this.currentItem = null; + this.prevItem = null; + this.nextItem = null; + + if( this.current > 0 ) { + this.prevItem = this.slideshowItems[ this.current - 1 ]; + } + if( this.current < this.itemsCount - 1 ) { + this.nextItem = this.slideshowItems[ this.current + 1 ]; + } + this.currentItem = this.slideshowItems[ this.current ]; + } + + // taken from https://github.com/desandro/vanilla-masonry/blob/master/masonry.js by David DeSandro + // original debounce by John Hann + // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/ + CBPGridGallery.prototype._resizeHandler = function() { + var self = this; + function delayed() { + self._resize(); + self._resizeTimeout = null; + } + if ( this._resizeTimeout ) { + clearTimeout( this._resizeTimeout ); + } + this._resizeTimeout = setTimeout( delayed, 50 ); + } + + CBPGridGallery.prototype._resize = function() { + if ( this.isSlideshowVisible ) { + // update width value + if( this.prevItem ) { + var translateVal = Number( -1 * ( getViewportW() / 2 + this.prevItem.offsetWidth / 2 ) ); + setTransform( this.prevItem, support.support3d ? 'translate3d(' + translateVal + 'px, 0, -150px)' : 'translate(' + translateVal + 'px)' ); + } + if( this.nextItem ) { + var translateVal = Number( getViewportW() / 2 + this.nextItem.offsetWidth / 2 ); + setTransform( this.nextItem, support.support3d ? 'translate3d(' + translateVal + 'px, 0, -150px)' : 'translate(' + translateVal + 'px)' ); + } + } + } + + // add to global namespace + window.CBPGridGallery = CBPGridGallery; + +})( window ); \ No newline at end of file diff --git a/src/main/resources/static/gallery/js/jq/classie.js b/src/main/resources/static/gallery/js/jq/classie.js new file mode 100644 index 0000000..a967554 --- /dev/null +++ b/src/main/resources/static/gallery/js/jq/classie.js @@ -0,0 +1,80 @@ +/*! + * classie - class helper functions + * from bonzo https://github.com/ded/bonzo + * + * classie.has( elem, 'my-class' ) -> true/false + * classie.add( elem, 'my-new-class' ) + * classie.remove( elem, 'my-unwanted-class' ) + * classie.toggle( elem, 'my-class' ) + */ + +/*jshint browser: true, strict: true, undef: true */ +/*global define: false */ + +( function( window ) { + +'use strict'; + +// class helper functions from bonzo https://github.com/ded/bonzo + +function classReg( className ) { + return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); +} + +// classList support for class management +// altho to be fair, the api sucks because it won't accept multiple classes at once +var hasClass, addClass, removeClass; + +if ( 'classList' in document.documentElement ) { + hasClass = function( elem, c ) { + return elem.classList.contains( c ); + }; + addClass = function( elem, c ) { + elem.classList.add( c ); + }; + removeClass = function( elem, c ) { + elem.classList.remove( c ); + }; +} +else { + hasClass = function( elem, c ) { + return classReg( c ).test( elem.className ); + }; + addClass = function( elem, c ) { + if ( !hasClass( elem, c ) ) { + elem.className = elem.className + ' ' + c; + } + }; + removeClass = function( elem, c ) { + elem.className = elem.className.replace( classReg( c ), ' ' ); + }; +} + +function toggleClass( elem, c ) { + var fn = hasClass( elem, c ) ? removeClass : addClass; + fn( elem, c ); +} + +var classie = { + // full names + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + toggleClass: toggleClass, + // short names + has: hasClass, + add: addClass, + remove: removeClass, + toggle: toggleClass +}; + +// transport +if ( typeof define === 'function' && define.amd ) { + // AMD + define( classie ); +} else { + // browser global + window.classie = classie; +} + +})( window ); diff --git a/src/main/resources/static/gallery/js/jq/imagesloaded.pkgd.min.js b/src/main/resources/static/gallery/js/jq/imagesloaded.pkgd.min.js new file mode 100644 index 0000000..321a9f8 --- /dev/null +++ b/src/main/resources/static/gallery/js/jq/imagesloaded.pkgd.min.js @@ -0,0 +1,7 @@ +/*! + * imagesLoaded PACKAGED v3.1.4 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +(function(){function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var i=e.prototype,r=this,o=r.EventEmitter;i.getListeners=function(e){var t,n,i=this._getEvents();if("object"==typeof e){t={};for(n in i)i.hasOwnProperty(n)&&e.test(n)&&(t[n]=i[n])}else t=i[e]||(i[e]=[]);return t},i.flattenListeners=function(e){var t,n=[];for(t=0;e.length>t;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,r=this.getListenersAsObject(e),o="object"==typeof n;for(i in r)r.hasOwnProperty(i)&&-1===t(r[i],n)&&r[i].push(o?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&(i=t(o[r],n),-1!==i&&o[r].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,r,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)o.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(r=t[i])&&("function"==typeof r?o.call(this,i,r):s.call(this,i,r));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,r,o,s=this.getListenersAsObject(e);for(r in s)if(s.hasOwnProperty(r))for(i=s[r].length;i--;)n=s[r][i],n.once===!0&&this.removeListener(e,n.listener),o=n.listener.apply(this,t||[]),o===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return r.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}).call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var r=function(){};n.removeEventListener?r=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(r=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var o={bind:i,unbind:r};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("eventEmitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(this,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function r(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(r(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),a&&(this.jqDeferred=new a.Deferred);var r=this;setTimeout(function(){r.check()})}function c(e){this.img=e}function f(e){this.src=e,v[e]=this}var a=e.jQuery,u=e.console,h=u!==void 0,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);for(var i=n.querySelectorAll("img"),r=0,o=i.length;o>r;r++){var s=i[r];this.addImage(s)}}},s.prototype.addImage=function(e){var t=new c(e);this.images.push(t)},s.prototype.check=function(){function e(e,r){return t.options.debug&&h&&u.log("confirm",e,r),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return this.complete(),void 0;for(var r=0;i>r;r++){var o=this.images[r];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},a&&(a.fn.imagesLoaded=function(e,t){var n=new s(this,e,t);return n.jqDeferred.promise(a(this))}),c.prototype=new t,c.prototype.check=function(){var e=v[this.img.src]||new f(this.img.src);if(e.isConfirmed)return this.confirm(e.isLoaded,"cached was confirmed"),void 0;if(this.img.complete&&void 0!==this.img.naturalWidth)return this.confirm(0!==this.img.naturalWidth,"naturalWidth"),void 0;var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},c.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var v={};return f.prototype=new t,f.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},f.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},f.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},f.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},f.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},f.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s}); \ No newline at end of file diff --git a/src/main/resources/static/gallery/js/jq/masonry.pkgd.min.js b/src/main/resources/static/gallery/js/jq/masonry.pkgd.min.js new file mode 100644 index 0000000..50ffaed --- /dev/null +++ b/src/main/resources/static/gallery/js/jq/masonry.pkgd.min.js @@ -0,0 +1,9 @@ +/*! + * Masonry PACKAGED v3.1.4 + * Cascading grid layout library + * http://masonry.desandro.com + * MIT License + * by David DeSandro + */ + +(function(t){function e(){}function i(t){function i(e){e.prototype.option||(e.prototype.option=function(e){t.isPlainObject(e)&&(this.options=t.extend(!0,this.options,e))})}function o(e,i){t.fn[e]=function(o){if("string"==typeof o){for(var s=n.call(arguments,1),a=0,h=this.length;h>a;a++){var p=this[a],u=t.data(p,e);if(u)if(t.isFunction(u[o])&&"_"!==o.charAt(0)){var f=u[o].apply(u,s);if(void 0!==f)return f}else r("no such method '"+o+"' for "+e+" instance");else r("cannot call methods on "+e+" prior to initialization; "+"attempted to call '"+o+"'")}return this}return this.each(function(){var n=t.data(this,e);n?(n.option(o),n._init()):(n=new i(this,o),t.data(this,e,n))})}}if(t){var r="undefined"==typeof console?e:function(t){console.error(t)};return t.bridget=function(t,e){i(e),o(t,e)},t.bridget}}var n=Array.prototype.slice;"function"==typeof define&&define.amd?define("jquery-bridget/jquery.bridget",["jquery"],i):i(t.jQuery)})(window),function(t){function e(e){var i=t.event;return i.target=i.target||i.srcElement||e,i}var i=document.documentElement,n=function(){};i.addEventListener?n=function(t,e,i){t.addEventListener(e,i,!1)}:i.attachEvent&&(n=function(t,i,n){t[i+n]=n.handleEvent?function(){var i=e(t);n.handleEvent.call(n,i)}:function(){var i=e(t);n.call(t,i)},t.attachEvent("on"+i,t[i+n])});var o=function(){};i.removeEventListener?o=function(t,e,i){t.removeEventListener(e,i,!1)}:i.detachEvent&&(o=function(t,e,i){t.detachEvent("on"+e,t[e+i]);try{delete t[e+i]}catch(n){t[e+i]=void 0}});var r={bind:n,unbind:o};"function"==typeof define&&define.amd?define("eventie/eventie",r):"object"==typeof exports?module.exports=r:t.eventie=r}(this),function(t){function e(t){"function"==typeof t&&(e.isReady?t():r.push(t))}function i(t){var i="readystatechange"===t.type&&"complete"!==o.readyState;if(!e.isReady&&!i){e.isReady=!0;for(var n=0,s=r.length;s>n;n++){var a=r[n];a()}}}function n(n){return n.bind(o,"DOMContentLoaded",i),n.bind(o,"readystatechange",i),n.bind(t,"load",i),e}var o=t.document,r=[];e.isReady=!1,"function"==typeof define&&define.amd?(e.isReady="function"==typeof requirejs,define("doc-ready/doc-ready",["eventie/eventie"],n)):t.docReady=n(t.eventie)}(this),function(){function t(){}function e(t,e){for(var i=t.length;i--;)if(t[i].listener===e)return i;return-1}function i(t){return function(){return this[t].apply(this,arguments)}}var n=t.prototype,o=this,r=o.EventEmitter;n.getListeners=function(t){var e,i,n=this._getEvents();if(t instanceof RegExp){e={};for(i in n)n.hasOwnProperty(i)&&t.test(i)&&(e[i]=n[i])}else e=n[t]||(n[t]=[]);return e},n.flattenListeners=function(t){var e,i=[];for(e=0;t.length>e;e+=1)i.push(t[e].listener);return i},n.getListenersAsObject=function(t){var e,i=this.getListeners(t);return i instanceof Array&&(e={},e[t]=i),e||i},n.addListener=function(t,i){var n,o=this.getListenersAsObject(t),r="object"==typeof i;for(n in o)o.hasOwnProperty(n)&&-1===e(o[n],i)&&o[n].push(r?i:{listener:i,once:!1});return this},n.on=i("addListener"),n.addOnceListener=function(t,e){return this.addListener(t,{listener:e,once:!0})},n.once=i("addOnceListener"),n.defineEvent=function(t){return this.getListeners(t),this},n.defineEvents=function(t){for(var e=0;t.length>e;e+=1)this.defineEvent(t[e]);return this},n.removeListener=function(t,i){var n,o,r=this.getListenersAsObject(t);for(o in r)r.hasOwnProperty(o)&&(n=e(r[o],i),-1!==n&&r[o].splice(n,1));return this},n.off=i("removeListener"),n.addListeners=function(t,e){return this.manipulateListeners(!1,t,e)},n.removeListeners=function(t,e){return this.manipulateListeners(!0,t,e)},n.manipulateListeners=function(t,e,i){var n,o,r=t?this.removeListener:this.addListener,s=t?this.removeListeners:this.addListeners;if("object"!=typeof e||e instanceof RegExp)for(n=i.length;n--;)r.call(this,e,i[n]);else for(n in e)e.hasOwnProperty(n)&&(o=e[n])&&("function"==typeof o?r.call(this,n,o):s.call(this,n,o));return this},n.removeEvent=function(t){var e,i=typeof t,n=this._getEvents();if("string"===i)delete n[t];else if(t instanceof RegExp)for(e in n)n.hasOwnProperty(e)&&t.test(e)&&delete n[e];else delete this._events;return this},n.removeAllListeners=i("removeEvent"),n.emitEvent=function(t,e){var i,n,o,r,s=this.getListenersAsObject(t);for(o in s)if(s.hasOwnProperty(o))for(n=s[o].length;n--;)i=s[o][n],i.once===!0&&this.removeListener(t,i.listener),r=i.listener.apply(this,e||[]),r===this._getOnceReturnValue()&&this.removeListener(t,i.listener);return this},n.trigger=i("emitEvent"),n.emit=function(t){var e=Array.prototype.slice.call(arguments,1);return this.emitEvent(t,e)},n.setOnceReturnValue=function(t){return this._onceReturnValue=t,this},n._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},n._getEvents=function(){return this._events||(this._events={})},t.noConflict=function(){return o.EventEmitter=r,t},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return t}):"object"==typeof module&&module.exports?module.exports=t:this.EventEmitter=t}.call(this),function(t){function e(t){if(t){if("string"==typeof n[t])return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e,o=0,r=i.length;r>o;o++)if(e=i[o]+t,"string"==typeof n[e])return e}}var i="Webkit Moz ms Ms O".split(" "),n=document.documentElement.style;"function"==typeof define&&define.amd?define("get-style-property/get-style-property",[],function(){return e}):"object"==typeof exports?module.exports=e:t.getStyleProperty=e}(window),function(t){function e(t){var e=parseFloat(t),i=-1===t.indexOf("%")&&!isNaN(e);return i&&e}function i(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},e=0,i=s.length;i>e;e++){var n=s[e];t[n]=0}return t}function n(t){function n(t){if("string"==typeof t&&(t=document.querySelector(t)),t&&"object"==typeof t&&t.nodeType){var n=r(t);if("none"===n.display)return i();var o={};o.width=t.offsetWidth,o.height=t.offsetHeight;for(var u=o.isBorderBox=!(!p||!n[p]||"border-box"!==n[p]),f=0,c=s.length;c>f;f++){var d=s[f],l=n[d];l=a(t,l);var m=parseFloat(l);o[d]=isNaN(m)?0:m}var y=o.paddingLeft+o.paddingRight,g=o.paddingTop+o.paddingBottom,v=o.marginLeft+o.marginRight,b=o.marginTop+o.marginBottom,_=o.borderLeftWidth+o.borderRightWidth,E=o.borderTopWidth+o.borderBottomWidth,L=u&&h,x=e(n.width);x!==!1&&(o.width=x+(L?0:y+_));var z=e(n.height);return z!==!1&&(o.height=z+(L?0:g+E)),o.innerWidth=o.width-(y+_),o.innerHeight=o.height-(g+E),o.outerWidth=o.width+v,o.outerHeight=o.height+b,o}}function a(t,e){if(o||-1===e.indexOf("%"))return e;var i=t.style,n=i.left,r=t.runtimeStyle,s=r&&r.left;return s&&(r.left=t.currentStyle.left),i.left=e,e=i.pixelLeft,i.left=n,s&&(r.left=s),e}var h,p=t("boxSizing");return function(){if(p){var t=document.createElement("div");t.style.width="200px",t.style.padding="1px 2px 3px 4px",t.style.borderStyle="solid",t.style.borderWidth="1px 2px 3px 4px",t.style[p]="border-box";var i=document.body||document.documentElement;i.appendChild(t);var n=r(t);h=200===e(n.width),i.removeChild(t)}}(),n}var o=t.getComputedStyle,r=o?function(t){return o(t,null)}:function(t){return t.currentStyle},s=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"];"function"==typeof define&&define.amd?define("get-size/get-size",["get-style-property/get-style-property"],n):"object"==typeof exports?module.exports=n(require("get-style-property")):t.getSize=n(t.getStyleProperty)}(window),function(t,e){function i(t,e){return t[a](e)}function n(t){if(!t.parentNode){var e=document.createDocumentFragment();e.appendChild(t)}}function o(t,e){n(t);for(var i=t.parentNode.querySelectorAll(e),o=0,r=i.length;r>o;o++)if(i[o]===t)return!0;return!1}function r(t,e){return n(t),i(t,e)}var s,a=function(){if(e.matchesSelector)return"matchesSelector";for(var t=["webkit","moz","ms","o"],i=0,n=t.length;n>i;i++){var o=t[i],r=o+"MatchesSelector";if(e[r])return r}}();if(a){var h=document.createElement("div"),p=i(h,"div");s=p?i:r}else s=o;"function"==typeof define&&define.amd?define("matches-selector/matches-selector",[],function(){return s}):window.matchesSelector=s}(this,Element.prototype),function(t){function e(t,e){for(var i in e)t[i]=e[i];return t}function i(t){for(var e in t)return!1;return e=null,!0}function n(t){return t.replace(/([A-Z])/g,function(t){return"-"+t.toLowerCase()})}function o(t,o,r){function a(t,e){t&&(this.element=t,this.layout=e,this.position={x:0,y:0},this._create())}var h=r("transition"),p=r("transform"),u=h&&p,f=!!r("perspective"),c={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend",transition:"transitionend"}[h],d=["transform","transition","transitionDuration","transitionProperty"],l=function(){for(var t={},e=0,i=d.length;i>e;e++){var n=d[e],o=r(n);o&&o!==n&&(t[n]=o)}return t}();e(a.prototype,t.prototype),a.prototype._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},a.prototype.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},a.prototype.getSize=function(){this.size=o(this.element)},a.prototype.css=function(t){var e=this.element.style;for(var i in t){var n=l[i]||i;e[n]=t[i]}},a.prototype.getPosition=function(){var t=s(this.element),e=this.layout.options,i=e.isOriginLeft,n=e.isOriginTop,o=parseInt(t[i?"left":"right"],10),r=parseInt(t[n?"top":"bottom"],10);o=isNaN(o)?0:o,r=isNaN(r)?0:r;var a=this.layout.size;o-=i?a.paddingLeft:a.paddingRight,r-=n?a.paddingTop:a.paddingBottom,this.position.x=o,this.position.y=r},a.prototype.layoutPosition=function(){var t=this.layout.size,e=this.layout.options,i={};e.isOriginLeft?(i.left=this.position.x+t.paddingLeft+"px",i.right=""):(i.right=this.position.x+t.paddingRight+"px",i.left=""),e.isOriginTop?(i.top=this.position.y+t.paddingTop+"px",i.bottom=""):(i.bottom=this.position.y+t.paddingBottom+"px",i.top=""),this.css(i),this.emitEvent("layout",[this])};var m=f?function(t,e){return"translate3d("+t+"px, "+e+"px, 0)"}:function(t,e){return"translate("+t+"px, "+e+"px)"};a.prototype._transitionTo=function(t,e){this.getPosition();var i=this.position.x,n=this.position.y,o=parseInt(t,10),r=parseInt(e,10),s=o===this.position.x&&r===this.position.y;if(this.setPosition(t,e),s&&!this.isTransitioning)return this.layoutPosition(),void 0;var a=t-i,h=e-n,p={},u=this.layout.options;a=u.isOriginLeft?a:-a,h=u.isOriginTop?h:-h,p.transform=m(a,h),this.transition({to:p,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},a.prototype.goTo=function(t,e){this.setPosition(t,e),this.layoutPosition()},a.prototype.moveTo=u?a.prototype._transitionTo:a.prototype.goTo,a.prototype.setPosition=function(t,e){this.position.x=parseInt(t,10),this.position.y=parseInt(e,10)},a.prototype._nonTransition=function(t){this.css(t.to),t.isCleaning&&this._removeStyles(t.to);for(var e in t.onTransitionEnd)t.onTransitionEnd[e].call(this)},a.prototype._transition=function(t){if(!parseFloat(this.layout.options.transitionDuration))return this._nonTransition(t),void 0;var e=this._transn;for(var i in t.onTransitionEnd)e.onEnd[i]=t.onTransitionEnd[i];for(i in t.to)e.ingProperties[i]=!0,t.isCleaning&&(e.clean[i]=!0);if(t.from){this.css(t.from);var n=this.element.offsetHeight;n=null}this.enableTransition(t.to),this.css(t.to),this.isTransitioning=!0};var y=p&&n(p)+",opacity";a.prototype.enableTransition=function(){this.isTransitioning||(this.css({transitionProperty:y,transitionDuration:this.layout.options.transitionDuration}),this.element.addEventListener(c,this,!1))},a.prototype.transition=a.prototype[h?"_transition":"_nonTransition"],a.prototype.onwebkitTransitionEnd=function(t){this.ontransitionend(t)},a.prototype.onotransitionend=function(t){this.ontransitionend(t)};var g={"-webkit-transform":"transform","-moz-transform":"transform","-o-transform":"transform"};a.prototype.ontransitionend=function(t){if(t.target===this.element){var e=this._transn,n=g[t.propertyName]||t.propertyName;if(delete e.ingProperties[n],i(e.ingProperties)&&this.disableTransition(),n in e.clean&&(this.element.style[t.propertyName]="",delete e.clean[n]),n in e.onEnd){var o=e.onEnd[n];o.call(this),delete e.onEnd[n]}this.emitEvent("transitionEnd",[this])}},a.prototype.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(c,this,!1),this.isTransitioning=!1},a.prototype._removeStyles=function(t){var e={};for(var i in t)e[i]="";this.css(e)};var v={transitionProperty:"",transitionDuration:""};return a.prototype.removeTransitionStyles=function(){this.css(v)},a.prototype.removeElem=function(){this.element.parentNode.removeChild(this.element),this.emitEvent("remove",[this])},a.prototype.remove=function(){if(!h||!parseFloat(this.layout.options.transitionDuration))return this.removeElem(),void 0;var t=this;this.on("transitionEnd",function(){return t.removeElem(),!0}),this.hide()},a.prototype.reveal=function(){delete this.isHidden,this.css({display:""});var t=this.layout.options;this.transition({from:t.hiddenStyle,to:t.visibleStyle,isCleaning:!0})},a.prototype.hide=function(){this.isHidden=!0,this.css({display:""});var t=this.layout.options;this.transition({from:t.visibleStyle,to:t.hiddenStyle,isCleaning:!0,onTransitionEnd:{opacity:function(){this.isHidden&&this.css({display:"none"})}}})},a.prototype.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},a}var r=document.defaultView,s=r&&r.getComputedStyle?function(t){return r.getComputedStyle(t,null)}:function(t){return t.currentStyle};"function"==typeof define&&define.amd?define("outlayer/item",["eventEmitter/EventEmitter","get-size/get-size","get-style-property/get-style-property"],o):(t.Outlayer={},t.Outlayer.Item=o(t.EventEmitter,t.getSize,t.getStyleProperty))}(window),function(t){function e(t,e){for(var i in e)t[i]=e[i];return t}function i(t){return"[object Array]"===f.call(t)}function n(t){var e=[];if(i(t))e=t;else if(t&&"number"==typeof t.length)for(var n=0,o=t.length;o>n;n++)e.push(t[n]);else e.push(t);return e}function o(t,e){var i=d(e,t);-1!==i&&e.splice(i,1)}function r(t){return t.replace(/(.)([A-Z])/g,function(t,e,i){return e+"-"+i}).toLowerCase()}function s(i,s,f,d,l,m){function y(t,i){if("string"==typeof t&&(t=a.querySelector(t)),!t||!c(t))return h&&h.error("Bad "+this.constructor.namespace+" element: "+t),void 0;this.element=t,this.options=e({},this.options),this.option(i);var n=++v;this.element.outlayerGUID=n,b[n]=this,this._create(),this.options.isInitLayout&&this.layout()}function g(t,i){t.prototype[i]=e({},y.prototype[i])}var v=0,b={};return y.namespace="outlayer",y.Item=m,y.prototype.options={containerStyle:{position:"relative"},isInitLayout:!0,isOriginLeft:!0,isOriginTop:!0,isResizeBound:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}},e(y.prototype,f.prototype),y.prototype.option=function(t){e(this.options,t)},y.prototype._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),e(this.element.style,this.options.containerStyle),this.options.isResizeBound&&this.bindResize()},y.prototype.reloadItems=function(){this.items=this._itemize(this.element.children)},y.prototype._itemize=function(t){for(var e=this._filterFindItemElements(t),i=this.constructor.Item,n=[],o=0,r=e.length;r>o;o++){var s=e[o],a=new i(s,this);n.push(a)}return n},y.prototype._filterFindItemElements=function(t){t=n(t);for(var e=this.options.itemSelector,i=[],o=0,r=t.length;r>o;o++){var s=t[o];if(c(s))if(e){l(s,e)&&i.push(s);for(var a=s.querySelectorAll(e),h=0,p=a.length;p>h;h++)i.push(a[h])}else i.push(s)}return i},y.prototype.getItemElements=function(){for(var t=[],e=0,i=this.items.length;i>e;e++)t.push(this.items[e].element);return t},y.prototype.layout=function(){this._resetLayout(),this._manageStamps();var t=void 0!==this.options.isLayoutInstant?this.options.isLayoutInstant:!this._isLayoutInited;this.layoutItems(this.items,t),this._isLayoutInited=!0},y.prototype._init=y.prototype.layout,y.prototype._resetLayout=function(){this.getSize()},y.prototype.getSize=function(){this.size=d(this.element)},y.prototype._getMeasurement=function(t,e){var i,n=this.options[t];n?("string"==typeof n?i=this.element.querySelector(n):c(n)&&(i=n),this[t]=i?d(i)[e]:n):this[t]=0},y.prototype.layoutItems=function(t,e){t=this._getItemsForLayout(t),this._layoutItems(t,e),this._postLayout()},y.prototype._getItemsForLayout=function(t){for(var e=[],i=0,n=t.length;n>i;i++){var o=t[i];o.isIgnored||e.push(o)}return e},y.prototype._layoutItems=function(t,e){function i(){n.emitEvent("layoutComplete",[n,t])}var n=this;if(!t||!t.length)return i(),void 0;this._itemsOn(t,"layout",i);for(var o=[],r=0,s=t.length;s>r;r++){var a=t[r],h=this._getItemLayoutPosition(a);h.item=a,h.isInstant=e||a.isLayoutInstant,o.push(h)}this._processLayoutQueue(o)},y.prototype._getItemLayoutPosition=function(){return{x:0,y:0}},y.prototype._processLayoutQueue=function(t){for(var e=0,i=t.length;i>e;e++){var n=t[e];this._positionItem(n.item,n.x,n.y,n.isInstant)}},y.prototype._positionItem=function(t,e,i,n){n?t.goTo(e,i):t.moveTo(e,i)},y.prototype._postLayout=function(){var t=this._getContainerSize();t&&(this._setContainerMeasure(t.width,!0),this._setContainerMeasure(t.height,!1))},y.prototype._getContainerSize=u,y.prototype._setContainerMeasure=function(t,e){if(void 0!==t){var i=this.size;i.isBorderBox&&(t+=e?i.paddingLeft+i.paddingRight+i.borderLeftWidth+i.borderRightWidth:i.paddingBottom+i.paddingTop+i.borderTopWidth+i.borderBottomWidth),t=Math.max(t,0),this.element.style[e?"width":"height"]=t+"px"}},y.prototype._itemsOn=function(t,e,i){function n(){return o++,o===r&&i.call(s),!0}for(var o=0,r=t.length,s=this,a=0,h=t.length;h>a;a++){var p=t[a];p.on(e,n)}},y.prototype.ignore=function(t){var e=this.getItem(t);e&&(e.isIgnored=!0)},y.prototype.unignore=function(t){var e=this.getItem(t);e&&delete e.isIgnored},y.prototype.stamp=function(t){if(t=this._find(t)){this.stamps=this.stamps.concat(t);for(var e=0,i=t.length;i>e;e++){var n=t[e];this.ignore(n)}}},y.prototype.unstamp=function(t){if(t=this._find(t))for(var e=0,i=t.length;i>e;e++){var n=t[e];o(n,this.stamps),this.unignore(n)}},y.prototype._find=function(t){return t?("string"==typeof t&&(t=this.element.querySelectorAll(t)),t=n(t)):void 0},y.prototype._manageStamps=function(){if(this.stamps&&this.stamps.length){this._getBoundingRect();for(var t=0,e=this.stamps.length;e>t;t++){var i=this.stamps[t];this._manageStamp(i)}}},y.prototype._getBoundingRect=function(){var t=this.element.getBoundingClientRect(),e=this.size;this._boundingRect={left:t.left+e.paddingLeft+e.borderLeftWidth,top:t.top+e.paddingTop+e.borderTopWidth,right:t.right-(e.paddingRight+e.borderRightWidth),bottom:t.bottom-(e.paddingBottom+e.borderBottomWidth)}},y.prototype._manageStamp=u,y.prototype._getElementOffset=function(t){var e=t.getBoundingClientRect(),i=this._boundingRect,n=d(t),o={left:e.left-i.left-n.marginLeft,top:e.top-i.top-n.marginTop,right:i.right-e.right-n.marginRight,bottom:i.bottom-e.bottom-n.marginBottom};return o},y.prototype.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},y.prototype.bindResize=function(){this.isResizeBound||(i.bind(t,"resize",this),this.isResizeBound=!0)},y.prototype.unbindResize=function(){i.unbind(t,"resize",this),this.isResizeBound=!1},y.prototype.onresize=function(){function t(){e.resize(),delete e.resizeTimeout}this.resizeTimeout&&clearTimeout(this.resizeTimeout);var e=this;this.resizeTimeout=setTimeout(t,100)},y.prototype.resize=function(){var t=d(this.element),e=this.size&&t;e&&t.innerWidth===this.size.innerWidth||this.layout()},y.prototype.addItems=function(t){var e=this._itemize(t);return e.length&&(this.items=this.items.concat(e)),e},y.prototype.appended=function(t){var e=this.addItems(t);e.length&&(this.layoutItems(e,!0),this.reveal(e))},y.prototype.prepended=function(t){var e=this._itemize(t);if(e.length){var i=this.items.slice(0);this.items=e.concat(i),this._resetLayout(),this._manageStamps(),this.layoutItems(e,!0),this.reveal(e),this.layoutItems(i)}},y.prototype.reveal=function(t){var e=t&&t.length;if(e)for(var i=0;e>i;i++){var n=t[i];n.reveal()}},y.prototype.hide=function(t){var e=t&&t.length;if(e)for(var i=0;e>i;i++){var n=t[i];n.hide()}},y.prototype.getItem=function(t){for(var e=0,i=this.items.length;i>e;e++){var n=this.items[e];if(n.element===t)return n}},y.prototype.getItems=function(t){if(t&&t.length){for(var e=[],i=0,n=t.length;n>i;i++){var o=t[i],r=this.getItem(o);r&&e.push(r)}return e}},y.prototype.remove=function(t){t=n(t);var e=this.getItems(t);if(e&&e.length){this._itemsOn(e,"remove",function(){this.emitEvent("removeComplete",[this,e])});for(var i=0,r=e.length;r>i;i++){var s=e[i];s.remove(),o(s,this.items)}}},y.prototype.destroy=function(){var t=this.element.style;t.height="",t.position="",t.width="";for(var e=0,i=this.items.length;i>e;e++){var n=this.items[e];n.destroy()}this.unbindResize(),delete this.element.outlayerGUID,p&&p.removeData(this.element,this.constructor.namespace)},y.data=function(t){var e=t&&t.outlayerGUID;return e&&b[e]},y.create=function(t,i){function n(){y.apply(this,arguments)}return Object.create?n.prototype=Object.create(y.prototype):e(n.prototype,y.prototype),n.prototype.constructor=n,g(n,"options"),e(n.prototype.options,i),n.namespace=t,n.data=y.data,n.Item=function(){m.apply(this,arguments)},n.Item.prototype=new m,s(function(){for(var e=r(t),i=a.querySelectorAll(".js-"+e),o="data-"+e+"-options",s=0,u=i.length;u>s;s++){var f,c=i[s],d=c.getAttribute(o);try{f=d&&JSON.parse(d)}catch(l){h&&h.error("Error parsing "+o+" on "+c.nodeName.toLowerCase()+(c.id?"#"+c.id:"")+": "+l);continue}var m=new n(c,f);p&&p.data(c,t,m)}}),p&&p.bridget&&p.bridget(t,n),n},y.Item=m,y}var a=t.document,h=t.console,p=t.jQuery,u=function(){},f=Object.prototype.toString,c="object"==typeof HTMLElement?function(t){return t instanceof HTMLElement}:function(t){return t&&"object"==typeof t&&1===t.nodeType&&"string"==typeof t.nodeName},d=Array.prototype.indexOf?function(t,e){return t.indexOf(e)}:function(t,e){for(var i=0,n=t.length;n>i;i++)if(t[i]===e)return i;return-1};"function"==typeof define&&define.amd?define("outlayer/outlayer",["eventie/eventie","doc-ready/doc-ready","eventEmitter/EventEmitter","get-size/get-size","matches-selector/matches-selector","./item"],s):t.Outlayer=s(t.eventie,t.docReady,t.EventEmitter,t.getSize,t.matchesSelector,t.Outlayer.Item)}(window),function(t){function e(t,e){var n=t.create("masonry");return n.prototype._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns();var t=this.cols;for(this.colYs=[];t--;)this.colYs.push(0);this.maxY=0},n.prototype.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var t=this.items[0],i=t&&t.element;this.columnWidth=i&&e(i).outerWidth||this.containerWidth}this.columnWidth+=this.gutter,this.cols=Math.floor((this.containerWidth+this.gutter)/this.columnWidth),this.cols=Math.max(this.cols,1)},n.prototype.getContainerWidth=function(){var t=this.options.isFitWidth?this.element.parentNode:this.element,i=e(t);this.containerWidth=i&&i.innerWidth},n.prototype._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,n=e&&1>e?"round":"ceil",o=Math[n](t.size.outerWidth/this.columnWidth);o=Math.min(o,this.cols);for(var r=this._getColGroup(o),s=Math.min.apply(Math,r),a=i(r,s),h={x:this.columnWidth*a,y:s},p=s+t.size.outerHeight,u=this.cols+1-r.length,f=0;u>f;f++)this.colYs[a+f]=p;return h},n.prototype._getColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++){var o=this.colYs.slice(n,n+t);e[n]=Math.max.apply(Math,o)}return e},n.prototype._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this.options.isOriginLeft?n.left:n.right,r=o+i.outerWidth,s=Math.floor(o/this.columnWidth);s=Math.max(0,s);var a=Math.floor(r/this.columnWidth);a-=r%this.columnWidth?0:1,a=Math.min(this.cols-1,a);for(var h=(this.options.isOriginTop?n.top:n.bottom)+i.outerHeight,p=s;a>=p;p++)this.colYs[p]=Math.max(h,this.colYs[p])},n.prototype._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this.options.isFitWidth&&(t.width=this._getContainerFitWidth()),t},n.prototype._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},n.prototype.resize=function(){var t=this.containerWidth;this.getContainerWidth(),t!==this.containerWidth&&this.layout()},n}var i=Array.prototype.indexOf?function(t,e){return t.indexOf(e)}:function(t,e){for(var i=0,n=t.length;n>i;i++){var o=t[i];if(o===e)return i}return-1};"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size"],e):t.Masonry=e(t.Outlayer,t.getSize)}(window); \ No newline at end of file diff --git a/src/main/resources/static/gallery/js/jq/modernizr.custom.js b/src/main/resources/static/gallery/js/jq/modernizr.custom.js new file mode 100644 index 0000000..8c3d405 --- /dev/null +++ b/src/main/resources/static/gallery/js/jq/modernizr.custom.js @@ -0,0 +1,4 @@ +/* Modernizr 2.7.1 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-csstransforms3d-csstransitions-shiv-cssclasses-prefixed-teststyles-testprop-testallprops-prefixes-domprefixes-load + */ +;window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.7.1",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},q.csstransitions=function(){return F("transition")};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,e.prefixed=function(a,b,c){return b?F(a,b,c):F(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f 0 ? 1-Math.abs(this.options.imgPosition.x) : Math.abs(this.options.imgPosition.x)) * win.width + this.options.imgPosition.x * win.width/2) - gridImgOffset.left - 0.5 * gridImg.offsetWidth, + dy = ((this.options.imgPosition.y > 0 ? 1-Math.abs(this.options.imgPosition.y) : Math.abs(this.options.imgPosition.y)) * win.height + this.options.imgPosition.y * win.height/2) - gridImgOffset.top - 0.5 * gridImg.offsetHeight, + z = Math.min( Math.min(win.width*Math.abs(this.options.imgPosition.x) - this.options.pagemargin, originalSize.width - this.options.pagemargin)/gridImg.offsetWidth, Math.min(win.height*Math.abs(this.options.imgPosition.y) - this.options.pagemargin, originalSize.height - this.options.pagemargin)/gridImg.offsetHeight ); + + // apply transform to the clone + this.cloneImg.style.WebkitTransform = 'translate3d(' + dx + 'px, ' + dy + 'px, 0) scale3d(' + z + ', ' + z + ', 1)'; + this.cloneImg.style.transform = 'translate3d(' + dx + 'px, ' + dy + 'px, 0) scale3d(' + z + ', ' + z + ', 1)'; + + // add the description if any + var descriptionEl = item.querySelector('.description'); + if( descriptionEl ) { + this.previewDescriptionEl.innerHTML = descriptionEl.innerHTML; + } + + var self = this; + setTimeout(function() { + // controls the elements inside the expanded view + classie.add(self.previewEl, 'preview--open'); + // callback + self.options.onExpand(); + }, 0); + + // after the clone animates.. + onEndTransition(this.cloneImg, function() { + // when the original/large image is loaded.. + imagesLoaded(self.originalImg, function() { + // close button just gets shown after the large image gets loaded + classie.add(self.previewEl, 'preview--image-loaded'); + // animate the opacity to 1 + self.originalImg.style.opacity = 1; + // and once that's done.. + onEndTransition(self.originalImg, function() { + // reset cloneImg + self.cloneImg.style.opacity = 0; + self.cloneImg.style.WebkitTransform = 'translate3d(0,0,0) scale3d(1,1,1)'; + self.cloneImg.style.transform = 'translate3d(0,0,0) scale3d(1,1,1)'; + + self.isAnimating = false; + }); + + }); + }); + }; + + /** + * create/set the original/large image element + */ + GridFx.prototype._setOriginal = function(src) { + if( !src ) { + this.originalImg = document.createElement('img'); + this.originalImg.className = 'original'; + this.originalImg.style.opacity = 0; + this.originalImg.style.maxWidth = 'calc(' + parseInt(Math.abs(this.options.imgPosition.x)*100) + 'vw - ' + this.options.pagemargin + 'px)'; + this.originalImg.style.maxHeight = 'calc(' + parseInt(Math.abs(this.options.imgPosition.y)*100) + 'vh - ' + this.options.pagemargin + 'px)'; + // need it because of firefox + this.originalImg.style.WebkitTransform = 'translate3d(0,0,0) scale3d(1,1,1)'; + this.originalImg.style.transform = 'translate3d(0,0,0) scale3d(1,1,1)'; + src = ''; + this.previewEl.appendChild(this.originalImg); + } + + this.originalImg.setAttribute('src', src); + }; + + /** + * create/set the clone image element + */ + GridFx.prototype._setClone = function(src, settings) { + if( !src ) { + this.cloneImg = document.createElement('img'); + this.cloneImg.className = 'clone'; + src = ''; + this.cloneImg.style.opacity = 0; + this.previewEl.appendChild(this.cloneImg); + } + else { + this.cloneImg.style.opacity = 1; + // set top/left/width/height of grid item's image to the clone + this.cloneImg.style.width = settings.width + 'px'; + this.cloneImg.style.height = settings.height + 'px'; + this.cloneImg.style.top = settings.top + 'px'; + this.cloneImg.style.left = settings.left + 'px'; + } + + this.cloneImg.setAttribute('src', src); + }; + + /** + * closes the original/large image view + */ + GridFx.prototype._closeItem = function() { + if( !this.isExpanded || this.isAnimating ) return; + this.isExpanded = false; + this.isAnimating = true; + + // the grid item's image and its offset + var gridItem = this.items[this.current], + gridImg = gridItem.querySelector('img'), + gridImgOffset = gridImg.getBoundingClientRect(), + self = this; + + classie.remove(this.previewEl, 'preview--open'); + classie.remove(this.previewEl, 'preview--image-loaded'); + + // callback + this.options.onCloseItem(this, gridItem); + + // large image will animate back to the position of its grid's item + classie.add(this.originalImg, 'animate'); + + // set the transform to the original/large image + var win = this._getWinSize(), + dx = gridImgOffset.left + gridImg.offsetWidth/2 - ((this.options.imgPosition.x > 0 ? 1-Math.abs(this.options.imgPosition.x) : Math.abs(this.options.imgPosition.x)) * win.width + this.options.imgPosition.x * win.width/2), + dy = gridImgOffset.top + gridImg.offsetHeight/2 - ((this.options.imgPosition.y > 0 ? 1-Math.abs(this.options.imgPosition.y) : Math.abs(this.options.imgPosition.y)) * win.height + this.options.imgPosition.y * win.height/2), + z = gridImg.offsetWidth/this.originalImg.offsetWidth; + + this.originalImg.style.WebkitTransform = 'translate3d(' + dx + 'px, ' + dy + 'px, 0) scale3d(' + z + ', ' + z + ', 1)'; + this.originalImg.style.transform = 'translate3d(' + dx + 'px, ' + dy + 'px, 0) scale3d(' + z + ', ' + z + ', 1)'; + + // once that's done.. + onEndTransition(this.originalImg, function() { + // clear description + self.previewDescriptionEl.innerHTML = ''; + + // show original grid item + classie.remove(gridItem, 'grid__item--current'); + + // fade out the original image + setTimeout(function() { self.originalImg.style.opacity = 0; }, 60); + + // and after that + onEndTransition(self.originalImg, function() { + // reset original/large image + classie.remove(self.originalImg, 'animate'); + self.originalImg.style.WebkitTransform = 'translate3d(0,0,0) scale3d(1,1,1)'; + self.originalImg.style.transform = 'translate3d(0,0,0) scale3d(1,1,1)'; + + self.isAnimating = false; + }); + }); + }; + + /** + * gets the window sizes + */ + GridFx.prototype._getWinSize = function() { + return { + width: document.documentElement.clientWidth, + height: window.innerHeight + }; + }; + + window.GridFx = GridFx; + +})(window); \ No newline at end of file diff --git a/src/main/resources/static/gallery/js/masonry.pkgd.min.js b/src/main/resources/static/gallery/js/masonry.pkgd.min.js new file mode 100644 index 0000000..f3328c5 --- /dev/null +++ b/src/main/resources/static/gallery/js/masonry.pkgd.min.js @@ -0,0 +1,9 @@ +/*! + * Masonry PACKAGED v3.3.2 + * Cascading grid layout library + * http://masonry.desandro.com + * MIT License + * by David DeSandro + */ + +!function(a){function b(){}function c(a){function c(b){b.prototype.option||(b.prototype.option=function(b){a.isPlainObject(b)&&(this.options=a.extend(!0,this.options,b))})}function e(b,c){a.fn[b]=function(e){if("string"==typeof e){for(var g=d.call(arguments,1),h=0,i=this.length;i>h;h++){var j=this[h],k=a.data(j,b);if(k)if(a.isFunction(k[e])&&"_"!==e.charAt(0)){var l=k[e].apply(k,g);if(void 0!==l)return l}else f("no such method '"+e+"' for "+b+" instance");else f("cannot call methods on "+b+" prior to initialization; attempted to call '"+e+"'")}return this}return this.each(function(){var d=a.data(this,b);d?(d.option(e),d._init()):(d=new c(this,e),a.data(this,b,d))})}}if(a){var f="undefined"==typeof console?b:function(a){console.error(a)};return a.bridget=function(a,b){c(b),e(a,b)},a.bridget}}var d=Array.prototype.slice;"function"==typeof define&&define.amd?define("jquery-bridget/jquery.bridget",["jquery"],c):c("object"==typeof exports?require("jquery"):a.jQuery)}(window),function(a){function b(b){var c=a.event;return c.target=c.target||c.srcElement||b,c}var c=document.documentElement,d=function(){};c.addEventListener?d=function(a,b,c){a.addEventListener(b,c,!1)}:c.attachEvent&&(d=function(a,c,d){a[c+d]=d.handleEvent?function(){var c=b(a);d.handleEvent.call(d,c)}:function(){var c=b(a);d.call(a,c)},a.attachEvent("on"+c,a[c+d])});var e=function(){};c.removeEventListener?e=function(a,b,c){a.removeEventListener(b,c,!1)}:c.detachEvent&&(e=function(a,b,c){a.detachEvent("on"+b,a[b+c]);try{delete a[b+c]}catch(d){a[b+c]=void 0}});var f={bind:d,unbind:e};"function"==typeof define&&define.amd?define("eventie/eventie",f):"object"==typeof exports?module.exports=f:a.eventie=f}(window),function(){function a(){}function b(a,b){for(var c=a.length;c--;)if(a[c].listener===b)return c;return-1}function c(a){return function(){return this[a].apply(this,arguments)}}var d=a.prototype,e=this,f=e.EventEmitter;d.getListeners=function(a){var b,c,d=this._getEvents();if(a instanceof RegExp){b={};for(c in d)d.hasOwnProperty(c)&&a.test(c)&&(b[c]=d[c])}else b=d[a]||(d[a]=[]);return b},d.flattenListeners=function(a){var b,c=[];for(b=0;be;e++)if(b=c[e]+a,"string"==typeof d[b])return b}}var c="Webkit Moz ms Ms O".split(" "),d=document.documentElement.style;"function"==typeof define&&define.amd?define("get-style-property/get-style-property",[],function(){return b}):"object"==typeof exports?module.exports=b:a.getStyleProperty=b}(window),function(a){function b(a){var b=parseFloat(a),c=-1===a.indexOf("%")&&!isNaN(b);return c&&b}function c(){}function d(){for(var a={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},b=0,c=g.length;c>b;b++){var d=g[b];a[d]=0}return a}function e(c){function e(){if(!m){m=!0;var d=a.getComputedStyle;if(j=function(){var a=d?function(a){return d(a,null)}:function(a){return a.currentStyle};return function(b){var c=a(b);return c||f("Style returned "+c+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),c}}(),k=c("boxSizing")){var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style[k]="border-box";var g=document.body||document.documentElement;g.appendChild(e);var h=j(e);l=200===b(h.width),g.removeChild(e)}}}function h(a){if(e(),"string"==typeof a&&(a=document.querySelector(a)),a&&"object"==typeof a&&a.nodeType){var c=j(a);if("none"===c.display)return d();var f={};f.width=a.offsetWidth,f.height=a.offsetHeight;for(var h=f.isBorderBox=!(!k||!c[k]||"border-box"!==c[k]),m=0,n=g.length;n>m;m++){var o=g[m],p=c[o];p=i(a,p);var q=parseFloat(p);f[o]=isNaN(q)?0:q}var r=f.paddingLeft+f.paddingRight,s=f.paddingTop+f.paddingBottom,t=f.marginLeft+f.marginRight,u=f.marginTop+f.marginBottom,v=f.borderLeftWidth+f.borderRightWidth,w=f.borderTopWidth+f.borderBottomWidth,x=h&&l,y=b(c.width);y!==!1&&(f.width=y+(x?0:r+v));var z=b(c.height);return z!==!1&&(f.height=z+(x?0:s+w)),f.innerWidth=f.width-(r+v),f.innerHeight=f.height-(s+w),f.outerWidth=f.width+t,f.outerHeight=f.height+u,f}}function i(b,c){if(a.getComputedStyle||-1===c.indexOf("%"))return c;var d=b.style,e=d.left,f=b.runtimeStyle,g=f&&f.left;return g&&(f.left=b.currentStyle.left),d.left=c,c=d.pixelLeft,d.left=e,g&&(f.left=g),c}var j,k,l,m=!1;return h}var f="undefined"==typeof console?c:function(a){console.error(a)},g=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"];"function"==typeof define&&define.amd?define("get-size/get-size",["get-style-property/get-style-property"],e):"object"==typeof exports?module.exports=e(require("desandro-get-style-property")):a.getSize=e(a.getStyleProperty)}(window),function(a){function b(a){"function"==typeof a&&(b.isReady?a():g.push(a))}function c(a){var c="readystatechange"===a.type&&"complete"!==f.readyState;b.isReady||c||d()}function d(){b.isReady=!0;for(var a=0,c=g.length;c>a;a++){var d=g[a];d()}}function e(e){return"complete"===f.readyState?d():(e.bind(f,"DOMContentLoaded",c),e.bind(f,"readystatechange",c),e.bind(a,"load",c)),b}var f=a.document,g=[];b.isReady=!1,"function"==typeof define&&define.amd?define("doc-ready/doc-ready",["eventie/eventie"],e):"object"==typeof exports?module.exports=e(require("eventie")):a.docReady=e(a.eventie)}(window),function(a){function b(a,b){return a[g](b)}function c(a){if(!a.parentNode){var b=document.createDocumentFragment();b.appendChild(a)}}function d(a,b){c(a);for(var d=a.parentNode.querySelectorAll(b),e=0,f=d.length;f>e;e++)if(d[e]===a)return!0;return!1}function e(a,d){return c(a),b(a,d)}var f,g=function(){if(a.matches)return"matches";if(a.matchesSelector)return"matchesSelector";for(var b=["webkit","moz","ms","o"],c=0,d=b.length;d>c;c++){var e=b[c],f=e+"MatchesSelector";if(a[f])return f}}();if(g){var h=document.createElement("div"),i=b(h,"div");f=i?b:e}else f=d;"function"==typeof define&&define.amd?define("matches-selector/matches-selector",[],function(){return f}):"object"==typeof exports?module.exports=f:window.matchesSelector=f}(Element.prototype),function(a,b){"function"==typeof define&&define.amd?define("fizzy-ui-utils/utils",["doc-ready/doc-ready","matches-selector/matches-selector"],function(c,d){return b(a,c,d)}):"object"==typeof exports?module.exports=b(a,require("doc-ready"),require("desandro-matches-selector")):a.fizzyUIUtils=b(a,a.docReady,a.matchesSelector)}(window,function(a,b,c){var d={};d.extend=function(a,b){for(var c in b)a[c]=b[c];return a},d.modulo=function(a,b){return(a%b+b)%b};var e=Object.prototype.toString;d.isArray=function(a){return"[object Array]"==e.call(a)},d.makeArray=function(a){var b=[];if(d.isArray(a))b=a;else if(a&&"number"==typeof a.length)for(var c=0,e=a.length;e>c;c++)b.push(a[c]);else b.push(a);return b},d.indexOf=Array.prototype.indexOf?function(a,b){return a.indexOf(b)}:function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},d.removeFrom=function(a,b){var c=d.indexOf(a,b);-1!=c&&a.splice(c,1)},d.isElement="function"==typeof HTMLElement||"object"==typeof HTMLElement?function(a){return a instanceof HTMLElement}:function(a){return a&&"object"==typeof a&&1==a.nodeType&&"string"==typeof a.nodeName},d.setText=function(){function a(a,c){b=b||(void 0!==document.documentElement.textContent?"textContent":"innerText"),a[b]=c}var b;return a}(),d.getParent=function(a,b){for(;a!=document.body;)if(a=a.parentNode,c(a,b))return a},d.getQueryElement=function(a){return"string"==typeof a?document.querySelector(a):a},d.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},d.filterFindElements=function(a,b){a=d.makeArray(a);for(var e=[],f=0,g=a.length;g>f;f++){var h=a[f];if(d.isElement(h))if(b){c(h,b)&&e.push(h);for(var i=h.querySelectorAll(b),j=0,k=i.length;k>j;j++)e.push(i[j])}else e.push(h)}return e},d.debounceMethod=function(a,b,c){var d=a.prototype[b],e=b+"Timeout";a.prototype[b]=function(){var a=this[e];a&&clearTimeout(a);var b=arguments,f=this;this[e]=setTimeout(function(){d.apply(f,b),delete f[e]},c||100)}},d.toDashed=function(a){return a.replace(/(.)([A-Z])/g,function(a,b,c){return b+"-"+c}).toLowerCase()};var f=a.console;return d.htmlInit=function(c,e){b(function(){for(var b=d.toDashed(e),g=document.querySelectorAll(".js-"+b),h="data-"+b+"-options",i=0,j=g.length;j>i;i++){var k,l=g[i],m=l.getAttribute(h);try{k=m&&JSON.parse(m)}catch(n){f&&f.error("Error parsing "+h+" on "+l.nodeName.toLowerCase()+(l.id?"#"+l.id:"")+": "+n);continue}var o=new c(l,k),p=a.jQuery;p&&p.data(l,e,o)}})},d}),function(a,b){"function"==typeof define&&define.amd?define("outlayer/item",["eventEmitter/EventEmitter","get-size/get-size","get-style-property/get-style-property","fizzy-ui-utils/utils"],function(c,d,e,f){return b(a,c,d,e,f)}):"object"==typeof exports?module.exports=b(a,require("wolfy87-eventemitter"),require("get-size"),require("desandro-get-style-property"),require("fizzy-ui-utils")):(a.Outlayer={},a.Outlayer.Item=b(a,a.EventEmitter,a.getSize,a.getStyleProperty,a.fizzyUIUtils))}(window,function(a,b,c,d,e){function f(a){for(var b in a)return!1;return b=null,!0}function g(a,b){a&&(this.element=a,this.layout=b,this.position={x:0,y:0},this._create())}function h(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}var i=a.getComputedStyle,j=i?function(a){return i(a,null)}:function(a){return a.currentStyle},k=d("transition"),l=d("transform"),m=k&&l,n=!!d("perspective"),o={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend",transition:"transitionend"}[k],p=["transform","transition","transitionDuration","transitionProperty"],q=function(){for(var a={},b=0,c=p.length;c>b;b++){var e=p[b],f=d(e);f&&f!==e&&(a[e]=f)}return a}();e.extend(g.prototype,b.prototype),g.prototype._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},g.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},g.prototype.getSize=function(){this.size=c(this.element)},g.prototype.css=function(a){var b=this.element.style;for(var c in a){var d=q[c]||c;b[d]=a[c]}},g.prototype.getPosition=function(){var a=j(this.element),b=this.layout.options,c=b.isOriginLeft,d=b.isOriginTop,e=a[c?"left":"right"],f=a[d?"top":"bottom"],g=this.layout.size,h=-1!=e.indexOf("%")?parseFloat(e)/100*g.width:parseInt(e,10),i=-1!=f.indexOf("%")?parseFloat(f)/100*g.height:parseInt(f,10);h=isNaN(h)?0:h,i=isNaN(i)?0:i,h-=c?g.paddingLeft:g.paddingRight,i-=d?g.paddingTop:g.paddingBottom,this.position.x=h,this.position.y=i},g.prototype.layoutPosition=function(){var a=this.layout.size,b=this.layout.options,c={},d=b.isOriginLeft?"paddingLeft":"paddingRight",e=b.isOriginLeft?"left":"right",f=b.isOriginLeft?"right":"left",g=this.position.x+a[d];c[e]=this.getXValue(g),c[f]="";var h=b.isOriginTop?"paddingTop":"paddingBottom",i=b.isOriginTop?"top":"bottom",j=b.isOriginTop?"bottom":"top",k=this.position.y+a[h];c[i]=this.getYValue(k),c[j]="",this.css(c),this.emitEvent("layout",[this])},g.prototype.getXValue=function(a){var b=this.layout.options;return b.percentPosition&&!b.isHorizontal?a/this.layout.size.width*100+"%":a+"px"},g.prototype.getYValue=function(a){var b=this.layout.options;return b.percentPosition&&b.isHorizontal?a/this.layout.size.height*100+"%":a+"px"},g.prototype._transitionTo=function(a,b){this.getPosition();var c=this.position.x,d=this.position.y,e=parseInt(a,10),f=parseInt(b,10),g=e===this.position.x&&f===this.position.y;if(this.setPosition(a,b),g&&!this.isTransitioning)return void this.layoutPosition();var h=a-c,i=b-d,j={};j.transform=this.getTranslate(h,i),this.transition({to:j,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},g.prototype.getTranslate=function(a,b){var c=this.layout.options;return a=c.isOriginLeft?a:-a,b=c.isOriginTop?b:-b,n?"translate3d("+a+"px, "+b+"px, 0)":"translate("+a+"px, "+b+"px)"},g.prototype.goTo=function(a,b){this.setPosition(a,b),this.layoutPosition()},g.prototype.moveTo=m?g.prototype._transitionTo:g.prototype.goTo,g.prototype.setPosition=function(a,b){this.position.x=parseInt(a,10),this.position.y=parseInt(b,10)},g.prototype._nonTransition=function(a){this.css(a.to),a.isCleaning&&this._removeStyles(a.to);for(var b in a.onTransitionEnd)a.onTransitionEnd[b].call(this)},g.prototype._transition=function(a){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(a);var b=this._transn;for(var c in a.onTransitionEnd)b.onEnd[c]=a.onTransitionEnd[c];for(c in a.to)b.ingProperties[c]=!0,a.isCleaning&&(b.clean[c]=!0);if(a.from){this.css(a.from);var d=this.element.offsetHeight;d=null}this.enableTransition(a.to),this.css(a.to),this.isTransitioning=!0};var r="opacity,"+h(q.transform||"transform");g.prototype.enableTransition=function(){this.isTransitioning||(this.css({transitionProperty:r,transitionDuration:this.layout.options.transitionDuration}),this.element.addEventListener(o,this,!1))},g.prototype.transition=g.prototype[k?"_transition":"_nonTransition"],g.prototype.onwebkitTransitionEnd=function(a){this.ontransitionend(a)},g.prototype.onotransitionend=function(a){this.ontransitionend(a)};var s={"-webkit-transform":"transform","-moz-transform":"transform","-o-transform":"transform"};g.prototype.ontransitionend=function(a){if(a.target===this.element){var b=this._transn,c=s[a.propertyName]||a.propertyName;if(delete b.ingProperties[c],f(b.ingProperties)&&this.disableTransition(),c in b.clean&&(this.element.style[a.propertyName]="",delete b.clean[c]),c in b.onEnd){var d=b.onEnd[c];d.call(this),delete b.onEnd[c]}this.emitEvent("transitionEnd",[this])}},g.prototype.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(o,this,!1),this.isTransitioning=!1},g.prototype._removeStyles=function(a){var b={};for(var c in a)b[c]="";this.css(b)};var t={transitionProperty:"",transitionDuration:""};return g.prototype.removeTransitionStyles=function(){this.css(t)},g.prototype.removeElem=function(){this.element.parentNode.removeChild(this.element),this.css({display:""}),this.emitEvent("remove",[this])},g.prototype.remove=function(){if(!k||!parseFloat(this.layout.options.transitionDuration))return void this.removeElem();var a=this;this.once("transitionEnd",function(){a.removeElem()}),this.hide()},g.prototype.reveal=function(){delete this.isHidden,this.css({display:""});var a=this.layout.options,b={},c=this.getHideRevealTransitionEndProperty("visibleStyle");b[c]=this.onRevealTransitionEnd,this.transition({from:a.hiddenStyle,to:a.visibleStyle,isCleaning:!0,onTransitionEnd:b})},g.prototype.onRevealTransitionEnd=function(){this.isHidden||this.emitEvent("reveal")},g.prototype.getHideRevealTransitionEndProperty=function(a){var b=this.layout.options[a];if(b.opacity)return"opacity";for(var c in b)return c},g.prototype.hide=function(){this.isHidden=!0,this.css({display:""});var a=this.layout.options,b={},c=this.getHideRevealTransitionEndProperty("hiddenStyle");b[c]=this.onHideTransitionEnd,this.transition({from:a.visibleStyle,to:a.hiddenStyle,isCleaning:!0,onTransitionEnd:b})},g.prototype.onHideTransitionEnd=function(){this.isHidden&&(this.css({display:"none"}),this.emitEvent("hide"))},g.prototype.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},g}),function(a,b){"function"==typeof define&&define.amd?define("outlayer/outlayer",["eventie/eventie","eventEmitter/EventEmitter","get-size/get-size","fizzy-ui-utils/utils","./item"],function(c,d,e,f,g){return b(a,c,d,e,f,g)}):"object"==typeof exports?module.exports=b(a,require("eventie"),require("wolfy87-eventemitter"),require("get-size"),require("fizzy-ui-utils"),require("./item")):a.Outlayer=b(a,a.eventie,a.EventEmitter,a.getSize,a.fizzyUIUtils,a.Outlayer.Item)}(window,function(a,b,c,d,e,f){function g(a,b){var c=e.getQueryElement(a);if(!c)return void(h&&h.error("Bad element for "+this.constructor.namespace+": "+(c||a)));this.element=c,i&&(this.$element=i(this.element)),this.options=e.extend({},this.constructor.defaults),this.option(b);var d=++k;this.element.outlayerGUID=d,l[d]=this,this._create(),this.options.isInitLayout&&this.layout()}var h=a.console,i=a.jQuery,j=function(){},k=0,l={};return g.namespace="outlayer",g.Item=f,g.defaults={containerStyle:{position:"relative"},isInitLayout:!0,isOriginLeft:!0,isOriginTop:!0,isResizeBound:!0,isResizingContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}},e.extend(g.prototype,c.prototype),g.prototype.option=function(a){e.extend(this.options,a)},g.prototype._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),e.extend(this.element.style,this.options.containerStyle),this.options.isResizeBound&&this.bindResize()},g.prototype.reloadItems=function(){this.items=this._itemize(this.element.children)},g.prototype._itemize=function(a){for(var b=this._filterFindItemElements(a),c=this.constructor.Item,d=[],e=0,f=b.length;f>e;e++){var g=b[e],h=new c(g,this);d.push(h)}return d},g.prototype._filterFindItemElements=function(a){return e.filterFindElements(a,this.options.itemSelector)},g.prototype.getItemElements=function(){for(var a=[],b=0,c=this.items.length;c>b;b++)a.push(this.items[b].element);return a},g.prototype.layout=function(){this._resetLayout(),this._manageStamps();var a=void 0!==this.options.isLayoutInstant?this.options.isLayoutInstant:!this._isLayoutInited;this.layoutItems(this.items,a),this._isLayoutInited=!0},g.prototype._init=g.prototype.layout,g.prototype._resetLayout=function(){this.getSize()},g.prototype.getSize=function(){this.size=d(this.element)},g.prototype._getMeasurement=function(a,b){var c,f=this.options[a];f?("string"==typeof f?c=this.element.querySelector(f):e.isElement(f)&&(c=f),this[a]=c?d(c)[b]:f):this[a]=0},g.prototype.layoutItems=function(a,b){a=this._getItemsForLayout(a),this._layoutItems(a,b),this._postLayout()},g.prototype._getItemsForLayout=function(a){for(var b=[],c=0,d=a.length;d>c;c++){var e=a[c];e.isIgnored||b.push(e)}return b},g.prototype._layoutItems=function(a,b){if(this._emitCompleteOnItems("layout",a),a&&a.length){for(var c=[],d=0,e=a.length;e>d;d++){var f=a[d],g=this._getItemLayoutPosition(f);g.item=f,g.isInstant=b||f.isLayoutInstant,c.push(g)}this._processLayoutQueue(c)}},g.prototype._getItemLayoutPosition=function(){return{x:0,y:0}},g.prototype._processLayoutQueue=function(a){for(var b=0,c=a.length;c>b;b++){var d=a[b];this._positionItem(d.item,d.x,d.y,d.isInstant)}},g.prototype._positionItem=function(a,b,c,d){d?a.goTo(b,c):a.moveTo(b,c)},g.prototype._postLayout=function(){this.resizeContainer()},g.prototype.resizeContainer=function(){if(this.options.isResizingContainer){var a=this._getContainerSize();a&&(this._setContainerMeasure(a.width,!0),this._setContainerMeasure(a.height,!1))}},g.prototype._getContainerSize=j,g.prototype._setContainerMeasure=function(a,b){if(void 0!==a){var c=this.size;c.isBorderBox&&(a+=b?c.paddingLeft+c.paddingRight+c.borderLeftWidth+c.borderRightWidth:c.paddingBottom+c.paddingTop+c.borderTopWidth+c.borderBottomWidth),a=Math.max(a,0),this.element.style[b?"width":"height"]=a+"px"}},g.prototype._emitCompleteOnItems=function(a,b){function c(){e.dispatchEvent(a+"Complete",null,[b])}function d(){g++,g===f&&c()}var e=this,f=b.length;if(!b||!f)return void c();for(var g=0,h=0,i=b.length;i>h;h++){var j=b[h];j.once(a,d)}},g.prototype.dispatchEvent=function(a,b,c){var d=b?[b].concat(c):c;if(this.emitEvent(a,d),i)if(this.$element=this.$element||i(this.element),b){var e=i.Event(b);e.type=a,this.$element.trigger(e,c)}else this.$element.trigger(a,c)},g.prototype.ignore=function(a){var b=this.getItem(a);b&&(b.isIgnored=!0)},g.prototype.unignore=function(a){var b=this.getItem(a);b&&delete b.isIgnored},g.prototype.stamp=function(a){if(a=this._find(a)){this.stamps=this.stamps.concat(a);for(var b=0,c=a.length;c>b;b++){var d=a[b];this.ignore(d)}}},g.prototype.unstamp=function(a){if(a=this._find(a))for(var b=0,c=a.length;c>b;b++){var d=a[b];e.removeFrom(this.stamps,d),this.unignore(d)}},g.prototype._find=function(a){return a?("string"==typeof a&&(a=this.element.querySelectorAll(a)),a=e.makeArray(a)):void 0},g.prototype._manageStamps=function(){if(this.stamps&&this.stamps.length){this._getBoundingRect();for(var a=0,b=this.stamps.length;b>a;a++){var c=this.stamps[a];this._manageStamp(c)}}},g.prototype._getBoundingRect=function(){var a=this.element.getBoundingClientRect(),b=this.size;this._boundingRect={left:a.left+b.paddingLeft+b.borderLeftWidth,top:a.top+b.paddingTop+b.borderTopWidth,right:a.right-(b.paddingRight+b.borderRightWidth),bottom:a.bottom-(b.paddingBottom+b.borderBottomWidth)}},g.prototype._manageStamp=j,g.prototype._getElementOffset=function(a){var b=a.getBoundingClientRect(),c=this._boundingRect,e=d(a),f={left:b.left-c.left-e.marginLeft,top:b.top-c.top-e.marginTop,right:c.right-b.right-e.marginRight,bottom:c.bottom-b.bottom-e.marginBottom};return f},g.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},g.prototype.bindResize=function(){this.isResizeBound||(b.bind(a,"resize",this),this.isResizeBound=!0)},g.prototype.unbindResize=function(){this.isResizeBound&&b.unbind(a,"resize",this),this.isResizeBound=!1},g.prototype.onresize=function(){function a(){b.resize(),delete b.resizeTimeout}this.resizeTimeout&&clearTimeout(this.resizeTimeout);var b=this;this.resizeTimeout=setTimeout(a,100)},g.prototype.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},g.prototype.needsResizeLayout=function(){var a=d(this.element),b=this.size&&a;return b&&a.innerWidth!==this.size.innerWidth},g.prototype.addItems=function(a){var b=this._itemize(a);return b.length&&(this.items=this.items.concat(b)),b},g.prototype.appended=function(a){var b=this.addItems(a);b.length&&(this.layoutItems(b,!0),this.reveal(b))},g.prototype.prepended=function(a){var b=this._itemize(a);if(b.length){var c=this.items.slice(0);this.items=b.concat(c),this._resetLayout(),this._manageStamps(),this.layoutItems(b,!0),this.reveal(b),this.layoutItems(c)}},g.prototype.reveal=function(a){this._emitCompleteOnItems("reveal",a);for(var b=a&&a.length,c=0;b&&b>c;c++){var d=a[c];d.reveal()}},g.prototype.hide=function(a){this._emitCompleteOnItems("hide",a);for(var b=a&&a.length,c=0;b&&b>c;c++){var d=a[c];d.hide()}},g.prototype.revealItemElements=function(a){var b=this.getItems(a);this.reveal(b)},g.prototype.hideItemElements=function(a){var b=this.getItems(a);this.hide(b)},g.prototype.getItem=function(a){for(var b=0,c=this.items.length;c>b;b++){var d=this.items[b];if(d.element===a)return d}},g.prototype.getItems=function(a){a=e.makeArray(a);for(var b=[],c=0,d=a.length;d>c;c++){var f=a[c],g=this.getItem(f);g&&b.push(g)}return b},g.prototype.remove=function(a){var b=this.getItems(a);if(this._emitCompleteOnItems("remove",b),b&&b.length)for(var c=0,d=b.length;d>c;c++){var f=b[c];f.remove(),e.removeFrom(this.items,f)}},g.prototype.destroy=function(){var a=this.element.style;a.height="",a.position="",a.width="";for(var b=0,c=this.items.length;c>b;b++){var d=this.items[b];d.destroy()}this.unbindResize();var e=this.element.outlayerGUID;delete l[e],delete this.element.outlayerGUID,i&&i.removeData(this.element,this.constructor.namespace)},g.data=function(a){a=e.getQueryElement(a);var b=a&&a.outlayerGUID;return b&&l[b]},g.create=function(a,b){function c(){g.apply(this,arguments)}return Object.create?c.prototype=Object.create(g.prototype):e.extend(c.prototype,g.prototype),c.prototype.constructor=c,c.defaults=e.extend({},g.defaults),e.extend(c.defaults,b),c.prototype.settings={},c.namespace=a,c.data=g.data,c.Item=function(){f.apply(this,arguments)},c.Item.prototype=new f,e.htmlInit(c,a),i&&i.bridget&&i.bridget(a,c),c},g.Item=f,g}),function(a,b){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size","fizzy-ui-utils/utils"],b):"object"==typeof exports?module.exports=b(require("outlayer"),require("get-size"),require("fizzy-ui-utils")):a.Masonry=b(a.Outlayer,a.getSize,a.fizzyUIUtils)}(window,function(a,b,c){var d=a.create("masonry");return d.prototype._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns();var a=this.cols;for(this.colYs=[];a--;)this.colYs.push(0);this.maxY=0},d.prototype.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var a=this.items[0],c=a&&a.element;this.columnWidth=c&&b(c).outerWidth||this.containerWidth}var d=this.columnWidth+=this.gutter,e=this.containerWidth+this.gutter,f=e/d,g=d-e%d,h=g&&1>g?"round":"floor";f=Math[h](f),this.cols=Math.max(f,1)},d.prototype.getContainerWidth=function(){var a=this.options.isFitWidth?this.element.parentNode:this.element,c=b(a);this.containerWidth=c&&c.innerWidth},d.prototype._getItemLayoutPosition=function(a){a.getSize();var b=a.size.outerWidth%this.columnWidth,d=b&&1>b?"round":"ceil",e=Math[d](a.size.outerWidth/this.columnWidth);e=Math.min(e,this.cols);for(var f=this._getColGroup(e),g=Math.min.apply(Math,f),h=c.indexOf(f,g),i={x:this.columnWidth*h,y:g},j=g+a.size.outerHeight,k=this.cols+1-f.length,l=0;k>l;l++)this.colYs[h+l]=j;return i},d.prototype._getColGroup=function(a){if(2>a)return this.colYs;for(var b=[],c=this.cols+1-a,d=0;c>d;d++){var e=this.colYs.slice(d,d+a);b[d]=Math.max.apply(Math,e)}return b},d.prototype._manageStamp=function(a){var c=b(a),d=this._getElementOffset(a),e=this.options.isOriginLeft?d.left:d.right,f=e+c.outerWidth,g=Math.floor(e/this.columnWidth);g=Math.max(0,g);var h=Math.floor(f/this.columnWidth);h-=f%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var i=(this.options.isOriginTop?d.top:d.bottom)+c.outerHeight,j=g;h>=j;j++)this.colYs[j]=Math.max(i,this.colYs[j])},d.prototype._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var a={height:this.maxY};return this.options.isFitWidth&&(a.width=this._getContainerFitWidth()),a},d.prototype._getContainerFitWidth=function(){for(var a=0,b=this.cols;--b&&0===this.colYs[b];)a++;return(this.cols-a)*this.columnWidth-this.gutter},d.prototype.needsResizeLayout=function(){var a=this.containerWidth;return this.getContainerWidth(),a!==this.containerWidth},d}); \ No newline at end of file diff --git a/src/main/resources/static/gallery/js/modernizr-custom.js b/src/main/resources/static/gallery/js/modernizr-custom.js new file mode 100644 index 0000000..7afd8a3 --- /dev/null +++ b/src/main/resources/static/gallery/js/modernizr-custom.js @@ -0,0 +1,3 @@ +/*! modernizr 3.1.0 (Custom Build) | MIT * + * http://modernizr.com/download/?-csstransitions-prefixed !*/ +!function(e,n,t){function r(e,n){return typeof e===n}function o(){var e,n,t,o,s,i,a;for(var f in C){if(e=[],n=C[f],n.name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(t=0;td;d++)if(v=e[d],h=P.style[v],a(v,"-")&&(v=i(v)),P.style[v]!==t){if(s||r(o,"undefined"))return l(),"pfx"==n?v:!0;try{P.style[v]=o}catch(g){}if(P.style[v]!=h)return l(),"pfx"==n?v:!0}return l(),!1}function h(e,n,t,o,s){var i=e.charAt(0).toUpperCase()+e.slice(1),a=(e+" "+b.join(i+" ")+i).split(" ");return r(n,"string")||r(n,"undefined")?v(a,n,o,s):(a=(e+" "+z.join(i+" ")+i).split(" "),u(a,n,t))}function y(e,n,r){return h(e,t,t,n,r)}var g=[],C=[],_={_version:"3.1.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,n){var t=this;setTimeout(function(){n(t[e])},0)},addTest:function(e,n,t){C.push({name:e,fn:n,options:t})},addAsyncTest:function(e){C.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=_,Modernizr=new Modernizr;var x=n.documentElement,w="svg"===x.nodeName.toLowerCase(),S="Moz O ms Webkit",b=_._config.usePrefixes?S.split(" "):[];_._cssomPrefixes=b;var E=function(n){var r,o=prefixes.length,s=e.CSSRule;if("undefined"==typeof s)return t;if(!n)return!1;if(n=n.replace(/^@/,""),r=n.replace(/-/g,"_").toUpperCase()+"_RULE",r in s)return"@"+n;for(var i=0;o>i;i++){var a=prefixes[i],f=a.toUpperCase()+"_"+r;if(f in s)return"@-"+a.toLowerCase()+"-"+n}return!1};_.atRule=E;var z=_._config.usePrefixes?S.toLowerCase().split(" "):[];_._domPrefixes=z;var N={elem:f("modernizr")};Modernizr._q.push(function(){delete N.elem});var P={style:N.elem.style};Modernizr._q.unshift(function(){delete P.style}),_.testAllProps=h;_.prefixed=function(e,n,t){return 0===e.indexOf("@")?E(e):(-1!=e.indexOf("-")&&(e=i(e)),n?h(e,n,t):h(e,"pfx"))};_.testAllProps=y,Modernizr.addTest("csstransitions",y("transition","all",!0)),o(),s(g),delete _.addTest,delete _.addAsyncTest;for(var T=0;T",n[0];);return e>4?e:t}(),n=function(){return"_"+Math.random().toString(36).substr(2,9)},o={svgns:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",createElement:function(t,e){var i=document.createElementNS(o.svgns,t);return e&&o.setAttr(i,e),i},setAttr:function(t,e){for(var i in e)"href"===i?t.setAttributeNS(o.xlink,i,e[i]):t.setAttribute(i,e[i]);return t}},r=function(e,i){this.internalID=n(),this.$element=t(e),this.$width=this.$element.width(),this.$height=this.$element.height(),this.element=e,this.options=t.extend({},r.DEFAULTS,i),this.$overlayEl=this.createOverlay(),this.$blurredImage={},this.useVelocity=this.detectVelocity(),this.attachListeners(),this.generateBlurredImage(this.options.imageURL)};r.VERSION="0.0.1",r.DEFAULTS={imageURL:"",blurAmount:10,imageClass:"",overlayClass:"",duration:!1,opacity:1},r.prototype.detectVelocity=function(){return!!window.jQuery.Velocity},r.prototype.attachListeners=function(){this.$element.on("ui.blur.loaded",t.proxy(this.fadeIn,this)),this.$element.on("ui.blur.unload",t.proxy(this.fadeOut,this))},r.prototype.fadeIn=function(){this.options.duration&&this.options.duration>0&&(this.useVelocity?this.$blurredImage.velocity({opacity:this.options.opacity},{duration:this.options.duration}):this.$blurredImage.animate({opacity:this.options.opacity},{duration:this.options.duration}))},r.prototype.fadeOut=function(){this.options.duration&&this.options.duration>0?this.useVelocity?this.$blurredImage.velocity({opacity:0},{duration:this.options.duration}):this.$blurredImage.animate({opacity:0},{duration:this.options.duration}):this.$blurredImage.css({opacity:0})},r.prototype.generateBlurredImage=function(t){var e=this.$blurredImage;this.internalID=n(),e.length>0&&(this.options.duration&&this.options.duration>0?this.useVelocity?e.first().velocity({opacity:0},{duration:this.options.duration,complete:function(){e.remove()}}):e.first().animate({opacity:0},{duration:this.options.duration,complete:function(){e.remove()}}):e.remove()),this.$blurredImage=i?this.createIMG(t,this.$width,this.$height):this.createSVG(t,this.$width,this.$height)},r.prototype.createOverlay=function(){return this.options.overlayClass&&""!==this.options.overlayClass?t("
").prependTo(this.$element).addClass(this.options.overlayClass):!1},r.prototype.createSVG=function(e,i,n){var r=this,s=o.createElement("svg",{xmlns:o.svgns,version:"1.1",width:i,height:n,id:"blurred"+this.internalID,"class":this.options.imageClass,viewBox:"0 0 "+i+" "+n,preserveAspectRatio:"none"}),a="blur"+this.internalID,u=o.createElement("filter",{id:a}),l=o.createElement("feGaussianBlur",{"in":"SourceGraphic",stdDeviation:this.options.blurAmount}),h=o.createElement("image",{x:0,y:0,width:i,height:n,externalResourcesRequired:"true",href:e,style:"filter:url(#"+a+")",preserveAspectRatio:"none"});h.addEventListener("load",function(){r.$element.trigger("ui.blur.loaded")},!0),h.addEventListener("SVGLoad",function(){r.$element.trigger("ui.blur.loaded")},!0),u.appendChild(l),s.appendChild(u),s.appendChild(h);var d=t(s);return r.options.duration&&r.options.duration>0&&(d.css({opacity:0}),window.setTimeout(function(){"0"===d.css("opacity")&&d.css({opacity:1})},this.options.duration+100)),this.element.insertBefore(s,this.element.firstChild),d},r.prototype.createIMG=function(t,e,i){var n=this,o=this.prependImage(t),r=2*this.options.blurAmount>100?100:2*this.options.blurAmount;return o.css({filter:"progid:DXImageTransform.Microsoft.Blur(pixelradius="+r+") ",top:2.5*-this.options.blurAmount,left:2.5*-this.options.blurAmount,width:e+2.5*this.options.blurAmount,height:i+2.5*this.options.blurAmount}).attr("id","blurred"+this.internalID),o.load(function(){n.$element.trigger("ui.blur.loaded")}),this.options.duration&&this.options.duration>0&&window.setTimeout(function(){"0"===o.css("opacity")&&o.css({opacity:1})},this.options.duration+100),o},r.prototype.prependImage=function(e){var i,n=t('');return i=this.$overlayEl?n.insertBefore(this.$overlayEl).attr("id",this.internalID).addClass(this.options.imageClass):n.prependTo(this.$element).attr("id",this.internalID).addClass(this.options.imageClass)};var s=t.fn.backgroundBlur;t.fn.backgroundBlur=e,t.fn.backgroundBlur.Constructor=r,t.fn.backgroundBlur.noConflict=function(){return t.fn.backgroundBlur=s,this}}(jQuery); \ No newline at end of file diff --git a/src/main/resources/static/js/bootstrap.jj.js b/src/main/resources/static/js/bootstrap.jj.js new file mode 100644 index 0000000..534d533 --- /dev/null +++ b/src/main/resources/static/js/bootstrap.jj.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.0.0 (https://getbootstrap.com) + * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,n){"use strict";function i(t,e){for(var n=0;n0?i:null}catch(t){return null}},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(n){t(n).trigger(e.end)},supportsTransitionEnd:function(){return Boolean(e)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var s in n)if(Object.prototype.hasOwnProperty.call(n,s)){var r=n[s],o=e[s],a=o&&i.isElement(o)?"element":(l=o,{}.toString.call(l).match(/\s([a-zA-Z]+)/)[1].toLowerCase());if(!new RegExp(r).test(a))throw new Error(t.toUpperCase()+': Option "'+s+'" provided type "'+a+'" but expected type "'+r+'".')}var l}};return e=("undefined"==typeof window||!window.QUnit)&&{end:"transitionend"},t.fn.emulateTransitionEnd=n,i.supportsTransitionEnd()&&(t.event.special[i.TRANSITION_END]={bindType:e.end,delegateType:e.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}}),i}(e),L=(a="alert",h="."+(l="bs.alert"),c=(o=e).fn[a],u={CLOSE:"close"+h,CLOSED:"closed"+h,CLICK_DATA_API:"click"+h+".data-api"},f="alert",d="fade",_="show",g=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){t=t||this._element;var e=this._getRootElement(t);this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){o.removeData(this._element,l),this._element=null},e._getRootElement=function(t){var e=P.getSelectorFromElement(t),n=!1;return e&&(n=o(e)[0]),n||(n=o(t).closest("."+f)[0]),n},e._triggerCloseEvent=function(t){var e=o.Event(u.CLOSE);return o(t).trigger(e),e},e._removeElement=function(t){var e=this;o(t).removeClass(_),P.supportsTransitionEnd()&&o(t).hasClass(d)?o(t).one(P.TRANSITION_END,function(n){return e._destroyElement(t,n)}).emulateTransitionEnd(150):this._destroyElement(t)},e._destroyElement=function(t){o(t).detach().trigger(u.CLOSED).remove()},t._jQueryInterface=function(e){return this.each(function(){var n=o(this),i=n.data(l);i||(i=new t(this),n.data(l,i)),"close"===e&&i[e](this)})},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},s(t,null,[{key:"VERSION",get:function(){return"4.0.0"}}]),t}(),o(document).on(u.CLICK_DATA_API,'[data-dismiss="alert"]',g._handleDismiss(new g)),o.fn[a]=g._jQueryInterface,o.fn[a].Constructor=g,o.fn[a].noConflict=function(){return o.fn[a]=c,g._jQueryInterface},g),R=(m="button",E="."+(v="bs.button"),T=".data-api",y=(p=e).fn[m],C="active",I="btn",A="focus",b='[data-toggle^="button"]',D='[data-toggle="buttons"]',S="input",w=".active",N=".btn",O={CLICK_DATA_API:"click"+E+T,FOCUS_BLUR_DATA_API:"focus"+E+T+" blur"+E+T},k=function(){function t(t){this._element=t}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=p(this._element).closest(D)[0];if(n){var i=p(this._element).find(S)[0];if(i){if("radio"===i.type)if(i.checked&&p(this._element).hasClass(C))t=!1;else{var s=p(n).find(w)[0];s&&p(s).removeClass(C)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!p(this._element).hasClass(C),p(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!p(this._element).hasClass(C)),t&&p(this._element).toggleClass(C)},e.dispose=function(){p.removeData(this._element,v),this._element=null},t._jQueryInterface=function(e){return this.each(function(){var n=p(this).data(v);n||(n=new t(this),p(this).data(v,n)),"toggle"===e&&n[e]()})},s(t,null,[{key:"VERSION",get:function(){return"4.0.0"}}]),t}(),p(document).on(O.CLICK_DATA_API,b,function(t){t.preventDefault();var e=t.target;p(e).hasClass(I)||(e=p(e).closest(N)),k._jQueryInterface.call(p(e),"toggle")}).on(O.FOCUS_BLUR_DATA_API,b,function(t){var e=p(t.target).closest(N)[0];p(e).toggleClass(A,/^focus(in)?$/.test(t.type))}),p.fn[m]=k._jQueryInterface,p.fn[m].Constructor=k,p.fn[m].noConflict=function(){return p.fn[m]=y,k._jQueryInterface},k),j=function(t){var e="carousel",n="bs.carousel",i="."+n,o=t.fn[e],a={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0},l={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean"},h="next",c="prev",u="left",f="right",d={SLIDE:"slide"+i,SLID:"slid"+i,KEYDOWN:"keydown"+i,MOUSEENTER:"mouseenter"+i,MOUSELEAVE:"mouseleave"+i,TOUCHEND:"touchend"+i,LOAD_DATA_API:"load"+i+".data-api",CLICK_DATA_API:"click"+i+".data-api"},_="carousel",g="active",p="slide",m="carousel-item-right",v="carousel-item-left",E="carousel-item-next",T="carousel-item-prev",y={ACTIVE:".active",ACTIVE_ITEM:".active.carousel-item",ITEM:".carousel-item",NEXT_PREV:".carousel-item-next, .carousel-item-prev",INDICATORS:".carousel-indicators",DATA_SLIDE:"[data-slide], [data-slide-to]",DATA_RIDE:'[data-ride="carousel"]'},C=function(){function o(e,n){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this._config=this._getConfig(n),this._element=t(e)[0],this._indicatorsElement=t(this._element).find(y.INDICATORS)[0],this._addEventListeners()}var C=o.prototype;return C.next=function(){this._isSliding||this._slide(h)},C.nextWhenVisible=function(){!document.hidden&&t(this._element).is(":visible")&&"hidden"!==t(this._element).css("visibility")&&this.next()},C.prev=function(){this._isSliding||this._slide(c)},C.pause=function(e){e||(this._isPaused=!0),t(this._element).find(y.NEXT_PREV)[0]&&P.supportsTransitionEnd()&&(P.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},C.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},C.to=function(e){var n=this;this._activeElement=t(this._element).find(y.ACTIVE_ITEM)[0];var i=this._getItemIndex(this._activeElement);if(!(e>this._items.length-1||e<0))if(this._isSliding)t(this._element).one(d.SLID,function(){return n.to(e)});else{if(i===e)return this.pause(),void this.cycle();var s=e>i?h:c;this._slide(s,this._items[e])}},C.dispose=function(){t(this._element).off(i),t.removeData(this._element,n),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},C._getConfig=function(t){return t=r({},a,t),P.typeCheckConfig(e,t,l),t},C._addEventListeners=function(){var e=this;this._config.keyboard&&t(this._element).on(d.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&(t(this._element).on(d.MOUSEENTER,function(t){return e.pause(t)}).on(d.MOUSELEAVE,function(t){return e.cycle(t)}),"ontouchstart"in document.documentElement&&t(this._element).on(d.TOUCHEND,function(){e.pause(),e.touchTimeout&&clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout(function(t){return e.cycle(t)},500+e._config.interval)}))},C._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},C._getItemIndex=function(e){return this._items=t.makeArray(t(e).parent().find(y.ITEM)),this._items.indexOf(e)},C._getItemByDirection=function(t,e){var n=t===h,i=t===c,s=this._getItemIndex(e),r=this._items.length-1;if((i&&0===s||n&&s===r)&&!this._config.wrap)return e;var o=(s+(t===c?-1:1))%this._items.length;return-1===o?this._items[this._items.length-1]:this._items[o]},C._triggerSlideEvent=function(e,n){var i=this._getItemIndex(e),s=this._getItemIndex(t(this._element).find(y.ACTIVE_ITEM)[0]),r=t.Event(d.SLIDE,{relatedTarget:e,direction:n,from:s,to:i});return t(this._element).trigger(r),r},C._setActiveIndicatorElement=function(e){if(this._indicatorsElement){t(this._indicatorsElement).find(y.ACTIVE).removeClass(g);var n=this._indicatorsElement.children[this._getItemIndex(e)];n&&t(n).addClass(g)}},C._slide=function(e,n){var i,s,r,o=this,a=t(this._element).find(y.ACTIVE_ITEM)[0],l=this._getItemIndex(a),c=n||a&&this._getItemByDirection(e,a),_=this._getItemIndex(c),C=Boolean(this._interval);if(e===h?(i=v,s=E,r=u):(i=m,s=T,r=f),c&&t(c).hasClass(g))this._isSliding=!1;else if(!this._triggerSlideEvent(c,r).isDefaultPrevented()&&a&&c){this._isSliding=!0,C&&this.pause(),this._setActiveIndicatorElement(c);var I=t.Event(d.SLID,{relatedTarget:c,direction:r,from:l,to:_});P.supportsTransitionEnd()&&t(this._element).hasClass(p)?(t(c).addClass(s),P.reflow(c),t(a).addClass(i),t(c).addClass(i),t(a).one(P.TRANSITION_END,function(){t(c).removeClass(i+" "+s).addClass(g),t(a).removeClass(g+" "+s+" "+i),o._isSliding=!1,setTimeout(function(){return t(o._element).trigger(I)},0)}).emulateTransitionEnd(600)):(t(a).removeClass(g),t(c).addClass(g),this._isSliding=!1,t(this._element).trigger(I)),C&&this.cycle()}},o._jQueryInterface=function(e){return this.each(function(){var i=t(this).data(n),s=r({},a,t(this).data());"object"==typeof e&&(s=r({},s,e));var l="string"==typeof e?e:s.slide;if(i||(i=new o(this,s),t(this).data(n,i)),"number"==typeof e)i.to(e);else if("string"==typeof l){if("undefined"==typeof i[l])throw new TypeError('No method named "'+l+'"');i[l]()}else s.interval&&(i.pause(),i.cycle())})},o._dataApiClickHandler=function(e){var i=P.getSelectorFromElement(this);if(i){var s=t(i)[0];if(s&&t(s).hasClass(_)){var a=r({},t(s).data(),t(this).data()),l=this.getAttribute("data-slide-to");l&&(a.interval=!1),o._jQueryInterface.call(t(s),a),l&&t(s).data(n).to(l),e.preventDefault()}}},s(o,null,[{key:"VERSION",get:function(){return"4.0.0"}},{key:"Default",get:function(){return a}}]),o}();return t(document).on(d.CLICK_DATA_API,y.DATA_SLIDE,C._dataApiClickHandler),t(window).on(d.LOAD_DATA_API,function(){t(y.DATA_RIDE).each(function(){var e=t(this);C._jQueryInterface.call(e,e.data())})}),t.fn[e]=C._jQueryInterface,t.fn[e].Constructor=C,t.fn[e].noConflict=function(){return t.fn[e]=o,C._jQueryInterface},C}(e),H=function(t){var e="collapse",n="bs.collapse",i="."+n,o=t.fn[e],a={toggle:!0,parent:""},l={toggle:"boolean",parent:"(string|element)"},h={SHOW:"show"+i,SHOWN:"shown"+i,HIDE:"hide"+i,HIDDEN:"hidden"+i,CLICK_DATA_API:"click"+i+".data-api"},c="show",u="collapse",f="collapsing",d="collapsed",_="width",g="height",p={ACTIVES:".show, .collapsing",DATA_TOGGLE:'[data-toggle="collapse"]'},m=function(){function i(e,n){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(n),this._triggerArray=t.makeArray(t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'));for(var i=t(p.DATA_TOGGLE),s=0;s0&&(this._selector=o,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var o=i.prototype;return o.toggle=function(){t(this._element).hasClass(c)?this.hide():this.show()},o.show=function(){var e,s,r=this;if(!this._isTransitioning&&!t(this._element).hasClass(c)&&(this._parent&&0===(e=t.makeArray(t(this._parent).find(p.ACTIVES).filter('[data-parent="'+this._config.parent+'"]'))).length&&(e=null),!(e&&(s=t(e).not(this._selector).data(n))&&s._isTransitioning))){var o=t.Event(h.SHOW);if(t(this._element).trigger(o),!o.isDefaultPrevented()){e&&(i._jQueryInterface.call(t(e).not(this._selector),"hide"),s||t(e).data(n,null));var a=this._getDimension();t(this._element).removeClass(u).addClass(f),this._element.style[a]=0,this._triggerArray.length>0&&t(this._triggerArray).removeClass(d).attr("aria-expanded",!0),this.setTransitioning(!0);var l=function(){t(r._element).removeClass(f).addClass(u).addClass(c),r._element.style[a]="",r.setTransitioning(!1),t(r._element).trigger(h.SHOWN)};if(P.supportsTransitionEnd()){var _="scroll"+(a[0].toUpperCase()+a.slice(1));t(this._element).one(P.TRANSITION_END,l).emulateTransitionEnd(600),this._element.style[a]=this._element[_]+"px"}else l()}}},o.hide=function(){var e=this;if(!this._isTransitioning&&t(this._element).hasClass(c)){var n=t.Event(h.HIDE);if(t(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();if(this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",P.reflow(this._element),t(this._element).addClass(f).removeClass(u).removeClass(c),this._triggerArray.length>0)for(var s=0;s0&&t(n).toggleClass(d,!i).attr("aria-expanded",i)}},i._getTargetFromElement=function(e){var n=P.getSelectorFromElement(e);return n?t(n)[0]:null},i._jQueryInterface=function(e){return this.each(function(){var s=t(this),o=s.data(n),l=r({},a,s.data(),"object"==typeof e&&e);if(!o&&l.toggle&&/show|hide/.test(e)&&(l.toggle=!1),o||(o=new i(this,l),s.data(n,o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.0.0"}},{key:"Default",get:function(){return a}}]),i}();return t(document).on(h.CLICK_DATA_API,p.DATA_TOGGLE,function(e){"A"===e.currentTarget.tagName&&e.preventDefault();var i=t(this),s=P.getSelectorFromElement(this);t(s).each(function(){var e=t(this),s=e.data(n)?"toggle":i.data();m._jQueryInterface.call(e,s)})}),t.fn[e]=m._jQueryInterface,t.fn[e].Constructor=m,t.fn[e].noConflict=function(){return t.fn[e]=o,m._jQueryInterface},m}(e),W=function(t){var e="dropdown",i="bs.dropdown",o="."+i,a=".data-api",l=t.fn[e],h=new RegExp("38|40|27"),c={HIDE:"hide"+o,HIDDEN:"hidden"+o,SHOW:"show"+o,SHOWN:"shown"+o,CLICK:"click"+o,CLICK_DATA_API:"click"+o+a,KEYDOWN_DATA_API:"keydown"+o+a,KEYUP_DATA_API:"keyup"+o+a},u="disabled",f="show",d="dropup",_="dropright",g="dropleft",p="dropdown-menu-right",m="dropdown-menu-left",v="position-static",E='[data-toggle="dropdown"]',T=".dropdown form",y=".dropdown-menu",C=".navbar-nav",I=".dropdown-menu .dropdown-item:not(.disabled)",A="top-start",b="top-end",D="bottom-start",S="bottom-end",w="right-start",N="left-start",O={offset:0,flip:!0,boundary:"scrollParent"},k={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)"},L=function(){function a(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var l=a.prototype;return l.toggle=function(){if(!this._element.disabled&&!t(this._element).hasClass(u)){var e=a._getParentFromElement(this._element),i=t(this._menu).hasClass(f);if(a._clearMenus(),!i){var s={relatedTarget:this._element},r=t.Event(c.SHOW,s);if(t(e).trigger(r),!r.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof n)throw new TypeError("Bootstrap dropdown require Popper.js (https://popper.js.org)");var o=this._element;t(e).hasClass(d)&&(t(this._menu).hasClass(m)||t(this._menu).hasClass(p))&&(o=e),"scrollParent"!==this._config.boundary&&t(e).addClass(v),this._popper=new n(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===t(e).closest(C).length&&t("body").children().on("mouseover",null,t.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),t(this._menu).toggleClass(f),t(e).toggleClass(f).trigger(t.Event(c.SHOWN,s))}}}},l.dispose=function(){t.removeData(this._element,i),t(this._element).off(o),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},l.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},l._addEventListeners=function(){var e=this;t(this._element).on(c.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},l._getConfig=function(n){return n=r({},this.constructor.Default,t(this._element).data(),n),P.typeCheckConfig(e,n,this.constructor.DefaultType),n},l._getMenuElement=function(){if(!this._menu){var e=a._getParentFromElement(this._element);this._menu=t(e).find(y)[0]}return this._menu},l._getPlacement=function(){var e=t(this._element).parent(),n=D;return e.hasClass(d)?(n=A,t(this._menu).hasClass(p)&&(n=b)):e.hasClass(_)?n=w:e.hasClass(g)?n=N:t(this._menu).hasClass(p)&&(n=S),n},l._detectNavbar=function(){return t(this._element).closest(".navbar").length>0},l._getPopperConfig=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t._config.offset(e.offsets)||{}),e}:e.offset=this._config.offset,{placement:this._getPlacement(),modifiers:{offset:e,flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}}},a._jQueryInterface=function(e){return this.each(function(){var n=t(this).data(i);if(n||(n=new a(this,"object"==typeof e?e:null),t(this).data(i,n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}})},a._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var n=t.makeArray(t(E)),s=0;s0&&r--,40===e.which&&rdocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},p._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},p._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},f="show",d="out",_={HIDE:"hide"+o,HIDDEN:"hidden"+o,SHOW:"show"+o,SHOWN:"shown"+o,INSERTED:"inserted"+o,CLICK:"click"+o,FOCUSIN:"focusin"+o,FOCUSOUT:"focusout"+o,MOUSEENTER:"mouseenter"+o,MOUSELEAVE:"mouseleave"+o},g="fade",p="show",m=".tooltip-inner",v=".arrow",E="hover",T="focus",y="click",C="manual",I=function(){function a(t,e){if("undefined"==typeof n)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var I=a.prototype;return I.enable=function(){this._isEnabled=!0},I.disable=function(){this._isEnabled=!1},I.toggleEnabled=function(){this._isEnabled=!this._isEnabled},I.toggle=function(e){if(this._isEnabled)if(e){var n=this.constructor.DATA_KEY,i=t(e.currentTarget).data(n);i||(i=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(t(this.getTipElement()).hasClass(p))return void this._leave(null,this);this._enter(null,this)}},I.dispose=function(){clearTimeout(this._timeout),t.removeData(this.element,this.constructor.DATA_KEY),t(this.element).off(this.constructor.EVENT_KEY),t(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&t(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,null!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},I.show=function(){var e=this;if("none"===t(this.element).css("display"))throw new Error("Please use show on visible elements");var i=t.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){t(this.element).trigger(i);var s=t.contains(this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!s)return;var r=this.getTipElement(),o=P.getUID(this.constructor.NAME);r.setAttribute("id",o),this.element.setAttribute("aria-describedby",o),this.setContent(),this.config.animation&&t(r).addClass(g);var l="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,h=this._getAttachment(l);this.addAttachmentClass(h);var c=!1===this.config.container?document.body:t(this.config.container);t(r).data(this.constructor.DATA_KEY,this),t.contains(this.element.ownerDocument.documentElement,this.tip)||t(r).appendTo(c),t(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,r,{placement:h,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:v},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),t(r).addClass(p),"ontouchstart"in document.documentElement&&t("body").children().on("mouseover",null,t.noop);var u=function(){e.config.animation&&e._fixTransition();var n=e._hoverState;e._hoverState=null,t(e.element).trigger(e.constructor.Event.SHOWN),n===d&&e._leave(null,e)};P.supportsTransitionEnd()&&t(this.tip).hasClass(g)?t(this.tip).one(P.TRANSITION_END,u).emulateTransitionEnd(a._TRANSITION_DURATION):u()}},I.hide=function(e){var n=this,i=this.getTipElement(),s=t.Event(this.constructor.Event.HIDE),r=function(){n._hoverState!==f&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),t(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),e&&e()};t(this.element).trigger(s),s.isDefaultPrevented()||(t(i).removeClass(p),"ontouchstart"in document.documentElement&&t("body").children().off("mouseover",null,t.noop),this._activeTrigger[y]=!1,this._activeTrigger[T]=!1,this._activeTrigger[E]=!1,P.supportsTransitionEnd()&&t(this.tip).hasClass(g)?t(i).one(P.TRANSITION_END,r).emulateTransitionEnd(150):r(),this._hoverState="")},I.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},I.isWithContent=function(){return Boolean(this.getTitle())},I.addAttachmentClass=function(e){t(this.getTipElement()).addClass("bs-tooltip-"+e)},I.getTipElement=function(){return this.tip=this.tip||t(this.config.template)[0],this.tip},I.setContent=function(){var e=t(this.getTipElement());this.setElementContent(e.find(m),this.getTitle()),e.removeClass(g+" "+p)},I.setElementContent=function(e,n){var i=this.config.html;"object"==typeof n&&(n.nodeType||n.jquery)?i?t(n).parent().is(e)||e.empty().append(n):e.text(t(n).text()):e[i?"html":"text"](n)},I.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},I._getAttachment=function(t){return c[t.toUpperCase()]},I._setListeners=function(){var e=this;this.config.trigger.split(" ").forEach(function(n){if("click"===n)t(e.element).on(e.constructor.Event.CLICK,e.config.selector,function(t){return e.toggle(t)});else if(n!==C){var i=n===E?e.constructor.Event.MOUSEENTER:e.constructor.Event.FOCUSIN,s=n===E?e.constructor.Event.MOUSELEAVE:e.constructor.Event.FOCUSOUT;t(e.element).on(i,e.config.selector,function(t){return e._enter(t)}).on(s,e.config.selector,function(t){return e._leave(t)})}t(e.element).closest(".modal").on("hide.bs.modal",function(){return e.hide()})}),this.config.selector?this.config=r({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},I._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},I._enter=function(e,n){var i=this.constructor.DATA_KEY;(n=n||t(e.currentTarget).data(i))||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(i,n)),e&&(n._activeTrigger["focusin"===e.type?T:E]=!0),t(n.getTipElement()).hasClass(p)||n._hoverState===f?n._hoverState=f:(clearTimeout(n._timeout),n._hoverState=f,n.config.delay&&n.config.delay.show?n._timeout=setTimeout(function(){n._hoverState===f&&n.show()},n.config.delay.show):n.show())},I._leave=function(e,n){var i=this.constructor.DATA_KEY;(n=n||t(e.currentTarget).data(i))||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(i,n)),e&&(n._activeTrigger["focusout"===e.type?T:E]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState=d,n.config.delay&&n.config.delay.hide?n._timeout=setTimeout(function(){n._hoverState===d&&n.hide()},n.config.delay.hide):n.hide())},I._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},I._getConfig=function(n){return"number"==typeof(n=r({},this.constructor.Default,t(this.element).data(),n)).delay&&(n.delay={show:n.delay,hide:n.delay}),"number"==typeof n.title&&(n.title=n.title.toString()),"number"==typeof n.content&&(n.content=n.content.toString()),P.typeCheckConfig(e,n,this.constructor.DefaultType),n},I._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},I._cleanTipClass=function(){var e=t(this.getTipElement()),n=e.attr("class").match(l);null!==n&&n.length>0&&e.removeClass(n.join(""))},I._handlePopperPlacementChange=function(t){this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},I._fixTransition=function(){var e=this.getTipElement(),n=this.config.animation;null===e.getAttribute("x-placement")&&(t(e).removeClass(g),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},a._jQueryInterface=function(e){return this.each(function(){var n=t(this).data(i),s="object"==typeof e&&e;if((n||!/dispose|hide/.test(e))&&(n||(n=new a(this,s),t(this).data(i,n)),"string"==typeof e)){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.0.0"}},{key:"Default",get:function(){return u}},{key:"NAME",get:function(){return e}},{key:"DATA_KEY",get:function(){return i}},{key:"Event",get:function(){return _}},{key:"EVENT_KEY",get:function(){return o}},{key:"DefaultType",get:function(){return h}}]),a}();return t.fn[e]=I._jQueryInterface,t.fn[e].Constructor=I,t.fn[e].noConflict=function(){return t.fn[e]=a,I._jQueryInterface},I}(e),x=function(t){var e="popover",n="bs.popover",i="."+n,o=t.fn[e],a=new RegExp("(^|\\s)bs-popover\\S+","g"),l=r({},U.Default,{placement:"right",trigger:"click",content:"",template:''}),h=r({},U.DefaultType,{content:"(string|element|function)"}),c="fade",u="show",f=".popover-header",d=".popover-body",_={HIDE:"hide"+i,HIDDEN:"hidden"+i,SHOW:"show"+i,SHOWN:"shown"+i,INSERTED:"inserted"+i,CLICK:"click"+i,FOCUSIN:"focusin"+i,FOCUSOUT:"focusout"+i,MOUSEENTER:"mouseenter"+i,MOUSELEAVE:"mouseleave"+i},g=function(r){var o,g;function p(){return r.apply(this,arguments)||this}g=r,(o=p).prototype=Object.create(g.prototype),o.prototype.constructor=o,o.__proto__=g;var m=p.prototype;return m.isWithContent=function(){return this.getTitle()||this._getContent()},m.addAttachmentClass=function(e){t(this.getTipElement()).addClass("bs-popover-"+e)},m.getTipElement=function(){return this.tip=this.tip||t(this.config.template)[0],this.tip},m.setContent=function(){var e=t(this.getTipElement());this.setElementContent(e.find(f),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(e.find(d),n),e.removeClass(c+" "+u)},m._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},m._cleanTipClass=function(){var e=t(this.getTipElement()),n=e.attr("class").match(a);null!==n&&n.length>0&&e.removeClass(n.join(""))},p._jQueryInterface=function(e){return this.each(function(){var i=t(this).data(n),s="object"==typeof e?e:null;if((i||!/destroy|hide/.test(e))&&(i||(i=new p(this,s),t(this).data(n,i)),"string"==typeof e)){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e]()}})},s(p,null,[{key:"VERSION",get:function(){return"4.0.0"}},{key:"Default",get:function(){return l}},{key:"NAME",get:function(){return e}},{key:"DATA_KEY",get:function(){return n}},{key:"Event",get:function(){return _}},{key:"EVENT_KEY",get:function(){return i}},{key:"DefaultType",get:function(){return h}}]),p}(U);return t.fn[e]=g._jQueryInterface,t.fn[e].Constructor=g,t.fn[e].noConflict=function(){return t.fn[e]=o,g._jQueryInterface},g}(e),K=function(t){var e="scrollspy",n="bs.scrollspy",i="."+n,o=t.fn[e],a={offset:10,method:"auto",target:""},l={offset:"number",method:"string",target:"(string|element)"},h={ACTIVATE:"activate"+i,SCROLL:"scroll"+i,LOAD_DATA_API:"load"+i+".data-api"},c="dropdown-item",u="active",f={DATA_SPY:'[data-spy="scroll"]',ACTIVE:".active",NAV_LIST_GROUP:".nav, .list-group",NAV_LINKS:".nav-link",NAV_ITEMS:".nav-item",LIST_ITEMS:".list-group-item",DROPDOWN:".dropdown",DROPDOWN_ITEMS:".dropdown-item",DROPDOWN_TOGGLE:".dropdown-toggle"},d="offset",_="position",g=function(){function o(e,n){var i=this;this._element=e,this._scrollElement="BODY"===e.tagName?window:e,this._config=this._getConfig(n),this._selector=this._config.target+" "+f.NAV_LINKS+","+this._config.target+" "+f.LIST_ITEMS+","+this._config.target+" "+f.DROPDOWN_ITEMS,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,t(this._scrollElement).on(h.SCROLL,function(t){return i._process(t)}),this.refresh(),this._process()}var g=o.prototype;return g.refresh=function(){var e=this,n=this._scrollElement===this._scrollElement.window?d:_,i="auto"===this._config.method?n:this._config.method,s=i===_?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),t.makeArray(t(this._selector)).map(function(e){var n,r=P.getSelectorFromElement(e);if(r&&(n=t(r)[0]),n){var o=n.getBoundingClientRect();if(o.width||o.height)return[t(n)[i]().top+s,r]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},g.dispose=function(){t.removeData(this._element,n),t(this._scrollElement).off(i),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},g._getConfig=function(n){if("string"!=typeof(n=r({},a,n)).target){var i=t(n.target).attr("id");i||(i=P.getUID(e),t(n.target).attr("id",i)),n.target="#"+i}return P.typeCheckConfig(e,n,l),n},g._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},g._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},g._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},g._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var s=this._offsets.length;s--;){this._activeTarget!==this._targets[s]&&t>=this._offsets[s]&&("undefined"==typeof this._offsets[s+1]||t=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(e),t.Util=P,t.Alert=L,t.Button=R,t.Carousel=j,t.Collapse=H,t.Dropdown=W,t.Modal=M,t.Popover=x,t.Scrollspy=K,t.Tab=V,t.Tooltip=U,Object.defineProperty(t,"__esModule",{value:!0})}); +//# sourceMappingURL=bootstrap.min.js.map \ No newline at end of file diff --git a/src/main/resources/static/js/bootstrap.min.js b/src/main/resources/static/js/bootstrap.min.js deleted file mode 100644 index c6d3692..0000000 --- a/src/main/resources/static/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.2 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.2",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.2",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.2",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.2",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.2",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('
diff --git a/src/main/resources/templates/admin/group.html b/src/main/resources/templates/admin/group.html index 9b0640c..f104097 100644 --- a/src/main/resources/templates/admin/group.html +++ b/src/main/resources/templates/admin/group.html @@ -69,6 +69,8 @@ source = '腾讯COS'; }else if (d.keyid == 7) { source = 'FTP存储'; + }else if (d.keyid == 8) { + source = 'U-File'; }else { source = '未知'; } diff --git a/src/main/resources/templates/admin/imageIdentify.html b/src/main/resources/templates/admin/imageIdentify.html index c0b9c53..f09ca72 100644 --- a/src/main/resources/templates/admin/imageIdentify.html +++ b/src/main/resources/templates/admin/imageIdentify.html @@ -11,6 +11,8 @@

百度鉴黄Key配置


+ 注意:若您修改了配置文件中的默认定时器配置,设置的周期表达式必须小于一天。否则会有遗漏
推荐设置为:每天某个时辰执行、或每几个小时、每几分钟执行一次。
+

 

@@ -18,7 +20,7 @@ - 开启前保证下方信息填写正确 + 开启前保证下方信息填写正确,并已保存

diff --git a/src/main/resources/templates/admin/index.html b/src/main/resources/templates/admin/index.html index f6f9e29..0c121a0 100644 --- a/src/main/resources/templates/admin/index.html +++ b/src/main/resources/templates/admin/index.html @@ -8,7 +8,9 @@ 图床后台管理 - + + + + + + + + +
-

系统概况

+

开发者公告

+
+
+

暂无重要公告通知。

+
+
+ + + +
+

系统概况

+
+

-
+
-
+
-
+
-
+
@@ -67,7 +76,7 @@
-
+
@@ -83,13 +92,13 @@
-

我的信息

+

我的信息

-
+
-
+

0

@@ -125,25 +135,25 @@
- + - + - + - +
JAVA开发 @@ -155,15 +165,13 @@
-
+ + - - - diff --git a/src/main/resources/templates/admin/table.html b/src/main/resources/templates/admin/table.html index 6473978..7deabed 100644 --- a/src/main/resources/templates/admin/table.html +++ b/src/main/resources/templates/admin/table.html @@ -9,7 +9,6 @@ - @@ -19,7 +18,6 @@ - @@ -57,10 +55,10 @@ max-height: 130px; border-radius: 5px; box-shadow: 1px 2px 4px #999999; - transition: all 0.6s; + transition: all 0.3s; } .slt:hover{ - transform: scale(1.2); + transform: scale(1.1); } .table>tbody>tr>td{ border:0px; @@ -169,12 +167,13 @@
存储源:
-
+
@@ -234,22 +234,7 @@ var t; $(function () { var loginid = [[${loginid}]]; - toastr.options.positionClass = 'toast-bottom-right'; - toastr.options = { - closeButton: true,//是否显示关闭按钮 - debug: false, - progressBar: true, - positionClass: "toast-bottom-right", - onclick: null, - showDuration: "300", - hideDuration: "1000", - timeOut: "2000", - extendedTimeOut: "1000", - showEasing: "swing", - hideEasing: "linear", - showMethod: "fadeIn", - hideMethod: "fadeOut" - }; + $(document).ready(function() { $('#reservation').daterangepicker(null, function(start, end, label) { }); @@ -280,6 +265,11 @@ fenye('/admin/selecttable',1); } function deleall() { + var rows = $("#table_server").bootstrapTable('getSelections'); + if (rows.length == 0) { + layui.layer.msg('请先勾选要操作的图像。'); + return; + } swal({ title: "确认删除选中图片?", text: "删除后将无法恢复,请谨慎操作。", @@ -291,50 +281,35 @@ }, function (isConfirm) { if (isConfirm) { - var rows = $("#table_server").bootstrapTable('getSelections'); - if (rows.length == 0) {// rows 主要是为了判断是否选中,下面的else内容才是主要 - swal("请先勾选图片再删除", "目前未选中任何图片", "error"); - return; + if (rows.length == 0) { + } else { - var ids = new Array();// 声明一个数组 + var ids = new Array(); + var sources = new Array(); + var imgnames = new Array(); $(rows).each(function () {// 通过获得别选中的来进行遍历 - ids.push(this.id);// cid为获得到的整条数据中的一列 + ids.push(this.id); + sources.push(this.source); + imgnames.push(this.imgname); }); - deleallimg(ids); + deleallimg(ids,sources,imgnames); } } }); } - function deleallimg(ids) { + function deleallimg(ids,sources,imgnames) { var loading = layer.msg('正在删除', {icon: 16, shade: 0.3, time:0}); $.ajax({ type: "POST", url: "/admin/deleallimg", - data: {ids: ids}, + data: {ids: ids,sources:sources,imgnames:imgnames}, dataType: "json", success: function (data) { + layer.close(loading); if (data.val > 0) { - layer.close(loading); - $("#table_server").bootstrapTable('refresh', t); - swal({ - title: "删除成功", - text: "已成功删除所选图片。", - type: "success", - showCancelButton: false,//true显示两个按钮 - confirmButtonColor: "#A5DC86", - confirmButtonText: "确定", - //cancelButtonText: "取消删除!", - closeOnConfirm: true, - closeOnCancel: false - }, - function (isConfirm) { - if (isConfirm) { - } - }); - } else { - layer.close(loading); - $("#table_server").bootstrapTable('refresh', t); + layer.msg('已成功删除所选图片', {icon: 1}); } + $("#table_server").bootstrapTable('refresh', t); $("#imgcount").text(data.count); $("#usercount").text(data.usercount); $("#imgreviewcount").text(data.imgreviewcount); @@ -347,13 +322,13 @@ url: "/user/exit.do", dataType: "json", success: function (data) { - toastr.success("账号已退出。"); + layer.msg('账号已退出', {icon: 1}); window.location.reload(); } }); } //删除 - function deleimg(id, sourcekey) { + function deleimg(id, sourcekey,imgname) { swal({ title: "确认是否删除该图片?", text: "删除后将无法恢复,请谨慎操作。", @@ -368,16 +343,16 @@ $.ajax({ type: "POST", url: "/admin/deleimg", - data: {id: id, sourcekey: sourcekey}, + data: {id: id, sourcekey: sourcekey,imgname:imgname}, dataType: "json", success: function (data) { if (data.val > 0) { $("#table_server").bootstrapTable('refresh', t); - toastr.success("删除成功"); + layer.msg('删除成功', {icon: 1}); $("#imgcount").text(data.count); $("#usercount").text(data.usercount); } else { - toastr.error("删除失败"); + layer.msg('删除失败', {icon: 2}); $("#table_server").bootstrapTable('refresh', t); } } @@ -393,18 +368,42 @@ } }); copy.on('success', function (e) { - toastr.success("复制成功"); + layer.msg('复制成功'); copy.off("success"); }); copy.on('error', function (e) { - toastr.error("复制失败"); + layer.msg('复制失败'); copy.off("error"); }); } function lookimgs(id,urls) { //单张图片预览 - var viewer = new Viewer(document.getElementById('imgs'+id)); + var viewer = new Viewer(document.getElementById('imgs'+id),{ + // inline: true, + // url: 'data-original', + // navbar: false, + // zoomRatio: 0.4, + // button: true, + // title: false, + // keyboard: false, + toolbar: { + zoomIn: 1, + zoomOut: 1, + oneToOne: 1, + reset: 1, + prev: 0, + play: 0, + next: 0, + rotateLeft: 1, + rotateRight: 1, + flipHorizontal: 1, + flipVertical: 1, + }, + viewed: function () { + viewer.view(0); + } + }); document.getElementById('imgs'+id).click(); } @@ -454,7 +453,7 @@ if(kooltype==1){ var output = Mustache.render('{{imgurl}}', view); }else{ - var output = Mustache.render('', view); + var output = Mustache.render('', view); } return output; }, @@ -496,7 +495,6 @@ title: '性质', formatter: function (value, rows, index) { var type = ""; - console.log(rows.imgtype) if (rows.imgtype == 1) { type = "临时"; } else { @@ -512,12 +510,16 @@ var view = { imgurl: rows.imgurl, path:rows.imgname, - size:rows.sizes + size:rows.sizes, + + id:rows.id, + source:rows.source }; var htm = ''+ "  ";//复制 htm += Mustache.render(""+ "  ", view) ;//二维码 - htm += "";//删除 + //htm += "";//删除 + htm += Mustache.render("",view); return htm; }, align: 'center' diff --git a/src/main/resources/templates/admin/user.html b/src/main/resources/templates/admin/user.html index 658aa10..444cb3e 100644 --- a/src/main/resources/templates/admin/user.html +++ b/src/main/resources/templates/admin/user.html @@ -151,6 +151,8 @@ function setisko(id,val) { layer.msg('设置成功', {icon: 1}); }else if(data==-1){ layer.msg('设置失败', {icon: 2}); + }else if(data==-2){ + layer.msg('无法对自己进行操作', {icon: 2}); } } }); diff --git a/src/main/resources/templates/admin/webconfig.html b/src/main/resources/templates/admin/webconfig.html index 7afe8b3..fde583c 100644 --- a/src/main/resources/templates/admin/webconfig.html +++ b/src/main/resources/templates/admin/webconfig.html @@ -67,21 +67,21 @@

- +

-
- -
- -
-
-
+ + + + + + + + @@ -95,12 +95,20 @@
- 不填写,则不显示 + 不填写,则不显示(请合理管理长度,若输入超长代码块可能导致字符溢出,保存失败。)

+ +
+ + +
+
+
+
@@ -108,7 +116,7 @@

-
+
@@ -206,7 +214,7 @@
- 配个类型用“ , ”隔开 + 配个类型用“ , ”隔开(PS:只可以设置图片格式,其他文件格式无效)

图片链接格式

@@ -268,7 +276,7 @@
- 添加网站统计的JS代码,不需要要添加<script>标签</script> +
@@ -286,89 +294,114 @@ var isapi = [[${updateConfig.getApi()}]]; var state = [[${sysconfig==null?0:sysconfig.getRegister()}]]; var group = [[${group}]]; - $(function () { - layui.use(['form','table','element'], function(){ - var table = layui.table; - var element = layui.element; - var form = layui.form; - //监听指定开关 - form.on('switch(switchTest)', function (data) { - if (this.checked == true) { - isupdate(1); - } else { - isupdate(0); - } - }); - form.on('switch(switchTest2)', function (data) { - if (this.checked == true) { - upapi(1); - } else { - upapi(0); - } - }); - form.on('switch(switchTest3)', function (data) { - if (this.checked == true) { - setstate(1); - } else { - setstate(2); - } - }); - form.on('select(group)', function(data){ - group = data.value; - }); - $('#group').val(group); - form.render('select'); - }); + + var usertype = [[${updateConfig.getUrltype()!=null?updateConfig.getUrltype():1}]]; + var backtype = [[${config.getBacktype()!=null?config.getBacktype():1}]]; + var sett = [[${config.getSett()}]]; + var theme = [[${config.getTheme()}]]; + + var form = null; + layui.use(['form','table','element'], function(){ + var table = layui.table; + var element = layui.element; + form = layui.form; + //监听指定开关 + form.on('switch(switchTest)', function (data) { + if (this.checked == true) { + isupdate(1); + } else { + isupdate(0); + } + }); + form.on('switch(switchTest2)', function (data) { + if (this.checked == true) { + upapi(1); + } else { + upapi(0); + } + }); + form.on('switch(switchTest3)', function (data) { + if (this.checked == true) { + setstate(1); + } else { + setstate(2); + } + }); + // form.on('select(group)', function(data){ + // group = data.value; + // }); + // $('#group').val(group); + form.render('select'); + + form.on('radio(themetype)', function (data) { + if(data.value==1){ + $('.themetypeone').show(); + }else{ + $('.themetypeone').hide(); + } + + }); + + }); + + + window.onload=function (){ if (isupval == 1) { $('#upopen').attr("checked", 'hellohao'); //增加属性 } else { $('#upopen').removeAttr("checked"); //移除属性 } if (isapi == 1) { - $('#bedapi').attr("checked", 'hellohao'); //增加属性 + $('#bedapi').attr("checked", 'hellohao'); } else { - $('#bedapi').removeAttr("checked"); //移除属性 + $('#bedapi').removeAttr("checked"); } if (state == 1) { - $('#dologo').attr("checked", 'hellohao'); //增加属性 + $('#dologo').attr("checked", 'hellohao'); } else { - $('#dologo').removeAttr("checked"); //移除属性 + $('#dologo').removeAttr("checked"); } - }); - $(function () { - var usertype = [[${updateConfig.getUrltype()!=null?updateConfig.getUrltype():1}]]; - var backtype = [[${config.getBacktype()!=null?config.getBacktype():1}]]; - var sett = [[${config.getSett()}]]; - if(usertype==2){ - $('#urltype2:radio:input:radio:last').attr('checked', 'true'); - }else{ - $('#urltype1:radio:first').attr('checked', 'true'); - } - if(backtype==2){ - $('#backtype2:radio:input:radio:last').attr('checked', 'true'); - }else{ - $('#backtype1:radio:first').attr('checked', 'true'); - } + if(usertype==2){ + $('#urltype2:radio:input:radio:last').attr('checked', 'true'); + }else{ + $('#urltype1:radio:first').attr('checked', 'true'); + } + if(backtype==2){ + $('#backtype2:radio:input:radio:last').attr('checked', 'true'); + }else{ + $('#backtype1:radio:first').attr('checked', 'true'); + } if(sett != 1){ $('#sett22:radio:input:radio:last').attr('checked', 'true'); }else{ $('#sett11:radio:first').attr('checked', 'true'); } - $.ajax({ - type: "POST", - url: "/admin/root/getgrouplist", - //data: {groupid:groupid}, - dataType: "json", - success: function (data) { - var body = '';// - for(var i=0;i'+data[i].groupname+''; - } - $('#group').append(body); - form.render('select'); - } - }); + if(theme != 1){ + $('#themetype2:radio:input:radio:last').attr('checked', 'true'); + $('.themetypeone').hide(); + }else{ + $('#themetype1:radio:first').attr('checked', 'true'); + $('.themetypeone').show(); + } + // form.render('select'); + layui.form.render(); + } + + $(function () { + // $.ajax({ + // type: "POST", + // url: "/admin/root/getgrouplist", + // //data: {groupid:groupid}, + // dataType: "json", + // success: function (data) { + // var body = '';// + // for(var i=0;i'+data[i].groupname+''; + // } + // $('#group').append(body); + // } + // }); }); function updateconfig() { var webname = $("#webname").val(); @@ -384,13 +417,15 @@ var webms = $("#webms").val(); var webkeywords = $("#webkeywords").val(); var webfavicons = $("#webfavicons").val(); + var theme = $('#theme input[name="themetype"]:checked ').val(); if (webname != "" && domain!="" ) { $.ajax({ type: "POST", url: "/admin/root/updateconfig", dataType: "json", data: {webname: webname, explain: explain, video: video,backtype:backtype,links:links,notice:notice, - domain:domain,background1:background1,background2:background2,sett:sett,webms:webms,webkeywords:webkeywords,webfavicons:webfavicons}, + domain:domain,background1:background1,background2:background2,sett:sett,webms:webms, + webkeywords:webkeywords,webfavicons:webfavicons,theme:theme}, success: function (data) { var vals = Number(data); if (vals > 0) { @@ -524,22 +559,7 @@ }); } - function webset() { - $.ajax({ - type: "POST", - url: "/admin/root/settstoragetype", - dataType: "json", - data: {storagetype: group}, - success: function (data) { - var vals = Number(data); - if (vals > 0) { - layer.msg("保存成功", {icon: 1}); - } else { - layer.msg("保存失败,请尝试刷新页面后操作", {icon: 2}); - } - } - }); - } + \ No newline at end of file diff --git a/src/main/resources/templates/album/addalbum.html b/src/main/resources/templates/album/addalbum.html new file mode 100644 index 0000000..ca8d0fd --- /dev/null +++ b/src/main/resources/templates/album/addalbum.html @@ -0,0 +1,204 @@ + + + + + 创建画廊 + + + + + + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
    + +
+
+
+
+ 创建 +
+
+
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/album/album_new.html b/src/main/resources/templates/album/album_new.html new file mode 100644 index 0000000..6bfd336 --- /dev/null +++ b/src/main/resources/templates/album/album_new.html @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+

+

© Photo album sharing from hellohao

+ +
+
+ + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/err.html b/src/main/resources/templates/err.html index 1f436a9..2e90c1b 100644 --- a/src/main/resources/templates/err.html +++ b/src/main/resources/templates/err.html @@ -4,14 +4,48 @@ 登录超时 + -

登录已过期,请重新登录

+
+
+
+
+
+

登录已过期,请重新登录

\ No newline at end of file diff --git a/src/main/resources/templates/exception.html b/src/main/resources/templates/exception.html new file mode 100644 index 0000000..5ee3b73 --- /dev/null +++ b/src/main/resources/templates/exception.html @@ -0,0 +1,17 @@ + + + + + 登录超时 + + + +
+
+
+
+
+

+ + + \ No newline at end of file diff --git a/src/main/resources/templates/index-Minimalism.html b/src/main/resources/templates/index-Minimalism.html new file mode 100644 index 0000000..78bc2b6 --- /dev/null +++ b/src/main/resources/templates/index-Minimalism.html @@ -0,0 +1,913 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+
+ +
+
+
+
+ 您也可以尝试文件拖拽,使用截屏工具,然后激活窗口后使用Ctrl+V粘贴。 +
+ 使用图片URL地址上传 +
+ +
+
+
+ +
+
+
+
+
+
+ + +

+
+
+
+
+ © 2019 Hellohao - All Rights Reserved - Collect from Hellohao博客 +
+
+
+
+
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index aa23ed7..b25b795 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -2,34 +2,25 @@ - + - - - - + - + - - - - - - - +
@@ -164,12 +160,12 @@ data-section-pos="0" data-section-posy="0">首页
  • 登录 
  • -
  • 注册 
  • +
  • 注册
  • - + + + + @@ -186,11 +182,12 @@
    -

    +

    立即上传 +

    纯粹免费的图片驿站

    @@ -198,8 +195,9 @@ Hellohao Figure bed:support several mainstream object storage, CDN acceleration is more stable. Technology constantly updated, we will always move forward on the road ahead.

    -
    - +
    +
    +
    days
    @@ -225,18 +223,18 @@
    +
    - @@ -260,7 +258,7 @@

    - 您也可以尝试文件拖拽,使用QQ截屏工具,然后激活窗口后粘贴。 + 您也可以尝试文件拖拽,使用截屏工具,然后激活窗口后粘贴。
    使用图片URL地址上传
    @@ -284,10 +282,10 @@
    @@ -297,10 +295,13 @@
    - - - -
    + + + + + + +
    @@ -374,42 +375,27 @@
    - - -
    - + + + + + + + - + + - - - - + - + + - + diff --git a/src/main/resources/templates/isok.html b/src/main/resources/templates/isok.html index 4253d6b..7c8d17e 100644 --- a/src/main/resources/templates/isok.html +++ b/src/main/resources/templates/isok.html @@ -4,8 +4,9 @@ - - + + + @@ -13,6 +14,7 @@


    +
    @@ -32,15 +34,14 @@

    您的账号已 成功激活 啦,注册用户可上传更大图片和所有的上传历史记录。快去试试吧!



    -

    +

    -
    @@ -58,7 +59,7 @@
    - By Hellohao All rights reserved. +