diff --git a/sparchetype/pom.xml b/sparchetype/pom.xml index 7adcd09..c0039e4 100644 --- a/sparchetype/pom.xml +++ b/sparchetype/pom.xml @@ -48,6 +48,17 @@ org.springframework.boot spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-security + + + + org.thymeleaf.extras + thymeleaf-extras-springsecurity5 + + org.projectlombok @@ -107,6 +118,11 @@ 3.9 + + org.springframework.boot + spring-boot-devtools + true + diff --git a/sparchetype/src/main/java/com/songpeng/blog/controller/client/BlogController.java b/sparchetype/src/main/java/com/songpeng/blog/controller/client/BlogController.java index f025320..cdef331 100644 --- a/sparchetype/src/main/java/com/songpeng/blog/controller/client/BlogController.java +++ b/sparchetype/src/main/java/com/songpeng/blog/controller/client/BlogController.java @@ -17,10 +17,8 @@ public class BlogController { @Autowired private BlogService blogService; - @GetMapping("/hello") + @GetMapping String blog() { - String hello = blogService.hello(); - System.out.println(hello); return "client/blog/index"; } diff --git a/sparchetype/src/main/java/com/songpeng/blog/service/BlogService.java b/sparchetype/src/main/java/com/songpeng/blog/service/BlogService.java index 0bab260..ecbc7df 100644 --- a/sparchetype/src/main/java/com/songpeng/blog/service/BlogService.java +++ b/sparchetype/src/main/java/com/songpeng/blog/service/BlogService.java @@ -5,5 +5,4 @@ package com.songpeng.blog.service; */ public interface BlogService { - String hello(); } diff --git a/sparchetype/src/main/java/com/songpeng/blog/service/impl/BlogServiceImpl.java b/sparchetype/src/main/java/com/songpeng/blog/service/impl/BlogServiceImpl.java index 5e9c4bc..cd73723 100644 --- a/sparchetype/src/main/java/com/songpeng/blog/service/impl/BlogServiceImpl.java +++ b/sparchetype/src/main/java/com/songpeng/blog/service/impl/BlogServiceImpl.java @@ -5,13 +5,10 @@ import org.springframework.stereotype.Service; /** * Controller - * Created by songpeng on 2019/5/21. + * @author songpeng + * @date 2019/5/21 */ @Service public class BlogServiceImpl implements BlogService { - @Override - public String hello() { - return "hello"; - } } diff --git a/sparchetype/src/main/java/com/songpeng/common/advice/ApiAdvice.java b/sparchetype/src/main/java/com/songpeng/common/advice/ApiAdvice.java index 9643a48..ef12577 100644 --- a/sparchetype/src/main/java/com/songpeng/common/advice/ApiAdvice.java +++ b/sparchetype/src/main/java/com/songpeng/common/advice/ApiAdvice.java @@ -20,7 +20,7 @@ import javax.servlet.http.HttpServletRequest; @ControllerAdvice public class ApiAdvice { - public static final Logger logger = LoggerFactory.getLogger(ApiAdvice.class); + public static final Logger LOGGER = LoggerFactory.getLogger(ApiAdvice.class); /** * 应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器 @@ -65,7 +65,7 @@ public class ApiAdvice { @ExceptionHandler(Exception.class) @ResponseBody public ApiResponse handle(HttpServletRequest request, Exception e) throws Exception { - logger.error("API接口调用异常: {}", request.getRequestURI(), e); + LOGGER.error("API接口调用异常: {}", request.getRequestURI(), e); return ApiResponse.error(ApiResponse.ERROR_CODE, ApiResponse.ERROR_MSG); } diff --git a/sparchetype/src/main/java/com/songpeng/common/config/WebSecurityConfig.java b/sparchetype/src/main/java/com/songpeng/common/config/WebSecurityConfig.java new file mode 100644 index 0000000..b53c4c6 --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/common/config/WebSecurityConfig.java @@ -0,0 +1,46 @@ +package com.songpeng.common.config; + +import com.songpeng.system.service.impl.SysUserServiceImpl; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.userdetails.UserDetailsService; + +/** + * Controller + * + * @author songpeng + * @date 2019/5/23 + */ +@Configuration +@EnableWebSecurity +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + + @Bean + UserDetailsService customUserService() { //注册UserDetailsService 的bean + return new SysUserServiceImpl(); + } + + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + // user Details Service验证 + auth.userDetailsService(customUserService()); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + // TODO 1. csrf 暂时关闭 + http.authorizeRequests().anyRequest().permitAll().and().csrf().disable(); +// .anyRequest().authenticated() //任何请求,登录后可以访问 +// .and() +// .formLogin() +// .loginPage("/login") +// .failureUrl("/login?error") +// .permitAll() //登录页面用户任意访问 +// .and() +// .logout().permitAll(); //注销行为任意访问 + } +} diff --git a/sparchetype/src/main/java/com/songpeng/common/utils/ByteUtil.java b/sparchetype/src/main/java/com/songpeng/common/utils/ByteUtil.java new file mode 100644 index 0000000..56074ab --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/common/utils/ByteUtil.java @@ -0,0 +1,123 @@ +package com.songpeng.common.utils; + +import java.util.regex.Pattern; + +/** + * ByteUtil + * + * @author songpeng + * @date 2019/5/23 + */ +public class ByteUtil { + + /** + * Join two byte arrays to a new byte array. + */ + public static byte[] concat(byte[] buf1, byte[] buf2) { + byte[] buffer = new byte[buf1.length + buf2.length]; + int offset = 0; + System.arraycopy(buf1, 0, buffer, offset, buf1.length); + offset += buf1.length; + System.arraycopy(buf2, 0, buffer, offset, buf2.length); + return buffer; + } + + /** + * Join three byte arrays to a new byte array. + */ + public static byte[] concat(byte[] buf1, byte[] buf2, byte[] buf3) { + byte[] buffer = new byte[buf1.length + buf2.length + buf3.length]; + int offset = 0; + System.arraycopy(buf1, 0, buffer, offset, buf1.length); + offset += buf1.length; + System.arraycopy(buf2, 0, buffer, offset, buf2.length); + offset += buf2.length; + System.arraycopy(buf3, 0, buffer, offset, buf3.length); + return buffer; + } + + /** + * Convert bytes to hex string (all lower-case). + * + * @param b Input bytes. + * @return Hex string. + */ + public static String toHexString(byte[] b) { + StringBuilder sb = new StringBuilder(b.length * 2); + for (byte x : b) { + int hi = (x & 0xf0) >> 4; + int lo = x & 0x0f; + sb.append(HEX_CHARS[hi]); + sb.append(HEX_CHARS[lo]); + } + return sb.toString().trim(); + } + + /** + * Convert byte to hex string (all lower-case). + * + * @param b Input bytes. + * @return Hex string. + */ + public static String toHex(byte b) { + int hi = (b & 0xf0) >> 4; + int lo = b & 0x0f; + char[] cs = { HEX_CHARS[hi], HEX_CHARS[lo] }; + return new String(cs); + } + + public static byte fromHex(String s) { + if (s.length() != 2) { + throw new IllegalArgumentException("Invalid length of string."); + } + char c1 = s.charAt(0); + char c2 = s.charAt(1); + int n1 = HEX_STRING.indexOf(c1); + int n2 = HEX_STRING.indexOf(c2); + if (n1 == (-1)) { + throw new IllegalArgumentException("Invalid char in string: " + c1); + } + if (n2 == (-1)) { + throw new IllegalArgumentException("Invalid char in string: " + c2); + } + int n = (n1 << 4) + n2; + return (byte) n; + } + + public static byte[] fromHexString(String s) { + if (s.length() % 2 == 1) { + throw new IllegalArgumentException("Invalid length of string."); + } + byte[] data = new byte[s.length() / 2]; + for (int i = 0; i < data.length; i++) { + char c1 = s.charAt(i * 2); + char c2 = s.charAt(i * 2 + 1); + int n1 = HEX_STRING.indexOf(c1); + int n2 = HEX_STRING.indexOf(c2); + if (n1 == (-1)) { + throw new IllegalArgumentException("Invalid char in string: " + c1); + } + if (n2 == (-1)) { + throw new IllegalArgumentException("Invalid char in string: " + c2); + } + int n = (n1 << 4) + n2; + data[i] = (byte) n; + } + return data; + } + + public static boolean isSha1(String s) { + return PATTERN_SHA1.matcher(s).matches(); + } + + public static boolean isSha256(String s) { + return PATTERN_SHA256.matcher(s).matches(); + } + + private static final String HEX_STRING = "0123456789abcdef"; + private static final char[] HEX_CHARS = HEX_STRING.toCharArray(); + + private static final Pattern PATTERN_SHA1 = Pattern.compile("^[a-f0-9]{40}$"); + private static final Pattern PATTERN_SHA256 = Pattern.compile("^[a-f0-9]{64}$"); + +} diff --git a/sparchetype/src/main/java/com/songpeng/common/utils/HashUtil.java b/sparchetype/src/main/java/com/songpeng/common/utils/HashUtil.java new file mode 100644 index 0000000..a1d2dfd --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/common/utils/HashUtil.java @@ -0,0 +1,212 @@ +package com.songpeng.common.utils; + +import java.nio.charset.StandardCharsets; +import java.security.GeneralSecurityException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; + +/** + * Utility class for hashing. + * + * @author songpeng + * @date 2019/5/23 + */ +public class HashUtil { + + /** + * Generate SHA-1 as hex string (all lower-case). + * + * @param input Input as string. + * @return Hex string. + */ + public static String sha1(String input) { + return sha1(input.getBytes(StandardCharsets.UTF_8)); + } + + /** + * Generate SHA-1 as hex string (all lower-case). + * + * @param input Input as bytes. + * @return Hex string. + */ + public static String sha1(byte[] input) { + MessageDigest md = null; + try { + md = MessageDigest.getInstance("SHA1"); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + md.update(input); + byte[] digest = md.digest(); + return ByteUtil.toHexString(digest); + } + + public static byte[] sha1AsBytes(String input) { + return sha1AsBytes(input.getBytes(StandardCharsets.UTF_8)); + } + + /** + * Generate SHA-1 as bytes. + * + * @param input Input as bytes. + * @return Bytes. + */ + public static byte[] sha1AsBytes(byte[] input) { + MessageDigest md = null; + try { + md = MessageDigest.getInstance("SHA1"); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + md.update(input); + return md.digest(); + } + + /** + * Generate SHA-256 as hex string (all lower-case). + * + * @param input Input as String. + * @return Hex string. + */ + public static String sha256(String input) { + return sha256(input.getBytes(StandardCharsets.UTF_8)); + } + + /** + * Generate SHA-256 as hex string (all lower-case). + * + * @param input Input as String. + * @return Hex string. + */ + public static byte[] sha256AsBytes(String input) { + return sha256AsBytes(input.getBytes(StandardCharsets.UTF_8)); + } + + /** + * Generate SHA-256 as hex string (all lower-case). + * + * @param input Input as bytes. + * @return Hex string. + */ + public static String sha256(byte[] input) { + MessageDigest md = null; + try { + md = MessageDigest.getInstance("SHA-256"); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + md.update(input); + byte[] digest = md.digest(); + return ByteUtil.toHexString(digest); + } + + /** + * Generate SHA-256 as bytes. + * + * @param input Input as bytes. + * @return SHA bytes. + */ + public static byte[] sha256AsBytes(byte[] input) { + MessageDigest md = null; + try { + md = MessageDigest.getInstance("SHA-256"); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + md.update(input); + return md.digest(); + } + + /** + * Generate SHA-512 as bytes. + * + * @param input Input as bytes. + * @return SHA bytes. + */ + public static byte[] sha512AsBytes(byte[] input) { + MessageDigest md = null; + try { + md = MessageDigest.getInstance("SHA-512"); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + md.update(input); + return md.digest(); + } + + /** + * Do HMAC-SHA256. + * + * @return Hex string. + */ + public static byte[] hmacSha256AsBytes(byte[] data, byte[] key) { + SecretKey skey = new SecretKeySpec(key, "HmacSHA256"); + Mac mac; + try { + mac = Mac.getInstance("HmacSHA256"); + mac.init(skey); + } catch (GeneralSecurityException e) { + throw new RuntimeException(e); + } + mac.update(data); + return mac.doFinal(); + } + + /** + * Do HMAC-SHA256. + * + * @return Hex string. + */ + public static String hmacSha256(byte[] data, byte[] key) { + return ByteUtil.toHexString(hmacSha256AsBytes(data, key)); + } + + /** + * Do HMAC-SHA1. + * + * @return byte[] as result. + */ + public static byte[] hmacSha1(byte[] data, byte[] key) { + SecretKey skey = new SecretKeySpec(key, "HmacSHA1"); + Mac mac; + try { + mac = Mac.getInstance("HmacSHA1"); + mac.init(skey); + } catch (GeneralSecurityException e) { + throw new RuntimeException(e); + } + mac.update(data); + return mac.doFinal(); + } + + /** + * Do HMAC-SHA256. + * + * @return byte[] as result. + */ + public static String hmacSha256(String data, String key) { + return hmacSha256(data.getBytes(StandardCharsets.UTF_8), key.getBytes(StandardCharsets.UTF_8)); + } + + /** + * Do HMAC-SHA256. + * + * @return byte[] as result. + */ + public static byte[] hmacSha256AsBytes(String data, String key) { + return hmacSha256AsBytes(data.getBytes(StandardCharsets.UTF_8), key.getBytes(StandardCharsets.UTF_8)); + } + + /** + * Do HMAC-SHA256. + * + * @return byte[] as result. + */ + public static String hmacSha256(byte[] data, String key) { + return hmacSha256(data, key.getBytes(StandardCharsets.UTF_8)); + } +} diff --git a/sparchetype/src/main/java/com/songpeng/common/utils/IdUtil.java b/sparchetype/src/main/java/com/songpeng/common/utils/IdUtil.java new file mode 100644 index 0000000..4c4c34d --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/common/utils/IdUtil.java @@ -0,0 +1,130 @@ +package com.songpeng.common.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 53 bits unique id: + * + * |--------|--------|--------|--------|--------|--------|--------|--------| + * |00000000|00011111|11111111|11111111|11111111|11111111|11111111|11111111| + * |--------|---xxxxx|xxxxxxxx|xxxxxxxx|xxxxxxxx|xxx-----|--------|--------| + * |--------|--------|--------|--------|--------|---xxxxx|xxxxxxxx|xxx-----| + * |--------|--------|--------|--------|--------|--------|--------|---xxxxx| + * + * Maximum ID = 11111_11111111_11111111_11111111_11111111_11111111_11111111 + * + * Maximum TS = 11111_11111111_11111111_11111111_111 + * + * Maximum NT = ----- -------- -------- -------- ---11111_11111111_111 = 65535 + * + * Maximum SH = ----- -------- -------- -------- -------- -------- ---11111 = 31 + * + * It can generate 64k unique id per IP and up to 2106-02-07T06:28:15Z. + * + * 时间戳减去一个固定值,此方案最高可支持到2106年。 + * + * 如果每秒65万个序列号不够怎么办?没关系,可以继续递增时间戳,向前“借”下一秒的65万个序列号。 + * + * 同时还解决了时间回拨的问题。 + * + * 机器标识采用简单的主机名方案,只要主机名符合host-1,host-2就可以自动提取机器标识,无需配置。 + * + * 最后,为什么采用最多53位整型,而不是64位整型?这是因为考虑到大部分应用程序是Web应用, + * 如果要和JavaScript打交道,由于JavaScript支持的最大整型就是53位,超过这个位数,JavaScript将丢失精度。 + * 因此,使用53位整数可以直接由JavaScript读取,而超过53位时,就必须转换成字符串才能保证JavaScript处理正确, + * 这会给API接口带来额外的复杂度。这也是为什么新浪微博的API接口会同时返回id和idstr的原因。 + * + * 参考链接:https://mp.weixin.qq.com/s/C6QkzzUMPiYov8GO8zJTLA + * + * @author songpeng + * @date 2019/05/23 + */ +public final class IdUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(IdUtil.class); + + private static final Pattern PATTERN_LONG_ID = Pattern.compile("^([0-9]{15})([0-9a-f]{32})([0-9a-f]{3})$"); + + private static final Pattern PATTERN_HOSTNAME = Pattern.compile("^.*\\D+([0-9]+)$"); + + private static final long OFFSET = LocalDate.of(2000, 1, 1).atStartOfDay(ZoneId.of("Z")).toEpochSecond(); + + private static final long MAX_NEXT = 0b11111_11111111_111L; + + private static final long SHARD_ID = getServerIdAsLong(); + + private static long offset = 0; + + private static long lastEpoch = 0; + + public static long nextId() { + return nextId(System.currentTimeMillis() / 1000); + } + + private static synchronized long nextId(long epochSecond) { + if (epochSecond < lastEpoch) { + // warning: clock is turn back: + LOGGER.warn("clock is back: " + epochSecond + " from previous:" + lastEpoch); + epochSecond = lastEpoch; + } + if (lastEpoch != epochSecond) { + lastEpoch = epochSecond; + reset(); + } + offset++; + long next = offset & MAX_NEXT; + if (next == 0) { + LOGGER.warn("maximum id reached in 1 second in epoch: " + epochSecond); + return nextId(epochSecond + 1); + } + return generateId(epochSecond, next, SHARD_ID); + } + + private static void reset() { + offset = 0; + } + + private static long generateId(long epochSecond, long next, long shardId) { + return ((epochSecond - OFFSET) << 21) | (next << 5) | shardId; + } + + private static long getServerIdAsLong() { + try { + String hostname = InetAddress.getLocalHost().getHostName(); + Matcher matcher = PATTERN_HOSTNAME.matcher(hostname); + if (matcher.matches()) { + long n = Long.parseLong(matcher.group(1)); + if (n >= 0 && n < 8) { + LOGGER.info("detect server id from host name {}: {}.", hostname, n); + return n; + } + } + } catch (UnknownHostException e) { + LOGGER.warn("unable to get host name. set server id = 0."); + } + return 0; + } + + public static long stringIdToLongId(String stringId) { + // a stringId id is composed as timestamp (15) + uuid (32) + serverId (000~fff). + Matcher matcher = PATTERN_LONG_ID.matcher(stringId); + if (matcher.matches()) { + long epoch = Long.parseLong(matcher.group(1)) / 1000; + String uuid = matcher.group(2); + byte[] sha1 = HashUtil.sha1AsBytes(uuid); + long next = ((sha1[0] << 24) | (sha1[1] << 16) | (sha1[2] << 8) | sha1[3]) & MAX_NEXT; + long serverId = Long.parseLong(matcher.group(3), 16); + return generateId(epoch, next, serverId); + } + throw new IllegalArgumentException("Invalid id: " + stringId); + } + +} diff --git a/sparchetype/src/main/java/com/songpeng/common/utils/package-info.java b/sparchetype/src/main/java/com/songpeng/common/utils/package-info.java new file mode 100644 index 0000000..0d256b3 --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/common/utils/package-info.java @@ -0,0 +1,54 @@ +/** + 在应用程序中,经常需要全局唯一的ID作为数据库主键。如何生成全局唯一ID? + + 首先,需要确定全局唯一ID是整型还是字符串?如果是字符串,那么现有的UUID就完全满足需求,不需要额外的工作。缺点是字符串作为ID占用空间大,索引效率比整型低。 + + 如果采用整型作为ID,那么首先排除掉32位int类型,因为范围太小,必须使用64位long型。 + + 采用整型作为ID时,如何生成自增、全局唯一且不重复的ID? + + 方案一:利用数据库的自增ID,从1开始,基本可以做到连续递增。Oracle可以用SEQUENCE,MySQL可以用主键的AUTO_INCREMENT,虽然不能保证全局唯一,但每个表唯一,也基本满足需求。 + + 数据库自增ID的缺点是数据在插入前,无法获得ID。数据在插入后,获取的ID虽然是唯一的,但一定要等到事务提交后,ID才算是有效的。有些双向引用的数据,不得不插入后再做一次更新,比较麻烦。 + + 第二种方式是采用一个集中式ID生成器,它可以是Redis,也可以是ZooKeeper,也可以利用数据库的表记录最后分配的ID。 + + 这种方式最大的缺点是复杂性太高,需要严重依赖第三方服务,而且代码配置繁琐。一般来说,越是复杂的方案,越不可靠,并且测试越痛苦。 + + 第三种方式是类似Twitter的Snowflake算法,它给每台机器分配一个唯一标识,然后通过时间戳+标识+自增实现全局唯一ID。这种方式好处在于ID生成算法完全是一个无状态机,无网络调用,高效可靠。缺点是如果唯一标识有重复,会造成ID冲突。 + + Snowflake算法采用41bit毫秒时间戳,加上10bit机器ID,加上12bit序列号,理论上最多支持1024台机器每秒生成4096000个序列号,对于Twitter的规模来说够用了。 + + 但是对于绝大部分普通应用程序来说,根本不需要每秒超过400万的ID,机器数量也达不到1024台,所以,我们可以改进一下,使用更短的ID生成方式: + + 53bitID由32bit秒级时间戳+16bit自增+5bit机器标识组成,累积32台机器,每秒可以生成65万个序列号,核心代码: + + private static synchronized long nextId(long epochSecond) { + if (epochSecond < lastEpoch) { + // warning: clock is turn back: + logger.warn("clock is back: " + epochSecond + " from previous:" + lastEpoch); + epochSecond = lastEpoch; + } + if (lastEpoch != epochSecond) { + lastEpoch = epochSecond; + reset(); + } + offset++; + long next = offset & MAX_NEXT; + if (next == 0) { + logger.warn("maximum id reached in 1 second in epoch: " + epochSecond); + return nextId(epochSecond + 1); + } + return generateId(epochSecond, next, SHARD_ID); + } + 时间戳减去一个固定值,此方案最高可支持到2106年。 + + 如果每秒65万个序列号不够怎么办?没关系,可以继续递增时间戳,向前“借”下一秒的65万个序列号。 + + 同时还解决了时间回拨的问题。 + + 机器标识采用简单的主机名方案,只要主机名符合host-1,host-2就可以自动提取机器标识,无需配置。 + + 最后,为什么采用最多53位整型,而不是64位整型?这是因为考虑到大部分应用程序是Web应用,如果要和JavaScript打交道,由于JavaScript支持的最大整型就是53位,超过这个位数,JavaScript将丢失精度。因此,使用53位整数可以直接由JavaScript读取,而超过53位时,就必须转换成字符串才能保证JavaScript处理正确,这会给API接口带来额外的复杂度。这也是为什么新浪微博的API接口会同时返回id和idstr的原因。 + */ +package com.songpeng.common.utils; \ No newline at end of file diff --git a/sparchetype/src/main/java/com/songpeng/system/controller/admin/SysUserController.java b/sparchetype/src/main/java/com/songpeng/system/controller/admin/SysUserController.java new file mode 100644 index 0000000..4ca640a --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/system/controller/admin/SysUserController.java @@ -0,0 +1,52 @@ +package com.songpeng.system.controller.admin; + +import com.github.pagehelper.PageInfo; +import com.songpeng.common.utils.ApiResponse; +import com.songpeng.common.utils.PageRequest; +import com.songpeng.system.domain.SysUser; +import com.songpeng.system.dto.SysUserDto; +import com.songpeng.system.service.SysUserService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.Map; + +/** + * 用户 Controller + * + * @author songpeng + * @date 2019-04-19 + */ +@RequestMapping("/admin/sys/user") +@Controller("adminUserController") +public class SysUserController { + + /** + * 日志记录器 + */ + private static final Logger LOGGER = LoggerFactory.getLogger(SysUserController.class); + + @Autowired + private SysUserService sysUserService; + + @RequestMapping("/page") + @ResponseBody + public ApiResponse getPage(PageRequest pageRequest) { + LOGGER.info("获取用户列表"); + PageInfo pageInfo = sysUserService.getPage(pageRequest); + Map result = new HashMap<>(1); + result.put("result", pageInfo); + return ApiResponse.ok(result); + } + + @PostMapping("/add") + @ResponseBody + public ApiResponse add(SysUser sysUser, String[] roles) { + sysUserService.add(sysUser, roles); + return ApiResponse.ok(); + } +} diff --git a/sparchetype/src/main/java/com/songpeng/system/controller/admin/UserController.java b/sparchetype/src/main/java/com/songpeng/system/controller/admin/UserController.java deleted file mode 100644 index cfcb590..0000000 --- a/sparchetype/src/main/java/com/songpeng/system/controller/admin/UserController.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.songpeng.system.controller.admin; - -import com.github.pagehelper.PageInfo; -import com.songpeng.common.utils.ApiResponse; -import com.songpeng.common.utils.PageRequest; -import com.songpeng.system.domain.User; -import com.songpeng.system.service.UserService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.HashMap; -import java.util.Map; - -/** - * 用户 Controller - * - * @author songpeng - * @date 2019-04-19 - */ -@RequestMapping("/admin/sys/user") -@Controller("adminUserController") -public class UserController { - - @Autowired - private UserService userService; - - /** - * 日志记录器 - */ - private static final Logger logger = LoggerFactory.getLogger(UserController.class); - - @RequestMapping("/page") - @ResponseBody - public ApiResponse getPage(PageRequest pageRequest) { - logger.info("获取用户列表"); - PageInfo pageInfo = userService.getPage(pageRequest); - Map res = new HashMap<>(2); - res.put("result", pageInfo); - return ApiResponse.ok(res); - } - -} diff --git a/sparchetype/src/main/java/com/songpeng/system/controller/client/LoginController.java b/sparchetype/src/main/java/com/songpeng/system/controller/client/LoginController.java index 0a04cb8..dc107ac 100644 --- a/sparchetype/src/main/java/com/songpeng/system/controller/client/LoginController.java +++ b/sparchetype/src/main/java/com/songpeng/system/controller/client/LoginController.java @@ -31,4 +31,34 @@ public class LoginController { return "redirect:/blog"; } + /** + * 访问后台管理系统首页 + * + * @param model + * @return + */ + @GetMapping({"/index"}) + String index(Model model) { +// List> menus = menuService.listMenuTree(getUserId()); +// model.addAttribute("menus", menus); +// model.addAttribute("name", getUser().getName()); +// FileDO fileDO = fileService.get(getUser().getPicId()); +// if (fileDO != null && fileDO.getUrl() != null) { +// if (fileService.isExist(fileDO.getUrl())) { +// model.addAttribute("picUrl", fileDO.getUrl()); +// } else { +// model.addAttribute("picUrl", "/img/photo_s.jpg"); +// } +// } else { +// model.addAttribute("picUrl", "/img/photo_s.jpg"); +// } +// model.addAttribute("username", getUser().getUsername()); + return "admin/index"; + } + + @GetMapping("/main") + String main() { + return "admin/main"; + } + } diff --git a/sparchetype/src/main/java/com/songpeng/system/domain/SysRole.java b/sparchetype/src/main/java/com/songpeng/system/domain/SysRole.java new file mode 100644 index 0000000..33e179e --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/system/domain/SysRole.java @@ -0,0 +1,38 @@ +package com.songpeng.system.domain; + +/** + * 系统角色 + * + * @author songpeng + * @date 2019/5/23 + */ +public class SysRole { + private Long id; + private String name; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("SysRole{"); + sb.append("id=").append(id); + sb.append(", name='").append(name).append('\''); + sb.append('}'); + return sb.toString(); + } + +} diff --git a/sparchetype/src/main/java/com/songpeng/system/domain/SysUser.java b/sparchetype/src/main/java/com/songpeng/system/domain/SysUser.java new file mode 100644 index 0000000..7a0fd46 --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/system/domain/SysUser.java @@ -0,0 +1,71 @@ +package com.songpeng.system.domain; + +import javax.persistence.Column; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; + +/** + * 系统用户 + * + * @author songpeng + * @date 2019/05/21 + */ +@Table(name = "SYS_USER") +public class SysUser implements Serializable { + + private static final long serialVersionUID = -583330206794726157L; + + @Id + @Column(name = "ID") + private Long id; + @Column(name = "NAME") + private String name; + @Column(name = "USERNAME") + private String username; + @Column(name = "PASSWORD") + private String password; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("SysUser{"); + sb.append("id=").append(id); + sb.append(", name='").append(name).append('\''); + sb.append(", username='").append(username).append('\''); + sb.append(", password='").append(password).append('\''); + sb.append('}'); + return sb.toString(); + } +} diff --git a/sparchetype/src/main/java/com/songpeng/system/domain/User.java b/sparchetype/src/main/java/com/songpeng/system/domain/User.java deleted file mode 100644 index 2041d7f..0000000 --- a/sparchetype/src/main/java/com/songpeng/system/domain/User.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.songpeng.system.domain; - -/** - * Controller - * Created by songpeng on 2019/5/21. - */ -public class User { - private String id; - private String name; - private String username; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - @Override - public String toString() { - final StringBuffer sb = new StringBuffer("User{"); - sb.append("id='").append(id).append('\''); - sb.append(", name='").append(name).append('\''); - sb.append(", username='").append(username).append('\''); - sb.append('}'); - return sb.toString(); - } -} diff --git a/sparchetype/src/main/java/com/songpeng/system/dto/SysUserDto.java b/sparchetype/src/main/java/com/songpeng/system/dto/SysUserDto.java new file mode 100644 index 0000000..f717e04 --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/system/dto/SysUserDto.java @@ -0,0 +1,72 @@ +package com.songpeng.system.dto; + +import com.songpeng.system.domain.SysRole; +import com.songpeng.system.domain.SysUser; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * 系统用户 dto + * + * @author songpeng + * @date 2019/5/23 + */ +public class SysUserDto extends SysUser implements UserDetails { + + @Override + public Collection getAuthorities() { +// List authorityList = new ArrayList<>(); +// authorityList.add(new RoleGrantedAuthority("ROLE_USER")); +// +// // 加入角色权限 +// if (roleList != null && !roleList.isEmpty()) { +// for (SysRole role : roleList) { +// if (StringUtils.isNotBlank(role.getCode())) { +// authorityList.add(new RoleGrantedAuthority("ROLE_" + role.getCode().toUpperCase())); +// } +// } +// } +// return authorityList; + return null; + } + + /** + * 账户是否过期,过期无法验证 + * @return + */ + @Override + public boolean isAccountNonExpired() { + return true; + } + + /** + * 指定用户是否被锁定或者解锁,锁定的用户无法进行身份验证 + * @return + */ + @Override + public boolean isAccountNonLocked() { + return false; + } + + /** + * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证 + * @return + */ + @Override + public boolean isCredentialsNonExpired() { + return false; + } + + /** + * 是否被禁用,禁用的用户不能身份验证 + * @return + */ + @Override + public boolean isEnabled() { + return false; + } +} diff --git a/sparchetype/src/main/java/com/songpeng/system/mapper/SysUserMapper.java b/sparchetype/src/main/java/com/songpeng/system/mapper/SysUserMapper.java new file mode 100644 index 0000000..db86972 --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/system/mapper/SysUserMapper.java @@ -0,0 +1,17 @@ +package com.songpeng.system.mapper; + +import com.songpeng.common.utils.SpMapper; +import com.songpeng.system.domain.SysUser; +import com.songpeng.system.dto.SysUserDto; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SysUserMapper extends SpMapper { + + List getPage(Map params); + + List getSysUserDtosRoles(Map paramMap); +} diff --git a/sparchetype/src/main/java/com/songpeng/system/mapper/UserMapper.java b/sparchetype/src/main/java/com/songpeng/system/mapper/UserMapper.java deleted file mode 100644 index 1447b68..0000000 --- a/sparchetype/src/main/java/com/songpeng/system/mapper/UserMapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.songpeng.system.mapper; - -import com.songpeng.system.domain.User; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; -import java.util.Map; - -@Mapper -public interface UserMapper { - - List getPage(Map params); -} diff --git a/sparchetype/src/main/java/com/songpeng/system/service/SysUserService.java b/sparchetype/src/main/java/com/songpeng/system/service/SysUserService.java new file mode 100644 index 0000000..fafa670 --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/system/service/SysUserService.java @@ -0,0 +1,33 @@ +package com.songpeng.system.service; + +import com.github.pagehelper.PageInfo; +import com.songpeng.common.utils.PageRequest; +import com.songpeng.system.domain.SysUser; +import com.songpeng.system.dto.SysUserDto; + +import java.util.Map; + +/** + * UserService + * @author songpeng + * @date 2019/4/20. + */ +public interface SysUserService { + + /** + * 获取用户分页 + * @param pageRequest + * @return + */ + PageInfo getPage(PageRequest pageRequest); + + /** + * 获取用户信息(包含权限) + * @param paramMap + * @return + */ + SysUserDto getUserDtoRoles(Map paramMap); + + void add(SysUser sysUser, String[] roles); + +} diff --git a/sparchetype/src/main/java/com/songpeng/system/service/UserService.java b/sparchetype/src/main/java/com/songpeng/system/service/UserService.java deleted file mode 100644 index 21dff83..0000000 --- a/sparchetype/src/main/java/com/songpeng/system/service/UserService.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.songpeng.system.service; - -import com.github.pagehelper.PageInfo; -import com.songpeng.common.utils.PageRequest; -import com.songpeng.system.domain.User; - -/** - * UserService - * @author songpeng - * @date 2019/4/20. - */ -public interface UserService { - - /** - * 获取用户分页 - * @param pageRequest - * @return - */ - PageInfo getPage(PageRequest pageRequest); - -} diff --git a/sparchetype/src/main/java/com/songpeng/system/service/impl/SysUserServiceImpl.java b/sparchetype/src/main/java/com/songpeng/system/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..21e5468 --- /dev/null +++ b/sparchetype/src/main/java/com/songpeng/system/service/impl/SysUserServiceImpl.java @@ -0,0 +1,79 @@ +package com.songpeng.system.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.songpeng.common.utils.IdUtil; +import com.songpeng.common.utils.PageRequest; +import com.songpeng.common.utils.StringUtils; +import com.songpeng.system.domain.SysUser; +import com.songpeng.system.dto.SysUserDto; +import com.songpeng.system.mapper.SysUserMapper; +import com.songpeng.system.service.SysUserService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * UserServiceImpl + * + * @author songpeng + * @date 2019/4/20 + */ +@Service +public class SysUserServiceImpl implements SysUserService, UserDetailsService { + + private static final Logger LOGGER = LoggerFactory.getLogger(SysUserServiceImpl.class); + + @Autowired + private SysUserMapper sysUserMapper; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + if (StringUtils.isBlank(username)) { + throw new BadCredentialsException("用户名不能为空!"); + } + + // 根据用户名和正常状态获取用户信息 + Map paraMap = new HashMap(1) {{ + put("userName", username); + }}; + SysUserDto userDto = getUserDtoRoles(paraMap); + + if (userDto == null) { + throw new BadCredentialsException("未找到用户名为 " + username + " 的用户信息"); + } + + return userDto; + } + + @Override + public PageInfo getPage(PageRequest pageRequest) { + // 将参数传给这个方法就可以实现物理分页了 + PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize()); + List users = sysUserMapper.getPage(pageRequest.getParams()); + PageInfo result = new PageInfo(users); + return result; + } + + @Override + public SysUserDto getUserDtoRoles(Map paramMap) { + List userDtos = sysUserMapper.getSysUserDtosRoles(paramMap); + return userDtos.isEmpty() ? null : userDtos.get(0); + } + + @Override + public void add(SysUser sysUser, String[] roles) { + sysUser.setId(IdUtil.nextId()); + LOGGER.info("user insert id: {}", sysUser.getId()); + sysUserMapper.insertSelective(sysUser); + } +} diff --git a/sparchetype/src/main/java/com/songpeng/system/service/impl/UserServiceImpl.java b/sparchetype/src/main/java/com/songpeng/system/service/impl/UserServiceImpl.java deleted file mode 100644 index 77c47fd..0000000 --- a/sparchetype/src/main/java/com/songpeng/system/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.songpeng.system.service.impl; - -import com.github.pagehelper.PageHelper; -import com.github.pagehelper.PageInfo; -import com.songpeng.common.utils.PageRequest; -import com.songpeng.system.domain.User; -import com.songpeng.system.mapper.UserMapper; -import com.songpeng.system.service.UserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * UserServiceImpl - * - * @author songpeng - * @date 2019/4/20 - */ -@Service -public class UserServiceImpl implements UserService { - - @Autowired - private UserMapper userMapper; - - @Override - public PageInfo getPage(PageRequest pageRequest) { - //将参数传给这个方法就可以实现物理分页了,非常简单。 - PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize()); - List users = userMapper.getPage(pageRequest.getParams()); - PageInfo result = new PageInfo(users); - return result; - } - -} diff --git a/sparchetype/src/main/resources/mybatis/mapper/user/UserMapper.xml b/sparchetype/src/main/resources/mybatis/mapper/user/UserMapper.xml index 33be542..a582755 100644 --- a/sparchetype/src/main/resources/mybatis/mapper/user/UserMapper.xml +++ b/sparchetype/src/main/resources/mybatis/mapper/user/UserMapper.xml @@ -1,10 +1,36 @@ - - SELECT - * + t.* FROM - sys_user + sys_user t + + + + \ No newline at end of file diff --git a/sparchetype/src/main/resources/static/css/animate.css b/sparchetype/src/main/resources/static/css/animate.css new file mode 100644 index 0000000..6fa907b --- /dev/null +++ b/sparchetype/src/main/resources/static/css/animate.css @@ -0,0 +1,2849 @@ +/* @charset "UTF-8"; + +! +Animate.css - http://daneden.me/animate +Licensed under the MIT license + +Copyright (c) 2013 Daniel Eden + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + z-index: 100; +} + +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} + +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} + +@-webkit-keyframes bounce { + 0%, 20%, 50%, 80%, 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + + 40% { + -webkit-transform: translateY(-30px); + transform: translateY(-30px); + } + + 60% { + -webkit-transform: translateY(-15px); + transform: translateY(-15px); + } +} + +@keyframes bounce { + 0%, 20%, 50%, 80%, 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + + 40% { + -webkit-transform: translateY(-30px); + -ms-transform: translateY(-30px); + transform: translateY(-30px); + } + + 60% { + -webkit-transform: translateY(-15px); + -ms-transform: translateY(-15px); + transform: translateY(-15px); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; +} + +@-webkit-keyframes flash { + 0%, 50%, 100% { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +@keyframes flash { + 0%, 50%, 100% { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} + +originally authored by Nick Pettit - https://github.com/nickpettit/glide + +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 50% { + -webkit-transform: scale(1.1); + transform: scale(1.1); + } + + 100% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes pulse { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + + 50% { + -webkit-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + + 100% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} + +@-webkit-keyframes rubberBand { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 30% { + -webkit-transform: scaleX(1.25) scaleY(0.75); + transform: scaleX(1.25) scaleY(0.75); + } + + 40% { + -webkit-transform: scaleX(0.75) scaleY(1.25); + transform: scaleX(0.75) scaleY(1.25); + } + + 60% { + -webkit-transform: scaleX(1.15) scaleY(0.85); + transform: scaleX(1.15) scaleY(0.85); + } + + 100% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes rubberBand { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + + 30% { + -webkit-transform: scaleX(1.25) scaleY(0.75); + -ms-transform: scaleX(1.25) scaleY(0.75); + transform: scaleX(1.25) scaleY(0.75); + } + + 40% { + -webkit-transform: scaleX(0.75) scaleY(1.25); + -ms-transform: scaleX(0.75) scaleY(1.25); + transform: scaleX(0.75) scaleY(1.25); + } + + 60% { + -webkit-transform: scaleX(1.15) scaleY(0.85); + -ms-transform: scaleX(1.15) scaleY(0.85); + transform: scaleX(1.15) scaleY(0.85); + } + + 100% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} + +@-webkit-keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translateX(-10px); + transform: translateX(-10px); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translateX(10px); + transform: translateX(10px); + } +} + +@keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translateX(-10px); + -ms-transform: translateX(-10px); + transform: translateX(-10px); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translateX(10px); + -ms-transform: translateX(10px); + transform: translateX(10px); + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} + +@-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); + } + + 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate(15deg); + -ms-transform: rotate(15deg); + transform: rotate(15deg); + } + + 40% { + -webkit-transform: rotate(-10deg); + -ms-transform: rotate(-10deg); + transform: rotate(-10deg); + } + + 60% { + -webkit-transform: rotate(5deg); + -ms-transform: rotate(5deg); + transform: rotate(5deg); + } + + 80% { + -webkit-transform: rotate(-5deg); + -ms-transform: rotate(-5deg); + transform: rotate(-5deg); + } + + 100% { + -webkit-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(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: scale(1); + transform: scale(1); + } + + 10%, 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + + 100% { + -webkit-transform: scale(1) rotate(0); + transform: scale(1) rotate(0); + } +} + +@keyframes tada { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + + 10%, 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + + 100% { + -webkit-transform: scale(1) rotate(0); + -ms-transform: scale(1) rotate(0); + transform: scale(1) rotate(0); + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} + +originally authored by Nick Pettit - https://github.com/nickpettit/glide + +@-webkit-keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + transform: translateX(0%); + } + + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg); + } + + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg); + } + + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg); + } + + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg); + } + + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg); + } + + 100% { + -webkit-transform: translateX(0%); + transform: translateX(0%); + } +} + +@keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + -ms-transform: translateX(0%); + transform: translateX(0%); + } + + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + -ms-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg); + } + + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + -ms-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg); + } + + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + -ms-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg); + } + + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + -ms-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg); + } + + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + -ms-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg); + } + + 100% { + -webkit-transform: translateX(0%); + -ms-transform: translateX(0%); + transform: translateX(0%); + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(.3); + transform: scale(.3); + } + + 50% { + opacity: 1; + -webkit-transform: scale(1.05); + transform: scale(1.05); + } + + 70% { + -webkit-transform: scale(.9); + transform: scale(.9); + } + + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(.3); + -ms-transform: scale(.3); + transform: scale(.3); + } + + 50% { + opacity: 1; + -webkit-transform: scale(1.05); + -ms-transform: scale(1.05); + transform: scale(1.05); + } + + 70% { + -webkit-transform: scale(.9); + -ms-transform: scale(.9); + transform: scale(.9); + } + + 100% { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} + +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; +} + +@-webkit-keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } + + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + transform: translateY(30px); + } + + 80% { + -webkit-transform: translateY(-10px); + transform: translateY(-10px); + } + + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } + + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + -ms-transform: translateY(30px); + transform: translateY(30px); + } + + 80% { + -webkit-transform: translateY(-10px); + -ms-transform: translateY(-10px); + transform: translateY(-10px); + } + + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } + + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + transform: translateX(30px); + } + + 80% { + -webkit-transform: translateX(-10px); + transform: translateX(-10px); + } + + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } + + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + -ms-transform: translateX(30px); + transform: translateX(30px); + } + + 80% { + -webkit-transform: translateX(-10px); + -ms-transform: translateX(-10px); + transform: translateX(-10px); + } + + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } + + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + transform: translateX(-30px); + } + + 80% { + -webkit-transform: translateX(10px); + transform: translateX(10px); + } + + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } + + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + -ms-transform: translateX(-30px); + transform: translateX(-30px); + } + + 80% { + -webkit-transform: translateX(10px); + -ms-transform: translateX(10px); + transform: translateX(10px); + } + + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } + + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + transform: translateY(-30px); + } + + 80% { + -webkit-transform: translateY(10px); + transform: translateY(10px); + } + + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } + + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + -ms-transform: translateY(-30px); + transform: translateY(-30px); + } + + 80% { + -webkit-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); + } + + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; +} + +@-webkit-keyframes bounceOut { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 25% { + -webkit-transform: scale(.95); + transform: scale(.95); + } + + 50% { + opacity: 1; + -webkit-transform: scale(1.1); + transform: scale(1.1); + } + + 100% { + opacity: 0; + -webkit-transform: scale(.3); + transform: scale(.3); + } +} + +@keyframes bounceOut { + 0% { + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + + 25% { + -webkit-transform: scale(.95); + -ms-transform: scale(.95); + transform: scale(.95); + } + + 50% { + opacity: 1; + -webkit-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + } + + 100% { + opacity: 0; + -webkit-transform: scale(.3); + -ms-transform: scale(.3); + transform: scale(.3); + } +} + +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; +} + +@-webkit-keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +@keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; +} + +@-webkit-keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + transform: translateX(20px); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +@keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; +} + +@-webkit-keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +@keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + -ms-transform: translateX(-20px); + transform: translateX(-20px); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; +} + +@-webkit-keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + transform: translateY(20px); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +@keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +.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 { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +@-webkit-keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + } + + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; +} + +@-webkit-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } + + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } + + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; +} + +@-webkit-keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-20px); + -ms-transform: translateX(-20px); + transform: translateX(-20px); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} + +@-webkit-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; +} + +@-webkit-keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(20px); + transform: translateX(20px); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(40px); + -ms-transform: translateX(40px); + transform: translateX(40px); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; +} + +@-webkit-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; +} + +@-webkit-keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(20px); + transform: translateY(20px); + } + + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } + + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} + +@-webkit-keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } + + 100% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } + + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} + +@-webkit-keyframes fadeOut { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} + +@keyframes fadeOut { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOutDown { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(20px); + transform: translateY(20px); + } +} + +@keyframes fadeOutDown { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} + +@-webkit-keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +@keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; +} + +@-webkit-keyframes fadeOutLeft { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + } +} + +@keyframes fadeOutLeft { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(-20px); + -ms-transform: translateX(-20px); + transform: translateX(-20px); + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} + +@-webkit-keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +@keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; +} + +@-webkit-keyframes fadeOutRight { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(20px); + transform: translateX(20px); + } +} + +@keyframes fadeOutRight { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px); + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} + +@-webkit-keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +@keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; +} + +@-webkit-keyframes fadeOutUp { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + } +} + +@keyframes fadeOutUp { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} + +@-webkit-keyframes fadeOutUpBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +@keyframes fadeOutUpBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; +} + +@-webkit-keyframes flip { + 0% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 100% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@keyframes flip { + 0% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + -ms-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + transform: perspective(400px) translateZ(0) rotateY(0) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 100% { + -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + -ms-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); + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg); + } + + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg); + } + + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1; + } +} + +@keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + -ms-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg); + } + + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + -ms-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg); + } + + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1; + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + -ms-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); + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg); + } + + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg); + } + + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1; + } +} + +@keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + -ms-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg); + } + + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + -ms-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg); + } + + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1; + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0; + } +} + +@keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + opacity: 0; + } +} + +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@-webkit-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0; + } +} + +@keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; +} + +@-webkit-keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + opacity: 1; + } + + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + opacity: 1; + } + + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1; + } +} + +@keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + -ms-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + opacity: 1; + } + + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + -ms-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + opacity: 1; + } + + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + 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% { + -webkit-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1; + } + + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + opacity: 0; + } +} + +@keyframes lightSpeedOut { + 0% { + -webkit-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + opacity: 1; + } + + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) 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 center; + transform-origin: center center; + -webkit-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +@keyframes rotateIn { + 0% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(-200deg); + -ms-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(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(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +@keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(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(90deg); + transform: rotate(90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +@keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(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(90deg); + transform: rotate(90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +@keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(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; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +@keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; +} + +@-webkit-keyframes rotateOut { + 0% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + + 100% { + -webkit-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(200deg); + transform: rotate(200deg); + opacity: 0; + } +} + +@keyframes rotateOut { + 0% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + + 100% { + -webkit-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; + -webkit-transform: rotate(200deg); + -ms-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; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; +} + +@-webkit-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} + +@keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; +} + +@-webkit-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; +} + +@-webkit-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + + 100% { + -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; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; +} + +@-webkit-keyframes slideInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } + + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } +} + +@keyframes slideInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } + + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; +} + +@-webkit-keyframes slideInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } + + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes slideInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } + + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; +} + +@-webkit-keyframes slideInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } + + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes slideInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } + + 100% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; +} + +@-webkit-keyframes slideOutLeft { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +@keyframes slideOutLeft { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; +} + +@-webkit-keyframes slideOutRight { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +@keyframes slideOutRight { + 0% { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -ms-transform: translateX(2000px); + transform: translateX(2000px); + } +} + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; +} + +@-webkit-keyframes slideOutUp { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +@keyframes slideOutUp { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} + +@-webkit-keyframes slideOutDown { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +@keyframes slideOutDown { + 0% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -ms-transform: translateY(2000px); + transform: translateY(2000px); + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} + +@-webkit-keyframes hinge { + 0% { + -webkit-transform: rotate(0); + transform: rotate(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% { + -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; + } + + 80% { + -webkit-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + -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: translateY(700px); + transform: translateY(700px); + opacity: 0; + } +} + +@keyframes hinge { + 0% { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + -webkit-transform-origin: top left; + -ms-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); + -ms-transform: rotate(80deg); + transform: rotate(80deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40% { + -webkit-transform: rotate(60deg); + -ms-transform: rotate(60deg); + transform: rotate(60deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 80% { + -webkit-transform: rotate(60deg) translateY(0); + -ms-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + -webkit-transform-origin: top left; + -ms-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: translateY(700px); + -ms-transform: translateY(700px); + transform: translateY(700px); + opacity: 0; + } +} + +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge; +} + +originally authored by Nick Pettit - https://github.com/nickpettit/glide + +@-webkit-keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } +} + +@keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } +} + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; +} + +originally authored by Nick Pettit - https://github.com/nickpettit/glide + +@-webkit-keyframes rollOut { + 0% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(100%) rotate(120deg); + transform: translateX(100%) rotate(120deg); + } +} + +@keyframes rollOut { + 0% { + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(100%) rotate(120deg); + -ms-transform: translateX(100%) rotate(120deg); + transform: translateX(100%) rotate(120deg); + } +} + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; +} + */ \ No newline at end of file diff --git a/sparchetype/src/main/resources/static/css/plugins/toastr/toastr.min.css b/sparchetype/src/main/resources/static/css/plugins/toastr/toastr.min.css new file mode 100644 index 0000000..738e63d --- /dev/null +++ b/sparchetype/src/main/resources/static/css/plugins/toastr/toastr.min.css @@ -0,0 +1,222 @@ +.toast-title { + font-weight: 700 +} + +.toast-message { + -ms-word-wrap: break-word; + word-wrap: break-word +} + +.toast-message a, .toast-message label { + color: #fff +} + +.toast-message a:hover { + color: #ccc; + text-decoration: none +} + +.toast-close-button { + position: relative; + right: -.3em; + top: -.3em; + float: right; + font-size: 20px; + font-weight: 700; + color: #fff; + -webkit-text-shadow: 0 1px 0 #fff; + text-shadow: 0 1px 0 #fff; + opacity: .8; + -ms-filter: alpha(Opacity=80); + filter: alpha(opacity=80) +} + +.toast-close-button:focus, .toast-close-button:hover { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .4; + -ms-filter: alpha(Opacity=40); + filter: alpha(opacity=40) +} + +button.toast-close-button { + padding: 0; + cursor: pointer; + background: 0 0; + border: 0; + -webkit-appearance: none +} + +.toast-top-center { + top: 0; + right: 0; + width: 100% +} + +.toast-bottom-center { + bottom: 0; + right: 0; + width: 100% +} + +.toast-top-full-width { + top: 0; + right: 0; + width: 100% +} + +.toast-bottom-full-width { + bottom: 0; + right: 0; + width: 100% +} + +.toast-top-left { + top: 12px; + left: 12px +} + +.toast-top-right { + top: 12px; + right: 12px +} + +.toast-bottom-right { + right: 12px; + bottom: 12px +} + +.toast-bottom-left { + bottom: 12px; + left: 12px +} + +#toast-container { + position: fixed; + z-index: 999999 +} + +#toast-container * { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box +} + +#toast-container > div { + position: relative; + overflow: hidden; + margin: 0 0 6px; + padding: 15px 15px 15px 50px; + width: 300px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background-position: 15px center; + background-repeat: no-repeat; + -moz-box-shadow: 0 0 12px #999; + -webkit-box-shadow: 0 0 12px #999; + box-shadow: 0 0 12px #999; + color: #fff; + opacity: .8; + -ms-filter: alpha(Opacity=80); + filter: alpha(opacity=80) +} + +#toast-container > :hover { + -moz-box-shadow: 0 0 12px #000; + -webkit-box-shadow: 0 0 12px #000; + box-shadow: 0 0 12px #000; + opacity: 1; + -ms-filter: alpha(Opacity=100); + filter: alpha(opacity=100); + cursor: pointer +} + +#toast-container > .toast-info { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=) !important +} + +#toast-container > .toast-error { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=) !important +} + +#toast-container > .toast-success { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==) !important +} + +#toast-container > .toast-warning { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=) !important +} + +#toast-container.toast-bottom-center > div, #toast-container.toast-top-center > div { + width: 300px; + margin: auto +} + +#toast-container.toast-bottom-full-width > div, #toast-container.toast-top-full-width > div { + width: 96%; + margin: auto +} + +.toast { + background-color: #030303 +} + +.toast-success { + background-color: #51a351 +} + +.toast-error { + background-color: #bd362f +} + +.toast-info { + background-color: #2f96b4 +} + +.toast-warning { + background-color: #f89406 +} + +.toast-progress { + position: absolute; + left: 0; + bottom: 0; + height: 4px; + background-color: #000; + opacity: .4; + -ms-filter: alpha(Opacity=40); + filter: alpha(opacity=40) +} + +@media all and (max-width: 240px) { + #toast-container > div { + padding: 8px 8px 8px 50px; + width: 11em + } + + #toast-container .toast-close-button { + right: -.2em; + top: -.2em + } +} + +@media all and (min-width: 241px) and (max-width: 480px) { + #toast-container > div { + padding: 8px 8px 8px 50px; + width: 18em + } + + #toast-container .toast-close-button { + right: -.2em; + top: -.2em + } +} + +@media all and (min-width: 481px) and (max-width: 768px) { + #toast-container > div { + padding: 15px 15px 15px 50px; + width: 25em + } +} diff --git a/sparchetype/src/main/resources/static/css/style.css b/sparchetype/src/main/resources/static/css/style.css new file mode 100644 index 0000000..41c51dc --- /dev/null +++ b/sparchetype/src/main/resources/static/css/style.css @@ -0,0 +1,7366 @@ +/* + * + * H+ - 后台主题UI框架 + * version 4.0 + * 修改记录 + * .checkbox-inline input[type=checkbox] 去掉margin-top:-4px + * .checkbox-inline 添加font-size: 14px;默认是13px + * .onoffswitch-inner:before, ; /* height: 16px; 两处 + * + * .file-control { + * color: inherit; + * font-size: 14px; + * add nopadding class + * + * + * +*/ +h1, h2, h3, h4, h5, h6 { + font-weight: 100; +} + +h1 { + font-size: 30px; +} + +h2 { + font-size: 24px; +} + +h3 { + font-size: 16px; +} + +h4 { + font-size: 14px; +} + +h5 { + font-size: 12px; +} + +h6 { + font-size: 10px; +} + +h3, h4, h5 { + margin-top: 5px; + font-weight: 600; +} + +a:focus { + outline: none; +} + +.nav>li>a { + color: #a7b1c2; + font-weight: 600; + padding: 14px 20px 14px 25px; +} + +.nav li>a { + display: block; + /*white-space: nowrap;*/ +} + +.nav.navbar-right>li>a { + color: #999c9e; +} + +.nav>li.active>a { + color: #ffffff; +} + +.navbar-default .nav>li>a:hover, .navbar-default .nav>li>a:focus { + background-color: #293846; + color: white; +} + +.nav .open>a, .nav .open>a:hover, .nav .open>a:focus { + background: #fff; +} + +.nav>li>a i { + margin-right: 6px; +} + +.navbar { + border: 0; +} + +.navbar-default { + background-color: transparent; + border-color: #2f4050; + position: relative; +} + +.navbar-top-links li { + display: inline-block; +} + +.navbar-top-links li:last-child { + margin-right: 30px; +} + +body.body-small .navbar-top-links li:last-child { + margin-right: 10px; +} + +.navbar-top-links li a { + padding: 20px 10px; + min-height: 50px; +} + +.dropdown-menu { + border: medium none; + display: none; + float: left; + font-size: 12px; + left: 0; + list-style: none outside none; + padding: 0; + position: absolute; + text-shadow: none; + top: 100%; + z-index: 1000; + border-radius: 0; + box-shadow: 0 0 3px rgba(86, 96, 117, 0.3); +} + +.dropdown-menu>li>a { + border-radius: 3px; + color: inherit; + line-height: 25px; + margin: 4px; + text-align: left; + font-weight: normal; +} + +.dropdown-menu>li>a.font-bold { + font-weight: 600; +} + +.navbar-top-links .dropdown-menu li { + display: block; +} + +.navbar-top-links .dropdown-menu li:last-child { + margin-right: 0; +} + +.navbar-top-links .dropdown-menu li a { + padding: 3px 20px; + min-height: 0; +} + +.navbar-top-links .dropdown-menu li a div { + white-space: normal; +} + +.navbar-top-links .dropdown-messages, .navbar-top-links .dropdown-tasks, .navbar-top-links .dropdown-alerts { + width: 310px; + min-width: 0; +} + +.navbar-top-links .dropdown-messages { + margin-left: 5px; +} + +.navbar-top-links .dropdown-tasks { + margin-left: -59px; +} + +.navbar-top-links .dropdown-alerts { + margin-left: -123px; +} + +.navbar-top-links .dropdown-user { + right: 0; + left: auto; +} + +.dropdown-messages, .dropdown-alerts { + padding: 10px 10px 10px 10px; +} + +.dropdown-messages li a, .dropdown-alerts li a { + font-size: 12px; +} + +.dropdown-messages li em, .dropdown-alerts li em { + font-size: 10px; +} + +.nav.navbar-top-links .dropdown-alerts a { + font-size: 12px; +} + +.nav-header { + padding: 33px 25px; + background: url("patterns/header-profile.png") no-repeat; +} + +.pace-done .nav-header { + -webkit-transition: all 0.5s; + transition: all 0.5s; +} + +.nav>li.active { + border-left: 4px solid #19aa8d; + background: #293846; +} + +.nav.nav-second-level>li.active { + border: none; +} + +.nav.nav-second-level.collapse[style] { + height: auto !important; +} + +.nav-header a { + color: #DFE4ED; +} + +.nav-header .text-muted { + color: #8095a8; +} + +.minimalize-styl-2 { + padding: 4px 12px; + margin: 14px 5px 5px 20px; + font-size: 14px; + float: left; +} + +.navbar-form-custom { + float: left; + height: 50px; + padding: 0; + width: 200px; + display: inline-table; +} + +.navbar-form-custom .form-group { + margin-bottom: 0; +} + +.nav.navbar-top-links a { + font-size: 14px; +} + +.navbar-form-custom .form-control { + background: none repeat scroll 0 0 rgba(0, 0, 0, 0); + border: medium none; + font-size: 14px; + height: 60px; + margin: 0; + z-index: 2000; +} + +.count-info .label { + line-height: 12px; + padding: 1px 5px; + position: absolute; + right: 6px; + top: 12px; +} + +.arrow { + float: right; + margin-top: 2px; +} + +.fa.arrow:before { + content: "\f104"; +} + +.active>a>.fa.arrow:before { + content: "\f107"; +} + +.nav-second-level li, .nav-third-level li { + border-bottom: none !important; +} + +.nav-second-level li a { + padding: 7px 15px 7px 10px; + padding-left: 52px; +} + +.nav-third-level li a { + padding-left: 62px; +} + +.nav-second-level li:last-child { + margin-bottom: 10px; +} + +body:not(.fixed-sidebar ):not(.canvas-menu ).mini-navbar .nav li:hover>.nav-second-level,.mini-navbar .nav li:focus>.nav-second-level { + display: block; + border-radius: 0 2px 2px 0; + min-width: 140px; + height: auto; +} + +body.mini-navbar .navbar-default .nav>li>.nav-second-level li a { + font-size: 12px; + border-radius: 0 2px 2px 0; +} + +.fixed-nav .slimScrollDiv #side-menu { + padding-bottom: 60px; + position: relative; +} + +.fixed-sidebar.mini-navbar .slimScrollDiv>* { + overflow: visible!important; +} + +.fixed-sidebar .slimScrollDiv>* { + overflow-y: hidden; + overflow-x: visible; +} + +.mini-navbar .nav-second-level li a { + padding: 10px 10px 10px 15px; +} + +.canvas-menu.mini-navbar .nav-second-level { + background: #293846; +} + +.mini-navbar li.active .nav-second-level { + left: 65px; +} + +.navbar-default .special_link a { + background: #1ab394; + color: white; +} + +.navbar-default .special_link a:hover { + background: #17987e !important; + color: white; +} + +.navbar-default .special_link a span.label { + background: #fff; + color: #1ab394; +} + +.navbar-default .landing_link a { + background: #1cc09f; + color: white; +} + +.navbar-default .landing_link a:hover { + background: #1ab394 !important; + color: white; +} + +.navbar-default .landing_link a span.label { + background: #fff; + color: #1cc09f; +} + +.logo-element { + text-align: center; + font-size: 18px; + font-weight: 600; + color: white; + display: none; + padding: 18px 0; +} + +.pace-done .navbar-static-side, .pace-done .nav-header, .pace-done li.active, .pace-done #page-wrapper, .pace-done .footer { + -webkit-transition: all 0.5s; + transition: all 0.5s; +} + +.navbar-fixed-top { + background: #fff; + -webkit-transition-duration: 0.5s; + transition-duration: 0.5s; + z-index: 2030; +} + +.navbar-fixed-top, .navbar-static-top { + background: #f3f3f4; +} + +.fixed-nav #wrapper { + padding-top: 60px; + box-sizing: border-box; +} + +.fixed-nav .minimalize-styl-2 { + margin: 14px 5px 5px 15px; +} + +.body-small .navbar-fixed-top { + margin-left: 0px; +} + +body.mini-navbar .navbar-static-side { + width: 70px; +} + +body.mini-navbar .profile-element, body.mini-navbar .nav-label, body.mini-navbar .navbar-default .nav li a span { + display: none; +} + +body.canvas-menu .profile-element { + display: block; +} + +body:not(.fixed-sidebar ):not(.canvas-menu ).mini-navbar .nav-second-level { + display: none; +} + +body.mini-navbar .navbar-default .nav>li>a { + font-size: 16px; +} + +body.mini-navbar .logo-element { + display: block; +} + +body.canvas-menu .logo-element { + display: none; +} + +body.mini-navbar .nav-header { + padding: 0; + background-color: #1ab394; +} + +body.canvas-menu .nav-header { + padding: 33px 25px; +} + +body.mini-navbar #page-wrapper { + margin: 0 0 0 70px; +} + +body.canvas-menu.mini-navbar #page-wrapper, body.canvas-menu.mini-navbar .footer { + margin: 0 0 0 0; +} + +body.fixed-sidebar .navbar-static-side, body.canvas-menu .navbar-static-side { + position: fixed; + width: 220px; + z-index: 2001; + height: 100%; +} + +body.fixed-sidebar.mini-navbar .navbar-static-side { + width: 70px; +} + +body.fixed-sidebar.mini-navbar #page-wrapper { + margin: 0 0 0 70px; +} + +body.body-small.fixed-sidebar.mini-navbar #page-wrapper { + margin: 0 0 0 70px; +} + +body.body-small.fixed-sidebar.mini-navbar .navbar-static-side { + width: 70px; +} + +.fixed-sidebar.mini-navbar .nav li>.nav-second-level { + display: none; +} + +.fixed-sidebar.mini-navbar .nav li.active { + border-left-width: 0; +} +/*.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level, .canvas-menu.mini-navbar .nav li:hover>.nav-second-level*/ +/*{*/ +/*position: absolute;*/ +/*left: 70px;*/ +/*top: 40px;*/ +/*background-color: #2f4050;*/ +/*padding: 10px 10px 0 10px;*/ +/*font-size: 12px;*/ +/*display: block;*/ +/*min-width: 140px;*/ +/*border-radius: 2px;*/ +/*}*/ + +/*伸缩菜单*/ +.fixed-sidebar.mini-navbar .nav li:hover>a> span.nav-label { + top: 0px; + padding: 10px 10px 10px 10px; + text-align: center; + background-color: #243747; + border-bottom: dashed 1px #fff; +} + +.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level { + top: 40px; + font-size: 12px; + /*padding: 10px 10px 0 10px;*/ + background-color: #2f4050; +} + +.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level, .fixed-sidebar.mini-navbar .nav li:hover>a> span.nav-label { + position: absolute; + left: 70px; + display: block; + min-width: 140px; + border-radius: 2px; +} +/*伸缩菜单结束*/ + +body.fixed-sidebar.mini-navbar .navbar-default .nav>li>.nav-second-level li a { + font-size: 12px; + border-radius: 3px; +} + +body.canvas-menu.mini-navbar .navbar-default .nav>li>.nav-second-level li a { + font-size: 13px; + border-radius: 3px; +} + +.fixed-sidebar.mini-navbar .nav-second-level li a, .canvas-menu.mini-navbar .nav-second-level li a { + padding: 10px 10px 10px 15px; +} + +.fixed-sidebar.mini-navbar .nav-second-level, .canvas-menu.mini-navbar .nav-second-level { + position: relative; + padding: 0; + font-size: 13px; +} + +.fixed-sidebar.mini-navbar li.active .nav-second-level, .canvas-menu.mini-navbar li.active .nav-second-level { + left: 0px; +} + +body.canvas-menu nav.navbar-static-side { + z-index: 2001; + background: #2f4050; + height: 100%; + position: fixed; + display: none; +} + +body.canvas-menu.mini-navbar nav.navbar-static-side { + display: block; + width: 70px; +} + +.top-navigation #page-wrapper { + margin-left: 0; +} + +.top-navigation .navbar-nav .dropdown-menu>.active>a { + background: white; + color: #1ab394; + font-weight: bold; +} + +.white-bg .navbar-fixed-top, .white-bg .navbar-static-top { + background: #fff; +} + +.top-navigation .navbar { + margin-bottom: 0; +} + +.top-navigation .nav>li>a { + padding: 15px 20px; + color: #676a6c; +} + +.top-navigation .nav>li a:hover, .top-navigation .nav>li a:focus { + background: #fff; + color: #1ab394; +} + +.top-navigation .nav>li.active { + background: #fff; + border: none; +} + +.top-navigation .nav>li.active>a { + color: #1ab394; +} + +.top-navigation .navbar-right { + padding-right: 10px; +} + +.top-navigation .navbar-nav .dropdown-menu { + box-shadow: none; + border: 1px solid #e7eaec; +} + +.top-navigation .dropdown-menu>li>a { + margin: 0; + padding: 7px 20px; +} + +.navbar .dropdown-menu { + margin-top: 0px; +} + +.top-navigation .navbar-brand { + background: #1ab394; + color: #fff; + padding: 15px 25px; +} + +.top-navigation .navbar-top-links li:last-child { + margin-right: 0; +} + +.top-navigation.mini-navbar #page-wrapper, .top-navigation.body-small.fixed-sidebar.mini-navbar #page-wrapper, .mini-navbar .top-navigation #page-wrapper, .body-small.fixed-sidebar.mini-navbar .top-navigation #page-wrapper, .canvas-menu #page-wrapper { + margin: 0; +} + +.top-navigation.fixed-nav #wrapper, .fixed-nav #wrapper.top-navigation { + margin-top: 50px; +} + +.top-navigation .footer.fixed { + margin-left: 0 !important; +} + +.top-navigation .wrapper.wrapper-content { + padding: 40px; +} + +.top-navigation.body-small .wrapper.wrapper-content, .body-small .top-navigation .wrapper.wrapper-content { + padding: 40px 0px 40px 0px; +} + +.navbar-toggle { + background-color: #1ab394; + color: #fff; + padding: 6px 12px; + font-size: 14px; +} + +.top-navigation .navbar-nav .open .dropdown-menu>li>a, .top-navigation .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 10px 15px 10px 20px; +} + +@media ( max-width : 768px) { + .top-navigation .navbar-header { + display: block; + float: none; + } +} + +.menu-visible-lg, .menu-visible-md { + display: none !important; +} + +@media ( min-width : 1200px) { + .menu-visible-lg { + display: block !important; + } +} + +@media ( min-width : 992px) { + .menu-visible-md { + display: block !important; + } +} + +@media ( max-width : 767px) { + .menu-visible-md { + display: block !important; + } + + .menu-visible-lg { + display: block !important; + } +} + +.btn { + border-radius: 3px; +} + +.float-e-margins .btn { + margin-bottom: 5px; +} + +.btn-w-m { + min-width: 120px; +} + +.btn-primary.btn-outline { + color: #1ab394; +} + +.btn-success.btn-outline { + color: #1c84c6; +} + +.btn-info.btn-outline { + color: #23c6c8; +} + +.btn-warning.btn-outline { + color: #f8ac59; +} + +.btn-danger.btn-outline { + color: #ed5565; +} + +.btn-primary.btn-outline:hover, .btn-success.btn-outline:hover, .btn-info.btn-outline:hover, .btn-warning.btn-outline:hover, .btn-danger.btn-outline:hover { + color: #fff; +} + +.btn-primary { + background-color: #1ab394; + border-color: #1ab394; + color: #FFFFFF; +} + +.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { + background-color: #18a689; + border-color: #18a689; + color: #FFFFFF; +} + +.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { + background-image: none; +} + +.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary.active[disabled], fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active { + background-color: #1dc5a3; + border-color: #1dc5a3; +} + +.btn-success { + background-color: #1c84c6; + border-color: #1c84c6; + color: #FFFFFF; +} + +.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { + background-color: #1a7bb9; + border-color: #1a7bb9; + color: #FFFFFF; +} + +.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { + background-image: none; +} + +.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success.active[disabled], fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active { + background-color: #1f90d8; + border-color: #1f90d8; +} + +.btn-info { + background-color: #23c6c8; + border-color: #23c6c8; + color: #FFFFFF; +} + +.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { + background-color: #21b9bb; + border-color: #21b9bb; + color: #FFFFFF; +} + +.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { + background-image: none; +} + +.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info.active[disabled], fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active { + background-color: #26d7d9; + border-color: #26d7d9; +} + +.btn-default { + background-color: #c2c2c2; + border-color: #c2c2c2; + color: #FFFFFF; +} + +.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { + background-color: #bababa; + border-color: #bababa; + color: #FFFFFF; +} + +.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { + background-image: none; +} + +.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default.active[disabled], fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active { + background-color: #cccccc; + border-color: #cccccc; +} + +.btn-warning { + background-color: #f8ac59; + border-color: #f8ac59; + color: #FFFFFF; +} + +.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { + background-color: #f7a54a; + border-color: #f7a54a; + color: #FFFFFF; +} + +.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { + background-image: none; +} + +.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning.active[disabled], fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active { + background-color: #f9b66d; + border-color: #f9b66d; +} + +.btn-danger { + background-color: #ed5565; + border-color: #ed5565; + color: #FFFFFF; +} + +.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { + background-color: #ec4758; + border-color: #ec4758; + color: #FFFFFF; +} + +.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { + background-image: none; +} + +.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger.active[disabled], fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active { + background-color: #ef6776; + border-color: #ef6776; +} + +.btn-link { + color: inherit; +} + +.btn-link:hover, .btn-link:focus, .btn-link:active, .btn-link.active, .open .dropdown-toggle.btn-link { + color: #1ab394; + text-decoration: none; +} + +.btn-link:active, .btn-link.active, .open .dropdown-toggle.btn-link { + background-image: none; +} + +.btn-link.disabled, .btn-link.disabled:hover, .btn-link.disabled:focus, .btn-link.disabled:active, .btn-link.disabled.active, .btn-link[disabled], .btn-link[disabled]:hover, .btn-link[disabled]:focus, .btn-link[disabled]:active, .btn-link.active[disabled], fieldset[disabled] .btn-link, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus, fieldset[disabled] .btn-link:active, fieldset[disabled] .btn-link.active { + color: #cacaca; +} + +.btn-white { + color: inherit; + background: white; + border: 1px solid #e7eaec; +} + +.btn-white:hover, .btn-white:focus, .btn-white:active, .btn-white.active, .open .dropdown-toggle.btn-white { + color: inherit; + border: 1px solid #d2d2d2; +} + +.btn-white:active, .btn-white.active { + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset; +} + +.btn-white:active, .btn-white.active, .open .dropdown-toggle.btn-white { + background-image: none; +} + +.btn-white.disabled, .btn-white.disabled:hover, .btn-white.disabled:focus, .btn-white.disabled:active, .btn-white.disabled.active, .btn-white[disabled], .btn-white[disabled]:hover, .btn-white[disabled]:focus, .btn-white[disabled]:active, .btn-white.active[disabled], fieldset[disabled] .btn-white, fieldset[disabled] .btn-white:hover, fieldset[disabled] .btn-white:focus, fieldset[disabled] .btn-white:active, fieldset[disabled] .btn-white.active { + color: #cacaca; +} + +.form-control, .form-control:focus, .has-error .form-control:focus, .has-success .form-control:focus, .has-warning .form-control:focus, .navbar-collapse, .navbar-form, .navbar-form-custom .form-control:focus, .navbar-form-custom .form-control:hover, .open .btn.dropdown-toggle, .panel, .popover, .progress, .progress-bar { + box-shadow: none; +} + +.btn-outline { + color: inherit; + background-color: transparent; + -webkit-transition: all .5s; + transition: all .5s; +} + +.btn-rounded { + border-radius: 50px; +} + +.btn-large-dim { + width: 90px; + height: 90px; + font-size: 42px; +} + +button.dim { + display: inline-block; + color: #fff; + text-decoration: none; + text-transform: uppercase; + text-align: center; + padding-top: 6px; + margin-right: 10px; + position: relative; + cursor: pointer; + border-radius: 5px; + font-weight: 600; + margin-bottom: 20px !important; +} + +button.dim:active { + top: 3px; +} + +button.btn-primary.dim { + box-shadow: inset 0px 0px 0px #16987e, 0px 5px 0px 0px #16987e, 0px 10px 5px #999999; +} + +button.btn-primary.dim:active { + box-shadow: inset 0px 0px 0px #16987e, 0px 2px 0px 0px #16987e, 0px 5px 3px #999999; +} + +button.btn-default.dim { + box-shadow: inset 0px 0px 0px #b3b3b3, 0px 5px 0px 0px #b3b3b3, 0px 10px 5px #999999; +} + +button.btn-default.dim:active { + box-shadow: inset 0px 0px 0px #b3b3b3, 0px 2px 0px 0px #b3b3b3, 0px 5px 3px #999999; +} + +button.btn-warning.dim { + box-shadow: inset 0px 0px 0px #f79d3c, 0px 5px 0px 0px #f79d3c, 0px 10px 5px #999999; +} + +button.btn-warning.dim:active { + box-shadow: inset 0px 0px 0px #f79d3c, 0px 2px 0px 0px #f79d3c, 0px 5px 3px #999999; +} + +button.btn-info.dim { + box-shadow: inset 0px 0px 0px #1eacae, 0px 5px 0px 0px #1eacae, 0px 10px 5px #999999; +} + +button.btn-info.dim:active { + box-shadow: inset 0px 0px 0px #1eacae, 0px 2px 0px 0px #1eacae, 0px 5px 3px #999999; +} + +button.btn-success.dim { + box-shadow: inset 0px 0px 0px #1872ab, 0px 5px 0px 0px #1872ab, 0px 10px 5px #999999; +} + +button.btn-success.dim:active { + box-shadow: inset 0px 0px 0px #1872ab, 0px 2px 0px 0px #1872ab, 0px 5px 3px #999999; +} + +button.btn-danger.dim { + box-shadow: inset 0px 0px 0px #ea394c, 0px 5px 0px 0px #ea394c, 0px 10px 5px #999999; +} + +button.btn-danger.dim:active { + box-shadow: inset 0px 0px 0px #ea394c, 0px 2px 0px 0px #ea394c, 0px 5px 3px #999999; +} + +button.dim:before { + font-size: 50px; + line-height: 1em; + font-weight: normal; + color: #fff; + display: block; + padding-top: 10px; +} + +button.dim:active:before { + top: 7px; + font-size: 50px; +} + +.label { + background-color: #d1dade; + color: #5e5e5e; + font-size: 10px; + font-weight: 600; + padding: 3px 8px; + text-shadow: none; +} + +.badge { + background-color: #d1dade; + color: #5e5e5e; + font-size: 11px; + font-weight: 600; + padding-bottom: 4px; + padding-left: 6px; + padding-right: 6px; + text-shadow: none; +} + +.label-primary, .badge-primary { + background-color: #1ab394; + color: #FFFFFF; +} + +.label-success, .badge-success { + background-color: #1c84c6; + color: #FFFFFF; +} + +.label-warning, .badge-warning { + background-color: #f8ac59; + color: #FFFFFF; +} + +.label-warning-light, .badge-warning-light { + background-color: #f8ac59; + color: #ffffff; +} + +.label-danger, .badge-danger { + background-color: #ed5565; + color: #FFFFFF; +} + +.label-info, .badge-info { + background-color: #23c6c8; + color: #FFFFFF; +} + +.label-inverse, .badge-inverse { + background-color: #262626; + color: #FFFFFF; +} + +.label-white, .badge-white { + background-color: #FFFFFF; + color: #5E5E5E; +} + +.label-white, .badge-disable { + background-color: #2A2E36; + color: #8B91A0; +} +/* TOOGLE SWICH */ +.onoffswitch { + position: relative; + width: 64px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +.onoffswitch-checkbox { + display: none; +} + +.onoffswitch-label { + display: block; + overflow: hidden; + cursor: pointer; + border: 2px solid #1ab394; + border-radius: 2px; +} + +.onoffswitch-inner { + width: 200%; + margin-left: -100%; + -webkit-transition: margin 0.3s ease-in 0s; + transition: margin 0.3s ease-in 0s; +} + +.onoffswitch-inner:before, .onoffswitch-inner:after { + float: left; + width: 50%; + height: 20px; + padding: 0; + line-height: 20px; + font-size: 12px; + color: white; + font-family: Trebuchet, Arial, sans-serif; + font-weight: bold; + box-sizing: border-box; +} + +.onoffswitch-inner:before { + content: "ON"; + padding-left: 10px; + background-color: #1ab394; + color: #FFFFFF; +} + +.onoffswitch-inner:after { + content: "OFF"; + padding-right: 10px; + background-color: #FFFFFF; + color: #999999; + text-align: right; +} + +.onoffswitch-switch { + width: 20px; + margin: 0px; + background: #FFFFFF; + border: 2px solid #1ab394; + border-radius: 2px; + position: absolute; + top: 0; + bottom: 0; + right: 44px; + -webkit-transition: all 0.3s ease-in 0s; + transition: all 0.3s ease-in 0s; +} + +.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-inner { + margin-left: 0; +} + +.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch { + right: 0px; +} +/* CHOSEN PLUGIN */ +.chosen-container-single .chosen-single { + background: #ffffff; + box-shadow: none; + -moz-box-sizing: border-box; + background-color: #FFFFFF; + border: 1px solid #CBD5DD; + border-radius: 2px; + cursor: text; + height: auto !important; + margin: 0; + min-height: 30px; + overflow: hidden; + padding: 4px 12px; + position: relative; + width: 100%; +} + +.chosen-container-multi .chosen-choices li.search-choice { + background: #f1f1f1; + border: 1px solid #ededed; + border-radius: 2px; + box-shadow: none; + color: #333333; + cursor: default; + line-height: 13px; + margin: 3px 0 3px 5px; + padding: 3px 20px 3px 5px; + position: relative; +} +/* PAGINATIN */ +.pagination>.active>a, .pagination>.active>span, .pagination>.active>a:hover, .pagination>.active>span:hover, .pagination>.active>a:focus, .pagination>.active>span:focus { + background-color: #f4f4f4; + border-color: #DDDDDD; + color: inherit; + cursor: default; + z-index: 2; +} + +.pagination>li>a, .pagination>li>span { + background-color: #FFFFFF; + border: 1px solid #DDDDDD; + color: inherit; + float: left; + line-height: 1.42857; + margin-left: -1px; + padding: 4px 10px; + position: relative; + text-decoration: none; +} +/* TOOLTIPS */ +.tooltip-inner { + background-color: #2F4050; +} + +.tooltip.top .tooltip-arrow { + border-top-color: #2F4050; +} + +.tooltip.right .tooltip-arrow { + border-right-color: #2F4050; +} + +.tooltip.bottom .tooltip-arrow { + border-bottom-color: #2F4050; +} + +.tooltip.left .tooltip-arrow { + border-left-color: #2F4050; +} +/* EASY PIE CHART*/ +.easypiechart { + position: relative; + text-align: center; +} + +.easypiechart .h2 { + margin-left: 10px; + margin-top: 10px; + display: inline-block; +} + +.easypiechart canvas { + top: 0; + left: 0; +} + +.easypiechart .easypie-text { + line-height: 1; + position: absolute; + top: 33px; + width: 100%; + z-index: 1; +} + +.easypiechart img { + margin-top: -4px; +} + +.jqstooltip { + box-sizing: content-box; +} +/* FULLCALENDAR */ +.fc-state-default { + background-color: #ffffff; + background-image: none; + background-repeat: repeat-x; + box-shadow: none; + color: #333333; + text-shadow: none; +} + +.fc-state-default { + border: 1px solid; +} + +.fc-button { + color: inherit; + border: 1px solid #e7eaec; + cursor: pointer; + display: inline-block; + height: 1.9em; + line-height: 1.9em; + overflow: hidden; + padding: 0 0.6em; + position: relative; + white-space: nowrap; +} + +.fc-state-active { + background-color: #1ab394; + border-color: #1ab394; + color: #ffffff; +} + +.fc-header-title h2 { + font-size: 16px; + font-weight: 600; + color: inherit; +} + +.fc-content .fc-widget-header, .fc-content .fc-widget-content { + border-color: #e7eaec; + font-weight: normal; +} + +.fc-border-separate tbody { + background-color: #F8F8F8; +} + +.fc-state-highlight { + background: none repeat scroll 0 0 #FCF8E3; +} + +.external-event { + padding: 5px 10px; + border-radius: 2px; + cursor: pointer; + margin-bottom: 5px; +} + +.fc-ltr .fc-event-hori.fc-event-end, .fc-rtl .fc-event-hori.fc-event-start { + border-radius: 2px; +} + +.fc-event, .fc-agenda .fc-event-time, .fc-event a { + padding: 4px 6px; + background-color: #1ab394; + /* background color */ + border-color: #1ab394; + /* border color */ +} + +.fc-event-time, .fc-event-title { + color: #717171; + padding: 0 1px; +} + +.ui-calendar .fc-event-time, .ui-calendar .fc-event-title { + color: #fff; +} +/* Chat */ +.chat-activity-list .chat-element { + border-bottom: 1px solid #e7eaec; +} + +.chat-element:first-child { + margin-top: 0; +} + +.chat-element { + padding-bottom: 15px; +} + +.chat-element, .chat-element .media { + margin-top: 15px; +} + +.chat-element, .media-body { + overflow: hidden; +} + +.media-body { + display: block; + width: auto; +} + +.chat-element>.pull-left { + margin-right: 10px; +} + +.chat-element img.img-circle, .dropdown-messages-box img.img-circle { + width: 38px; + height: 38px; +} + +.chat-element .well { + border: 1px solid #e7eaec; + box-shadow: none; + margin-top: 10px; + margin-bottom: 5px; + padding: 10px 20px; + font-size: 11px; + line-height: 16px; +} + +.chat-element .actions { + margin-top: 10px; +} + +.chat-element .photos { + margin: 10px 0; +} + +.right.chat-element>.pull-right { + margin-left: 10px; +} + +.chat-photo { + max-height: 180px; + border-radius: 4px; + overflow: hidden; + margin-right: 10px; + margin-bottom: 10px; +} + +.chat { + margin: 0; + padding: 0; + list-style: none; +} + +.chat li { + margin-bottom: 10px; + padding-bottom: 5px; + border-bottom: 1px dotted #B3A9A9; +} + +.chat li.left .chat-body { + margin-left: 60px; +} + +.chat li.right .chat-body { + margin-right: 60px; +} + +.chat li .chat-body p { + margin: 0; + color: #777777; +} + +.panel .slidedown .glyphicon, .chat .glyphicon { + margin-right: 5px; +} + +.chat-panel .panel-body { + height: 350px; + overflow-y: scroll; +} +/* LIST GROUP */ +a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus { + background-color: #1ab394; + border-color: #1ab394; + color: #FFFFFF; + z-index: 2; +} + +.list-group-item-heading { + margin-top: 10px; +} + +.list-group-item-text { + margin: 0 0 10px; + color: inherit; + font-size: 12px; + line-height: inherit; +} + +.no-padding .list-group-item { + border-left: none; + border-right: none; + border-bottom: none; +} + +.no-padding .list-group-item:first-child { + border-left: none; + border-right: none; + border-bottom: none; + border-top: none; +} + +.no-padding .list-group { + margin-bottom: 0; +} + +.list-group-item { + background-color: inherit; + border: 1px solid #e7eaec; + display: block; + margin-bottom: -1px; + padding: 10px 15px; + position: relative; +} + +.elements-list .list-group-item { + border-left: none; + border-right: none; + /*border-top: none;*/ + padding: 15px 25px; +} + +.elements-list .list-group-item:first-child { + border-left: none; + border-right: none; + border-top: none !important; +} + +.elements-list .list-group { + margin-bottom: 0; +} + +.elements-list a { + color: inherit; +} + +.elements-list .list-group-item.active, .elements-list .list-group-item:hover { + background: #f3f3f4; + color: inherit; + border-color: #e7eaec; + /*border-bottom: 1px solid #e7eaec;*/ + /*border-top: 1px solid #e7eaec;*/ + border-radius: 0; +} + +.elements-list li.active { + -webkit-transition: none; + transition: none; +} + +.element-detail-box { + padding: 25px; +} +/* FLOT CHART */ +.flot-chart { + display: block; + height: 200px; +} + +.widget .flot-chart.dashboard-chart { + display: block; + height: 120px; + margin-top: 40px; +} + +.flot-chart.dashboard-chart { + display: block; + height: 180px; + margin-top: 40px; +} + +.flot-chart-content { + width: 100%; + height: 100%; +} + +.flot-chart-pie-content { + width: 200px; + height: 200px; + margin: auto; +} + +.jqstooltip { + position: absolute; + display: block; + left: 0px; + top: 0px; + visibility: hidden; + background: #2b303a; + background-color: rgba(43, 48, 58, 0.8); + color: white; + text-align: left; + white-space: nowrap; + z-index: 10000; + padding: 5px 5px 5px 5px; + min-height: 22px; + border-radius: 3px; +} + +.jqsfield { + color: white; + text-align: left; +} + +.h-200 { + min-height: 200px; +} + +.legendLabel { + padding-left: 5px; +} + +.stat-list li:first-child { + margin-top: 0; +} + +.stat-list { + list-style: none; + padding: 0; + margin: 0; +} + +.stat-percent { + float: right; +} + +.stat-list li { + margin-top: 15px; + position: relative; +} +/* DATATABLES */ +table.dataTable thead .sorting, table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled { + background: transparent; +} + +table.dataTable thead .sorting_asc:after { + float: right; + font-family: fontawesome; +} + +table.dataTable thead .sorting_desc:after { + content: "\f0dd"; + float: right; + font-family: fontawesome; +} + +table.dataTable thead .sorting:after { + content: "\f0dc"; + float: right; + font-family: fontawesome; + color: rgba(50, 50, 50, 0.5); +} + +.dataTables_wrapper { + padding-bottom: 30px; +} +/* CIRCLE */ +.img-circle { + border-radius: 50%; +} + +.btn-circle { + width: 30px; + height: 30px; + padding: 6px 0; + border-radius: 15px; + text-align: center; + font-size: 12px; + line-height: 1.428571429; +} + +.btn-circle.btn-lg { + width: 50px; + height: 50px; + padding: 10px 16px; + border-radius: 25px; + font-size: 18px; + line-height: 1.33; +} + +.btn-circle.btn-xl { + width: 70px; + height: 70px; + padding: 10px 16px; + border-radius: 35px; + font-size: 24px; + line-height: 1.33; +} + +.show-grid [class^="col-"] { + padding-top: 10px; + padding-bottom: 10px; + border: 1px solid #ddd; + background-color: #eee !important; +} + +.show-grid { + margin: 15px 0; +} +/* ANIMATION */ +.css-animation-box h1 { + font-size: 44px; +} + +.animation-efect-links a { + padding: 4px 6px; + font-size: 12px; +} + +#animation_box { + background-color: #f9f8f8; + border-radius: 16px; + width: 80%; + margin: 0 auto; + padding-top: 80px; +} + +.animation-text-box { + position: absolute; + margin-top: 40px; + left: 50%; + margin-left: -100px; + width: 200px; +} + +.animation-text-info { + position: absolute; + margin-top: -60px; + left: 50%; + margin-left: -100px; + width: 200px; + font-size: 10px; +} + +.animation-text-box h2 { + font-size: 54px; + font-weight: 600; + margin-bottom: 5px; +} + +.animation-text-box p { + font-size: 12px; + text-transform: uppercase; +} +/* PEACE */ +.pace { + -webkit-pointer-events: none; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.pace-inactive { + display: none; +} + +.pace .pace-progress { + background: #1ab394; + position: fixed; + z-index: 2000; + top: 0; + width: 100%; + height: 2px; +} + +.pace-inactive { + display: none; +} +/* WIDGETS */ +.widget { + border-radius: 5px; + padding: 15px 20px; + margin-bottom: 10px; + margin-top: 10px; +} + +.widget.style1 h2 { + font-size: 30px; +} + +.widget h2, .widget h3 { + margin-top: 5px; + margin-bottom: 0; +} + +.widget-text-box { + padding: 20px; + border: 1px solid #e7eaec; + background: #ffffff; +} + +.widget-head-color-box { + border-radius: 5px 5px 0px 0px; + margin-top: 10px; +} + +.widget .flot-chart { + height: 100px; +} + +.vertical-align div { + display: inline-block; + vertical-align: middle; +} + +.vertical-align h2, .vertical-align h3 { + margin: 0; +} + +.todo-list { + list-style: none outside none; + margin: 0; + padding: 0; + font-size: 14px; +} + +.todo-list.small-list { + font-size: 12px; +} + +.todo-list.small-list>li { + background: #f3f3f4; + border-left: none; + border-right: none; + border-radius: 4px; + color: inherit; + margin-bottom: 2px; + padding: 6px 6px 6px 12px; +} + +.todo-list.small-list .btn-xs, .todo-list.small-list .btn-group-xs>.btn { + border-radius: 5px; + font-size: 10px; + line-height: 1.5; + padding: 1px 2px 1px 5px; +} + +.todo-list>li { + background: #f3f3f4; + border-left: 6px solid #e7eaec; + border-right: 6px solid #e7eaec; + border-radius: 4px; + color: inherit; + margin-bottom: 2px; + padding: 10px; +} + +.todo-list .handle { + cursor: move; + display: inline-block; + font-size: 16px; + margin: 0 5px; +} + +.todo-list>li .label { + font-size: 9px; + margin-left: 10px; +} + +.check-link { + font-size: 16px; +} + +.todo-completed { + text-decoration: line-through; +} + +.geo-statistic h1 { + font-size: 36px; + margin-bottom: 0; +} + +.glyphicon.fa { + font-family: "FontAwesome"; +} +/* INPUTS */ +.inline { + display: inline-block !important; +} + +.input-s-sm { + width: 120px; +} + +.input-s { + width: 200px; +} + +.input-s-lg { + width: 250px; +} + +.i-checks { + padding-left: 0; +} + +.form-control, .single-line { + background: #FFFFFF none; + border: 1px solid #e5e6e7; + border-radius: 1px; + color: inherit; + display: block; + padding: 6px 12px; + -webkit-transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s; + transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s; + width: 100%; + font-size: 14px; +} + +.form-control:focus, .single-line:focus { + border-color: #1ab394 !important; +} + +.has-success .form-control { + border-color: #1ab394; +} + +.has-warning .form-control { + border-color: #f8ac59; +} + +.has-error .form-control { + border-color: #ed5565; +} + +.has-success .control-label { + color: #1ab394; +} + +.has-warning .control-label { + color: #f8ac59; +} + +.has-error .control-label { + color: #ed5565; +} + +.input-group-addon { + background-color: #fff; + border: 1px solid #E5E6E7; + border-radius: 1px; + color: inherit; + font-size: 14px; + font-weight: 400; + line-height: 1; + padding: 6px 12px; + text-align: center; +} + +.spinner-buttons.input-group-btn .btn-xs { + line-height: 1.13; +} + +.spinner-buttons.input-group-btn { + width: 20%; +} + +.noUi-connect { + background: none repeat scroll 0 0 #1ab394; + box-shadow: none; +} + +.slider_red .noUi-connect { + background: none repeat scroll 0 0 #ed5565; + box-shadow: none; +} +/* UI Sortable */ +.ui-sortable .ibox-title { + cursor: move; +} + +.ui-sortable-placeholder { + border: 1px dashed #cecece !important; + visibility: visible !important; + background: #e7eaec; +} + +.ibox.ui-sortable-placeholder { + margin: 0px 0px 23px !important; +} +/* Tabs */ +.tabs-container .panel-body { + background: #fff; + border: 1px solid #e7eaec; + border-radius: 2px; + padding: 20px; + position: relative; +} + +.tabs-container .nav-tabs>li.active>a, .tabs-container .nav-tabs>li.active>a:hover, .tabs-container .nav-tabs>li.active>a:focus { + border: 1px solid #e7eaec; + border-bottom-color: transparent; + background-color: #fff; +} + +.tabs-container .nav-tabs>li { + float: left; + margin-bottom: -1px; +} + +.tabs-container .tab-pane .panel-body { + border-top: none; +} + +.tabs-container .nav-tabs>li.active>a, .tabs-container .nav-tabs>li.active>a:hover, .tabs-container .nav-tabs>li.active>a:focus { + border: 1px solid #e7eaec; + border-bottom-color: transparent; +} + +.tabs-container .nav-tabs { + border-bottom: 1px solid #e7eaec; +} + +.tabs-container .tab-pane .panel-body { + border-top: none; +} + +.tabs-container .tabs-left .tab-pane .panel-body, .tabs-container .tabs-right .tab-pane .panel-body { + border-top: 1px solid #e7eaec; +} + +.tabs-container .nav-tabs>li a:hover { + background: transparent; + border-color: transparent; +} + +.tabs-container .tabs-below>.nav-tabs, .tabs-container .tabs-right>.nav-tabs, .tabs-container .tabs-left>.nav-tabs { + border-bottom: 0; +} + +.tabs-container .tabs-left .panel-body { + position: static; +} + +.tabs-container .tabs-left>.nav-tabs, .tabs-container .tabs-right>.nav-tabs { + width: 20%; +} + +.tabs-container .tabs-left .panel-body { + width: 80%; + margin-left: 20%; +} + +.tabs-container .tabs-right .panel-body { + width: 80%; + margin-right: 20%; +} + +.tabs-container .tab-content>.tab-pane, .tabs-container .pill-content>.pill-pane { + display: none; +} + +.tabs-container .tab-content>.active, .tabs-container .pill-content>.active { + display: block; +} + +.tabs-container .tabs-below>.nav-tabs { + border-top: 1px solid #e7eaec; +} + +.tabs-container .tabs-below>.nav-tabs>li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-container .tabs-below>.nav-tabs>li>a { + border-radius: 0 0 4px 4px; +} + +.tabs-container .tabs-below>.nav-tabs>li>a:hover, .tabs-container .tabs-below>.nav-tabs>li>a:focus { + border-top-color: #e7eaec; + border-bottom-color: transparent; +} + +.tabs-container .tabs-left>.nav-tabs>li, .tabs-container .tabs-right>.nav-tabs>li { + float: none; +} + +.tabs-container .tabs-left>.nav-tabs>li>a, .tabs-container .tabs-right>.nav-tabs>li>a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-container .tabs-left>.nav-tabs { + float: left; + margin-right: 19px; +} + +.tabs-container .tabs-left>.nav-tabs>li>a { + margin-right: -1px; + border-radius: 4px 0 0 4px; +} + +.tabs-container .tabs-left>.nav-tabs .active>a, .tabs-container .tabs-left>.nav-tabs .active>a:hover, .tabs-container .tabs-left>.nav-tabs .active>a:focus { + border-color: #e7eaec transparent #e7eaec #e7eaec; + border-right-color: #ffffff; +} + +.tabs-container .tabs-right>.nav-tabs { + float: right; + margin-left: 19px; +} + +.tabs-container .tabs-right>.nav-tabs>li>a { + margin-left: -1px; + border-radius: 0 4px 4px 0; +} + +.tabs-container .tabs-right>.nav-tabs .active>a, .tabs-container .tabs-right>.nav-tabs .active>a:hover, .tabs-container .tabs-right>.nav-tabs .active>a:focus { + border-color: #e7eaec #e7eaec #e7eaec transparent; + border-left-color: #ffffff; + z-index: 1; +} +/*SWITCHES */ + +.onoffswitch{ + position: relative; + width: 54px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +.onoffswitch-checkbox { + display: none; +} + +.onoffswitch-label { + display: block; + overflow: hidden; + cursor: pointer; + border: 2px solid #1AB394; + border-radius: 3px; +} + +.onoffswitch-inner { + display: block; + width: 200%; + margin-left: -100%; + -webkit-transition: margin 0.3s ease-in 0s; + transition: margin 0.3s ease-in 0s; +} + +.onoffswitch-inner:before, .onoffswitch-inner:after { + display: block; + float: left; + width: 50%; + /* height: 16px; */ + padding: 0; + /* line-height: 16px; */ + font-size: 10px; + color: white; + font-family: Trebuchet, Arial, sans-serif; + font-weight: bold; + box-sizing: border-box; +} + +.onoffswitch-inner:before { + content: "ON"; + padding-left: 7px; + background-color: #1AB394; + color: #FFFFFF; +} + +.onoffswitch-inner:after { + content: "OFF"; + padding-right: 7px; + background-color: #FFFFFF; + color: #919191; + text-align: right; +} + +.onoffswitch-switch { + display: block; + width: 18px; + margin: 0px; + background: #FFFFFF; + border: 2px solid #1AB394; + border-radius: 3px; + position: absolute; + top: 0; + bottom: 0; + right: 36px; + -webkit-transition: all 0.3s ease-in 0s; + transition: all 0.3s ease-in 0s; +} + +.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-inner { + margin-left: 0; +} + +.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch { + right: 0px; +} +/* Nestable list */ +.dd { + position: relative; + display: block; + margin: 0; + padding: 0; + list-style: none; + font-size: 13px; + line-height: 20px; +} + +.dd-list { + display: block; + position: relative; + margin: 0; + padding: 0; + list-style: none; +} + +.dd-list .dd-list { + padding-left: 30px; +} + +.dd-collapsed .dd-list { + display: none; +} + +.dd-item, .dd-empty, .dd-placeholder { + display: block; + position: relative; + margin: 0; + padding: 0; + min-height: 20px; + font-size: 13px; + line-height: 20px; +} + +.dd-handle { + display: block; + margin: 5px 0; + padding: 5px 10px; + color: #333; + text-decoration: none; + border: 1px solid #e7eaec; + background: #f5f5f5; + border-radius: 3px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +.dd-handle span { + font-weight: bold; +} + +.dd-handle:hover { + background: #f0f0f0; + cursor: pointer; + font-weight: bold; +} + +.dd-item>button { + display: block; + position: relative; + cursor: pointer; + float: left; + width: 25px; + height: 20px; + margin: 5px 0; + padding: 0; + text-indent: 100%; + white-space: nowrap; + overflow: hidden; + border: 0; + background: transparent; + font-size: 12px; + line-height: 1; + text-align: center; + font-weight: bold; +} + +.dd-item>button:before { + content: '+'; + display: block; + position: absolute; + width: 100%; + text-align: center; + text-indent: 0; +} + +.dd-item>button[data-action="collapse"]:before { + content: '-'; +} + +#nestable2 .dd-item>button { + font-family: FontAwesome; + height: 34px; + width: 33px; + color: #c1c1c1; +} + +#nestable2 .dd-item>button:before { + content: "\f067"; +} + +#nestable2 .dd-item>button[data-action="collapse"]:before { + content: "\f068"; +} + +.dd-placeholder, .dd-empty { + margin: 5px 0; + padding: 0; + min-height: 30px; + background: #f2fbff; + border: 1px dashed #b6bcbf; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +.dd-empty { + border: 1px dashed #bbb; + min-height: 100px; + background-color: #e5e5e5; + background-image: -webkit-linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff), -webkit-linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff); + background-image: linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff), linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff); + background-size: 60px 60px; + background-position: 0 0, 30px 30px; +} + +.dd-dragel { + position: absolute; + z-index: 9999; + pointer-events: none; +} + +.dd-dragel>.dd-item .dd-handle { + margin-top: 0; +} + +.dd-dragel .dd-handle { + box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, 0.1); +} +/** +* Nestable Extras +*/ +.nestable-lists { + display: block; + clear: both; + padding: 30px 0; + width: 100%; + border: 0; + border-top: 2px solid #ddd; + border-bottom: 2px solid #ddd; +} + +#nestable-menu { + padding: 0; + margin: 10px 0 20px 0; +} + +#nestable-output, #nestable2-output { + width: 100%; + font-size: 0.75em; + line-height: 1.333333em; + font-family: lucida grande, lucida sans unicode, helvetica, arial, sans-serif; + padding: 5px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +#nestable2 .dd-handle { + color: inherit; + border: 1px dashed #e7eaec; + background: #f3f3f4; + padding: 10px; +} + +#nestable2 .dd-handle:hover { + /*background: #bbb;*/ +} + +#nestable2 span.label { + margin-right: 10px; +} + +#nestable-output, #nestable2-output { + font-size: 12px; + padding: 25px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} +/* CodeMirror */ +.CodeMirror { + border: 1px solid #eee; + height: auto; +} + +.CodeMirror-scroll { + overflow-y: hidden; + overflow-x: auto; +} +/* Google Maps */ +.google-map { + height: 300px; +} +/* Validation */ +label.error { + color: #cc5965; + display: inline-block; + margin-left: 5px; +} + +.form-control.error { + border: 1px dotted #cc5965; +} +/* ngGrid */ +.gridStyle { + border: 1px solid #d4d4d4; + width: 100%; + height: 400px; +} + +.gridStyle2 { + border: 1px solid #d4d4d4; + width: 500px; + height: 300px; +} + +.ngH eaderCell { + border-right: none; + border-bottom: 1px solid #e7eaec; +} + +.ngCell { + border-right: none; +} + +.ngTopPanel { + background: #F5F5F6; +} + +.ngRow.even { + background: #f9f9f9; +} + +.ngRow.selected { + background: #EBF2F1; +} + +.ngRow { + border-bottom: 1px solid #e7eaec; +} + +.ngCell { + background-color: transparent; +} + +.ngHeaderCell { + border-right: none; +} +/* Toastr custom style */ +#toast-container>.toast { + background-image: none !important; +} + +#toast-container>.toast:before { + position: fixed; + font-family: FontAwesome; + font-size: 24px; + line-height: 24px; + float: left; + color: #FFF; + padding-right: 0.5em; + margin: auto 0.5em auto -1.5em; +} + +#toast-container>div { + box-shadow: 0 0 3px #999; + opacity: .9; + -ms-filter: alpha(opacity = 90); + filter: alpha(opacity = 90); +} + +#toast-container>:hover { + box-shadow: 0 0 4px #999; + opacity: 1; + -ms-filter: alpha(opacity = 100); + filter: alpha(opacity = 100); + cursor: pointer; +} + +.toast { + background-color: #1ab394; +} + +.toast-success { + background-color: #1ab394; +} + +.toast-error { + background-color: #ed5565; +} + +.toast-info { + background-color: #23c6c8; +} + +.toast-warning { + background-color: #f8ac59; +} + +.toast-top-full-width { + margin-top: 20px; +} + +.toast-bottom-full-width { + margin-bottom: 20px; +} +/* Image cropper style */ +.img-container, .img-preview { + overflow: hidden; + text-align: center; + width: 100%; +} + +.img-preview-sm { + height: 130px; + width: 200px; +} +/* Forum styles */ +.forum-post-container .media { + margin: 10px 10px 10px 10px; + padding: 20px 10px 20px 10px; + border-bottom: 1px solid #f1f1f1; +} + +.forum-avatar { + float: left; + margin-right: 20px; + text-align: center; + width: 110px; +} + +.forum-avatar .img-circle { + height: 48px; + width: 48px; +} + +.author-info { + color: #676a6c; + font-size: 11px; + margin-top: 5px; + text-align: center; +} + +.forum-post-info { + padding: 9px 12px 6px 12px; + background: #f9f9f9; + border: 1px solid #f1f1f1; +} + +.media-body>.media { + background: #f9f9f9; + border-radius: 3px; + border: 1px solid #f1f1f1; +} + +.forum-post-container .media-body .photos { + margin: 10px 0; +} + +.forum-photo { + max-width: 140px; + border-radius: 3px; +} + +.media-body>.media .forum-avatar { + width: 70px; + margin-right: 10px; +} + +.media-body>.media .forum-avatar .img-circle { + height: 38px; + width: 38px; +} + +.mid-icon { + font-size: 66px; +} + +.forum-item { + margin: 10px 0; + padding: 10px 0 20px; + border-bottom: 1px solid #f1f1f1; +} + +.views-number { + font-size: 24px; + line-height: 18px; + font-weight: 400; +} + +.forum-container, .forum-post-container { + padding: 30px !important; +} + +.forum-item small { + color: #999; +} + +.forum-item .forum-sub-title { + color: #999; + margin-left: 50px; +} + +.forum-title { + margin: 15px 0 15px 0; +} + +.forum-info { + text-align: center; +} + +.forum-desc { + color: #999; +} + +.forum-icon { + float: left; + width: 30px; + margin-right: 20px; + text-align: center; +} + +a.forum-item-title { + color: inherit; + display: block; + font-size: 18px; + font-weight: 600; +} + +a.forum-item-title:hover { + color: inherit; +} + +.forum-icon .fa { + font-size: 30px; + margin-top: 8px; + color: #9b9b9b; +} + +.forum-item.active .fa { + color: #1ab394; +} + +.forum-item.active a.forum-item-title { + color: #1ab394; +} + +@media ( max-width : 992px) { + .forum-info { + margin: 15px 0 10px 0px; + /* Comment this is you want to show forum info in small devices */ + display: none; + } + + .forum-desc { + float: none !important; + } +} +/* New Timeline style */ +.vertical-container { + /* this class is used to give a max-width to the element it is applied to, and center it horizontally when it reaches that max-width */ + width: 90%; + max-width: 1170px; + margin: 0 auto; +} + +.vertical-container::after { + /* clearfix */ + content: ''; + display: table; + clear: both; +} + +#vertical-timeline { + position: relative; + padding: 0; + margin-top: 2em; + margin-bottom: 2em; +} + +#vertical-timeline::before { + content: ''; + position: absolute; + top: 0; + left: 18px; + height: 100%; + width: 4px; + background: #f1f1f1; +} + +.vertical-timeline-content .btn { + float: right; +} + +#vertical-timeline.light-timeline:before { + background: #e7eaec; +} + +.dark-timeline .vertical-timeline-content:before { + border-color: transparent #f5f5f5 transparent transparent; +} + +.dark-timeline.center-orientation .vertical-timeline-content:before { + border-color: transparent transparent transparent #f5f5f5; +} + +.dark-timeline .vertical-timeline-block:nth-child(2n) .vertical-timeline-content:before, .dark-timeline.center-orientation .vertical-timeline-block:nth-child(2n) .vertical-timeline-content:before { + border-color: transparent #f5f5f5 transparent transparent; +} + +.dark-timeline .vertical-timeline-content, .dark-timeline.center-orientation .vertical-timeline-content { + background: #f5f5f5; +} + +@media only screen and (min-width: 1170px) { + #vertical-timeline.center-orientation { + margin-top: 3em; + margin-bottom: 3em; + } + + #vertical-timeline.center-orientation:before { + left: 50%; + margin-left: -2px; + } +} + +@media only screen and (max-width: 1170px) { + .center-orientation.dark-timeline .vertical-timeline-content:before { + border-color: transparent #f5f5f5 transparent transparent; + } +} + +.vertical-timeline-block { + position: relative; + margin: 2em 0; +} + +.vertical-timeline-block:after { + content: ""; + display: table; + clear: both; +} + +.vertical-timeline-block:first-child { + margin-top: 0; +} + +.vertical-timeline-block:last-child { + margin-bottom: 0; +} + +@media only screen and (min-width: 1170px) { + .center-orientation .vertical-timeline-block { + margin: 4em 0; + } + + .center-orientation .vertical-timeline-block:first-child { + margin-top: 0; + } + + .center-orientation .vertical-timeline-block:last-child { + margin-bottom: 0; + } +} + +.vertical-timeline-icon { + position: absolute; + top: 0; + left: 0; + width: 40px; + height: 40px; + border-radius: 50%; + font-size: 16px; + border: 3px solid #f1f1f1; + text-align: center; +} + +.vertical-timeline-icon i { + display: block; + width: 24px; + height: 24px; + position: relative; + left: 50%; + top: 50%; + margin-left: -12px; + margin-top: -9px; +} + +@media only screen and (min-width: 1170px) { + .center-orientation .vertical-timeline-icon { + width: 50px; + height: 50px; + left: 50%; + margin-left: -25px; + -webkit-transform: translateZ(0); + -webkit-backface-visibility: hidden; + font-size: 19px; + } + + .center-orientation .vertical-timeline-icon i { + margin-left: -12px; + margin-top: -10px; + } + + .center-orientation .cssanimations .vertical-timeline-icon.is-hidden { + visibility: hidden; + } +} + +.vertical-timeline-content { + position: relative; + margin-left: 60px; + background: white; + border-radius: 0.25em; + padding: 1em; +} + +.vertical-timeline-content:after { + content: ""; + display: table; + clear: both; +} + +.vertical-timeline-content h2 { + font-weight: 400; + margin-top: 4px; +} + +.vertical-timeline-content p { + margin: 1em 0; + line-height: 1.6; +} + +.vertical-timeline-content .vertical-date { + float: left; + font-weight: 500; +} + +.vertical-date small { + color: #1ab394; + font-weight: 400; +} + +.vertical-timeline-content::before { + content: ''; + position: absolute; + top: 16px; + right: 100%; + height: 0; + width: 0; + border: 7px solid transparent; + border-right: 7px solid white; +} + +@media only screen and (min-width: 768px) { + .vertical-timeline-content h2 { + font-size: 18px; + } + + .vertical-timeline-content p { + font-size: 13px; + } +} + +@media only screen and (min-width: 1170px) { + .center-orientation .vertical-timeline-content { + margin-left: 0; + padding: 1.6em; + width: 45%; + } + + .center-orientation .vertical-timeline-content::before { + top: 24px; + left: 100%; + border-color: transparent; + border-left-color: white; + } + + .center-orientation .vertical-timeline-content .btn { + float: left; + } + + .center-orientation .vertical-timeline-content .vertical-date { + position: absolute; + width: 100%; + left: 122%; + top: 2px; + font-size: 14px; + } + + .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content { + float: right; + } + + .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content::before { + top: 24px; + left: auto; + right: 100%; + border-color: transparent; + border-right-color: white; + } + + .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content .btn { + float: right; + } + + .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content .vertical-date { + left: auto; + right: 122%; + text-align: right; + } + + .center-orientation .cssanimations .vertical-timeline-content.is-hidden { + visibility: hidden; + } +} + +.sidebard-panel { + width: 220px; + background: #ebebed; + padding: 10px 20px; + position: absolute; + right: 0; +} + +.sidebard-panel .feed-element img.img-circle { + width: 32px; + height: 32px; +} + +.sidebard-panel .feed-element, .media-body, .sidebard-panel p { + font-size: 12px; +} + +.sidebard-panel .feed-element { + margin-top: 20px; + padding-bottom: 0; +} + +.sidebard-panel .list-group { + margin-bottom: 10px; +} + +.sidebard-panel .list-group .list-group-item { + padding: 5px 0; + font-size: 12px; + border: 0; +} + +.sidebar-content .wrapper, .wrapper.sidebar-content { + padding-right: 240px !important; +} + +#right-sidebar { + background-color: #fff; + border-left: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + overflow: hidden; + position: fixed; + top: 60px; + width: 260px !important; + z-index: 1009; + bottom: 0; + right: -260px; +} + +#right-sidebar.sidebar-open { + right: 0; +} + +#right-sidebar.sidebar-open.sidebar-top { + top: 0; + border-top: none; +} + +.sidebar-container ul.nav-tabs { + border: none; +} + +.sidebar-container ul.nav-tabs.navs-4 li { + width: 25%; +} + +.sidebar-container ul.nav-tabs.navs-3 li { + width: 33.3333%; +} + +.sidebar-container ul.nav-tabs.navs-2 li { + width: 50%; +} + +.sidebar-container ul.nav-tabs li { + border: none; +} + +.sidebar-container ul.nav-tabs li a { + border: none; + padding: 12px 10px; + margin: 0; + border-radius: 0; + background: #2f4050; + color: #fff; + text-align: center; + border-right: 1px solid #334556; +} + +.sidebar-container ul.nav-tabs li.active a { + border: none; + background: #f9f9f9; + color: #676a6c; + font-weight: bold; +} + +.sidebar-container .nav-tabs>li.active>a:hover, .sidebar-container .nav-tabs>li.active>a:focus { + border: none; +} + +.sidebar-container ul.sidebar-list { + margin: 0; + padding: 0; +} + +.sidebar-container ul.sidebar-list li { + border-bottom: 1px solid #e7eaec; + padding: 15px 20px; + list-style: none; + font-size: 12px; +} + +.sidebar-container .sidebar-message:nth-child(2n+2) { + background: #f9f9f9; +} + +.sidebar-container ul.sidebar-list li a { + text-decoration: none; + color: inherit; +} + +.sidebar-container .sidebar-content { + padding: 15px 20px; + font-size: 12px; +} + +.sidebar-container .sidebar-title { + background: #f9f9f9; + padding: 20px; + border-bottom: 1px solid #e7eaec; +} + +.sidebar-container .sidebar-title h3 { + margin-bottom: 3px; + padding-left: 2px; +} + +.sidebar-container .tab-content h4 { + margin-bottom: 5px; +} + +.sidebar-container .sidebar-message>a>.pull-left { + margin-right: 10px; +} + +.sidebar-container .sidebar-message>a { + text-decoration: none; + color: inherit; +} + +.sidebar-container .sidebar-message { + padding: 15px 20px; +} + +.sidebar-container .sidebar-message .message-avatar { + height: 38px; + width: 38px; + border-radius: 50%; +} + +.sidebar-container .setings-item { + padding: 15px 20px; + border-bottom: 1px solid #e7eaec; +} + +body { + font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + color: #676a6c; + overflow-x: hidden; +} + +html, body { + height: 100%; +} + +body.full-height-layout #wrapper, body.full-height-layout #page-wrapper { + height: 100%; +} + +#page-wrapper { + min-height: auto; +} + +body.boxed-layout { + background: url('patterns/shattered.png'); +} + +body.boxed-layout #wrapper { + background-color: #2f4050; + max-width: 1200px; + margin: 0 auto; +} + +.top-navigation.boxed-layout #wrapper, .boxed-layout #wrapper.top-navigation { + max-width: 1300px !important; +} + +.block { + display: block; +} + +.clear { + display: block; + overflow: hidden; +} + +a { + cursor: pointer; +} + +a:hover, a:focus { + text-decoration: none; +} + +.border-bottom { + border-bottom: 1px solid #e7eaec !important; +} + +.font-bold { + font-weight: 600; +} + +.font-noraml { + font-weight: 400; +} + +.text-uppercase { + text-transform: uppercase; +} + +.b-r { + border-right: 1px solid #e7eaec; +} + +.hr-line-dashed { + border-top: 1px dashed #e7eaec; + color: #ffffff; + background-color: #ffffff; + height: 1px; + margin: 20px 0; +} + +.hr-line-solid { + border-bottom: 1px solid #e7eaec; + background-color: rgba(0, 0, 0, 0); + border-style: solid !important; + margin-top: 15px; + margin-bottom: 15px; +} + +video { + width: 100% !important; + height: auto !important; +} +/* GALLERY */ +.gallery>.row>div { + margin-bottom: 15px; +} + +.fancybox img { + margin-bottom: 5px; + /* Only for demo */ + width: 24%; +} +/* Summernote text editor */ +.note-editor { + height: auto !important; + min-height: 100px; + border: solid 1px #e5e6e7; +} +/* MODAL */ +.modal-content { + background-clip: padding-box; + background-color: #FFFFFF; + border: 1px solid rgba(0, 0, 0, 0); + border-radius: 4px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + outline: 0 none; +} + +.modal-dialog { + z-index: 1200; +} + +.modal-body { + padding: 20px 30px 30px 30px; +} + +.inmodal .modal-body { + background: #f8fafb; +} + +.inmodal .modal-header { + padding: 30px 15px; + text-align: center; +} + +.animated.modal.fade .modal-dialog { + -webkit-transform: none; + -ms-transform: none; + transform: none; +} + +.inmodal .modal-title { + font-size: 26px; +} + +.inmodal .modal-icon { + font-size: 84px; + color: #e2e3e3; +} + +.modal-footer { + margin-top: 0; +} +/* WRAPPERS */ +#wrapper { + width: 100%; + overflow-x: hidden; + background-color: #2f4050; +} + +.wrapper { + padding: 0 20px; +} + +.wrapper-content { + padding: 20px; +} + +#page-wrapper { + padding: 0 15px; + position: inherit; + margin: 0 0 0 220px; +} + +.title-action { + text-align: right; + padding-top: 30px; +} + +.ibox-content h1, .ibox-content h2, .ibox-content h3, .ibox-content h4, .ibox-content h5, .ibox-title h1, .ibox-title h2, .ibox-title h3, .ibox-title h4, .ibox-title h5 { + margin-top: 5px; +} + +ul.unstyled, ol.unstyled { + list-style: none outside none; + margin-left: 0; +} + +.big-icon { + font-size: 160px; + color: #e5e6e7; +} +/* FOOTER */ +.footer { + background: none repeat scroll 0 0 white; + border-top: 1px solid #e7eaec; + overflow: hidden; + padding: 10px 20px; + margin: 0 -15px; + height: 36px; +} + +.footer.fixed_full { + position: fixed; + bottom: 0; + left: 0; + right: 0; + z-index: 1000; + padding: 10px 20px; + background: white; + border-top: 1px solid #e7eaec; +} + +.footer.fixed { + position: fixed; + bottom: 0; + left: 0; + right: 0; + z-index: 1000; + padding: 10px 20px; + background: white; + border-top: 1px solid #e7eaec; + margin-left: 220px; +} + +body.mini-navbar .footer.fixed, body.body-small.mini-navbar .footer.fixed { + margin: 0 0 0 70px; +} + +body.mini-navbar.canvas-menu .footer.fixed, body.canvas-menu .footer.fixed { + margin: 0 !important; +} + +body.fixed-sidebar.body-small.mini-navbar .footer.fixed { + margin: 0 0 0 220px; +} + +body.body-small .footer.fixed { + margin-left: 0px; +} +/* PANELS */ +.page-heading { + border-top: 0; + padding: 0px 20px 20px; +} + +.panel-heading h1, .panel-heading h2 { + margin-bottom: 5px; +} +/*CONTENTTABS*/ +.content-tabs { + position: relative; + height: 42px; + background: #fafafa; + line-height: 40px; +} + +.content-tabs .roll-nav, .page-tabs-list { + position: absolute; + width: 40px; + height: 40px; + text-align: center; + color: #999; + z-index: 2; + top: 0; +} + +.content-tabs .roll-left { + left: 0; + border-right: solid 1px #eee; +} + +.content-tabs .roll-right { + right: 0; + border-left: solid 1px #eee; +} + +.content-tabs button { + background: #fff; + border: 0; + height: 40px; + width: 40px; + outline: none; +} + +.content-tabs button:hover { + background: #fafafa; +} + +nav.page-tabs { + margin-left: 40px; + width: 100000px; + height: 40px; + overflow: hidden; +} + +nav.page-tabs .page-tabs-content { + float: left; +} + +.page-tabs a { + display: block; + float: left; + border-right: solid 1px #eee; + padding: 0 15px; +} + +.page-tabs a i:hover { + color: #c00; +} + +.page-tabs a:hover, .content-tabs .roll-nav:hover { + color: #777; + background: #f2f2f2; + cursor: pointer; +} + +.roll-right.J_tabRight { + right: 140px; +} + +.roll-right.btn-group { + right: 60px; + width: 80px; + padding: 0; +} + +.roll-right.btn-group button { + width: 80px; +} + +.roll-right.J_tabExit { + background: #fff; + height: 40px; + width: 60px; + outline: none; +} + +.dropdown-menu-right { + left: auto; +} + +#content-main { + height: calc(100% - 140px); + overflow: hidden; +} + +.fixed-nav #content-main { + height: calc(100% - 80px); + overflow: hidden; +} +/* TABLES */ +.table-bordered { + border: 1px solid #EBEBEB; +} + +.table-bordered>thead>tr>th, .table-bordered>thead>tr>td { + background-color: #F5F5F6; + border-bottom-width: 1px; +} + +.table-bordered>thead>tr>th, .table-bordered>tbody>tr>th, .table-bordered>tfoot>tr>th, .table-bordered>thead>tr>td, .table-bordered>tbody>tr>td, .table-bordered>tfoot>tr>td { + border: 1px solid #e7e7e7; +} + +.table>thead>tr>th { + border-bottom: 1px solid #DDDDDD; + vertical-align: bottom; +} + +.table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td { + border-top: 1px solid #e7eaec; + line-height: 1.42857; + padding: 8px; + vertical-align: middle; +} +/* PANELS */ +.panel.blank-panel { + background: none; + margin: 0; +} + +.blank-panel .panel-heading { + padding-bottom: 0; +} + +.nav-tabs>li.active>a, .nav-tabs>li.active>a:hover, .nav-tabs>li.active>a:focus { + -moz-border-bottom-colors: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + background: none; + border-color: #dddddd #dddddd rgba(0, 0, 0, 0); + border-bottom: #f3f3f4; + -webkit-border-image: none; + -o-border-image: none; + border-image: none; + border-style: solid; + border-width: 1px; + color: #555555; + cursor: default; +} + +.nav.nav-tabs li { + background: none; + border: none; +} + +.nav-tabs>li>a { + color: #A7B1C2; + font-weight: 600; + padding: 10px 20px 10px 25px; +} + +.nav-tabs>li>a:hover, .nav-tabs>li>a:focus { + background-color: #e6e6e6; + color: #676a6c; +} + +.ui-tab .tab-content { + padding: 20px 0px; +} +/* GLOBAL */ +.no-padding { + padding: 0 !important; +} + +.no-borders { + border: none !important; +} + +.no-margins { + margin: 0 !important; +} + +.no-top-border { + border-top: 0 !important; +} + +.ibox-content.text-box { + padding-bottom: 0px; + padding-top: 15px; +} + +.border-left-right { + border-left: 1px solid #e7eaec; + border-right: 1px solid #e7eaec; + border-top: none; + border-bottom: none; +} + +.border-left { + border-left: 1px solid #e7eaec; + border-right: none; + border-top: none; + border-bottom: none; +} + +.border-right { + border-left: none; + border-right: 1px solid #e7eaec; + border-top: none; + border-bottom: none; +} + +.full-width { + width: 100% !important; +} + +.link-block { + font-size: 12px; + padding: 10px; +} + +.nav.navbar-top-links .link-block a { + font-size: 12px; +} + +.link-block a { + font-size: 10px; + color: inherit; +} + +body.mini-navbar .branding { + display: none; +} + +img.circle-border { + border: 6px solid #FFFFFF; + border-radius: 50%; +} + +.branding { + float: left; + color: #FFFFFF; + font-size: 18px; + font-weight: 600; + padding: 17px 20px; + text-align: center; + background-color: #1ab394; +} + +.login-panel { + margin-top: 25%; +} + +.page-header { + padding: 20px 0 9px; + margin: 0 0 20px; + border-bottom: 1px solid #eeeeee; +} + +.fontawesome-icon-list { + margin-top: 22px; +} + +.fontawesome-icon-list .fa-hover a { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: block; + color: #222222; + line-height: 32px; + height: 32px; + padding-left: 10px; + border-radius: 4px; +} + +.fontawesome-icon-list .fa-hover a .fa { + width: 32px; + font-size: 14px; + display: inline-block; + text-align: right; + margin-right: 10px; +} + +.fontawesome-icon-list .fa-hover a:hover { + background-color: #1d9d74; + color: #ffffff; + text-decoration: none; +} + +.fontawesome-icon-list .fa-hover a:hover .fa { + font-size: 30px; + vertical-align: -6px; +} + +.fontawesome-icon-list .fa-hover a:hover .text-muted { + color: #bbe2d5; +} + +.feature-list .col-md-4 { + margin-bottom: 22px; +} + +.feature-list h4 .fa:before { + vertical-align: -10%; + font-size: 28px; + display: inline-block; + width: 1.07142857em; + text-align: center; + margin-right: 5px; +} + +.ui-draggable .ibox-title { + cursor: move; +} + +.breadcrumb { + background-color: #ffffff; + padding: 0; + margin-bottom: 0; +} + +.breadcrumb>li a { + color: inherit; +} + +.breadcrumb>.active { + color: inherit; +} + +code { + background-color: #F9F2F4; + border-radius: 4px; + color: #ca4440; + font-size: 90%; + padding: 2px 4px; + white-space: nowrap; +} + +.ibox { + clear: both; + margin-bottom: 25px; + margin-top: 0; + padding: 0; +} + +.ibox.collapsed .ibox-content { + display: none; +} + +.ibox.collapsed .fa.fa-chevron-up:before { + content: "\f078"; +} + +.ibox.collapsed .fa.fa-chevron-down:before { + content: "\f077"; +} + +.ibox:after, .ibox:before { + display: table; +} + +.ibox-title { + -moz-border-bottom-colors: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + background-color: #ffffff; + border-color: #e7eaec; + -webkit-border-image: none; + -o-border-image: none; + border-image: none; + border-style: solid solid none; + border-width: 4px 0px 0; + color: inherit; + margin-bottom: 0; + padding: 14px 15px 7px; + min-height: 48px; +} + +.ibox-content { + background-color: #ffffff; + color: inherit; + padding: 15px 20px 20px 20px; + border-color: #e7eaec; + -webkit-border-image: none; + -o-border-image: none; + border-image: none; + border-style: solid solid none; + border-width: 1px 0px; +} + +table.table-mail tr td { + padding: 12px; +} + +.table-mail .check-mail { + padding-left: 20px; +} + +.table-mail .mail-date { + padding-right: 20px; +} + +.star-mail, .check-mail { + width: 40px; +} + +.unread td a, .unread td { + font-weight: 600; + color: inherit; +} + +.read td a, .read td { + font-weight: normal; + color: inherit; +} + +.unread td { + background-color: #f9f8f8; +} + +.ibox-content { + clear: both; +} + +.ibox-heading { + background-color: #f3f6fb; + border-bottom: none; +} + +.ibox-heading h3 { + font-weight: 200; + font-size: 24px; +} + +.ibox-title h5 { + display: inline-block; + font-size: 14px; + margin: 0 0 7px; + padding: 0; + text-overflow: ellipsis; + float: left; +} + +.ibox-title .label { + float: left; + margin-left: 4px; +} + +.ibox-tools { + display: inline-block; + float: right; + margin-top: 0; + position: relative; + padding: 0; +} + +.ibox-tools a { + cursor: pointer; + margin-left: 5px; + color: #c4c4c4; +} + +.ibox-tools a.btn-primary { + color: #fff; +} + +.ibox-tools .dropdown-menu>li>a { + padding: 4px 10px; + font-size: 12px; +} + +.ibox .open>.dropdown-menu { + left: auto; + right: 0; +} +/* BACKGROUNDS */ +.gray-bg { + background-color: #f3f3f4; +} + +.white-bg { + background-color: #ffffff; +} + +.navy-bg { + background-color: #1ab394; + color: #ffffff; +} + +.blue-bg { + background-color: #1c84c6; + color: #ffffff; +} + +.lazur-bg { + background-color: #23c6c8; + color: #ffffff; +} + +.yellow-bg { + background-color: #f8ac59; + color: #ffffff; +} + +.red-bg { + background-color: #ed5565; + color: #ffffff; +} + +.black-bg { + background-color: #262626; +} + +.panel-primary { + border-color: #1ab394; +} + +.panel-primary>.panel-heading { + background-color: #1ab394; + border-color: #1ab394; +} + +.panel-success { + border-color: #1c84c6; +} + +.panel-success>.panel-heading { + background-color: #1c84c6; + border-color: #1c84c6; + color: #ffffff; +} + +.panel-info { + border-color: #23c6c8; +} + +.panel-info>.panel-heading { + background-color: #23c6c8; + border-color: #23c6c8; + color: #ffffff; +} + +.panel-warning { + border-color: #f8ac59; +} + +.panel-warning>.panel-heading { + background-color: #f8ac59; + border-color: #f8ac59; + color: #ffffff; +} + +.panel-danger { + border-color: #ed5565; +} + +.panel-danger>.panel-heading { + background-color: #ed5565; + border-color: #ed5565; + color: #ffffff; +} + +.progress-bar { + background-color: #1ab394; +} + +.progress-small, .progress-small .progress-bar { + height: 10px; +} + +.progress-small, .progress-mini { + margin-top: 5px; +} + +.progress-mini, .progress-mini .progress-bar { + height: 5px; + margin-bottom: 0px; +} + +.progress-bar-navy-light { + background-color: #3dc7ab; +} + +.progress-bar-success { + background-color: #1c84c6; +} + +.progress-bar-info { + background-color: #23c6c8; +} + +.progress-bar-warning { + background-color: #f8ac59; +} + +.progress-bar-danger { + background-color: #ed5565; +} + +.panel-title { + font-size: inherit; +} + +.jumbotron { + border-radius: 6px; + padding: 40px; +} + +.jumbotron h1 { + margin-top: 0; +} +/* COLORS */ +.text-navy { + color: #1ab394; +} + +.text-primary { + color: inherit; +} + +.text-success { + color: #1c84c6; +} + +.text-info { + color: #23c6c8; +} + +.text-warning { + color: #f8ac59; +} + +.text-danger { + color: #ed5565; +} + +.text-muted { + color: #888888; +} + +.simple_tag { + background-color: #f3f3f4; + border: 1px solid #e7eaec; + border-radius: 2px; + color: inherit; + font-size: 10px; + margin-right: 5px; + margin-top: 5px; + padding: 5px 12px; + display: inline-block; +} + +.img-shadow { + box-shadow: 0px 0px 3px 0px #919191; +} +/* For handle diferent bg color in AngularJS version */ +.dashboards\.dashboard_2 nav.navbar, .dashboards\.dashboard_3 nav.navbar, .mailbox\.inbox nav.navbar, .mailbox\.email_view nav.navbar, .mailbox\.email_compose nav.navbar, .dashboards\.dashboard_4_1 nav.navbar { + background: #fff; +} +/* For handle diferent bg color in MVC version */ +.Dashboard_2 .navbar.navbar-static-top, .Dashboard_3 .navbar.navbar-static-top, .Dashboard_4_1 .navbar.navbar-static-top, .ComposeEmail .navbar.navbar-static-top, .EmailView .navbar.navbar-static-top, .Inbox .navbar.navbar-static-top { + background: #fff; +} + +a.close-canvas-menu { + position: absolute; + top: 10px; + right: 15px; + z-index: 1011; + color: #a7b1c2; +} + +a.close-canvas-menu:hover { + color: #fff; +} +/* FULL HEIGHT */ +.full-height { + height: 100%; +} + +.fh-breadcrumb { + height: calc(100% - 196px); + margin: 0 -15px; + position: relative; +} + +.fh-no-breadcrumb { + height: calc(100% - 99px); + margin: 0 -15px; + position: relative; +} + +.fh-column { + background: #fff; + height: 100%; + width: 240px; + float: left; +} + +.modal-backdrop { + z-index: 2040 !important; +} + +.modal { + z-index: 2050 !important; +} + +.spiner-example { + height: 200px; + padding-top: 70px; +} +/* MARGINS & PADDINGS */ +.p-xxs { + padding: 5px; +} + +.p-xs { + padding: 10px; +} + +.p-sm { + padding: 15px; +} + +.p-m { + padding: 20px; +} + +.p-md { + padding: 25px; +} + +.p-lg { + padding: 30px; +} + +.p-xl { + padding: 40px; +} + +.m-xxs { + margin: 2px 4px; +} + +.m-xs { + margin: 5px; +} + +.m-sm { + margin: 10px; +} + +.m { + margin: 15px; +} + +.m-md { + margin: 20px; +} + +.m-lg { + margin: 30px; +} + +.m-xl { + margin: 50px; +} + +.m-n { + margin: 0 !important; +} + +.m-l-none { + margin-left: 0; +} + +.m-l-xs { + margin-left: 5px; +} + +.m-l-sm { + margin-left: 10px; +} + +.m-l { + margin-left: 15px; +} + +.m-l-md { + margin-left: 20px; +} + +.m-l-lg { + margin-left: 30px; +} + +.m-l-xl { + margin-left: 40px; +} + +.m-l-n-xxs { + margin-left: -1px; +} + +.m-l-n-xs { + margin-left: -5px; +} + +.m-l-n-sm { + margin-left: -10px; +} + +.m-l-n { + margin-left: -15px; +} + +.m-l-n-md { + margin-left: -20px; +} + +.m-l-n-lg { + margin-left: -30px; +} + +.m-l-n-xl { + margin-left: -40px; +} + +.m-t-none { + margin-top: 0; +} + +.m-t-xxs { + margin-top: 1px; +} + +.m-t-xs { + margin-top: 5px; +} + +.m-t-sm { + margin-top: 10px; +} + +.m-t { + margin-top: 15px; +} + +.m-t-md { + margin-top: 20px; +} + +.m-t-lg { + margin-top: 30px; +} + +.m-t-xl { + margin-top: 40px; +} + +.m-t-n-xxs { + margin-top: -1px; +} + +.m-t-n-xs { + margin-top: -5px; +} + +.m-t-n-sm { + margin-top: -10px; +} + +.m-t-n { + margin-top: -15px; +} + +.m-t-n-md { + margin-top: -20px; +} + +.m-t-n-lg { + margin-top: -30px; +} + +.m-t-n-xl { + margin-top: -40px; +} + +.m-r-none { + margin-right: 0; +} + +.m-r-xxs { + margin-right: 1px; +} + +.m-r-xs { + margin-right: 5px; +} + +.m-r-sm { + margin-right: 10px; +} + +.m-r { + margin-right: 15px; +} + +.m-r-md { + margin-right: 20px; +} + +.m-r-lg { + margin-right: 30px; +} + +.m-r-xl { + margin-right: 40px; +} + +.m-r-n-xxs { + margin-right: -1px; +} + +.m-r-n-xs { + margin-right: -5px; +} + +.m-r-n-sm { + margin-right: -10px; +} + +.m-r-n { + margin-right: -15px; +} + +.m-r-n-md { + margin-right: -20px; +} + +.m-r-n-lg { + margin-right: -30px; +} + +.m-r-n-xl { + margin-right: -40px; +} + +.m-b-none { + margin-bottom: 0; +} + +.m-b-xxs { + margin-bottom: 1px; +} + +.m-b-xs { + margin-bottom: 5px; +} + +.m-b-sm { + margin-bottom: 10px; +} + +.m-b { + margin-bottom: 15px; +} + +.m-b-md { + margin-bottom: 20px; +} + +.m-b-lg { + margin-bottom: 30px; +} + +.m-b-xl { + margin-bottom: 40px; +} + +.m-b-n-xxs { + margin-bottom: -1px; +} + +.m-b-n-xs { + margin-bottom: -5px; +} + +.m-b-n-sm { + margin-bottom: -10px; +} + +.m-b-n { + margin-bottom: -15px; +} + +.m-b-n-md { + margin-bottom: -20px; +} + +.m-b-n-lg { + margin-bottom: -30px; +} + +.m-b-n-xl { + margin-bottom: -40px; +} + +.space-15 { + margin: 15px 0; +} + +.space-20 { + margin: 20px 0; +} + +.space-25 { + margin: 25px 0; +} + +.space-30 { + margin: 30px 0; +} + +body.modal-open { + padding-right: inherit !important; +} +/* SEARCH PAGE */ +.search-form { + margin-top: 10px; +} + +.search-result h3 { + margin-bottom: 0; + color: #1E0FBE; +} + +.search-result .search-link { + color: #006621; +} + +.search-result p { + font-size: 12px; + margin-top: 5px; +} +/* CONTACTS */ +.contact-box { + background-color: #ffffff; + border: 1px solid #e7eaec; + padding: 20px; + margin-bottom: 20px; +} + +.contact-box a { + color: inherit; +} + +/* INVOICE */ +.invoice-table tbody>tr>td:last-child, .invoice-table tbody>tr>td:nth-child(4), .invoice-table tbody>tr>td:nth-child(3), .invoice-table tbody>tr>td:nth-child(2) { + text-align: right; +} + +.invoice-table thead>tr>th:last-child, .invoice-table thead>tr>th:nth-child(4), .invoice-table thead>tr>th:nth-child(3), .invoice-table thead>tr>th:nth-child(2) { + text-align: right; +} + +.invoice-total>tbody>tr>td:first-child { + text-align: right; +} + +.invoice-total>tbody>tr>td { + border: 0 none; +} + +.invoice-total>tbody>tr>td:last-child { + border-bottom: 1px solid #DDDDDD; + text-align: right; + width: 15%; +} +/* ERROR & LOGIN & LOCKSCREEN*/ +.middle-box { + max-width: 400px; + z-index: 100; + margin: 0 auto; + padding-top: 40px; +} + +.lockscreen.middle-box { + width: 200px; + padding-top: 110px; +} + +.loginscreen.middle-box { + width: 300px; +} + +.loginColumns { + max-width: 800px; + margin: 0 auto; + padding: 100px 20px 20px 20px; +} + +.passwordBox { + max-width: 460px; + margin: 0 auto; + padding: 100px 20px 20px 20px; +} + +.logo-name { + color: #e6e6e6; + font-size: 180px; + font-weight: 800; + letter-spacing: -10px; + margin-bottom: 0px; +} + +.middle-box h1 { + font-size: 170px; +} + +.wrapper .middle-box { + margin-top: 140px; +} + +.lock-word { + z-index: 10; + position: absolute; + top: 110px; + left: 50%; + margin-left: -470px; +} + +.lock-word span { + font-size: 100px; + font-weight: 600; + color: #e9e9e9; + display: inline-block; +} + +.lock-word .first-word { + margin-right: 160px; +} +/* DASBOARD */ +.dashboard-header { + border-top: 0; + padding: 20px 20px 20px 20px; +} + +.dashboard-header h2 { + margin-top: 10px; + font-size: 26px; +} + +.fist-item { + border-top: none !important; +} + +.statistic-box { + margin-top: 40px; +} + +.dashboard-header .list-group-item span.label { + margin-right: 10px; +} + +.list-group.clear-list .list-group-item { + border-top: 1px solid #e7eaec; + border-bottom: 0; + border-right: 0; + border-left: 0; + padding: 10px 0; +} + +ul.clear-list:first-child { + border-top: none !important; +} +/* Intimeline */ +.timeline-item .date i { + position: absolute; + top: 0; + right: 0; + padding: 5px; + width: 30px; + text-align: center; + border-top: 1px solid #e7eaec; + border-bottom: 1px solid #e7eaec; + border-left: 1px solid #e7eaec; + background: #f8f8f8; +} + +.timeline-item .date { + text-align: right; + width: 110px; + position: relative; + padding-top: 30px; +} + +.timeline-item .content { + border-left: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + padding-top: 10px; + min-height: 100px; +} + +.timeline-item .content:hover { + background: #f6f6f6; +} +/* PIN BOARD */ +ul.notes li, ul.tag-list li { + list-style: none; +} + +ul.notes li h4 { + margin-top: 20px; + font-size: 16px; +} + +ul.notes li div { + text-decoration: none; + color: #000; + background: #ffc; + display: block; + height: 140px; + width: 140px; + padding: 1em; + position: relative; +} + +ul.notes li div small { + position: absolute; + top: 5px; + right: 5px; + font-size: 10px; +} + +ul.notes li div a { + position: absolute; + right: 10px; + bottom: 10px; + color: inherit; +} + +ul.notes li { + margin: 10px 40px 50px 0px; + float: left; +} + +ul.notes li div p { + font-size: 12px; +} + +ul.notes li div { + text-decoration: none; + color: #000; + background: #ffc; + display: block; + height: 140px; + width: 140px; + padding: 1em; + /* Firefox */ + /* Safari+Chrome */ + /* Opera */ + box-shadow: 5px 5px 2px rgba(33, 33, 33, 0.7); +} + +ul.notes li div { + -webkit-transform: rotate(-6deg); + -o-transform: rotate(-6deg); + -moz-transform: rotate(-6deg); +} + +ul.notes li:nth-child(even) div { + -o-transform: rotate(4deg); + -webkit-transform: rotate(4deg); + -moz-transform: rotate(4deg); + position: relative; + top: 5px; +} + +ul.notes li:nth-child(3n) div { + -o-transform: rotate(-3deg); + -webkit-transform: rotate(-3deg); + -moz-transform: rotate(-3deg); + position: relative; + top: -5px; +} + +ul.notes li:nth-child(5n) div { + -o-transform: rotate(5deg); + -webkit-transform: rotate(5deg); + -moz-transform: rotate(5deg); + position: relative; + top: -10px; +} + +ul.notes li div:hover, ul.notes li div:focus { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + position: relative; + z-index: 5; +} + +ul.notes li div { + text-decoration: none; + color: #000; + background: #ffc; + display: block; + height: 210px; + width: 210px; + padding: 1em; + box-shadow: 5px 5px 7px rgba(33, 33, 33, 0.7); + -webkit-transition: -webkit-transform 0.15s linear; +} +/* FILE MANAGER */ +.file-box { + float: left; + width: 220px; +} + +.file-manager h5 { + text-transform: uppercase; +} + +.file-manager { + list-style: none outside none; + margin: 0; + padding: 0; +} + +.folder-list li a { + color: #666666; + display: block; + padding: 5px 0; +} + +.folder-list li { + border-bottom: 1px solid #e7eaec; + display: block; +} + +.folder-list li i { + margin-right: 8px; + color: #3d4d5d; +} + +.category-list li a { + color: #666666; + display: block; + padding: 5px 0; +} + +.category-list li { + display: block; +} + +.category-list li i { + margin-right: 8px; + color: #3d4d5d; +} + +.category-list li a .text-navy { + color: #1ab394; +} + +.category-list li a .text-primary { + color: #1c84c6; +} + +.category-list li a .text-info { + color: #23c6c8; +} + +.category-list li a .text-danger { + color: #EF5352; +} + +.category-list li a .text-warning { + color: #F8AC59; +} + +.file-manager h5.tag-title { + margin-top: 20px; +} + +.tag-list li { + float: left; +} + +.tag-list li a { + font-size: 10px; + background-color: #f3f3f4; + padding: 5px 12px; + color: inherit; + border-radius: 2px; + border: 1px solid #e7eaec; + margin-right: 5px; + margin-top: 5px; + display: block; +} + +.file { + border: 1px solid #e7eaec; + padding: 0; + background-color: #ffffff; + position: relative; + margin-bottom: 20px; + margin-right: 20px; +} + +.file-manager .hr-line-dashed { + margin: 15px 0; +} + +.file .icon, .file .image { + height: 100px; + overflow: hidden; +} + +.file .icon { + padding: 15px 10px; + text-align: center; +} + +.file-control { + color: inherit; + font-size: 14px; + margin-right: 10px; +} + +.file-control.active { + text-decoration: underline; +} + +.file .icon i { + font-size: 70px; + color: #dadada; +} + +.file .file-name { + padding: 10px; + background-color: #f8f8f8; + border-top: 1px solid #e7eaec; +} + +.file-name small { + color: #676a6c; +} + +.corner { + position: absolute; + display: inline-block; + width: 0; + height: 0; + line-height: 0; + border: 0.6em solid transparent; + border-right: 0.6em solid #f1f1f1; + border-bottom: 0.6em solid #f1f1f1; + right: 0em; + bottom: 0em; +} + +a.compose-mail { + padding: 8px 10px; +} + +.mail-search { + max-width: 300px; +} +/* PROFILE */ +.profile-content { + border-top: none !important; +} + +.feed-activity-list .feed-element { + border-bottom: 1px solid #e7eaec; +} + +.feed-element:first-child { + margin-top: 0; +} + +.feed-element { + padding-bottom: 15px; +} + +.feed-element, .feed-element .media { + margin-top: 15px; +} + +.feed-element, .media-body { + overflow: hidden; +} + +.feed-element>.pull-left { + margin-right: 10px; +} + +.feed-element img.img-circle, .dropdown-messages-box img.img-circle { + width: 38px; + height: 38px; +} + +.feed-element .well { + border: 1px solid #e7eaec; + box-shadow: none; + margin-top: 10px; + margin-bottom: 5px; + padding: 10px 20px; + font-size: 11px; + line-height: 16px; +} + +.feed-element .actions { + margin-top: 10px; +} + +.feed-element .photos { + margin: 10px 0; +} + +.feed-photo { + max-height: 180px; + border-radius: 4px; + overflow: hidden; + margin-right: 10px; + margin-bottom: 10px; +} +/* MAILBOX */ +.mail-box { + background-color: #ffffff; + border: 1px solid #e7eaec; + border-top: 0; + padding: 0px; + margin-bottom: 20px; +} + +.mail-box-header { + background-color: #ffffff; + border: 1px solid #e7eaec; + border-bottom: 0; + padding: 30px 20px 20px 20px; +} + +.mail-box-header h2 { + margin-top: 0px; +} + +.mailbox-content .tag-list li a { + background: #ffffff; +} + +.mail-body { + border-top: 1px solid #e7eaec; + padding: 20px; +} + +.mail-text { + border-top: 1px solid #e7eaec; +} + +.mail-text .note-toolbar { + padding: 10px 15px; +} + +.mail-body .form-group { + margin-bottom: 5px; +} + +.mail-text .note-editor .note-toolbar { + background-color: #F9F8F8; +} + +.mail-attachment { + border-top: 1px solid #e7eaec; + padding: 20px; + font-size: 12px; +} + +.mailbox-content { + background: none; + border: none; + padding: 10px; +} + +.mail-ontact { + width: 23%; +} +/* PROJECTS */ +.project-people, .project-actions { + text-align: right; + vertical-align: middle; +} + +dd.project-people { + text-align: left; + margin-top: 5px; +} + +.project-people img { + width: 32px; + height: 32px; +} + +.project-title a { + font-size: 14px; + color: #676a6c; + font-weight: 600; +} + +.project-list table tr td { + border-top: none; + border-bottom: 1px solid #e7eaec; + padding: 15px 10px; + vertical-align: middle; +} + +.project-manager .tag-list li a { + font-size: 10px; + background-color: white; + padding: 5px 12px; + color: inherit; + border-radius: 2px; + border: 1px solid #e7eaec; + margin-right: 5px; + margin-top: 5px; + display: block; +} + +.project-files li a { + font-size: 11px; + color: #676a6c; + margin-left: 10px; + line-height: 22px; +} +/* FAQ */ +.faq-item { + padding: 20px; + margin-bottom: 2px; + background: #fff; +} + +.faq-question { + font-size: 18px; + font-weight: 600; + color: #1ab394; + display: block; +} + +.faq-question:hover { + color: #179d82; +} + +.faq-answer { + margin-top: 10px; + background: #f3f3f4; + border: 1px solid #e7eaec; + border-radius: 3px; + padding: 15px; +} + +.faq-item .tag-item { + background: #f3f3f4; + padding: 2px 6px; + font-size: 10px; + text-transform: uppercase; +} +/* Chat view */ +.message-input { + height: 90px !important; +} + +.chat-avatar { + white: 36px; + height: 36px; + float: left; + margin-right: 10px; +} + +.chat-user-name { + padding: 10px; +} + +.chat-user { + padding: 8px 10px; + border-bottom: 1px solid #e7eaec; +} + +.chat-user a { + color: inherit; +} + +.chat-view { + z-index: 20012; +} + +.chat-users, .chat-statistic { + margin-left: -30px; +} + +@media ( max-width : 992px) { + .chat-users, .chat-statistic { + margin-left: 0px; + } +} + +.chat-view .ibox-content { + padding: 0; +} + +.chat-message { + padding: 10px 20px; +} + +.message-avatar { + height: 48px; + width: 48px; + border: 1px solid #e7eaec; + border-radius: 4px; + margin-top: 1px; +} + +.chat-discussion .chat-message:nth-child(2n+1) .message-avatar { + float: left; + margin-right: 10px; +} + +.chat-discussion .chat-message:nth-child(2n) .message-avatar { + float: right; + margin-left: 10px; +} + +.message { + background-color: #fff; + border: 1px solid #e7eaec; + text-align: left; + display: block; + padding: 10px 20px; + position: relative; + border-radius: 4px; +} + +.chat-discussion .chat-message:nth-child(2n+1) .message-date { + float: right; +} + +.chat-discussion .chat-message:nth-child(2n) .message-date { + float: left; +} + +.chat-discussion .chat-message:nth-child(2n+1) .message { + text-align: left; + margin-left: 55px; +} + +.chat-discussion .chat-message:nth-child(2n) .message { + text-align: right; + margin-right: 55px; +} + +.message-date { + font-size: 10px; + color: #888888; +} + +.message-content { + display: block; +} + +.chat-discussion { + background: #eee; + padding: 15px; + height: 400px; + overflow-y: auto; +} + +.chat-users { + overflow-y: auto; + height: 400px; +} + +.chat-message-form .form-group { + margin-bottom: 0; +} +/* jsTree */ +.jstree-open>.jstree-anchor>.fa-folder:before { + content: "\f07c"; +} + +.jstree-default .jstree-icon.none { + width: 0; +} +/* CLIENTS */ +.clients-list { + margin-top: 20px; +} + +.clients-list .tab-pane { + position: relative; + height: 600px; +} + +.client-detail { + position: relative; + height: 620px; +} + +.clients-list table tr td { + height: 46px; + vertical-align: middle; + border: none; +} + +.client-link { + font-weight: 600; + color: inherit; +} + +.client-link:hover { + color: inherit; +} + +.client-avatar { + width: 42px; +} + +.client-avatar img { + width: 28px; + height: 28px; + border-radius: 50%; +} + +.contact-type { + width: 20px; + color: #c1c3c4; +} + +.client-status { + text-align: left; +} + +.client-detail .vertical-timeline-content p { + margin: 0; +} + +.client-detail .vertical-timeline-icon.gray-bg { + color: #a7aaab; +} + +.clients-list .nav-tabs>li.active>a, .clients-list .nav-tabs>li.active>a:hover, .clients-list .nav-tabs>li.active>a:focus { + border-bottom: 1px solid #fff; +} +/* BLOG ARTICLE */ +.blog h2 { + font-weight: 700; +} + +.blog h5 { + margin: 0 0 5px 0; +} + +.blog .btn { + margin: 0 0 5px 0; +} + +.article h1 { + font-size: 48px; + font-weight: 700; + color: #2F4050; +} + +.article p { + font-size: 15px; + line-height: 26px; +} + +.article-title { + text-align: center; + margin: 60px 0 40px 0; +} + +.article .ibox-content { + padding: 40px; +} +/* ISSUE TRACKER */ +.issue-tracker .btn-link { + color: #1ab394; +} + +table.issue-tracker tbody tr td { + vertical-align: middle; + height: 50px; +} + +.issue-info { + width: 50%; +} + +.issue-info a { + font-weight: 600; + color: #676a6c; +} + +.issue-info small { + display: block; +} +/* TEAMS */ +.team-members { + margin: 10px 0; +} + +.team-members img.img-circle { + width: 42px; + height: 42px; + margin-bottom: 5px; +} +/* AGILE BOARD */ +.sortable-list { + padding: 10px 0; +} + +.agile-list { + list-style: none; + margin: 0; +} + +.agile-list li { + background: #FAFAFB; + border: 1px solid #e7eaec; + margin: 0px 0 10px 0; + padding: 10px; + border-radius: 2px; +} + +.agile-list li:hover { + cursor: pointer; + background: #fff; +} + +.agile-list li.warning-element { + border-left: 3px solid #f8ac59; +} + +.agile-list li.danger-element { + border-left: 3px solid #ed5565; +} + +.agile-list li.info-element { + border-left: 3px solid #1c84c6; +} + +.agile-list li.success-element { + border-left: 3px solid #1ab394; +} + +.agile-detail { + margin-top: 5px; + font-size: 12px; +} +/* DIFF */ +ins { + background-color: #c6ffc6; + text-decoration: none; +} + +del { + background-color: #ffc6c6; +} + +#small-chat { + position: fixed; + bottom: 50px; + right: 26px; + z-index: 100; +} + +#small-chat .badge { + position: absolute; + top: -3px; + right: -4px; +} + +.open-small-chat { + height: 38px; + width: 38px; + display: block; + background: #1ab394; + padding: 9px 8px; + text-align: center; + color: #fff; + border-radius: 50%; +} + +.open-small-chat:hover { + color: white; + background: #1ab394; +} + +.small-chat-box { + display: none; + position: fixed; + bottom: 50px; + right: 80px; + background: #fff; + border: 1px solid #e7eaec; + width: 230px; + height: 320px; + border-radius: 4px; +} + +.small-chat-box.ng-small-chat { + display: block; +} + +.body-small .small-chat-box { + bottom: 70px; + right: 20px; +} + +.small-chat-box.active { + display: block; +} + +.small-chat-box .heading { + background: #2f4050; + padding: 8px 15px; + font-weight: bold; + color: #fff; +} + +.small-chat-box .chat-date { + opacity: 0.6; + font-size: 10px; + font-weight: normal; +} + +.small-chat-box .content { + padding: 15px 15px; +} + +.small-chat-box .content .author-name { + font-weight: bold; + margin-bottom: 3px; + font-size: 11px; +} + +.small-chat-box .content>div { + padding-bottom: 20px; +} + +.small-chat-box .content .chat-message { + padding: 5px 10px; + border-radius: 6px; + font-size: 11px; + line-height: 14px; + max-width: 80%; + background: #f3f3f4; + margin-bottom: 10px; +} + +.small-chat-box .content .chat-message.active { + background: #1ab394; + color: #fff; +} + +.small-chat-box .content .left { + text-align: left; + clear: both; +} + +.small-chat-box .content .left .chat-message { + float: left; +} + +.small-chat-box .content .right { + text-align: right; + clear: both; +} + +.small-chat-box .content .right .chat-message { + float: right; +} + +.small-chat-box .form-chat { + padding: 10px 10px; +} +/* + * Usage: + * + *
+ * + */ +.sk-spinner-rotating-plane.sk-spinner { + width: 30px; + height: 30px; + background-color: #1ab394; + margin: 0 auto; + -webkit-animation: sk-rotatePlane 1.2s infinite ease-in-out; + animation: sk-rotatePlane 1.2s infinite ease-in-out; +} + +@-webkit-keyframes sk-rotatePlane { + 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(-180deg); + transform: perspective(120px) rotateX(-180deg) rotateY(-180deg); + } +} + +@keyframes sk-rotatePlane { + 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 ); + } +} +/* + * Usage: + * + *
+ *
+ *
+ *
+ * + */ +.sk-spinner-double-bounce.sk-spinner { + width: 40px; + height: 40px; + position: relative; + margin: 0 auto; +} + +.sk-spinner-double-bounce .sk-double-bounce1, .sk-spinner-double-bounce .sk-double-bounce2 { + width: 100%; + height: 100%; + border-radius: 50%; + background-color: #1ab394; + opacity: 0.6; + position: absolute; + top: 0; + left: 0; + -webkit-animation: sk-doubleBounce 2s infinite ease-in-out; + animation: sk-doubleBounce 2s infinite ease-in-out; +} + +.sk-spinner-double-bounce .sk-double-bounce2 { + -webkit-animation-delay: -1s; + animation-delay: -1s; +} + +@-webkit-keyframes sk-doubleBounce { + 0%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes sk-doubleBounce { + 0%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +/* + * Usage: + * + *
+ *
+ *
+ *
+ *
+ *
+ *
+ * + */ +.sk-spinner-wave.sk-spinner { + margin: 0 auto; + width: 50px; + height: 30px; + text-align: center; + font-size: 10px; +} + +.sk-spinner-wave div { + background-color: #1ab394; + height: 100%; + width: 6px; + display: inline-block; + -webkit-animation: sk-waveStretchDelay 1.2s infinite ease-in-out; + animation: sk-waveStretchDelay 1.2s infinite ease-in-out; +} + +.sk-spinner-wave .sk-rect2 { + -webkit-animation-delay: -1.1s; + animation-delay: -1.1s; +} + +.sk-spinner-wave .sk-rect3 { + -webkit-animation-delay: -1s; + animation-delay: -1s; +} + +.sk-spinner-wave .sk-rect4 { + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; +} + +.sk-spinner-wave .sk-rect5 { + -webkit-animation-delay: -0.8s; + animation-delay: -0.8s; +} + +@-webkit-keyframes sk-waveStretchDelay { + 0%, 40%, 100% { + -webkit-transform: scaleY(0.4); + transform: scaleY(0.4); + } + + 20% { + -webkit-transform: scaleY(1); + transform: scaleY(1); + } +} + +@keyframes sk-waveStretchDelay { + 0%, 40%, 100% { + -webkit-transform: scaleY(0.4); + transform: scaleY(0.4); + } + + 20% { + -webkit-transform: scaleY(1); + transform: scaleY(1); + } +} +/* + * Usage: + * + *
+ *
+ *
+ *
+ * + */ +.sk-spinner-wandering-cubes.sk-spinner { + margin: 0 auto; + width: 32px; + height: 32px; + position: relative; +} + +.sk-spinner-wandering-cubes .sk-cube1, .sk-spinner-wandering-cubes .sk-cube2 { + background-color: #1ab394; + width: 10px; + height: 10px; + position: absolute; + top: 0; + left: 0; + -webkit-animation: sk-wanderingCubeMove 1.8s infinite ease-in-out; + animation: sk-wanderingCubeMove 1.8s infinite ease-in-out; +} + +.sk-spinner-wandering-cubes .sk-cube2 { + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; +} + +@-webkit-keyframes sk-wanderingCubeMove { + 25% { + -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5); + transform: translateX(42px) rotate(-90deg) scale(0.5); + } + + 50% { + /* Hack to make FF rotate in the right direction */ + -webkit-transform: translateX(42px) translateY(42px) rotate(-179deg); + transform: translateX(42px) translateY(42px) rotate(-179deg); + } + +50.1% { + -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg); + transform: translateX(42px) translateY(42px) rotate(-180deg); +} + +75% { + -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 ); + transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 ); +} + +100% { + -webkit-transform: rotate(-360deg); + transform: rotate(-360deg); +} +} + +@keyframes sk-wanderingCubeMove { + 25% { + -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5); + transform: translateX(42px) rotate(-90deg) scale(0.5); + } + + 50% { + /* Hack to make FF rotate in the right direction */ + -webkit-transform: translateX(42px) translateY(42px) rotate(-179deg); + transform: translateX(42px) translateY(42px) rotate(-179deg); + } + + 50.1%{ + -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg); + transform: translateX(42px) translateY(42px) rotate(-180deg); + } + + 75% { + -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 ); + transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 ); + } + + 100% { + -webkit-transform: rotate(-360deg); + transform: rotate(-360deg); + } +} +/* + * Usage: + * + *
+ * + */ +.sk-spinner-pulse.sk-spinner { + width: 40px; + height: 40px; + margin: 0 auto; + background-color: #1ab394; + border-radius: 100%; + -webkit-animation: sk-pulseScaleOut 1s infinite ease-in-out; + animation: sk-pulseScaleOut 1s infinite ease-in-out; +} + +@-webkit-keyframes sk-pulseScaleOut { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 100% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 0; + } +} + +@keyframes sk-pulseScaleOut { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 100% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 0; + } +} +/* + * Usage: + * + *
+ *
+ *
+ *
+ * + */ +.sk-spinner-chasing-dots.sk-spinner { + margin: 0 auto; + width: 40px; + height: 40px; + position: relative; + text-align: center; + -webkit-animation: sk-chasingDotsRotate 2s infinite linear; + animation: sk-chasingDotsRotate 2s infinite linear; +} + +.sk-spinner-chasing-dots .sk-dot1, .sk-spinner-chasing-dots .sk-dot2 { + width: 60%; + height: 60%; + display: inline-block; + position: absolute; + top: 0; + background-color: #1ab394; + border-radius: 100%; + -webkit-animation: sk-chasingDotsBounce 2s infinite ease-in-out; + animation: sk-chasingDotsBounce 2s infinite ease-in-out; +} + +.sk-spinner-chasing-dots .sk-dot2 { + top: auto; + bottom: 0px; + -webkit-animation-delay: -1s; + animation-delay: -1s; +} + +@-webkit-keyframes sk-chasingDotsRotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes sk-chasingDotsRotate { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@-webkit-keyframes sk-chasingDotsBounce { + 0%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes sk-chasingDotsBounce { + 0%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +/* + * Usage: + * + *
+ *
+ *
+ *
+ *
+ * + */ +.sk-spinner-three-bounce.sk-spinner { + margin: 0 auto; + width: 70px; + text-align: center; +} + +.sk-spinner-three-bounce div { + width: 18px; + height: 18px; + background-color: #1ab394; + border-radius: 100%; + display: inline-block; + -webkit-animation: sk-threeBounceDelay 1.4s infinite ease-in-out; + animation: sk-threeBounceDelay 1.4s infinite ease-in-out; + /* Prevent first frame from flickering when animation starts */ + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.sk-spinner-three-bounce .sk-bounce1 { + -webkit-animation-delay: -0.32s; + animation-delay: -0.32s; +} + +.sk-spinner-three-bounce .sk-bounce2 { + -webkit-animation-delay: -0.16s; + animation-delay: -0.16s; +} + +@-webkit-keyframes sk-threeBounceDelay { + 0%, 80%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 40% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes sk-threeBounceDelay { + 0%, 80%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 40% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +/* + * Usage: + * + *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * + */ +.sk-spinner-circle.sk-spinner { + margin: 0 auto; + width: 22px; + height: 22px; + position: relative; +} + +.sk-spinner-circle .sk-circle { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; +} + +.sk-spinner-circle .sk-circle:before { + content: ''; + display: block; + margin: 0 auto; + width: 20%; + height: 20%; + background-color: #1ab394; + border-radius: 100%; + -webkit-animation: sk-circleBounceDelay 1.2s infinite ease-in-out; + animation: sk-circleBounceDelay 1.2s infinite ease-in-out; + /* Prevent first frame from flickering when animation starts */ + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.sk-spinner-circle .sk-circle2 { + -webkit-transform: rotate(30deg); + -ms-transform: rotate(30deg); + transform: rotate(30deg); +} + +.sk-spinner-circle .sk-circle3 { + -webkit-transform: rotate(60deg); + -ms-transform: rotate(60deg); + transform: rotate(60deg); +} + +.sk-spinner-circle .sk-circle4 { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} + +.sk-spinner-circle .sk-circle5 { + -webkit-transform: rotate(120deg); + -ms-transform: rotate(120deg); + transform: rotate(120deg); +} + +.sk-spinner-circle .sk-circle6 { + -webkit-transform: rotate(150deg); + -ms-transform: rotate(150deg); + transform: rotate(150deg); +} + +.sk-spinner-circle .sk-circle7 { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.sk-spinner-circle .sk-circle8 { + -webkit-transform: rotate(210deg); + -ms-transform: rotate(210deg); + transform: rotate(210deg); +} + +.sk-spinner-circle .sk-circle9 { + -webkit-transform: rotate(240deg); + -ms-transform: rotate(240deg); + transform: rotate(240deg); +} + +.sk-spinner-circle .sk-circle10 { + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} + +.sk-spinner-circle .sk-circle11 { + -webkit-transform: rotate(300deg); + -ms-transform: rotate(300deg); + transform: rotate(300deg); +} + +.sk-spinner-circle .sk-circle12 { + -webkit-transform: rotate(330deg); + -ms-transform: rotate(330deg); + transform: rotate(330deg); +} + +.sk-spinner-circle .sk-circle2:before { + -webkit-animation-delay: -1.1s; + animation-delay: -1.1s; +} + +.sk-spinner-circle .sk-circle3:before { + -webkit-animation-delay: -1s; + animation-delay: -1s; +} + +.sk-spinner-circle .sk-circle4:before { + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; +} + +.sk-spinner-circle .sk-circle5:before { + -webkit-animation-delay: -0.8s; + animation-delay: -0.8s; +} + +.sk-spinner-circle .sk-circle6:before { + -webkit-animation-delay: -0.7s; + animation-delay: -0.7s; +} + +.sk-spinner-circle .sk-circle7:before { + -webkit-animation-delay: -0.6s; + animation-delay: -0.6s; +} + +.sk-spinner-circle .sk-circle8:before { + -webkit-animation-delay: -0.5s; + animation-delay: -0.5s; +} + +.sk-spinner-circle .sk-circle9:before { + -webkit-animation-delay: -0.4s; + animation-delay: -0.4s; +} + +.sk-spinner-circle .sk-circle10:before { + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} + +.sk-spinner-circle .sk-circle11:before { + -webkit-animation-delay: -0.2s; + animation-delay: -0.2s; +} + +.sk-spinner-circle .sk-circle12:before { + -webkit-animation-delay: -0.1s; + animation-delay: -0.1s; +} + +@-webkit-keyframes sk-circleBounceDelay { + 0%, 80%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 40% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes sk-circleBounceDelay { + 0%, 80%, 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + + 40% { + -webkit-transform: scale(1); + transform: scale(1); + } +} +/* + * Usage: + * + *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * + */ +.sk-spinner-cube-grid { + /* + * Spinner positions + * 1 2 3 + * 4 5 6 + * 7 8 9 + */ +} + +.sk-spinner-cube-grid.sk-spinner { + width: 30px; + height: 30px; + margin: 0 auto; +} + +.sk-spinner-cube-grid .sk-cube { + width: 33%; + height: 33%; + background-color: #1ab394; + float: left; + -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; + animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; +} + +.sk-spinner-cube-grid .sk-cube:nth-child(1) { + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} + +.sk-spinner-cube-grid .sk-cube:nth-child(2) { + -webkit-animation-delay: 0.3s; + animation-delay: 0.3s; +} + +.sk-spinner-cube-grid .sk-cube:nth-child(3) { + -webkit-animation-delay: 0.4s; + animation-delay: 0.4s; +} + +.sk-spinner-cube-grid .sk-cube:nth-child(4) { + -webkit-animation-delay: 0.1s; + animation-delay: 0.1s; +} + +.sk-spinner-cube-grid .sk-cube:nth-child(5) { + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} + +.sk-spinner-cube-grid .sk-cube:nth-child(6) { + -webkit-animation-delay: 0.3s; + animation-delay: 0.3s; +} + +.sk-spinner-cube-grid .sk-cube:nth-child(7) { + -webkit-animation-delay: 0s; + animation-delay: 0s; +} + +.sk-spinner-cube-grid .sk-cube:nth-child(8) { + -webkit-animation-delay: 0.1s; + animation-delay: 0.1s; +} + +.sk-spinner-cube-grid .sk-cube:nth-child(9) { + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} + +@-webkit-keyframes sk-cubeGridScaleDelay { + 0%, 70%, 100% { + -webkit-transform: scale3D(1, 1, 1); + transform: scale3D(1, 1, 1); + } + + 35% { + -webkit-transform: scale3D(0, 0, 1); + transform: scale3D(0, 0, 1); + } +} + +@keyframes sk-cubeGridScaleDelay { + 0%, 70%, 100% { + -webkit-transform: scale3D(1, 1, 1); + transform: scale3D(1, 1, 1); + } + + 35% { + -webkit-transform: scale3D(0, 0, 1); + transform: scale3D(0, 0, 1); + } +} +/* + * Usage: + * + *
+ * + *
+ * + */ +.sk-spinner-wordpress.sk-spinner { + background-color: #1ab394; + width: 30px; + height: 30px; + border-radius: 30px; + position: relative; + margin: 0 auto; + -webkit-animation: sk-innerCircle 1s linear infinite; + animation: sk-innerCircle 1s linear infinite; +} + +.sk-spinner-wordpress .sk-inner-circle { + display: block; + background-color: #fff; + width: 8px; + height: 8px; + position: absolute; + border-radius: 8px; + top: 5px; + left: 5px; +} + +@-webkit-keyframes sk-innerCircle { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes sk-innerCircle { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +/* + * Usage: + * + *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * + */ +.sk-spinner-fading-circle.sk-spinner { + margin: 0 auto; + width: 22px; + height: 22px; + position: relative; +} + +.sk-spinner-fading-circle .sk-circle { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; +} + +.sk-spinner-fading-circle .sk-circle:before { + content: ''; + display: block; + margin: 0 auto; + width: 18%; + height: 18%; + background-color: #1ab394; + border-radius: 100%; + -webkit-animation: sk-circleFadeDelay 1.2s infinite ease-in-out; + animation: sk-circleFadeDelay 1.2s infinite ease-in-out; + /* Prevent first frame from flickering when animation starts */ + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.sk-spinner-fading-circle .sk-circle2 { + -webkit-transform: rotate(30deg); + -ms-transform: rotate(30deg); + transform: rotate(30deg); +} + +.sk-spinner-fading-circle .sk-circle3 { + -webkit-transform: rotate(60deg); + -ms-transform: rotate(60deg); + transform: rotate(60deg); +} + +.sk-spinner-fading-circle .sk-circle4 { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} + +.sk-spinner-fading-circle .sk-circle5 { + -webkit-transform: rotate(120deg); + -ms-transform: rotate(120deg); + transform: rotate(120deg); +} + +.sk-spinner-fading-circle .sk-circle6 { + -webkit-transform: rotate(150deg); + -ms-transform: rotate(150deg); + transform: rotate(150deg); +} + +.sk-spinner-fading-circle .sk-circle7 { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.sk-spinner-fading-circle .sk-circle8 { + -webkit-transform: rotate(210deg); + -ms-transform: rotate(210deg); + transform: rotate(210deg); +} + +.sk-spinner-fading-circle .sk-circle9 { + -webkit-transform: rotate(240deg); + -ms-transform: rotate(240deg); + transform: rotate(240deg); +} + +.sk-spinner-fading-circle .sk-circle10 { + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} + +.sk-spinner-fading-circle .sk-circle11 { + -webkit-transform: rotate(300deg); + -ms-transform: rotate(300deg); + transform: rotate(300deg); +} + +.sk-spinner-fading-circle .sk-circle12 { + -webkit-transform: rotate(330deg); + -ms-transform: rotate(330deg); + transform: rotate(330deg); +} + +.sk-spinner-fading-circle .sk-circle2:before { + -webkit-animation-delay: -1.1s; + animation-delay: -1.1s; +} + +.sk-spinner-fading-circle .sk-circle3:before { + -webkit-animation-delay: -1s; + animation-delay: -1s; +} + +.sk-spinner-fading-circle .sk-circle4:before { + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; +} + +.sk-spinner-fading-circle .sk-circle5:before { + -webkit-animation-delay: -0.8s; + animation-delay: -0.8s; +} + +.sk-spinner-fading-circle .sk-circle6:before { + -webkit-animation-delay: -0.7s; + animation-delay: -0.7s; +} + +.sk-spinner-fading-circle .sk-circle7:before { + -webkit-animation-delay: -0.6s; + animation-delay: -0.6s; +} + +.sk-spinner-fading-circle .sk-circle8:before { + -webkit-animation-delay: -0.5s; + animation-delay: -0.5s; +} + +.sk-spinner-fading-circle .sk-circle9:before { + -webkit-animation-delay: -0.4s; + animation-delay: -0.4s; +} + +.sk-spinner-fading-circle .sk-circle10:before { + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; +} + +.sk-spinner-fading-circle .sk-circle11:before { + -webkit-animation-delay: -0.2s; + animation-delay: -0.2s; +} + +.sk-spinner-fading-circle .sk-circle12:before { + -webkit-animation-delay: -0.1s; + animation-delay: -0.1s; +} + +@-webkit-keyframes sk-circleFadeDelay { + 0%, 39%, 100% { + opacity: 0; + } + + 40% { + opacity: 1; + } +} + +@keyframes sk-circleFadeDelay { + 0%,39%,100% { + opacity: 0; + } + + 40% { + opacity: 1; + } +} + +body.rtls { + /* Theme config */ +} + +body.rtls #page-wrapper { + margin: 0 220px 0 0; +} + +body.rtls .nav-second-level li a { + padding: 7px 35px 7px 10px; +} + +body.rtls .ibox-title h5 { + float: right; +} + +body.rtls .pull-right { + float: left !important; +} + +body.rtls .pull-left { + float: right !important; +} + +body.rtls .ibox-tools { + float: left; +} + +body.rtls .stat-percent { + float: left; +} + +body.rtls .navbar-right { + float: left !important; +} + +body.rtls .navbar-top-links li:last-child { + margin-left: 40px; + margin-right: 0; +} + +body.rtls .minimalize-styl-2 { + float: right; + margin: 14px 20px 5px 5px; +} + +body.rtls .feed-element>.pull-left { + margin-left: 10px; + margin-right: 0; +} + +body.rtls .timeline-item .date { + text-align: left; +} + +body.rtls .timeline-item .date i { + left: 0; + right: auto; +} + +body.rtls .timeline-item .content { + border-right: 1px solid #e7eaec; + border-left: none; +} + +body.rtls .toast-close-button { + float: left; +} + +body.rtls #toast-container>.toast:before { + margin: auto -1.5em auto 0.5em; +} + +body.rtls #toast-container>div { + padding: 15px 50px 15px 15px; +} + +body.rtls .center-orientation .vertical-timeline-icon i { + margin-left: 0; + margin-right: -12px; +} + +body.rtls .vertical-timeline-icon i { + right: 50%; + left: auto; + margin-left: auto; + margin-right: -12px; +} + +body.rtls .file-box { + float: right; +} + +body.rtls ul.notes li { + float: right; +} + +body.rtls .chat-users, body.rtls .chat-statistic { + margin-right: -30px; + margin-left: auto; +} + +body.rtls .dropdown-menu>li>a { + text-align: right; +} + +body.rtls .b-r { + border-left: 1px solid #e7eaec; + border-right: none; +} + +body.rtls .dd-list .dd-list { + padding-right: 30px; + padding-left: 0; +} + +body.rtls .dd-item>button { + float: right; +} + +body.rtls .skin-setttings { + margin-right: 40px; + margin-left: 0; +} + +body.rtls .skin-setttings { + direction: ltr; +} + +body.rtls .footer.fixed { + margin-right: 220px; + margin-left: 0; +} + +@media ( max-width : 992px) { + body.rtls .chat-users, body.rtls .chat-statistic { + margin-right: 0px; + } +} + +body.rtls.mini-navbar .footer.fixed, body.body-small.mini-navbar .footer.fixed { + margin: 0 70px 0 0; +} + +body.rtls.mini-navbar.fixed-sidebar .footer.fixed, body.body-small.mini-navbar .footer.fixed { + margin: 0 0 0 0; +} + +body.rtls.top-navigation .navbar-toggle { + float: right; + margin-left: 15px; + margin-right: 15px; +} + +.body-small.rtls.top-navigation .navbar-header { + float: none; +} + +body.rtls.top-navigation #page-wrapper { + margin: 0; +} + +body.rtls.mini-navbar #page-wrapper { + margin: 0 70px 0 0; +} + +body.rtls.mini-navbar.fixed-sidebar #page-wrapper { + margin: 0 0 0 0; +} + +body.rtls.body-small.fixed-sidebar.mini-navbar #page-wrapper { + margin: 0 220px 0 0; +} + +body.rtls.body-small.fixed-sidebar.mini-navbar .navbar-static-side { + width: 220px; +} + +.body-small.rtls .navbar-fixed-top { + margin-right: 0px; +} + +.body-small.rtls .navbar-header { + float: right; +} + +body.rtls .navbar-top-links li:last-child { + margin-left: 20px; +} + +body.rtls .top-navigation #page-wrapper, body.rtls.mini-navbar .top-navigation #page-wrapper, body.rtls.mini-navbar.top-navigation #page-wrapper { + margin: 0; +} + +body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed { + margin: 0; +} + +@media ( max-width : 768px) { + body.rtls .navbar-top-links li:last-child { + margin-left: 20px; + } + + .body-small.rtls #page-wrapper { + position: inherit; + margin: 0 0 0 0px; + min-height: 1000px; + } + + .body-small.rtls .navbar-static-side { + display: none; + z-index: 2001; + position: absolute; + width: 70px; + } + + .body-small.rtls.mini-navbar .navbar-static-side { + display: block; + } + + .rtls.fixed-sidebar.body-small .navbar-static-side { + display: none; + z-index: 2001; + position: fixed; + width: 220px; + } + + .rtls.fixed-sidebar.body-small.mini-navbar .navbar-static-side { + display: block; + } +} + +.rtls .ltr-support { + direction: ltr; +} +/* + * + * This is style for skin config + * Use only in demo theme + * +*/ +.skin-setttings .title { + background: #efefef; + text-align: center; + text-transform: uppercase; + font-weight: 600; + display: block; + padding: 10px 15px; + font-size: 12px; +} + +.setings-item { + padding: 10px 30px; +} + +.setings-item.nb { + border: none; +} + +.setings-item.skin { + text-align: center; +} + +.setings-item .switch { + float: right; +} + +.skin-name a { + text-transform: uppercase; +} + +.setings-item a { + color: #fff; +} + +.default-skin, .blue-skin, .ultra-skin, .yellow-skin { + text-align: center; +} + +.default-skin { + font-weight: 600; + background: #1ab394; +} + +.default-skin:hover { + background: #199d82; +} + +.blue-skin { + font-weight: 600; + background: url("patterns/header-profile-skin-1.png") repeat scroll 0 0; +} + +.blue-skin:hover { + background: #0d8ddb; +} + +.yellow-skin { + font-weight: 600; + background: url("patterns/header-profile-skin-3.png") repeat scroll 0 100%; +} + +.yellow-skin:hover { + background: #ce8735; +} + +.content-tabs { + border-bottom: solid 2px #2f4050; +} + +.page-tabs a { + color: #999; +} + +.page-tabs a i { + color: #ccc; +} + +.page-tabs a.active { + background: #2f4050; + color: #a7b1c2; +} + +.page-tabs a.active:hover, .page-tabs a.active i:hover { + background: #293846; + color: #fff; +} +/* + * + * SKIN 1 - H+ - 后台主题UI框架 + * NAME - Blue light + * +*/ +.skin-1 .minimalize-styl-2 { + margin: 14px 5px 5px 30px; +} + +.skin-1 .navbar-top-links li:last-child { + margin-right: 30px; +} + +.skin-1.fixed-nav .minimalize-styl-2 { + margin: 14px 5px 5px 15px; +} + +.skin-1 .spin-icon { + background: #0e9aef !important; +} + +.skin-1 .nav-header { + background: #0e9aef; + background: url('patterns/header-profile-skin-1.png'); +} + +.skin-1.mini-navbar .nav-second-level { + background: #3e495f; +} + +.skin-1 .breadcrumb { + background: transparent; +} + +.skin-1 .page-heading { + border: none; +} + +.skin-1 .nav>li.active { + background: #3a4459; +} + +.skin-1 .nav>li>a { + color: #9ea6b9; +} + +.skin-1 .nav>li.active>a { + color: #fff; +} + +.skin-1 .navbar-minimalize { + background: #0e9aef; + border-color: #0e9aef; +} + +body.skin-1 { + background: #3e495f; +} + +.skin-1 .navbar-static-top { + background: #ffffff; +} + +.skin-1 .dashboard-header { + background: transparent; + border-bottom: none !important; + border-top: none; + padding: 20px 30px 10px 30px; +} + +.fixed-nav.skin-1 .navbar-fixed-top { + background: #fff; +} + +.skin-1 .wrapper-content { + padding: 30px 15px; +} + +.skin-1 #page-wrapper { + background: #f4f6fa; +} + +.skin-1 .ibox-title, .skin-1 .ibox-content { + border-width: 1px; +} + +.skin-1 .ibox-content:last-child { + border-style: solid solid solid solid; +} + +.skin-1 .nav>li.active { + border: none; +} + +.skin-1 .nav-header { + padding: 35px 25px 25px 25px; +} + +.skin-1 .nav-header a.dropdown-toggle { + color: #fff; + margin-top: 10px; +} + +.skin-1 .nav-header a.dropdown-toggle .text-muted { + color: #fff; + opacity: 0.8; +} + +.skin-1 .profile-element { + text-align: center; +} + +.skin-1 .img-circle { + border-radius: 5px; +} + +.skin-1 .navbar-default .nav>li>a:hover, .skin-1 .navbar-default .nav>li>a:focus { + background: #39aef5; + color: #fff; +} + +.skin-1 .nav.nav-tabs>li.active>a { + color: #555; +} + +.skin-1 .content-tabs { + border-bottom: solid 2px #39aef5; +} + +.skin-1 .nav.nav-tabs>li.active { + background: transparent; +} + +.skin-1 .page-tabs a.active { + background: #39aef5; + color: #fff; +} + +.skin-1 .page-tabs a.active:hover, .skin-1 .page-tabs a.active i:hover { + background: #0e9aef; + color: #fff; +} +/* + * + * SKIN 3 - H+ - 后台主题UI框架 + * NAME - Yellow/purple + * +*/ +.skin-3 .minimalize-styl-2 { + margin: 14px 5px 5px 30px; +} + +.skin-3 .navbar-top-links li:last-child { + margin-right: 30px; +} + +.skin-3.fixed-nav .minimalize-styl-2 { + margin: 14px 5px 5px 15px; +} + +.skin-3 .spin-icon { + background: #ecba52 !important; +} + +body.boxed-layout.skin-3 #wrapper { + background: #3e2c42; +} + +.skin-3 .nav-header { + background: #ecba52; + background: url('patterns/header-profile-skin-3.png'); +} + +.skin-3.mini-navbar .nav-second-level { + background: #3e2c42; +} + +.skin-3 .breadcrumb { + background: transparent; +} + +.skin-3 .page-heading { + border: none; +} + +.skin-3 .nav>li.active { + background: #38283c; +} + +.fixed-nav.skin-3 .navbar-fixed-top { + background: #fff; +} + +.skin-3 .nav>li>a { + color: #948b96; +} + +.skin-3 .nav>li.active>a { + color: #fff; +} + +.skin-3 .navbar-minimalize { + background: #ecba52; + border-color: #ecba52; +} + +body.skin-3 { + background: #3e2c42; +} + +.skin-3 .navbar-static-top { + background: #ffffff; +} + +.skin-3 .dashboard-header { + background: transparent; + border-bottom: none !important; + border-top: none; + padding: 20px 30px 10px 30px; +} + +.skin-3 .wrapper-content { + padding: 30px 15px; +} + +.skin-3 #page-wrapper { + background: #f4f6fa; +} + +.skin-3 .ibox-title, .skin-3 .ibox-content { + border-width: 1px; +} + +.skin-3 .ibox-content:last-child { + border-style: solid solid solid solid; +} + +.skin-3 .nav>li.active { + border: none; +} + +.skin-3 .nav-header { + padding: 35px 25px 25px 25px; +} + +.skin-3 .nav-header a.dropdown-toggle { + color: #fff; + margin-top: 10px; +} + +.skin-3 .nav-header a.dropdown-toggle .text-muted { + color: #fff; + opacity: 0.8; +} + +.skin-3 .profile-element { + text-align: center; +} + +.skin-3 .img-circle { + border-radius: 5px; +} + +.skin-3 .navbar-default .nav>li>a:hover, .skin-3 .navbar-default .nav>li>a:focus { + background: #38283c; + color: #fff; +} + +.skin-3 .nav.nav-tabs>li.active>a { + color: #555; +} + +.skin-3 .nav.nav-tabs>li.active { + background: transparent; +} + +.skin-3 .content-tabs { + border-bottom: solid 2px #3e2c42; +} + +.skin-3 .nav.nav-tabs>li.active { + background: transparent; +} + +.skin-3 .page-tabs a.active { + background: #3e2c42; + color: #fff; +} + +.skin-3 .page-tabs a.active:hover, .skin-3 .page-tabs a.active i:hover { + background: #38283c; + color: #fff; +} + +@media ( min-width : 768px) { + .navbar-top-links .dropdown-messages, .navbar-top-links .dropdown-tasks, .navbar-top-links .dropdown-alerts { + margin-left: auto; + } +} + +@media ( max-width : 768px) { + body.fixed-sidebar .navbar-static-side { + display: none; + } + + body.fixed-sidebar.mini-navbar .navbar-static-side { + width: 70px; + } + + .lock-word { + display: none; + } + + .navbar-form-custom { + display: none; + } + + .navbar-header { + display: inline; + float: left; + } + + .sidebard-panel { + z-index: 2; + position: relative; + width: auto; + min-height: 100% !important; + } + + .sidebar-content .wrapper { + padding-right: 0px; + z-index: 1; + } + + .fixed-sidebar.body-small .navbar-static-side { + display: none; + z-index: 2001; + position: fixed; + width: 220px; + } + + .fixed-sidebar.body-small.mini-navbar .navbar-static-side { + display: block; + } + + .ibox-tools { + float: none; + text-align: right; + display: block; + } + + .content-tabs { + display: none; + } + + #content-main { + height: calc(100% - 100px); + } + + .fixed-nav #content-main { + height: calc(100% - 38px); + } +} + +.navbar-static-side { + background: #2f4050; +} + +.nav-close { + padding: 10px; + display: block; + position: absolute; + right: 5px; + top: 5px; + font-size: 1.4em; + cursor: pointer; + z-index: 10; + display: none; + color: rgba(255, 255, 255, .3); +} + +@media ( max-width : 350px) { + body.fixed-sidebar.mini-navbar .navbar-static-side { + width: 0; + } + + .nav-close { + display: block; + } + + #page-wrapper { + margin-left: 0 !important; + } + + .timeline-item .date { + text-align: left; + width: 110px; + position: relative; + padding-top: 30px; + } + + .timeline-item .date i { + position: absolute; + top: 0; + left: 15px; + padding: 5px; + width: 30px; + text-align: center; + border: 1px solid #e7eaec; + background: #f8f8f8; + } + + .timeline-item .content { + border-left: none; + border-top: 1px solid #e7eaec; + padding-top: 10px; + min-height: 100px; + } + + .nav.navbar-top-links li.dropdown { + display: none; + } + + .ibox-tools { + float: none; + text-align: left; + display: inline-block; + } +} +/*JQGRID*/ +.ui-jqgrid-titlebar { + height: 40px; + line-height: 24px; + color: #676a6c; + background-color: #F9F9F9; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.ui-jqgrid .ui-jqgrid-title { + float: left; + margin-left: 5px; + font-weight: 700; +} + +.ui-jqgrid .ui-jqgrid-titlebar { + position: relative; + border-left: 0px solid; + border-right: 0px solid; + border-top: 0px solid; +} +/* Social feed */ +.social-feed-separated .social-feed-box { + margin-left: 62px; +} + +.social-feed-separated .social-avatar { + float: left; + padding: 0; +} + +.social-feed-separated .social-avatar img { + width: 52px; + height: 52px; + border: 1px solid #e7eaec; +} + +.social-feed-separated .social-feed-box .social-avatar { + padding: 15px 15px 0 15px; + float: none; +} + +.social-feed-box { + /*padding: 15px;*/ + border: 1px solid #e7eaec; + background: #fff; + margin-bottom: 15px; +} + +.article .social-feed-box { + margin-bottom: 0; + border-bottom: none; +} + +.article .social-feed-box:last-child { + margin-bottom: 0; + border-bottom: 1px solid #e7eaec; +} + +.article .social-feed-box p { + font-size: 13px; + line-height: 18px; +} + +.social-action { + margin: 15px; +} + +.social-avatar { + padding: 15px 15px 0 15px; +} + +.social-comment .social-comment { + margin-left: 45px; +} + +.social-avatar img { + height: 40px; + width: 40px; + margin-right: 10px; +} + +.social-avatar .media-body a { + font-size: 14px; + display: block; +} + +.social-body { + padding: 15px; +} + +.social-body img { + margin-bottom: 10px; +} + +.social-footer { + border-top: 1px solid #e7eaec; + padding: 10px 15px; + background: #f9f9f9; +} + +.social-footer .social-comment img { + width: 32px; + margin-right: 10px; +} + +.social-comment:first-child { + margin-top: 0; +} + +.social-comment { + margin-top: 15px; +} + +.social-comment textarea { + font-size: 12px; +} + +.checkbox input[type=checkbox], .checkbox-inline input[type=checkbox], .radio input[type=radio], .radio-inline input[type=radio] { + /* margin-top: -4px; */ +} + +/* Only demo */ +@media ( max-width : 1000px) { + .welcome-message { + display: none; + } +} +/* ECHARTS */ +.echarts { + height: 240px; +} + +.checkbox-inline, .radio-inline, .checkbox-inline+.checkbox-inline, .radio-inline+.radio-inline { + margin: 0 15px 0 0; + font-size: 14px; +} + +.navbar-toggle { + background-color: #fff; +} + +.J_menuTab { + -webkit-transition: all .3s ease-out 0s; + transition: all .3s ease-out 0s; +} + +::-webkit-scrollbar-track { + background-color: #F5F5F5; +} + +::-webkit-scrollbar { + width: 6px; + background-color: #F5F5F5; +} + +::-webkit-scrollbar-thumb { + background-color: #999; +} +/*GO HOME*/ +.gohome { + position: fixed; + top: 20px; + right: 20px; + z-index: 100; +} + +.gohome a { + height: 38px; + width: 38px; + display: block; + background: #2f4050; + padding: 9px 8px; + text-align: center; + color: #fff; + border-radius: 50%; + opacity: .5; +} + +.gohome a:hover { + opacity: 1; +} + +@media only screen and (-webkit-min-device-pixel-ratio : 2) { + #content-main { + -webkit-overflow-scrolling: touch; + } +} + +.navbar-header { + width: 60%; +} + +.bs-glyphicons { + margin: 0 -10px 20px; + overflow: hidden +} + +.bs-glyphicons-list { + padding-left: 0; + list-style: none +} + +.bs-glyphicons li { + float: left; + width: 25%; + height: 115px; + padding: 10px; + font-size: 10px; + line-height: 1.4; + text-align: center; + background-color: #f9f9f9; + border: 1px solid #fff +} + +.bs-glyphicons .glyphicon { + margin-top: 5px; + margin-bottom: 10px; + font-size: 24px +} + +.bs-glyphicons .glyphicon-class { + display: block; + text-align: center; + word-wrap: break-word +} + +.bs-glyphicons li:hover { + color: #fff; + background-color: #1ab394; +} + +@media ( min-width : 768px) { + .bs-glyphicons { + margin-right: 0; + margin-left: 0 + } + + .bs-glyphicons li { + width: 12.5%; + font-size: 12px + } +} + +.t-bar { + padding-bottom: 10px; +} +.nopadding{ + padding:0; +} + +/*编辑器按钮样式冲突*/ +.note-editor .btn-default { + color: #333333!important; + background-color: #ffffff!important; + border-color: #cccccc!important; +} + diff --git a/sparchetype/src/main/resources/static/js/app.js b/sparchetype/src/main/resources/static/js/app.js new file mode 100644 index 0000000..c99a23a --- /dev/null +++ b/sparchetype/src/main/resources/static/js/app.js @@ -0,0 +1,278 @@ +//自定义js + +//公共配置 + + +$(document).ready(function () { + + // MetsiMenu + $('#side-menu').metisMenu(); + + // 打开右侧边栏 + $('.right-sidebar-toggle').click(function () { + $('#right-sidebar').toggleClass('sidebar-open'); + }); + + // 右侧边栏使用slimscroll + $('.sidebar-container').slimScroll({ + height: '100%', + railOpacity: 0.4, + wheelStep: 10 + }); + + // 打开聊天窗口 + $('.open-small-chat').click(function () { + $(this).children().toggleClass('fa-comments').toggleClass('fa-remove'); + $('.small-chat-box').toggleClass('active'); + }); + + // 聊天窗口使用slimscroll + $('.small-chat-box .content').slimScroll({ + height: '234px', + railOpacity: 0.4 + }); + + // Small todo handler + $('.check-link').click(function () { + var button = $(this).find('i'); + var label = $(this).next('span'); + button.toggleClass('fa-check-square').toggleClass('fa-square-o'); + label.toggleClass('todo-completed'); + return false; + }); + + //固定菜单栏 + $(function () { + $('.sidebar-collapse').slimScroll({ + height: '100%', + railOpacity: 0.9, + alwaysVisible: false + }); + }); + + + // 菜单切换 + $('.navbar-minimalize').click(function () { + $("body").toggleClass("mini-navbar"); + SmoothlyMenu(); + }); + + + // 侧边栏高度 + function fix_height() { + var heightWithoutNavbar = $("body > #wrapper").height() - 61; + $(".sidebard-panel").css("min-height", heightWithoutNavbar + "px"); + } + fix_height(); + + $(window).bind("load resize click scroll", function () { + if (!$("body").hasClass('body-small')) { + fix_height(); + } + }); + + //侧边栏滚动 + $(window).scroll(function () { + if ($(window).scrollTop() > 0 && !$('body').hasClass('fixed-nav')) { + $('#right-sidebar').addClass('sidebar-top'); + } else { + $('#right-sidebar').removeClass('sidebar-top'); + } + }); + + $('.full-height-scroll').slimScroll({ + height: '100%' + }); + + $('#side-menu>li').click(function () { + if ($('body').hasClass('mini-navbar')) { + NavToggle(); + } + }); + $('#side-menu>li li a').click(function () { + if ($(window).width() < 769) { + NavToggle(); + } + }); + + $('.nav-close').click(NavToggle); + + //ios浏览器兼容性处理 + if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { + $('#content-main').css('overflow-y', 'auto'); + } + +}); + +$(window).bind("load resize", function () { + if ($(this).width() < 769) { + $('body').addClass('mini-navbar'); + $('.navbar-static-side').fadeIn(); + } +}); + +function NavToggle() { + $('.navbar-minimalize').trigger('click'); +} + +function SmoothlyMenu() { + if (!$('body').hasClass('mini-navbar')) { + $('#side-menu').hide(); + setTimeout( + function () { + $('#side-menu').fadeIn(500); + }, 100); + } else if ($('body').hasClass('fixed-sidebar')) { + $('#side-menu').hide(); + setTimeout( + function () { + $('#side-menu').fadeIn(500); + }, 300); + } else { + $('#side-menu').removeAttr('style'); + } +} + + +//主题设置 +$(function () { + + // 顶部菜单固定 + $('#fixednavbar').click(function () { + if ($('#fixednavbar').is(':checked')) { + $(".navbar-static-top").removeClass('navbar-static-top').addClass('navbar-fixed-top'); + $("body").removeClass('boxed-layout'); + $("body").addClass('fixed-nav'); + $('#boxedlayout').prop('checked', false); + + if (localStorageSupport) { + localStorage.setItem("boxedlayout", 'off'); + } + + if (localStorageSupport) { + localStorage.setItem("fixednavbar", 'on'); + } + } else { + $(".navbar-fixed-top").removeClass('navbar-fixed-top').addClass('navbar-static-top'); + $("body").removeClass('fixed-nav'); + + if (localStorageSupport) { + localStorage.setItem("fixednavbar", 'off'); + } + } + }); + + + // 收起左侧菜单 + $('#collapsemenu').click(function () { + if ($('#collapsemenu').is(':checked')) { + $("body").addClass('mini-navbar'); + SmoothlyMenu(); + + if (localStorageSupport) { + localStorage.setItem("collapse_menu", 'on'); + } + + } else { + $("body").removeClass('mini-navbar'); + SmoothlyMenu(); + + if (localStorageSupport) { + localStorage.setItem("collapse_menu", 'off'); + } + } + }); + + // 固定宽度 + $('#boxedlayout').click(function () { + if ($('#boxedlayout').is(':checked')) { + $("body").addClass('boxed-layout'); + $('#fixednavbar').prop('checked', false); + $(".navbar-fixed-top").removeClass('navbar-fixed-top').addClass('navbar-static-top'); + $("body").removeClass('fixed-nav'); + if (localStorageSupport) { + localStorage.setItem("fixednavbar", 'off'); + } + + + if (localStorageSupport) { + localStorage.setItem("boxedlayout", 'on'); + } + } else { + $("body").removeClass('boxed-layout'); + + if (localStorageSupport) { + localStorage.setItem("boxedlayout", 'off'); + } + } + }); + + // 默认主题 + $('.s-skin-0').click(function () { + $("body").removeClass("skin-1"); + $("body").removeClass("skin-2"); + $("body").removeClass("skin-3"); + return false; + }); + + // 蓝色主题 + $('.s-skin-1').click(function () { + $("body").removeClass("skin-2"); + $("body").removeClass("skin-3"); + $("body").addClass("skin-1"); + return false; + }); + + // 黄色主题 + $('.s-skin-3').click(function () { + $("body").removeClass("skin-1"); + $("body").removeClass("skin-2"); + $("body").addClass("skin-3"); + return false; + }); + + if (localStorageSupport) { + var collapse = localStorage.getItem("collapse_menu"); + var fixednavbar = localStorage.getItem("fixednavbar"); + var boxedlayout = localStorage.getItem("boxedlayout"); + + if (collapse == 'on') { + $('#collapsemenu').prop('checked', 'checked') + } + if (fixednavbar == 'on') { + $('#fixednavbar').prop('checked', 'checked') + } + if (boxedlayout == 'on') { + $('#boxedlayout').prop('checked', 'checked') + } + } + + if (localStorageSupport) { + + var collapse = localStorage.getItem("collapse_menu"); + var fixednavbar = localStorage.getItem("fixednavbar"); + var boxedlayout = localStorage.getItem("boxedlayout"); + + var body = $('body'); + + if (collapse == 'on') { + if (!body.hasClass('body-small')) { + body.addClass('mini-navbar'); + } + } + + if (fixednavbar == 'on') { + $(".navbar-static-top").removeClass('navbar-static-top').addClass('navbar-fixed-top'); + body.addClass('fixed-nav'); + } + + if (boxedlayout == 'on') { + body.addClass('boxed-layout'); + } + } +}); + +//判断浏览器是否支持html5本地存储 +function localStorageSupport() { + return (('localStorage' in window) && window['localStorage'] !== null) +} diff --git a/sparchetype/src/main/resources/static/js/contabs.js b/sparchetype/src/main/resources/static/js/contabs.js new file mode 100644 index 0000000..2f3112b --- /dev/null +++ b/sparchetype/src/main/resources/static/js/contabs.js @@ -0,0 +1,310 @@ + +$(function () { + //计算元素集合的总宽度 + function calSumWidth(elements) { + var width = 0; + $(elements).each(function () { + width += $(this).outerWidth(true); + }); + return width; + } + //滚动到指定选项卡 + function scrollToTab(element) { + var marginLeftVal = calSumWidth($(element).prevAll()), marginRightVal = calSumWidth($(element).nextAll()); + // 可视区域非tab宽度 + var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".J_menuTabs")); + //可视区域tab宽度 + var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth; + //实际滚动宽度 + var scrollVal = 0; + if ($(".page-tabs-content").outerWidth() < visibleWidth) { + scrollVal = 0; + } else if (marginRightVal <= (visibleWidth - $(element).outerWidth(true) - $(element).next().outerWidth(true))) { + if ((visibleWidth - $(element).next().outerWidth(true)) > marginRightVal) { + scrollVal = marginLeftVal; + var tabElement = element; + while ((scrollVal - $(tabElement).outerWidth()) > ($(".page-tabs-content").outerWidth() - visibleWidth)) { + scrollVal -= $(tabElement).prev().outerWidth(); + tabElement = $(tabElement).prev(); + } + } + } else if (marginLeftVal > (visibleWidth - $(element).outerWidth(true) - $(element).prev().outerWidth(true))) { + scrollVal = marginLeftVal - $(element).prev().outerWidth(true); + } + $('.page-tabs-content').animate({ + marginLeft: 0 - scrollVal + 'px' + }, "fast"); + } + //查看左侧隐藏的选项卡 + function scrollTabLeft() { + var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left'))); + // 可视区域非tab宽度 + var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".J_menuTabs")); + //可视区域tab宽度 + var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth; + //实际滚动宽度 + var scrollVal = 0; + if ($(".page-tabs-content").width() < visibleWidth) { + return false; + } else { + var tabElement = $(".J_menuTab:first"); + var offsetVal = 0; + while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) {//找到离当前tab最近的元素 + offsetVal += $(tabElement).outerWidth(true); + tabElement = $(tabElement).next(); + } + offsetVal = 0; + if (calSumWidth($(tabElement).prevAll()) > visibleWidth) { + while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) { + offsetVal += $(tabElement).outerWidth(true); + tabElement = $(tabElement).prev(); + } + scrollVal = calSumWidth($(tabElement).prevAll()); + } + } + $('.page-tabs-content').animate({ + marginLeft: 0 - scrollVal + 'px' + }, "fast"); + } + //查看右侧隐藏的选项卡 + function scrollTabRight() { + var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left'))); + // 可视区域非tab宽度 + var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".J_menuTabs")); + //可视区域tab宽度 + var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth; + //实际滚动宽度 + var scrollVal = 0; + if ($(".page-tabs-content").width() < visibleWidth) { + return false; + } else { + var tabElement = $(".J_menuTab:first"); + var offsetVal = 0; + while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) {//找到离当前tab最近的元素 + offsetVal += $(tabElement).outerWidth(true); + tabElement = $(tabElement).next(); + } + offsetVal = 0; + while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) { + offsetVal += $(tabElement).outerWidth(true); + tabElement = $(tabElement).next(); + } + scrollVal = calSumWidth($(tabElement).prevAll()); + if (scrollVal > 0) { + $('.page-tabs-content').animate({ + marginLeft: 0 - scrollVal + 'px' + }, "fast"); + } + } + } + + //通过遍历给菜单项加上data-index属性 + $(".J_menuItem").each(function (index) { + if (!$(this).attr('data-index')) { + $(this).attr('data-index', index); + } + }); + + function menuItem() { + // 获取标识数据 + var dataUrl = $(this).attr('href'), + dataIndex = $(this).data('index'), + menuName = $.trim($(this).text()), + flag = true; + if (dataUrl == undefined || $.trim(dataUrl).length == 0)return false; + + // 选项卡菜单已存在 + $('.J_menuTab').each(function () { + if ($(this).data('id') == dataUrl) { + if (!$(this).hasClass('active')) { + $(this).addClass('active').siblings('.J_menuTab').removeClass('active'); + scrollToTab(this); + // 显示tab对应的内容区 + $('.J_mainContent .J_iframe').each(function () { + if ($(this).data('id') == dataUrl) { + $(this).show().siblings('.J_iframe').hide(); + return false; + } + }); + } + flag = false; + return false; + } + }); + + // 选项卡菜单不存在 + if (flag) { + var str = '' + menuName + ' '; + $('.J_menuTab').removeClass('active'); + + // 添加选项卡对应的iframe + var str1 = ''; + $('.J_mainContent').find('iframe.J_iframe').hide().parents('.J_mainContent').append(str1); + + //显示loading提示 +// var loading = layer.load(); +// +// $('.J_mainContent iframe:visible').load(function () { +// //iframe加载完成后隐藏loading提示 +// layer.close(loading); +// }); + // 添加选项卡 + $('.J_menuTabs .page-tabs-content').append(str); + scrollToTab($('.J_menuTab.active')); + } + return false; + } + + $('.J_menuItem').on('click', menuItem); + + // 关闭选项卡菜单 + function closeTab() { + var closeTabId = $(this).parents('.J_menuTab').data('id'); + var currentWidth = $(this).parents('.J_menuTab').width(); + + // 当前元素处于活动状态 + if ($(this).parents('.J_menuTab').hasClass('active')) { + + // 当前元素后面有同辈元素,使后面的一个元素处于活动状态 + if ($(this).parents('.J_menuTab').next('.J_menuTab').size()) { + + var activeId = $(this).parents('.J_menuTab').next('.J_menuTab:eq(0)').data('id'); + $(this).parents('.J_menuTab').next('.J_menuTab:eq(0)').addClass('active'); + + $('.J_mainContent .J_iframe').each(function () { + if ($(this).data('id') == activeId) { + $(this).show().siblings('.J_iframe').hide(); + return false; + } + }); + + var marginLeftVal = parseInt($('.page-tabs-content').css('margin-left')); + if (marginLeftVal < 0) { + $('.page-tabs-content').animate({ + marginLeft: (marginLeftVal + currentWidth) + 'px' + }, "fast"); + } + + // 移除当前选项卡 + $(this).parents('.J_menuTab').remove(); + + // 移除tab对应的内容区 + $('.J_mainContent .J_iframe').each(function () { + if ($(this).data('id') == closeTabId) { + $(this).remove(); + return false; + } + }); + } + + // 当前元素后面没有同辈元素,使当前元素的上一个元素处于活动状态 + if ($(this).parents('.J_menuTab').prev('.J_menuTab').size()) { + var activeId = $(this).parents('.J_menuTab').prev('.J_menuTab:last').data('id'); + $(this).parents('.J_menuTab').prev('.J_menuTab:last').addClass('active'); + $('.J_mainContent .J_iframe').each(function () { + if ($(this).data('id') == activeId) { + $(this).show().siblings('.J_iframe').hide(); + return false; + } + }); + + // 移除当前选项卡 + $(this).parents('.J_menuTab').remove(); + + // 移除tab对应的内容区 + $('.J_mainContent .J_iframe').each(function () { + if ($(this).data('id') == closeTabId) { + $(this).remove(); + return false; + } + }); + } + } + // 当前元素不处于活动状态 + else { + // 移除当前选项卡 + $(this).parents('.J_menuTab').remove(); + + // 移除相应tab对应的内容区 + $('.J_mainContent .J_iframe').each(function () { + if ($(this).data('id') == closeTabId) { + $(this).remove(); + return false; + } + }); + scrollToTab($('.J_menuTab.active')); + } + return false; + } + + $('.J_menuTabs').on('click', '.J_menuTab i', closeTab); + + //关闭其他选项卡 + function closeOtherTabs(){ + $('.page-tabs-content').children("[data-id]").not(":first").not(".active").each(function () { + $('.J_iframe[data-id="' + $(this).data('id') + '"]').remove(); + $(this).remove(); + }); + $('.page-tabs-content').css("margin-left", "0"); + } + $('.J_tabCloseOther').on('click', closeOtherTabs); + + //滚动到已激活的选项卡 + function showActiveTab(){ + scrollToTab($('.J_menuTab.active')); + } + $('.J_tabShowActive').on('click', showActiveTab); + + + // 点击选项卡菜单 + function activeTab() { + if (!$(this).hasClass('active')) { + var currentId = $(this).data('id'); + // 显示tab对应的内容区 + $('.J_mainContent .J_iframe').each(function () { + if ($(this).data('id') == currentId) { + $(this).show().siblings('.J_iframe').hide(); + return false; + } + }); + $(this).addClass('active').siblings('.J_menuTab').removeClass('active'); + scrollToTab(this); + } + } + + $('.J_menuTabs').on('click', '.J_menuTab', activeTab); + + //刷新iframe + function refreshTab() { + var target = $('.J_iframe[data-id="' + $(this).data('id') + '"]'); + var url = target.attr('src'); +// //显示loading提示 +// var loading = layer.load(); +// target.attr('src', url).load(function () { +// //关闭loading提示 +// layer.close(loading); +// }); + } + + $('.J_menuTabs').on('dblclick', '.J_menuTab', refreshTab); + + // 左移按扭 + $('.J_tabLeft').on('click', scrollTabLeft); + + // 右移按扭 + $('.J_tabRight').on('click', scrollTabRight); + + // 关闭全部 + $('.J_tabCloseAll').on('click', function () { + $('.page-tabs-content').children("[data-id]").not(":first").each(function () { + $('.J_iframe[data-id="' + $(this).data('id') + '"]').remove(); + $(this).remove(); + }); + $('.page-tabs-content').children("[data-id]:first").each(function () { + $('.J_iframe[data-id="' + $(this).data('id') + '"]').show(); + $(this).addClass("active"); + }); + $('.page-tabs-content').css("margin-left", "0"); + }); + +}); diff --git a/sparchetype/src/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js b/sparchetype/src/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js new file mode 100644 index 0000000..a04cdb0 --- /dev/null +++ b/sparchetype/src/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js @@ -0,0 +1,120 @@ +/* + * metismenu - v1.1.3 + * Easy menu jQuery plugin for Twitter Bootstrap 3 + * https://github.com/onokumus/metisMenu + * + * Made by Osman Nuri Okumus + * Under MIT License + */ +;(function($, window, document, undefined) { + + var pluginName = "metisMenu", + defaults = { + toggle: true, + doubleTapToGo: false + }; + + function Plugin(element, options) { + this.element = $(element); + this.settings = $.extend({}, defaults, options); + this._defaults = defaults; + this._name = pluginName; + this.init(); + } + + Plugin.prototype = { + init: function() { + + var $this = this.element, + $toggle = this.settings.toggle, + obj = this; + + if (this.isIE() <= 9) { + $this.find("li.active").has("ul").children("ul").collapse("show"); + $this.find("li").not(".active").has("ul").children("ul").collapse("hide"); + } else { + $this.find("li.active").has("ul").children("ul").addClass("collapse in"); + $this.find("li").not(".active").has("ul").children("ul").addClass("collapse"); + } + + //add the "doubleTapToGo" class to active items if needed + if (obj.settings.doubleTapToGo) { + $this.find("li.active").has("ul").children("a").addClass("doubleTapToGo"); + } + + $this.find("li").has("ul").children("a").on("click" + "." + pluginName, function(e) { + e.preventDefault(); + + //Do we need to enable the double tap + if (obj.settings.doubleTapToGo) { + + //if we hit a second time on the link and the href is valid, navigate to that url + if (obj.doubleTapToGo($(this)) && $(this).attr("href") !== "#" && $(this).attr("href") !== "") { + e.stopPropagation(); + document.location = $(this).attr("href"); + return; + } + } + + $(this).parent("li").toggleClass("active").children("ul").collapse("toggle"); + + if ($toggle) { + $(this).parent("li").siblings().removeClass("active").children("ul.in").collapse("hide"); + } + + }); + }, + + isIE: function() { //https://gist.github.com/padolsey/527683 + var undef, + v = 3, + div = document.createElement("div"), + all = div.getElementsByTagName("i"); + + while ( + div.innerHTML = "", + all[0] + ) { + return v > 4 ? v : undef; + } + }, + + //Enable the link on the second click. + doubleTapToGo: function(elem) { + var $this = this.element; + + //if the class "doubleTapToGo" exists, remove it and return + if (elem.hasClass("doubleTapToGo")) { + elem.removeClass("doubleTapToGo"); + return true; + } + + //does not exists, add a new class and return false + if (elem.parent().children("ul").length) { + //first remove all other class + $this.find(".doubleTapToGo").removeClass("doubleTapToGo"); + //add the class on the current element + elem.addClass("doubleTapToGo"); + return false; + } + }, + + remove: function() { + this.element.off("." + pluginName); + this.element.removeData(pluginName); + } + + }; + + $.fn[pluginName] = function(options) { + this.each(function () { + var el = $(this); + if (el.data(pluginName)) { + el.data(pluginName).remove(); + } + el.data(pluginName, new Plugin(this, options)); + }); + return this; + }; + +})(jQuery, window, document); diff --git a/sparchetype/src/main/resources/static/js/plugins/pace/pace.min.js b/sparchetype/src/main/resources/static/js/plugins/pace/pace.min.js new file mode 100644 index 0000000..134dcac --- /dev/null +++ b/sparchetype/src/main/resources/static/js/plugins/pace/pace.min.js @@ -0,0 +1,2 @@ +/*! pace 0.5.1 */ +(function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W=[].slice,X={}.hasOwnProperty,Y=function(a,b){function c(){this.constructor=a}for(var d in b)X.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},Z=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};for(t={catchupTime:500,initialRate:.03,minTime:500,ghostTime:500,maxProgressPerFrame:10,easeFactor:1.25,startOnPageLoad:!0,restartOnPushState:!0,restartOnRequestAfter:500,target:"body",elements:{checkInterval:100,selectors:["body"]},eventLag:{minSamples:10,sampleCount:3,lagThreshold:3},ajax:{trackMethods:["GET"],trackWebSockets:!0,ignoreURLs:[]}},B=function(){var a;return null!=(a="undefined"!=typeof performance&&null!==performance?"function"==typeof performance.now?performance.now():void 0:void 0)?a:+new Date},D=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,s=window.cancelAnimationFrame||window.mozCancelAnimationFrame,null==D&&(D=function(a){return setTimeout(a,50)},s=function(a){return clearTimeout(a)}),F=function(a){var b,c;return b=B(),(c=function(){var d;return d=B()-b,d>=33?(b=B(),a(d,function(){return D(c)})):setTimeout(c,33-d)})()},E=function(){var a,b,c;return c=arguments[0],b=arguments[1],a=3<=arguments.length?W.call(arguments,2):[],"function"==typeof c[b]?c[b].apply(c,a):c[b]},u=function(){var a,b,c,d,e,f,g;for(b=arguments[0],d=2<=arguments.length?W.call(arguments,1):[],f=0,g=d.length;g>f;f++)if(c=d[f])for(a in c)X.call(c,a)&&(e=c[a],null!=b[a]&&"object"==typeof b[a]&&null!=e&&"object"==typeof e?u(b[a],e):b[a]=e);return b},p=function(a){var b,c,d,e,f;for(c=b=0,e=0,f=a.length;f>e;e++)d=a[e],c+=Math.abs(d),b++;return c/b},w=function(a,b){var c,d,e;if(null==a&&(a="options"),null==b&&(b=!0),e=document.querySelector("[data-pace-"+a+"]")){if(c=e.getAttribute("data-pace-"+a),!b)return c;try{return JSON.parse(c)}catch(f){return d=f,"undefined"!=typeof console&&null!==console?console.error("Error parsing inline pace options",d):void 0}}},g=function(){function a(){}return a.prototype.on=function(a,b,c,d){var e;return null==d&&(d=!1),null==this.bindings&&(this.bindings={}),null==(e=this.bindings)[a]&&(e[a]=[]),this.bindings[a].push({handler:b,ctx:c,once:d})},a.prototype.once=function(a,b,c){return this.on(a,b,c,!0)},a.prototype.off=function(a,b){var c,d,e;if(null!=(null!=(d=this.bindings)?d[a]:void 0)){if(null==b)return delete this.bindings[a];for(c=0,e=[];cP;P++)J=T[P],C[J]===!0&&(C[J]=t[J]);i=function(a){function b(){return U=b.__super__.constructor.apply(this,arguments)}return Y(b,a),b}(Error),b=function(){function a(){this.progress=0}return a.prototype.getElement=function(){var a;if(null==this.el){if(a=document.querySelector(C.target),!a)throw new i;this.el=document.createElement("div"),this.el.className="pace pace-active",document.body.className=document.body.className.replace(/pace-done/g,""),document.body.className+=" pace-running",this.el.innerHTML='
\n
\n
\n
',null!=a.firstChild?a.insertBefore(this.el,a.firstChild):a.appendChild(this.el)}return this.el},a.prototype.finish=function(){var a;return a=this.getElement(),a.className=a.className.replace("pace-active",""),a.className+=" pace-inactive",document.body.className=document.body.className.replace("pace-running",""),document.body.className+=" pace-done"},a.prototype.update=function(a){return this.progress=a,this.render()},a.prototype.destroy=function(){try{this.getElement().parentNode.removeChild(this.getElement())}catch(a){i=a}return this.el=void 0},a.prototype.render=function(){var a,b;return null==document.querySelector(C.target)?!1:(a=this.getElement(),a.children[0].style.width=""+this.progress+"%",(!this.lastRenderedProgress||this.lastRenderedProgress|0!==this.progress|0)&&(a.children[0].setAttribute("data-progress-text",""+(0|this.progress)+"%"),this.progress>=100?b="99":(b=this.progress<10?"0":"",b+=0|this.progress),a.children[0].setAttribute("data-progress",""+b)),this.lastRenderedProgress=this.progress)},a.prototype.done=function(){return this.progress>=100},a}(),h=function(){function a(){this.bindings={}}return a.prototype.trigger=function(a,b){var c,d,e,f,g;if(null!=this.bindings[a]){for(f=this.bindings[a],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.call(this,b));return g}},a.prototype.on=function(a,b){var c;return null==(c=this.bindings)[a]&&(c[a]=[]),this.bindings[a].push(b)},a}(),O=window.XMLHttpRequest,N=window.XDomainRequest,M=window.WebSocket,v=function(a,b){var c,d,e,f;f=[];for(d in b.prototype)try{e=b.prototype[d],null==a[d]&&"function"!=typeof e?f.push(a[d]=e):f.push(void 0)}catch(g){c=g}return f},z=[],Pace.ignore=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?W.call(arguments,1):[],z.unshift("ignore"),c=b.apply(null,a),z.shift(),c},Pace.track=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?W.call(arguments,1):[],z.unshift("track"),c=b.apply(null,a),z.shift(),c},I=function(a){var b;if(null==a&&(a="GET"),"track"===z[0])return"force";if(!z.length&&C.ajax){if("socket"===a&&C.ajax.trackWebSockets)return!0;if(b=a.toUpperCase(),Z.call(C.ajax.trackMethods,b)>=0)return!0}return!1},j=function(a){function b(){var a,c=this;b.__super__.constructor.apply(this,arguments),a=function(a){var b;return b=a.open,a.open=function(d,e){return I(d)&&c.trigger("request",{type:d,url:e,request:a}),b.apply(a,arguments)}},window.XMLHttpRequest=function(b){var c;return c=new O(b),a(c),c},v(window.XMLHttpRequest,O),null!=N&&(window.XDomainRequest=function(){var b;return b=new N,a(b),b},v(window.XDomainRequest,N)),null!=M&&C.ajax.trackWebSockets&&(window.WebSocket=function(a,b){var d;return d=null!=b?new M(a,b):new M(a),I("socket")&&c.trigger("request",{type:"socket",url:a,protocols:b,request:d}),d},v(window.WebSocket,M))}return Y(b,a),b}(h),Q=null,x=function(){return null==Q&&(Q=new j),Q},H=function(a){var b,c,d,e;for(e=C.ajax.ignoreURLs,c=0,d=e.length;d>c;c++)if(b=e[c],"string"==typeof b){if(-1!==a.indexOf(b))return!0}else if(b.test(a))return!0;return!1},x().on("request",function(b){var c,d,e,f,g;return f=b.type,e=b.request,g=b.url,H(g)?void 0:Pace.running||C.restartOnRequestAfter===!1&&"force"!==I(f)?void 0:(d=arguments,c=C.restartOnRequestAfter||0,"boolean"==typeof c&&(c=0),setTimeout(function(){var b,c,g,h,i,j;if(b="socket"===f?e.readyState<2:0<(h=e.readyState)&&4>h){for(Pace.restart(),i=Pace.sources,j=[],c=0,g=i.length;g>c;c++){if(J=i[c],J instanceof a){J.watch.apply(J,d);break}j.push(void 0)}return j}},c))}),a=function(){function a(){var a=this;this.elements=[],x().on("request",function(){return a.watch.apply(a,arguments)})}return a.prototype.watch=function(a){var b,c,d,e;return d=a.type,b=a.request,e=a.url,H(e)?void 0:(c="socket"===d?new m(b):new n(b),this.elements.push(c))},a}(),n=function(){function a(a){var b,c,d,e,f,g,h=this;if(this.progress=0,null!=window.ProgressEvent)for(c=null,a.addEventListener("progress",function(a){return h.progress=a.lengthComputable?100*a.loaded/a.total:h.progress+(100-h.progress)/2}),g=["load","abort","timeout","error"],d=0,e=g.length;e>d;d++)b=g[d],a.addEventListener(b,function(){return h.progress=100});else f=a.onreadystatechange,a.onreadystatechange=function(){var b;return 0===(b=a.readyState)||4===b?h.progress=100:3===a.readyState&&(h.progress=50),"function"==typeof f?f.apply(null,arguments):void 0}}return a}(),m=function(){function a(a){var b,c,d,e,f=this;for(this.progress=0,e=["error","open"],c=0,d=e.length;d>c;c++)b=e[c],a.addEventListener(b,function(){return f.progress=100})}return a}(),d=function(){function a(a){var b,c,d,f;for(null==a&&(a={}),this.elements=[],null==a.selectors&&(a.selectors=[]),f=a.selectors,c=0,d=f.length;d>c;c++)b=f[c],this.elements.push(new e(b))}return a}(),e=function(){function a(a){this.selector=a,this.progress=0,this.check()}return a.prototype.check=function(){var a=this;return document.querySelector(this.selector)?this.done():setTimeout(function(){return a.check()},C.elements.checkInterval)},a.prototype.done=function(){return this.progress=100},a}(),c=function(){function a(){var a,b,c=this;this.progress=null!=(b=this.states[document.readyState])?b:100,a=document.onreadystatechange,document.onreadystatechange=function(){return null!=c.states[document.readyState]&&(c.progress=c.states[document.readyState]),"function"==typeof a?a.apply(null,arguments):void 0}}return a.prototype.states={loading:0,interactive:50,complete:100},a}(),f=function(){function a(){var a,b,c,d,e,f=this;this.progress=0,a=0,e=[],d=0,c=B(),b=setInterval(function(){var g;return g=B()-c-50,c=B(),e.push(g),e.length>C.eventLag.sampleCount&&e.shift(),a=p(e),++d>=C.eventLag.minSamples&&a=100&&(this.done=!0),b===this.last?this.sinceLastUpdate+=a:(this.sinceLastUpdate&&(this.rate=(b-this.last)/this.sinceLastUpdate),this.catchup=(b-this.progress)/C.catchupTime,this.sinceLastUpdate=0,this.last=b),b>this.progress&&(this.progress+=this.catchup*a),c=1-Math.pow(this.progress/100,C.easeFactor),this.progress+=c*this.rate*a,this.progress=Math.min(this.lastProgress+C.maxProgressPerFrame,this.progress),this.progress=Math.max(0,this.progress),this.progress=Math.min(100,this.progress),this.lastProgress=this.progress,this.progress},a}(),K=null,G=null,q=null,L=null,o=null,r=null,Pace.running=!1,y=function(){return C.restartOnPushState?Pace.restart():void 0},null!=window.history.pushState&&(S=window.history.pushState,window.history.pushState=function(){return y(),S.apply(window.history,arguments)}),null!=window.history.replaceState&&(V=window.history.replaceState,window.history.replaceState=function(){return y(),V.apply(window.history,arguments)}),k={ajax:a,elements:d,document:c,eventLag:f},(A=function(){var a,c,d,e,f,g,h,i;for(Pace.sources=K=[],g=["ajax","elements","document","eventLag"],c=0,e=g.length;e>c;c++)a=g[c],C[a]!==!1&&K.push(new k[a](C[a]));for(i=null!=(h=C.extraSources)?h:[],d=0,f=i.length;f>d;d++)J=i[d],K.push(new J(C));return Pace.bar=q=new b,G=[],L=new l})(),Pace.stop=function(){return Pace.trigger("stop"),Pace.running=!1,q.destroy(),r=!0,null!=o&&("function"==typeof s&&s(o),o=null),A()},Pace.restart=function(){return Pace.trigger("restart"),Pace.stop(),Pace.start()},Pace.go=function(){var a;return Pace.running=!0,q.render(),a=B(),r=!1,o=F(function(b,c){var d,e,f,g,h,i,j,k,m,n,o,p,s,t,u,v;for(k=100-q.progress,e=o=0,f=!0,i=p=0,t=K.length;t>p;i=++p)for(J=K[i],n=null!=G[i]?G[i]:G[i]=[],h=null!=(v=J.elements)?v:[J],j=s=0,u=h.length;u>s;j=++s)g=h[j],m=null!=n[j]?n[j]:n[j]=new l(g),f&=m.done,m.done||(e++,o+=m.tick(b));return d=o/e,q.update(L.tick(b,d)),q.done()||f||r?(q.update(100),Pace.trigger("done"),setTimeout(function(){return q.finish(),Pace.running=!1,Pace.trigger("hide")},Math.max(C.ghostTime,Math.max(C.minTime-(B()-a),0)))):c()})},Pace.start=function(a){u(C,a),Pace.running=!0;try{q.render()}catch(b){i=b}return document.querySelector(".pace")?(Pace.trigger("start"),Pace.go()):setTimeout(Pace.start,50)},"function"==typeof define&&define.amd?define(function(){return Pace}):"object"==typeof exports?module.exports=Pace:C.startOnPageLoad&&Pace.start()}).call(this); diff --git a/sparchetype/src/main/resources/static/js/plugins/slimscroll/jquery.slimscroll.min.js b/sparchetype/src/main/resources/static/js/plugins/slimscroll/jquery.slimscroll.min.js new file mode 100644 index 0000000..97f60c5 --- /dev/null +++ b/sparchetype/src/main/resources/static/js/plugins/slimscroll/jquery.slimscroll.min.js @@ -0,0 +1,15 @@ +/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la) + * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) + * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. + * + * Version: 1.3.0 + * + */ +(function(f){jQuery.fn.extend({slimScroll:function(h){var a=f.extend({width:"auto",height:"250px",size:"4px",color:"#000",position:"right",distance:"1px",start:"top",opacity:0.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:"#333",railOpacity:0.2,railDraggable:!0,railClass:"slimScrollRail",barClass:"slimScrollBar",wrapperClass:"slimScrollDiv",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:"7px",railBorderRadius:"7px"},h);this.each(function(){function r(d){if(s){d=d|| +window.event;var c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);f(d.target||d.srcTarget||d.srcElement).closest("."+a.wrapperClass).is(b.parent())&&m(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function m(d,f,h){k=!1;var e=d,g=b.outerHeight()-c.outerHeight();f&&(e=parseInt(c.css("top"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),e=Math.min(Math.max(e,0),g),e=0=b.outerHeight()?k=!0:(c.stop(!0,!0).fadeIn("fast"),a.railVisible&&g.stop(!0,!0).fadeIn("fast"))}function p(){a.alwaysVisible||(A=setTimeout(function(){a.disableFadeOut&&s||(x||y)||(c.fadeOut("slow"),g.fadeOut("slow"))},1E3))}var s,x,y,A,z,u,l,B,D=30,k=!1,b=f(this);if(b.parent().hasClass(a.wrapperClass)){var n=b.scrollTop(), +c=b.parent().find("."+a.barClass),g=b.parent().find("."+a.railClass);w();if(f.isPlainObject(h)){if("height"in h&&"auto"==h.height){b.parent().css("height","auto");b.css("height","auto");var q=b.parent().parent().height();b.parent().css("height",q);b.css("height",q)}if("scrollTo"in h)n=parseInt(a.scrollTo);else if("scrollBy"in h)n+=parseInt(a.scrollBy);else if("destroy"in h){c.remove();g.remove();b.unwrap();return}m(n,!1,!0)}}else{a.height="auto"==a.height?b.parent().height():a.height;n=f("
").addClass(a.wrapperClass).css({position:"relative",width:a.width,height:a.height});b.css({width:a.width,height:a.height});var g=f("
").addClass(a.railClass).css({width:a.size,height:"100%",position:"absolute",top:0,display:a.alwaysVisible&&a.railVisible?"block":"none","border-radius":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=f("
").addClass(a.barClass).css({background:a.color,width:a.size,position:"absolute",top:0,opacity:a.opacity,display:a.alwaysVisible? +"block":"none","border-radius":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius,WebkitBorderRadius:a.borderRadius,zIndex:99}),q="right"==a.position?{right:a.distance}:{left:a.distance};g.css(q);c.css(q);b.wrap(n);b.parent().append(c);b.parent().append(g);a.railDraggable&&c.bind("mousedown",function(a){var b=f(document);y=!0;t=parseFloat(c.css("top"));pageY=a.pageY;b.bind("mousemove.slimscroll",function(a){currTop=t+a.pageY-pageY;c.css("top",currTop);m(0,c.position().top,!1)}); +b.bind("mouseup.slimscroll",function(a){y=!1;p();b.unbind(".slimscroll")});return!1}).bind("selectstart.slimscroll",function(a){a.stopPropagation();a.preventDefault();return!1});g.hover(function(){v()},function(){p()});c.hover(function(){x=!0},function(){x=!1});b.hover(function(){s=!0;v();p()},function(){s=!1;p()});b.bind("touchstart",function(a,b){a.originalEvent.touches.length&&(z=a.originalEvent.touches[0].pageY)});b.bind("touchmove",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&& +(m((z-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),z=b.originalEvent.touches[0].pageY)});w();"bottom"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}),m(0,!0)):"top"!==a.start&&(m(f(a.start).position().top,null,!0),a.alwaysVisible||c.hide());C()}});return this}});jQuery.fn.extend({slimscroll:jQuery.fn.slimScroll})})(jQuery); diff --git a/sparchetype/src/main/resources/static/js/plugins/toastr/toastr.min.js b/sparchetype/src/main/resources/static/js/plugins/toastr/toastr.min.js new file mode 100644 index 0000000..8810dbd --- /dev/null +++ b/sparchetype/src/main/resources/static/js/plugins/toastr/toastr.min.js @@ -0,0 +1,2 @@ +!function(e){e(["jquery"],function(e){return function(){function t(e,t,n){return f({type:O.error,iconClass:g().iconClasses.error,message:e,optionsOverride:n,title:t})}function n(t,n){return t||(t=g()),v=e("#"+t.containerId),v.length?v:(n&&(v=c(t)),v)}function i(e,t,n){return f({type:O.info,iconClass:g().iconClasses.info,message:e,optionsOverride:n,title:t})}function o(e){w=e}function s(e,t,n){return f({type:O.success,iconClass:g().iconClasses.success,message:e,optionsOverride:n,title:t})}function a(e,t,n){return f({type:O.warning,iconClass:g().iconClasses.warning,message:e,optionsOverride:n,title:t})}function r(e){var t=g();v||n(t),l(e,t)||u(t)}function d(t){var i=g();return v||n(i),t&&0===e(":focus",t).length?void h(t):void(v.children().length&&v.remove())}function u(t){for(var n=v.children(),i=n.length-1;i>=0;i--)l(e(n[i]),t)}function l(t,n){return t&&0===e(":focus",t).length?(t[n.hideMethod]({duration:n.hideDuration,easing:n.hideEasing,complete:function(){h(t)}}),!0):!1}function c(t){return v=e("
").attr("id",t.containerId).addClass(t.positionClass).attr("aria-live","polite").attr("role","alert"),v.appendTo(e(t.target)),v}function p(){return{tapToDismiss:!0,toastClass:"toast",containerId:"toast-container",debug:!1,showMethod:"fadeIn",showDuration:300,showEasing:"swing",onShown:void 0,hideMethod:"fadeOut",hideDuration:1e3,hideEasing:"swing",onHidden:void 0,extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},iconClass:"toast-info",positionClass:"toast-top-right",timeOut:5e3,titleClass:"toast-title",messageClass:"toast-message",target:"body",closeHtml:'',newestOnTop:!0,preventDuplicates:!1,progressBar:!1}}function m(e){w&&w(e)}function f(t){function i(t){return!e(":focus",l).length||t?(clearTimeout(O.intervalId),l[r.hideMethod]({duration:r.hideDuration,easing:r.hideEasing,complete:function(){h(l),r.onHidden&&"hidden"!==b.state&&r.onHidden(),b.state="hidden",b.endTime=new Date,m(b)}})):void 0}function o(){(r.timeOut>0||r.extendedTimeOut>0)&&(u=setTimeout(i,r.extendedTimeOut),O.maxHideTime=parseFloat(r.extendedTimeOut),O.hideEta=(new Date).getTime()+O.maxHideTime)}function s(){clearTimeout(u),O.hideEta=0,l.stop(!0,!0)[r.showMethod]({duration:r.showDuration,easing:r.showEasing})}function a(){var e=(O.hideEta-(new Date).getTime())/O.maxHideTime*100;f.width(e+"%")}var r=g(),d=t.iconClass||r.iconClass;if("undefined"!=typeof t.optionsOverride&&(r=e.extend(r,t.optionsOverride),d=t.optionsOverride.iconClass||d),r.preventDuplicates){if(t.message===C)return;C=t.message}T++,v=n(r,!0);var u=null,l=e("
"),c=e("
"),p=e("
"),f=e("
"),w=e(r.closeHtml),O={intervalId:null,hideEta:null,maxHideTime:null},b={toastId:T,state:"visible",startTime:new Date,options:r,map:t};return t.iconClass&&l.addClass(r.toastClass).addClass(d),t.title&&(c.append(t.title).addClass(r.titleClass),l.append(c)),t.message&&(p.append(t.message).addClass(r.messageClass),l.append(p)),r.closeButton&&(w.addClass("toast-close-button").attr("role","button"),l.prepend(w)),r.progressBar&&(f.addClass("toast-progress"),l.prepend(f)),l.hide(),r.newestOnTop?v.prepend(l):v.append(l),l[r.showMethod]({duration:r.showDuration,easing:r.showEasing,complete:r.onShown}),r.timeOut>0&&(u=setTimeout(i,r.timeOut),O.maxHideTime=parseFloat(r.timeOut),O.hideEta=(new Date).getTime()+O.maxHideTime,r.progressBar&&(O.intervalId=setInterval(a,10))),l.hover(s,o),!r.onclick&&r.tapToDismiss&&l.click(i),r.closeButton&&w&&w.click(function(e){e.stopPropagation?e.stopPropagation():void 0!==e.cancelBubble&&e.cancelBubble!==!0&&(e.cancelBubble=!0),i(!0)}),r.onclick&&l.click(function(){r.onclick(),i()}),m(b),r.debug&&console&&console.log(b),l}function g(){return e.extend({},p(),b.options)}function h(e){v||(v=n()),e.is(":visible")||(e.remove(),e=null,0===v.children().length&&(v.remove(),C=void 0))}var v,w,C,T=0,O={error:"error",info:"info",success:"success",warning:"warning"},b={clear:r,remove:d,error:t,getContainer:n,info:i,options:{},subscribe:o,success:s,version:"2.1.0",warning:a};return b}()})}("function"==typeof define&&define.amd?define:function(e,t){"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):window.toastr=t(window.jQuery)}); +//# sourceMappingURL=/toastr.js.map diff --git a/sparchetype/src/main/resources/static/js/vue.min.js b/sparchetype/src/main/resources/static/js/vue.min.js new file mode 100644 index 0000000..c8288a4 --- /dev/null +++ b/sparchetype/src/main/resources/static/js/vue.min.js @@ -0,0 +1,8 @@ +/*! + * Vue.js v2.2.2 + * (c) 2014-2017 Evan You + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Vue=t()}(this,function(){"use strict";function e(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function t(e){var t=parseFloat(e);return isNaN(t)?e:t}function n(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}function i(e,t){return Ni.call(e,t)}function o(e){return"string"==typeof e||"number"==typeof e}function a(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}function s(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function c(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function u(e,t){for(var n in t)e[n]=t[n];return e}function l(e){return null!==e&&"object"==typeof e}function f(e){return Ri.call(e)===Fi}function p(e){for(var t={},n=0;n1?c(n):n;for(var r=c(arguments,1),i=0,o=n.length;i=0&&wo[n].id>e.id;)n--;wo.splice(Math.max(n,Ao)+1,0,e)}else wo.push(e);Co||(Co=!0,to(me))}}function ye(e){To.clear(),_e(e,To)}function _e(e,t){var n,r,i=Array.isArray(e);if((i||l(e))&&Object.isExtensible(e)){if(e.__ob__){var o=e.__ob__.dep.id;if(t.has(o))return;t.add(o)}if(i)for(n=e.length;n--;)_e(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)_e(e[r[n]],t)}}function be(e,t,n){Eo.get=function(){return this[t][n]},Eo.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Eo)}function $e(e){e._watchers=[];var t=e.$options;t.props&&we(e,t.props),t.methods&&Oe(e,t.methods),t.data?xe(e):A(e._data={},!0),t.computed&&Ce(e,t.computed),t.watch&&Se(e,t.watch)}function we(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[],o=!e.$parent;fo.shouldConvert=o;var a=function(o){i.push(o);var a=R(o,t,n,e);O(r,o,a),o in e||be(e,"_props",o)};for(var s in t)a(s);fo.shouldConvert=!0}function xe(e){var t=e.$options.data;t=e._data="function"==typeof t?t.call(e):t||{},f(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&i(r,n[o])||_(n[o])||be(e,"_data",n[o]);A(t,!0)}function Ce(e,t){var n=e._computedWatchers=Object.create(null);for(var r in t){var i=t[r],o="function"==typeof i?i:i.get;n[r]=new So(e,o,d,jo),r in e||ke(e,r,i)}}function ke(e,t,n){"function"==typeof n?(Eo.get=Ae(t),Eo.set=d):(Eo.get=n.get?n.cache!==!1?Ae(t):n.get:d,Eo.set=n.set?n.set:d),Object.defineProperty(e,t,Eo)}function Ae(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ao.target&&t.depend(),t.value}}function Oe(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?d:s(t[n],e)}function Se(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:e instanceof RegExp&&e.test(t)}function bt(e,t){for(var n in e){var r=e[n];if(r){var i=yt(r.componentOptions);i&&!t(i)&&($t(r),e[n]=null)}}}function $t(e){e&&(e.componentInstance._inactive||ve(e.componentInstance,"deactivated"),e.componentInstance.$destroy())}function wt(e){var t={};t.get=function(){return Bi},Object.defineProperty(e,"config",t),e.util={warn:io,extend:u,mergeOptions:M,defineReactive:O},e.set=S,e.delete=T,e.nextTick=to,e.options=Object.create(null),Bi._assetTypes.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,u(e.options.components,Fo),pt(e),dt(e),vt(e),gt(e)}function xt(e){for(var t=e.data,n=e,r=e;r.componentInstance;)r=r.componentInstance._vnode,r.data&&(t=Ct(r.data,t));for(;n=n.parent;)n.data&&(t=Ct(t,n.data));return kt(t)}function Ct(e,t){return{staticClass:At(e.staticClass,t.staticClass),class:e.class?[e.class,t.class]:t.class}}function kt(e){var t=e.class,n=e.staticClass;return n||t?At(n,Ot(t)):""}function At(e,t){return e?t?e+" "+t:e:t||""}function Ot(e){var t="";if(!e)return t;if("string"==typeof e)return e;if(Array.isArray(e)){for(var n,r=0,i=e.length;r-1?ca[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:ca[e]=/HTMLUnknownElement/.test(t.toString())}function Et(e){if("string"==typeof e){var t=document.querySelector(e);return t?t:document.createElement("div")}return e}function jt(e,t){var n=document.createElement(e);return"select"!==e?n:(t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function Nt(e,t){return document.createElementNS(ra[e],t)}function It(e){return document.createTextNode(e)}function Lt(e){return document.createComment(e)}function Dt(e,t,n){e.insertBefore(t,n)}function Mt(e,t){e.removeChild(t)}function Pt(e,t){e.appendChild(t)}function Rt(e){return e.parentNode}function Ft(e){return e.nextSibling}function Ht(e){return e.tagName}function Ut(e,t){e.textContent=t}function Bt(e,t,n){e.setAttribute(t,n)}function Vt(e,t){var n=e.data.ref;if(n){var i=e.context,o=e.componentInstance||e.elm,a=i.$refs;t?Array.isArray(a[n])?r(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function zt(e){return null==e}function Jt(e){return null!=e}function Kt(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function qt(e,t,n){var r,i,o={};for(r=t;r<=n;++r)i=e[r].key,Jt(i)&&(o[i]=r);return o}function Wt(e){function t(e){return new mo(O.tagName(e).toLowerCase(),{},[],void 0,e)}function r(e,t){function n(){0===--n.listeners&&i(e)}return n.listeners=t,n}function i(e){var t=O.parentNode(e);t&&O.removeChild(t,e)}function a(e,t,n,r,i){if(e.isRootInsert=!i,!s(e,t,n,r)){var o=e.data,a=e.children,c=e.tag;Jt(c)?(e.elm=e.ns?O.createElementNS(e.ns,c):O.createElement(c,e),v(e),f(e,a,t),Jt(o)&&d(e,t),l(n,e.elm,r)):e.isComment?(e.elm=O.createComment(e.text),l(n,e.elm,r)):(e.elm=O.createTextNode(e.text),l(n,e.elm,r))}}function s(e,t,n,r){var i=e.data;if(Jt(i)){var o=Jt(e.componentInstance)&&i.keepAlive;if(Jt(i=i.hook)&&Jt(i=i.init)&&i(e,!1,n,r),Jt(e.componentInstance))return c(e,t),o&&u(e,t,n,r),!0}}function c(e,t){e.data.pendingInsert&&t.push.apply(t,e.data.pendingInsert),e.elm=e.componentInstance.$el,p(e)?(d(e,t),v(e)):(Vt(e),t.push(e))}function u(e,t,n,r){for(var i,o=e;o.componentInstance;)if(o=o.componentInstance._vnode,Jt(i=o.data)&&Jt(i=i.transition)){for(i=0;ip?(u=zt(n[m+1])?null:n[m+1].elm,h(e,u,n,f,m,r)):f>m&&g(e,t,l,p)}function b(e,t,n,r){if(e!==t){if(t.isStatic&&e.isStatic&&t.key===e.key&&(t.isCloned||t.isOnce))return t.elm=e.elm,void(t.componentInstance=e.componentInstance);var i,o=t.data,a=Jt(o);a&&Jt(i=o.hook)&&Jt(i=i.prepatch)&&i(e,t);var s=t.elm=e.elm,c=e.children,u=t.children;if(a&&p(t)){for(i=0;i=0&&(m=e.charAt(h)," "===m);h--);m&&ya.test(m)||(l=!0)}}else void 0===o?(v=i+1,o=e.slice(0,i).trim()):t();if(void 0===o?o=e.slice(0,i).trim():0!==v&&t(),a)for(i=0;i=Ho}function _n(e){return 34===e||39===e}function bn(e){var t=1;for(zo=Vo;!yn();)if(e=gn(),_n(e))$n(e);else if(91===e&&t++,93===e&&t--,0===t){Jo=Vo;break}}function $n(e){for(var t=e;!yn()&&(e=gn(),e!==t););}function wn(e,t,n){Ko=n;var r=t.value,i=t.modifiers,o=e.tag,a=e.attrsMap.type;if("select"===o)kn(e,r,i);else if("input"===o&&"checkbox"===a)xn(e,r,i);else if("input"===o&&"radio"===a)Cn(e,r,i);else if("input"===o||"textarea"===o)An(e,r,i);else if(!Bi.isReservedTag(o))return vn(e,r,i),!1;return!0}function xn(e,t,n){var r=n&&n.number,i=pn(e,"value")||"null",o=pn(e,"true-value")||"true",a=pn(e,"false-value")||"false";cn(e,"checked","Array.isArray("+t+")?_i("+t+","+i+")>-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),fn(e,ba,"var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$c){$$i<0&&("+t+"=$$a.concat($$v))}else{$$i>-1&&("+t+"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{"+t+"=$$c}",null,!0)}function Cn(e,t,n){var r=n&&n.number,i=pn(e,"value")||"null";i=r?"_n("+i+")":i,cn(e,"checked","_q("+t+","+i+")"),fn(e,ba,hn(t,i),null,!0)}function kn(e,t,n){var r=n&&n.number,i='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r?"_n(val)":"val")+"})",o="$event.target.multiple ? $$selectedVal : $$selectedVal[0]",a="var $$selectedVal = "+i+";";a=a+" "+hn(t,o),fn(e,"change",a,null,!0)}function An(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?_a:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=hn(t,l);c&&(f="if($event.target.composing)return;"+f),cn(e,"value","("+t+")"),fn(e,u,f,null,!0),(s||a||"number"===r)&&fn(e,"blur","$forceUpdate()")}function On(e){var t;e[_a]&&(t=Ki?"change":"input",e[t]=[].concat(e[_a],e[t]||[]),delete e[_a]),e[ba]&&(t=Yi?"click":"change",e[t]=[].concat(e[ba],e[t]||[]),delete e[ba])}function Sn(e,t,n,r){if(n){var i=t,o=qo;t=function(n){var a=1===arguments.length?i(n):i.apply(null,arguments);null!==a&&Tn(e,t,r,o)}}qo.addEventListener(e,t,r)}function Tn(e,t,n,r){(r||qo).removeEventListener(e,t,n)}function En(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{};qo=t.elm,On(n),q(n,r,Sn,Tn,t.context)}}function jn(e,t){if(e.data.domProps||t.data.domProps){var n,r,i=t.elm,o=e.data.domProps||{},a=t.data.domProps||{};a.__ob__&&(a=t.data.domProps=u({},a));for(n in o)null==a[n]&&(i[n]="");for(n in a)if(r=a[n],"textContent"!==n&&"innerHTML"!==n||(t.children&&(t.children.length=0),r!==o[n]))if("value"===n){i._value=r;var s=null==r?"":String(r);Nn(i,t,s)&&(i.value=s)}else i[n]=r}}function Nn(e,t,n){return!e.composing&&("option"===t.tag||In(e,n)||Ln(e,n))}function In(e,t){return document.activeElement!==e&&e.value!==t}function Ln(e,n){var r=e.value,i=e._vModifiers;return i&&i.number||"number"===e.type?t(r)!==t(n):i&&i.trim?r.trim()!==n.trim():r!==n}function Dn(e){var t=Mn(e.style);return e.staticStyle?u(e.staticStyle,t):t}function Mn(e){return Array.isArray(e)?p(e):"string"==typeof e?xa(e):e}function Pn(e,t){var n,r={};if(t)for(var i=e;i.componentInstance;)i=i.componentInstance._vnode,i.data&&(n=Dn(i.data))&&u(r,n);(n=Dn(e.data))&&u(r,n);for(var o=e;o=o.parent;)o.data&&(n=Dn(o.data))&&u(r,n);return r}function Rn(e,t){var n=t.data,r=e.data;if(n.staticStyle||n.style||r.staticStyle||r.style){var i,o,a=t.elm,s=e.data.staticStyle,c=e.data.style||{},l=s||c,f=Mn(t.data.style)||{};t.data.style=f.__ob__?u({},f):f;var p=Pn(t,!0);for(o in l)null==p[o]&&Aa(a,o,"");for(o in p)i=p[o],i!==l[o]&&Aa(a,o,null==i?"":i)}}function Fn(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Hn(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t);else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");e.setAttribute("class",n.trim())}}function Un(e){if(e){if("object"==typeof e){var t={};return e.css!==!1&&u(t,Ea(e.name||"v")),u(t,e),t}return"string"==typeof e?Ea(e):void 0}}function Bn(e){Ra(function(){Ra(e)})}function Vn(e,t){(e._transitionClasses||(e._transitionClasses=[])).push(t),Fn(e,t)}function zn(e,t){e._transitionClasses&&r(e._transitionClasses,t),Hn(e,t)}function Jn(e,t,n){var r=Kn(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Na?Da:Pa,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=Na,l=a,f=o.length):t===Ia?u>0&&(n=Ia,l=u,f=c.length):(l=Math.max(a,u),n=l>0?a>u?Na:Ia:null,f=n?n===Na?o.length:c.length:0);var p=n===Na&&Fa.test(r[La+"Property"]);return{type:n,timeout:l,propCount:f,hasTransform:p}}function qn(e,t){for(;e.length1}function Xn(e,t){t.data.show||Zn(t)}function er(e,t,n){var r=t.value,i=e.multiple;if(!i||Array.isArray(r)){for(var o,a,s=0,c=e.options.length;s-1,a.selected!==o&&(a.selected=o);else if(h(nr(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function tr(e,t){for(var n=0,r=t.length;n',n.innerHTML.indexOf(t)>0}function mr(e){return Qa=Qa||document.createElement("div"),Qa.innerHTML=e,Qa.textContent}function gr(e,t){var n=t?Rs:Ps;return e.replace(n,function(e){return Ms[e]})}function yr(e,t){function n(t){f+=t,e=e.substring(t)}function r(){var t=e.match(us);if(t){var r={tagName:t[1],attrs:[],start:f};n(t[0].length);for(var i,o;!(i=e.match(ls))&&(o=e.match(as));)n(o[0].length),r.attrs.push(o);if(i)return r.unarySlash=i[1],n(i[0].length),r.end=f,r}}function i(e){var n=e.tagName,r=e.unarySlash;u&&("p"===s&&ns(n)&&o(s),ts(n)&&s===n&&o(n));for(var i=l(n)||"html"===n&&"head"===s||!!r,a=e.attrs.length,f=new Array(a),p=0;p=0&&c[i].lowerCasedTag!==o;i--);else i=0;if(i>=0){for(var a=c.length-1;a>=i;a--)t.end&&t.end(c[a].tag,n,r);c.length=i,s=i&&c[i-1].tag}else"br"===o?t.start&&t.start(e,[],!0,n,r):"p"===o&&(t.start&&t.start(e,[],!1,n,r),t.end&&t.end(e,n,r))}for(var a,s,c=[],u=t.expectHTML,l=t.isUnaryTag||Hi,f=0;e;){if(a=e,s&&Ls(s)){var p=s.toLowerCase(),d=Ds[p]||(Ds[p]=new RegExp("([\\s\\S]*?)(]*>)","i")),v=0,h=e.replace(d,function(e,n,r){return v=r.length,"script"!==p&&"style"!==p&&"noscript"!==p&&(n=n.replace(//g,"$1").replace(//g,"$1")),t.chars&&t.chars(n),""});f+=e.length-h.length,e=h,o(p,f-v,f)}else{var m=e.indexOf("<");if(0===m){if(ds.test(e)){var g=e.indexOf("-->");if(g>=0){n(g+3);continue}}if(vs.test(e)){var y=e.indexOf("]>");if(y>=0){n(y+2);continue}}var _=e.match(ps);if(_){n(_[0].length);continue}var b=e.match(fs);if(b){var $=f;n(b[0].length),o(b[1],$,f);continue}var w=r();if(w){i(w);continue}}var x=void 0,C=void 0,k=void 0;if(m>=0){for(C=e.slice(m);!(fs.test(C)||us.test(C)||ds.test(C)||vs.test(C)||(k=C.indexOf("<",1),k<0));)m+=k,C=e.slice(m);x=e.substring(0,m),n(m)}m<0&&(x=e,e=""),t.chars&&x&&t.chars(x)}if(e===a){t.chars&&t.chars(e);break}}o()}function _r(e,t){var n=t?Us(t):Fs;if(n.test(e)){for(var r,i,o=[],a=n.lastIndex=0;r=n.exec(e);){i=r.index,i>a&&o.push(JSON.stringify(e.slice(a,i)));var s=rn(r[1].trim());o.push("_s("+s+")"),a=i+r[0].length}return a0,Wi=Ji&&Ji.indexOf("edge/")>0,Zi=Ji&&Ji.indexOf("android")>0,Gi=Ji&&/iphone|ipad|ipod|ios/.test(Ji),Yi=Ji&&/chrome\/\d+/.test(Ji)&&!Wi,Qi=function(){return void 0===Ti&&(Ti=!zi&&"undefined"!=typeof global&&"server"===global.process.env.VUE_ENV),Ti},Xi=zi&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,eo="undefined"!=typeof Symbol&&y(Symbol)&&"undefined"!=typeof Reflect&&y(Reflect.ownKeys),to=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t1&&(t[n[0].trim()]=n[1].trim())}}),t}),Ca=/^--/,ka=/\s*!important$/,Aa=function(e,t,n){Ca.test(t)?e.style.setProperty(t,n):ka.test(n)?e.style.setProperty(t,n.replace(ka,""),"important"):e.style[Sa(t)]=n},Oa=["Webkit","Moz","ms"],Sa=a(function(e){if(Wo=Wo||document.createElement("div"),e=Li(e),"filter"!==e&&e in Wo.style)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n\/=]+)/,is=/(?:=)/,os=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^\s"'=<>`]+)/.source],as=new RegExp("^\\s*"+rs.source+"(?:\\s*("+is.source+")\\s*(?:"+os.join("|")+"))?"),ss="[a-zA-Z_][\\w\\-\\.]*",cs="((?:"+ss+"\\:)?"+ss+")",us=new RegExp("^<"+cs),ls=/^\s*(\/?)>/,fs=new RegExp("^<\\/"+cs+"[^>]*>"),ps=/^]+>/i,ds=/^ + + + +
- + + + + + + + + + + + + + + + + + +
diff --git a/sparchetype/src/main/resources/templates/admin/index.html b/sparchetype/src/main/resources/templates/admin/index.html index e69de29..753e9e2 100644 --- a/sparchetype/src/main/resources/templates/admin/index.html +++ b/sparchetype/src/main/resources/templates/admin/index.html @@ -0,0 +1,373 @@ + + + + + + + 面向学习型的开源框架,简洁高效,减少过渡封装,展现技术本质 + + + + + + + + + + + +
+ + + + +
+
+ +
+
+ + + + + 退出 +
+
+ +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + diff --git a/sparchetype/src/main/resources/templates/admin/main.html b/sparchetype/src/main/resources/templates/admin/main.html new file mode 100644 index 0000000..453d80e --- /dev/null +++ b/sparchetype/src/main/resources/templates/admin/main.html @@ -0,0 +1,45 @@ + + + + + + 欢迎页 + + + + +
+
了解BootDo
+
+

   项目介绍

+
    +
  • 面向学习型的开源框架,简洁高效,减少过渡封装,展现技术本质
  • +
  • Springboot作为基础框架,使用mybatis作为持久层框架
  • +
  • 使用官方推荐的thymeleaf做为模板引擎,shiro作为安全框架,主流技术,“一网打尽”
  • +
  • 极简配置,一键前后台代码生成
  • +
+ +

   获取源码

+ + +

   官方QQ群

+
    +
  • 点击链接加入群聊【BootDo交流群】:669039323
  • +
  • 点击链接加入群聊【BootDo交流二群】:614726589
  • +
  • 点击链接加入群聊【BootDo交流三群】:600801035
  • +
  • 点击链接加入群聊【CloudDo交流群】:719741533
  • +
+ + +
+
+ + + + \ No newline at end of file