修改Oauth接口
diff --git a/oauth/build.gradle b/oauth/build.gradle
index 17d4252..aeffb67 100644
--- a/oauth/build.gradle
+++ b/oauth/build.gradle
@@ -5,7 +5,6 @@
     id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.31'
     id 'org.jetbrains.kotlin.plugin.spring'
     id "com.palantir.git-version"
-    id 'com.palantir.docker'
 }
 
 apply plugin: 'java'
@@ -34,7 +33,6 @@
 
 
 dependencies {
-
     implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
     implementation 'org.springframework.boot:spring-boot-starter-data-redis'
     implementation 'org.springframework.boot:spring-boot-starter-web'
@@ -47,23 +45,25 @@
     implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.5.RELEASE'
     implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
     implementation 'org.springframework.session:spring-session-data-redis'
-    implementation 'commons-codec:commons-codec:1.12'
-    implementation 'com.jcabi:jcabi-manifests:1.1'
-    implementation 'org.slf4j:slf4j-parent:1.7.26'
+    implementation 'org.springframework.boot:spring-boot-starter-cache'
+    implementation 'org.springframework.social:spring-social-web:1.1.6.RELEASE'
     implementation 'org.jetbrains.kotlin:kotlin-reflect'
     implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
-    implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
-    implementation group: 'com.sun.jersey', name: 'jersey-client', version: '1.19'
-    implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
-    implementation group: 'taglibs', name: 'standard', version: '1.1.2'
-    implementation group: 'commons-codec', name: 'commons-codec', version: '1.6'
-    implementation 'org.dom4j:dom4j:2.1.1'
-    implementation 'commons-beanutils:commons-beanutils:1.9.3'
-    implementation 'commons-net:commons-net:3.6'
-    implementation 'org.postgresql:postgresql:42.2.5'
+    implementation 'commons-codec:commons-codec:1.12'
+    implementation 'org.apache.commons:commons-lang3:3.9'
     implementation 'net.javacrumbs.shedlock:shedlock-spring:2.5.0'
     implementation 'net.javacrumbs.shedlock:shedlock-provider-redis-spring:2.5.0'
+
+    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
+
+    implementation 'org.postgresql:postgresql:42.2.5'
+    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
+    implementation 'com.jcabi:jcabi-manifests:1.1'
     implementation 'org.bitbucket.b_c:jose4j:0.6.5'
+    implementation 'io.github.microutils:kotlin-logging:1.6.26'
+    implementation 'org.slf4j:slf4j-parent:1.7.26'
+
+    implementation 'commons-dbcp:commons-dbcp:1.4'
 
     implementation project(':payapi-common')
 
diff --git a/oauth/src/main/java/com/supwisdom/oauth/ServletInitializer.kt b/oauth/src/main/java/com/supwisdom/oauth/ServletInitializer.kt
new file mode 100644
index 0000000..5df64f0
--- /dev/null
+++ b/oauth/src/main/java/com/supwisdom/oauth/ServletInitializer.kt
@@ -0,0 +1,13 @@
+package com.supwisdom.oauth
+
+import com.supwisdom.oauth.OAuthApplication
+import org.springframework.boot.builder.SpringApplicationBuilder
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
+
+class ServletInitializer : SpringBootServletInitializer() {
+
+	override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {
+		return application.sources(OAuthApplication::class.java)
+	}
+
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/OAuthApplication.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/OAuthApplication.kt
index 674639b..7d34f95 100644
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/OAuthApplication.kt
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/OAuthApplication.kt
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay
+package com.supwisdom.oauth
 
 import io.lettuce.core.ReadFrom
 import net.javacrumbs.shedlock.core.LockProvider
@@ -112,7 +112,6 @@
     }
 }
 
-
 @SpringBootApplication
 @EnableScheduling
 @EnableCaching
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/dao/ApiClientDao.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/dao/ApiClientDao.kt
index cf0bdbe..e2a80a5 100644
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/dao/ApiClientDao.kt
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/dao/ApiClientDao.kt
@@ -12,8 +12,6 @@
 interface ApiClientDao : JpaRepository<TApiClient, String> {
 
     @Transactional(propagation = Propagation.REQUIRED, readOnly = true, rollbackFor = [Exception::class])
-    fun findByAppid(appid: String): TApiClient
+    fun findByAppid(appid: String): TApiClient?
 
-    @Transactional(propagation = Propagation.REQUIRED, readOnly = true, rollbackFor = [Exception::class])
-    fun findByAppidContaining(appid: String, pageable: Pageable): Page<TApiClient>
 }
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/oauth.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/oauth.kt
index 16e27ba..8fb70be 100644
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/oauth.kt
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/oauth.kt
@@ -25,10 +25,8 @@
 import org.springframework.security.oauth2.provider.OAuth2Authentication
 import org.springframework.security.oauth2.provider.client.BaseClientDetails
 import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore
-import org.springframework.web.bind.annotation.RequestHeader
-import org.springframework.web.bind.annotation.RequestMapping
-import org.springframework.web.bind.annotation.RequestParam
-import org.springframework.web.bind.annotation.RestController
+import org.springframework.stereotype.Controller
+import org.springframework.web.bind.annotation.*
 import java.security.Principal
 import java.util.*
 import java.security.SecureRandom
@@ -46,20 +44,29 @@
         if (access_token.isNullOrEmpty() && auth.isNullOrEmpty()) {
             return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()
         }
-        var jwt: String
-        if(!auth.isNullOrEmpty()){
-            jwt = auth.substring(jwtConfig.tokenHeader.length)
+        var jwt = if(!auth.isNullOrEmpty()){
+            auth.substring(jwtConfig.tokenHeader.length)
         }else{
-            jwt = access_token!!
+            access_token!!
         }
         val obj: OAuth2Authentication? = RedisTokenStore(redisConnectionFactory).readAuthentication(jwt) ?: return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()
         val user = obj!!.userAuthentication.principal as UserDetails
         if(user.username.isNullOrEmpty()){
             return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build()
         }
-        return ResponseEntity.status(HttpStatus.OK).body("""{"name":"${user.username}"}""")
+        return ResponseEntity.status(HttpStatus.OK).body("""{"outid":"${user.username}"}""")
     }
 }
+@Controller
+class WebMainController {
+    @GetMapping("/login")
+    fun loginView() = "login"
+
+    @GetMapping("/index")
+    fun indexView() = "index"
+}
+
+
 
 class OAuthDetailService : ClientDetailsService {
     @Autowired
@@ -71,13 +78,13 @@
         }
         details.clientId = clientId
         apiClientDao.findByAppid(clientId)?.let {
-            details.setAuthorizedGrantTypes(Arrays.asList("password","authorization_code","refresh_token"))
-            details.setScope(Arrays.asList("read"))
-            details.setResourceIds(Arrays.asList("oauth2-resource"))
+            details.setAuthorizedGrantTypes(listOf("password", "authorization_code", "refresh_token"))
+            details.setScope(listOf("read"))
+            details.setResourceIds(listOf("oauth2-resource"))
             val authorities = HashSet<GrantedAuthority>()
             authorities.add(SimpleGrantedAuthority("ROLE_THIRD_ADMIN"))
             details.authorities = authorities
-            details.setAutoApproveScopes(Arrays.asList("true"))
+            details.setAutoApproveScopes(listOf("true"))
             details.clientSecret = it.bcryptSecret
             details.accessTokenValiditySeconds = 3600
             details.refreshTokenValiditySeconds=43200
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/security.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/security.kt
index f70bb02..0fdf884 100644
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/security.kt
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/security.kt
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay
+package com.supwisdom.oauth
 
 import com.supwisdom.oauth.domain.OAuthUser
 import com.supwisdom.oauth.service.OAuthUserService
@@ -6,12 +6,14 @@
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.Configuration
+import org.springframework.security.authentication.AuthenticationManager
 import org.springframework.security.authentication.BadCredentialsException
 import org.springframework.security.authentication.LockedException
 import org.springframework.security.authentication.dao.DaoAuthenticationProvider
 import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity
 import org.springframework.security.config.annotation.web.builders.HttpSecurity
+import org.springframework.security.config.annotation.web.builders.WebSecurity
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
 import org.springframework.security.config.http.SessionCreationPolicy
@@ -20,7 +22,6 @@
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
 import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler
 import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler
-import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl
 import org.springframework.security.web.util.matcher.AntPathRequestMatcher
 import org.springframework.stereotype.Component
 import java.io.IOException
@@ -28,24 +29,23 @@
 import javax.servlet.ServletException
 import javax.servlet.http.HttpServletRequest
 import javax.servlet.http.HttpServletResponse
-import javax.sql.DataSource
 
 @Component("authLoginSuccessHandler")
 class AuthLoginSuccessHandler : SimpleUrlAuthenticationSuccessHandler() {
     @Autowired
-    lateinit var userService: OAuthUserService
+    lateinit var oAuthUserService: OAuthUserService
 
     @Override
     override fun onAuthenticationSuccess(request: HttpServletRequest, response: HttpServletResponse, authentication: Authentication) {
         val temp = authentication.principal as OAuthUser
-        val user = userService.getByUid(temp.uid)
+        val user = oAuthUserService.getByUid(temp.uid)
         if (user != null) {
             if (user.loginpwderror > 0) {
                 user.loginpwderror = 0
                 user.loginpwderrortime = null
             }
             user.lastlogin = DateUtil.getNow()
-            userService.saveUser(user)
+            oAuthUserService.saveUser(user)
             super.onAuthenticationSuccess(request, response, authentication)
         } else {
             throw UserLoginFailException("登录错误")
@@ -55,7 +55,7 @@
 @Component("authLoginFailHandler")
 class AuthLoginFailHandler : SimpleUrlAuthenticationFailureHandler() {
     @Autowired
-    lateinit var userService: OAuthUserService
+    lateinit var oAuthUserService: OAuthUserService
 
     @Throws(IOException::class, ServletException::class)
     override fun onAuthenticationFailure(request: HttpServletRequest,
@@ -67,13 +67,13 @@
         }
         val temp = request.getParameter("username")
         if(!temp.isNullOrEmpty()) {
-            userService.findByLoginid(temp)?.let {
+            oAuthUserService.findByLoginid(temp)?.let {
                 if (it.loginpwderror == 0) {
                     it.loginpwderror = 0
                     it.loginpwderrortime = System.currentTimeMillis()
                 }
                 it.loginpwderror += 1
-                userService.saveUser(it)
+                oAuthUserService.saveUser(it)
             }
         }
         setDefaultFailureUrl("/login")
@@ -92,10 +92,6 @@
         @Configuration
         class MvcWebSecurityConfigurationAdapter : WebSecurityConfigurerAdapter() {
             @Autowired
-            lateinit var dataSource: DataSource
-            @Autowired
-            lateinit var validateCodeSecurityConfig: ValidateCodeSecurityConfig
-            @Autowired
             lateinit var authLoginFailHandler: AuthLoginFailHandler
             @Autowired
             lateinit var authLoginSuccessHandler: AuthLoginSuccessHandler
@@ -109,6 +105,11 @@
             }
 
             @Bean
+            override fun authenticationManager(): AuthenticationManager {
+                return super.authenticationManagerBean()
+            }
+
+            @Bean
             fun authenticationProvider(): DaoAuthenticationProvider {
                 return DaoAuthenticationProvider().apply {
                     setUserDetailsService(userDetailsService)
@@ -126,18 +127,9 @@
                 }
             }
 
-            @Bean
-            fun jdbcTokenImplement(): JdbcTokenRepositoryImpl {
-                return JdbcTokenRepositoryImpl().also {
-                    it.dataSource = dataSource
-                }
-            }
-
             override fun configure(http: HttpSecurity) {
                 // 设置 Web MVC 应用权限
-                http.apply(validateCodeSecurityConfig)
-                        .and()
-                        .authorizeRequests()
+                http.authorizeRequests()
                         .antMatchers("/login", "/login/form", "/userinfor").permitAll()
                         .antMatchers("/static/**").permitAll()
                         .antMatchers("/code/image").permitAll()
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.java
deleted file mode 100644
index 7cf989f..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.supwisdom.oauth.util;
-
-public class Constants {
-  //  HTTP HEADER define
-  public static final String HEADER_TETANTID = "X-TENANT-ID";
-
-  // define
-  public static final String JWT_CLAIM_TENANTID = "tenantId";
-  public static final String JWT_CLAIM_UID = "uid";
-  public static final String JWT_CLAIM_AUTHORITIES = "authorities";
-  // 根商户ID
-  public static final Integer ROOT_SHOP_FID = 1;
-
-  public static final String HEADER_AUTHORIZATION = "Authorization";
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.kt
new file mode 100644
index 0000000..8860143
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/Constants.kt
@@ -0,0 +1,5 @@
+package com.supwisdom.oauth.util
+
+object Constants {
+    const val HEADER_AUTHORIZATION = "Authorization"
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.java
deleted file mode 100644
index 5b355c6..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.java
+++ /dev/null
@@ -1,361 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.sql.Timestamp;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
-
-public class DateUtil {
-  private static final Logger logger = LoggerFactory.getLogger(DateUtil.class);
-  public static final String DATE_FMT = "yyyyMMdd";
-  public static final String TIME_FMT = "HHmmss";
-  public static final String DATETIME_FMT = "yyyyMMddHHmmss";
-
-  /**
-   * Description: 返回一个当前时间 @return String 格式:yyyyMMddHHmmss @exception Modify
-   * History:
-   */
-  public static String getNow() {
-    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
-    return sdf.format(new Date());
-  }
-
-
-  /**
-   * Description: 根据类型返回一个当前时间 @param partten String @return String 格式:partten
-   */
-  public static String getNow(String partten) {
-    SimpleDateFormat sdf = new SimpleDateFormat(partten);
-    return sdf.format(new Date());
-  }
-  /*
-  *
-  * */
-  public static String getNowInterDay(int intervalday) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
-      Date d = new Date();
-      Calendar calendar = Calendar.getInstance();
-      calendar.setTimeInMillis(d.getTime());
-      calendar.add(Calendar.DATE, intervalday);
-      return sdf.format(calendar.getTime());
-    } catch (Exception e) {
-      e.printStackTrace();
-      return null;
-    }
-  }
-
-  /**
-   * Description: 得到一个特殊的时间 @param startTime String 格式:yyyyMMddHHmmss @param
-   * interval int 秒 @return String 格式:partten @exception Modify History:
-   */
-  public static String getNewTime(String startTime, int interval) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
-      Date d = sdf.parse(startTime);
-      Calendar calendar = Calendar.getInstance();
-      calendar.setTimeInMillis(d.getTime());
-      calendar.add(Calendar.SECOND, interval);
-      return sdf.format(calendar.getTime());
-    } catch (ParseException e) {
-      return startTime;
-    }
-  }
-
-  /**
-   * Description: 得到一个特殊的时间 @param startTime String 格式:partten @param
-   * interval int 秒 @return String 格式:partten @exception Modify History:
-   */
-  public static String getNewTime(String startTime, int interval, String partten) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat(partten);
-      Date d = sdf.parse(startTime);
-      Calendar calendar = Calendar.getInstance();
-      calendar.setTimeInMillis(d.getTime());
-      calendar.add(Calendar.SECOND, interval);
-      return sdf.format(calendar.getTime());
-    } catch (ParseException e) {
-      return startTime;
-    }
-  }
-
-  public static String getNewDay(String startDay, int intervalday) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
-      Date d = sdf.parse(startDay);
-      Calendar calendar = Calendar.getInstance();
-      calendar.setTimeInMillis(d.getTime());
-      calendar.add(Calendar.DATE, intervalday);
-      return sdf.format(calendar.getTime());
-    } catch (ParseException e) {
-      return startDay;
-    }
-  }
-
-  /**
-   * 得到两个日期相差的天数 格式 yyyyMMdd @return diffdays = secondDay - firstDay
-   */
-  public static long getIntervalDay(String firstDay, String secondDay) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
-      Date f = sdf.parse(firstDay);
-      Date s = sdf.parse(secondDay);
-      long time = s.getTime() - f.getTime();
-      return time / (24 * 60 * 60 * 1000);
-    } catch (ParseException e) {
-      return 0;
-    }
-  }
-
-  /**
-   * Description: 比较两个时间字符串的前后关系 @param firstTime String 格式:yyyyMMddHHmmss
-   *
-   * @param secondTime String 格式: yyyyMMddHHmmss @return int |
-   *                   firstTime=second int=0 | firstTime>secondTime int>0 |
-   *                   firstTime<secondTime int<0 @exception Modify History:
-   */
-  public static int compareDatetime(String firstTime, String secondTime) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
-      Date f = sdf.parse(firstTime);
-      Date s = sdf.parse(secondTime);
-      return f.compareTo(s);
-    } catch (ParseException e) {
-      return 0;
-    }
-  }
-
-  /**
-   * Description: 比较两个时间字符串的前后关系 @param firstTime String 格式:pattern
-   *
-   * @param secondTime String 格式: yyyyMMddHHmmss @return int |
-   *                   firstTime=second int=0 | firstTime>secondTime int>0 |
-   *                   firstTime<secondTime int<0 @exception Modify History:
-   */
-  public static int compareDatetime(String firstTime, String secondTime, String pattern) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-      Date f = sdf.parse(firstTime);
-      Date s = sdf.parse(secondTime);
-      return f.compareTo(s);
-    } catch (ParseException e) {
-      return 0;
-    }
-  }
-
-  /**
-   * Description: 比较两个时间字符串的时间差 @param firstTime String 格式:yyyyMMddHHmmss
-   *
-   * @param secondTime String 格式: yyyyMMddHHmmss @param second int 格式 @return
-   *                   int | firstTime+seconds=secondTime int=0 | firstTime+seconds>secondTime
-   *                   int>0 | firstTime+seconds<secondTime int<0 @exception Modify History:
-   */
-  public static int compareDatetime(String firstTime, String secondTime, int seconds) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
-      Date f = sdf.parse(firstTime);
-      Date s = sdf.parse(secondTime);
-      Calendar calendar = Calendar.getInstance();
-      calendar.setTimeInMillis(f.getTime());
-      calendar.add(Calendar.SECOND, seconds);
-      Date temp = calendar.getTime();
-      return temp.compareTo(s);
-    } catch (Exception e) {
-      return 0;
-    }
-  }
-
-  /**
-   * Description: 对time重新格式化
-   */
-  public static String reformatDatetime(String time, String fromPattern, String toPattern) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat(fromPattern);
-      Date d = sdf.parse(time);
-      Calendar calendar = Calendar.getInstance();
-      calendar.setTimeInMillis(d.getTime());
-      sdf = new SimpleDateFormat(toPattern);
-      return sdf.format(calendar.getTime());
-    } catch (Exception e) {
-      e.printStackTrace();
-      return time;
-    }
-  }
-
-  /**
-   * 获得两个字符串日期之间的时间差(单位毫秒) 格式 yyyyMMddHHmmss
-   */
-  public static long getInterval(String startTime, String endTime) {
-    long duration = 0;
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
-      duration = sdf.parse(endTime).getTime() - sdf.parse(startTime).getTime();
-    } catch (ParseException e) {
-      logger.error("Hi guys,there is an error when you try to parse the date string");
-    }
-    return duration;
-  }
-
-  /**
-   * 获得两个字符串日期之间的时间差(单位毫秒)
-   */
-  public static long getIntervalTime(String startTime, String endTime, String pattern) {
-    long duration = 0;
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-      duration = sdf.parse(endTime).getTime() - sdf.parse(startTime).getTime();
-    } catch (ParseException e) {
-      logger.error("Hi guys,there is an error when you try to parse the date string");
-    }
-    return duration;
-  }
-
-  /**
-   * 转换成日期格式
-   * 短格式:20140401 -> 2014-04-01
-   * 中格式:201404011200 -> 2014-04-01 12:00
-   * 长格式:20140401123025 -> 2014-04-01 12:30:25
-   **/
-  public static String parseToDateFormat(String str) {
-    switch (str.length()) {
-      case 8:
-        str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8);
-        break;
-      case 12:
-        str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10) + ":" + str.substring(10, 12);
-        break;
-      case 14:
-        str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10) + ":" + str.substring(10, 12) + ":" + str.substring(12, 14);
-        break;
-      default:
-        break;
-    }
-    return str;
-  }
-
-  /**
-   * 解日期格式
-   * 短格式:2014-04-01 -> 20140401
-   * 中格式:2014-04-01 12:00 -> 201404011200
-   * 长格式:2014-04-01 12:30:25 -> 20140401123025
-   **/
-  public static String unParseToDateFormat(String str) {
-    return str.replaceAll("-", "").replaceAll(" ", "").replaceAll(":", "");
-  }
-
-  /**
-   * 检验时间格式
-   */
-  public static boolean checkDatetimeValid(String datetime, String pattern) {
-    if (null == datetime) return false;
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-      Date d = sdf.parse(datetime);
-      return datetime.trim().equals(sdf.format(d));
-    } catch (Exception e) {
-    }
-    return false;
-  }
-
-  /**
-   * 获取指定日期是星期几 格式 yyyyMMdd
-   * MON|TUE|WED|THU|FRI|SAT|SUN
-   * 1		2		3		4		5		6		7
-   */
-  public static int getWeekday(String datestr) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
-      Calendar calendar = Calendar.getInstance();
-      boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY); //一周第一天是否为星期天
-      Date d = sdf.parse(datestr);
-      calendar.setTimeInMillis(d.getTime());
-      int weekDay = calendar.get(calendar.DAY_OF_WEEK);
-      if (isFirstSunday) {
-        weekDay = weekDay - 1;
-        if (weekDay == 0) {
-          weekDay = 7;
-        }
-      }
-      return weekDay;
-    } catch (Exception e) {
-      return -1;
-    }
-  }
-
-  /**
-   * 获取指定日期
-   */
-  public static Date getSpecifyDate(String datestr, String pattern) {
-    try {
-      SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-      Date result = sdf.parse(datestr);
-      return result;
-    } catch (Exception e) {
-      return new Date();
-    }
-  }
-
-  public static Integer getLastDayOfMonth(Integer year, Integer month) {
-    Calendar cal = Calendar.getInstance();
-    cal.set(Calendar.YEAR, year);
-    cal.set(Calendar.MONTH, month - 1);
-    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
-    String str = new SimpleDateFormat("yyyyMMdd ").format(cal.getTime()).toString();
-    Integer result = Integer.parseInt(str.substring(0, 4) + str.substring(4, 6) + str.substring(6, 8));
-    return result;
-  }
-
-  private static Date set(Date date, int calendarField, int amount) {
-    Calendar c = Calendar.getInstance();
-    c.setLenient(false);
-    c.setTime(date);
-    c.add(calendarField, amount);
-    return c.getTime();
-  }
-
-
-  public static Date setMinutes(Date date, int amount) {
-    return set(date, Calendar.MINUTE, amount);
-  }
-
-
-  public static long getNowSecond() {
-    Calendar calendar = Calendar.getInstance();
-    return calendar.getTimeInMillis() / 1000;
-  }
-
-
-  public static String getUTCTime(Long timeInMillisSecond) {
-    Calendar time = Calendar.getInstance();
-    SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
-    fmt.setTimeZone(TimeZone.getTimeZone("UTC"));
-    time.setTimeInMillis(timeInMillisSecond);
-    return fmt.format(time.getTime());
-  }
-
-  public static String getUTCTime() {
-    return getUTCTime(System.currentTimeMillis());
-  }
-
-  public static int compareDay(Timestamp d1, Timestamp d2) {
-    Calendar cd1 = Calendar.getInstance();
-    cd1.setTimeInMillis(d1.getTime());
-    Calendar cd2 = Calendar.getInstance();
-    cd2.setTimeInMillis(d2.getTime());
-
-    if (cd1.get(Calendar.YEAR) != cd2.get(Calendar.YEAR)) {
-      return cd1.compareTo(cd2);
-    }
-
-    return Integer.compare(cd1.get(Calendar.DAY_OF_YEAR), cd2.get(Calendar.DAY_OF_YEAR));
-  }
-
-  public static Boolean sameDay(Timestamp d1, Timestamp d2) {
-    return (compareDay(d1, d2) == 0);
-  }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.kt
new file mode 100644
index 0000000..096ad53
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/DateUtil.kt
@@ -0,0 +1,17 @@
+package com.supwisdom.oauth.util
+import java.text.SimpleDateFormat
+import java.util.Date
+
+object DateUtil {
+    /**
+     * Description: 根据类型返回一个当前时间 @param partten String @return String 格式:partten
+     */
+    fun getNow(partten: String): String {
+        val sdf = SimpleDateFormat(partten)
+        return sdf.format(Date())
+    }
+    fun getNow(): String {
+        val sdf = java.text.SimpleDateFormat("yyyyMMddHHmmss")
+        return sdf.format(Date())
+    }
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.java
deleted file mode 100644
index 3bf4921..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class JwtConfig {
-  @Value("${jwt.secret}")
-  private String secret;
-  @Value("${jwt.expiration:3600}")
-  private Long expiration = 3600L;
-  @Value("${jwt.header:Authorization}")
-  private String header = "Authorization";
-  @Value("${jwt.token_header:Bearer }")
-  private String tokenHeader = "Bearer";
-
-  public String getSecret() {
-    return secret;
-  }
-
-  public Long getExpiration() {
-    return expiration;
-  }
-
-  public String getHeader() {
-    return header;
-  }
-
-  public String getTokenHeader() {
-    return tokenHeader;
-  }
-
-  public void setExpiration(Long expiration) {
-    this.expiration = expiration;
-  }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.kt
new file mode 100644
index 0000000..70cc74e
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtConfig.kt
@@ -0,0 +1,16 @@
+package com.supwisdom.oauth.util
+
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.context.annotation.Configuration
+
+@Configuration
+class JwtConfig {
+    @Value("\${jwt.secret}")
+    val secret: String? = null
+    @Value("\${jwt.expiration:3600}")
+    var expiration: Long? = 3600L
+    @Value("\${jwt.header:Authorization}")
+    val header = "Authorization"
+    @Value("\${jwt.token_header:Bearer }")
+    val tokenHeader = "Bearer"
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.java
deleted file mode 100644
index 8d17542..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.jose4j.jwt.NumericDate;
-
-public class JwtToken {
-  private String jti;
-  private NumericDate expiration;
-  private String jwtToken;
-
-  public JwtToken(String jti, String jwtToken, NumericDate exp) {
-    this.jti = jti;
-    this.jwtToken = jwtToken;
-    this.expiration = exp;
-  }
-
-  public String getJti() {
-    return jti;
-  }
-
-  public void setJti(String jti) {
-    this.jti = jti;
-  }
-
-  public String getJwtToken() {
-    return jwtToken;
-  }
-
-  public void setJwtToken(String jwtToken) {
-    this.jwtToken = jwtToken;
-  }
-
-  public NumericDate getExpiration() {
-    return expiration;
-  }
-
-  public void setExpiration(NumericDate expiration) {
-    this.expiration = expiration;
-  }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.kt
new file mode 100644
index 0000000..7a7fb7b
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtToken.kt
@@ -0,0 +1,5 @@
+package com.supwisdom.oauth.util
+
+import org.jose4j.jwt.NumericDate
+
+class JwtToken(var jti: String?, var jwtToken: String?, var expiration: NumericDate?)
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtTokenUtil.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtTokenUtil.java
deleted file mode 100644
index 9304dcd..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/JwtTokenUtil.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.jose4j.jwa.AlgorithmConstraints;
-import org.jose4j.jwk.JsonWebKey;
-import org.jose4j.jws.AlgorithmIdentifiers;
-import org.jose4j.jws.JsonWebSignature;
-import org.jose4j.jwt.JwtClaims;
-import org.jose4j.jwt.MalformedClaimException;
-import org.jose4j.jwt.consumer.InvalidJwtException;
-import org.jose4j.jwt.consumer.JwtConsumer;
-import org.jose4j.jwt.consumer.JwtConsumerBuilder;
-import org.jose4j.lang.JoseException;
-import org.springframework.security.core.userdetails.UserDetails;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class JwtTokenUtil {
-  private JwtConfig jwtConfig;
-
-  public JwtTokenUtil(JwtConfig config) {
-    this.jwtConfig = config;
-  }
-
-  public String getHeader() {
-    return jwtConfig.getHeader();
-  }
-
-  public JwtToken generateToken(Map<String, Object> params) throws JoseException, MalformedClaimException {
-    JwtClaims claims = new JwtClaims();
-    claims.setIssuer(params.get("issuer").toString());  // who creates the token and signs it
-    if (params.get("audience") != null) {
-      claims.setAudience(params.get("audience").toString());
-    }
-    claims.setExpirationTimeMinutesInTheFuture(jwtConfig.getExpiration() / 60); // time when the token will expire (10 minutes from now)
-    claims.setGeneratedJwtId();
-    claims.setIssuedAtToNow();  // when the token was issued/created (now)
-    claims.setNotBeforeMinutesInThePast(2); // time before which the token is not yet valid (2 minutes ago)
-    if (params.get("subject") != null) {
-      claims.setSubject(params.get("subject").toString()); // the subject/principal is whom the token is about
-    }
-    if (params.get(Constants.JWT_CLAIM_AUTHORITIES) != null) {
-      claims.setClaim(Constants.JWT_CLAIM_AUTHORITIES, params.get(Constants.JWT_CLAIM_AUTHORITIES));
-    }
-    if (params.get(Constants.JWT_CLAIM_UID) != null) {
-      claims.setClaim(Constants.JWT_CLAIM_UID, params.get(Constants.JWT_CLAIM_UID));
-    }
-    if (params.get(Constants.JWT_CLAIM_TENANTID) != null) {
-      claims.setClaim(Constants.JWT_CLAIM_TENANTID, params.get(Constants.JWT_CLAIM_TENANTID));
-    }
-    /*
-    claims.setClaim("email", "mail@example.com"); // additional claims/attributes about the subject can be added
-    List<String> groups = Arrays.asList("group-one", "other-group", "group-three");
-    claims.setStringListClaim("groups", groups); // multi-valued claims work too and will end up as a JSON array
-     */
-
-    Map<String, Object> keySpec = new HashMap<>();
-    keySpec.put("kty", "oct");
-    keySpec.put("k", jwtConfig.getSecret());
-    JsonWebKey key = JsonWebKey.Factory.newJwk(keySpec);
-    JsonWebSignature jws = new JsonWebSignature();
-    jws.setPayload(claims.toJson());
-    jws.setKey(key.getKey());
-    jws.setKeyIdHeaderValue(key.getKeyId());
-    jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
-    return new JwtToken(claims.getJwtId(), jws.getCompactSerialization(), claims.getExpirationTime());
-  }
-
-  public JwtToken generateToken(UserDetails userDetails) throws JoseException, MalformedClaimException {
-    Map<String, Object> claims = new HashMap<>();
-    claims.put("uid", userDetails.getUsername());
-    return generateToken(claims);
-  }
-
-  public Map<String, Object> verifyToken(String token) throws JoseException, InvalidJwtException {
-    Map<String, Object> keySpec = new HashMap<>();
-    keySpec.put("kty", "oct");
-    keySpec.put("k", jwtConfig.getSecret());
-    JsonWebKey key = JsonWebKey.Factory.newJwk(keySpec);
-    JwtConsumer jwtConsumer = new JwtConsumerBuilder()
-        .setRequireExpirationTime() // the JWT must have an expiration time
-        .setAllowedClockSkewInSeconds(30) // allow some leeway in validating time based claims to account for clock skew
-        .setVerificationKey(key.getKey()) // verify the signature with the public key
-        .setSkipDefaultAudienceValidation()
-        .setJwsAlgorithmConstraints( // only allow the expected signature algorithm(s) in the given context
-            new AlgorithmConstraints(org.jose4j.jwa.AlgorithmConstraints.ConstraintType.WHITELIST, // which is only RS256 here
-                AlgorithmIdentifiers.HMAC_SHA256))
-        .build(); // create the JwtConsumer instance
-
-    //  Validate the JWT and process it to the Claims
-    JwtClaims jwtClaims = jwtConsumer.processToClaims(token);
-    return jwtClaims.getClaimsMap();
-  }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.java
deleted file mode 100644
index 55d2c03..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class PasswordBCryptConfig {
-  @Value("${auth.password.bcrypt.length:10}")
-  private Integer length;
-  @Value("${auth.password.bcrypt.seed}")
-  private String seed = "";
-
-  public Integer getLength() {
-    return length;
-  }
-
-  public void setLength(Integer length) {
-    this.length = length;
-  }
-
-  public String getSeed() {
-    return seed;
-  }
-
-  public void setSeed(String seed) {
-    this.seed = seed;
-  }
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.kt
new file mode 100644
index 0000000..139508c
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/PasswordBCryptConfig.kt
@@ -0,0 +1,12 @@
+package com.supwisdom.oauth.util
+
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.context.annotation.Configuration
+
+@Configuration
+class PasswordBCryptConfig {
+    @Value("\${auth.password.bcrypt.length:10}")
+    var length: Int = 0
+    @Value("\${auth.password.bcrypt.seed}")
+    var seed = ""
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.java
deleted file mode 100755
index c719096..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 
- */
-package com.supwisdom.oauth.util;
-
-import org.springframework.security.core.AuthenticationException;
-
-/**
- * @author lenovo
- *
- */
-public class ValidateCodeException extends AuthenticationException {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1170189980006964105L;
-
-	
-	public ValidateCodeException(String msg) {
-		super(msg);
-	}
-}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.kt b/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.kt
new file mode 100644
index 0000000..b5459dc
--- /dev/null
+++ b/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeException.kt
@@ -0,0 +1,19 @@
+/**
+ *
+ */
+package com.supwisdom.oauth.util
+
+import org.springframework.security.core.AuthenticationException
+
+/**
+ * @author lenovo
+ */
+class ValidateCodeException(msg: String) : AuthenticationException(msg) {
+    companion object {
+
+        /**
+         *
+         */
+        private val serialVersionUID = 1170189980006964105L
+    }
+}
diff --git a/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeSecurityConfig.java b/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeSecurityConfig.java
deleted file mode 100644
index 9f0118c..0000000
--- a/oauth/src/main/kotlin/com/supwisdom/oauth/util/ValidateCodeSecurityConfig.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.supwisdom.oauth.util;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.web.DefaultSecurityFilterChain;
-import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.Filter;
-
-@Component("validateCodeSecurityConfig")
-public class ValidateCodeSecurityConfig  extends SecurityConfigurerAdapter<DefaultSecurityFilterChain,HttpSecurity> {
-
-	@Autowired
-	private Filter validateCodeFilter;
-
-	@Override
-	public void configure(HttpSecurity http) throws Exception {
-		http.addFilterBefore(validateCodeFilter, AbstractPreAuthenticatedProcessingFilter.class);
-	}
-	
-}
\ No newline at end of file
diff --git a/oauth/src/main/resources/static/css/jquery-weui.css b/oauth/src/main/resources/static/css/jquery-weui.css
new file mode 100644
index 0000000..333bdc9
--- /dev/null
+++ b/oauth/src/main/resources/static/css/jquery-weui.css
@@ -0,0 +1,2345 @@
+/** 
+* jQuery WeUI V1.2.0 
+* By 言川
+* http://lihongxun945.github.io/jquery-weui/
+ */
+.preloader {
+  width: 20px;
+  height: 20px;
+  -webkit-transform-origin: 50%;
+          transform-origin: 50%;
+  -webkit-animation: preloader-spin 1s steps(12, end) infinite;
+          animation: preloader-spin 1s steps(12, end) infinite;
+}
+.preloader:after {
+  display: block;
+  width: 100%;
+  height: 100%;
+  content: "";
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+  background-repeat: no-repeat;
+  background-position: 50%;
+  background-size: 100%;
+}
+@-webkit-keyframes preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+  }
+}
+@keyframes preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+  }
+}
+/*
+.hairline(@position, @color) when (@position = top) {
+  border-top: 1px solid @color;
+}
+.hairline(@position, @color) when (@position = left) {
+  border-left: 1px solid @color;
+}
+.hairline(@position, @color) when (@position = bottom) {
+  border-bottom: 1px solid @color;
+}
+.hairline(@position, @color) when (@position = right) {
+  border-right: 1px solid @color;
+}
+// For right and bottom
+.hairline-remove(@position) when not (@position = left) and not (@position = top) {
+  border-left: 0;
+  border-bottom: 0;
+}
+// For left and top
+.hairline-remove(@position) when not (@position = right) and not (@position = bottom) {
+  border-right: 0;
+  border-top: 0;
+}
+// For right and bottom
+.hairline-color(@position, @color) when not (@position = left) and not (@position = top) {
+  border-right-color: @color;
+  border-bottom-color: @color;
+}
+// For left and top
+.hairline-color(@position, @color) when not (@position = right) and not (@position = bottom) {
+  border-left-color: @color;
+  border-top-color: @color;
+}
+*/
+label > * {
+  pointer-events: none;
+}
+html {
+  font-size: 20px;
+}
+body {
+  font-size: 16px;
+}
+@media only screen and (min-width: 400px) {
+  html {
+    font-size: 21.33333333px !important;
+  }
+}
+@media only screen and (min-width: 414px) {
+  html {
+    font-size: 22.08px !important;
+  }
+}
+@media only screen and (min-width: 480px) {
+  html {
+    font-size: 25.6px !important;
+  }
+}
+.weui_navbar {
+  z-index: 10;
+}
+.weui-popup-overlay,
+.weui-popup-container {
+  z-index: 1000;
+}
+.weui-mask {
+  z-index: 1000;
+}
+/* === Grid === */
+.weui-row {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: justify;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-between;
+  justify-content: space-between;
+  -webkit-box-lines: multiple;
+  -moz-box-lines: multiple;
+  -webkit-flex-wrap: wrap;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+  -webkit-box-align: start;
+  -ms-flex-align: start;
+  -webkit-align-items: flex-start;
+  align-items: flex-start;
+}
+.weui-row > [class*="col-"] {
+  box-sizing: border-box;
+}
+.weui-row .col-auto {
+  width: 100%;
+}
+.weui-row .weui-col-100 {
+  width: 100%;
+  width: calc((100% - 15px*0) / 1);
+}
+.weui-row.weui-no-gutter .weui-col-100 {
+  width: 100%;
+}
+.weui-row .weui-col-95 {
+  width: 95%;
+  width: calc((100% - 15px*0.05263157894736836) / 1.0526315789473684);
+}
+.weui-row.weui-no-gutter .weui-col-95 {
+  width: 95%;
+}
+.weui-row .weui-col-90 {
+  width: 90%;
+  width: calc((100% - 15px*0.11111111111111116) / 1.1111111111111112);
+}
+.weui-row.weui-no-gutter .weui-col-90 {
+  width: 90%;
+}
+.weui-row .weui-col-85 {
+  width: 85%;
+  width: calc((100% - 15px*0.17647058823529416) / 1.1764705882352942);
+}
+.weui-row.weui-no-gutter .weui-col-85 {
+  width: 85%;
+}
+.weui-row .weui-col-80 {
+  width: 80%;
+  width: calc((100% - 15px*0.25) / 1.25);
+}
+.weui-row.weui-no-gutter .weui-col-80 {
+  width: 80%;
+}
+.weui-row .weui-col-75 {
+  width: 75%;
+  width: calc((100% - 15px*0.33333333333333326) / 1.3333333333333333);
+}
+.weui-row.weui-no-gutter .weui-col-75 {
+  width: 75%;
+}
+.weui-row .weui-col-66 {
+  width: 66.66666666666666%;
+  width: calc((100% - 15px*0.5000000000000002) / 1.5000000000000002);
+}
+.weui-row.weui-no-gutter .weui-col-66 {
+  width: 66.66666666666666%;
+}
+.weui-row .weui-col-60 {
+  width: 60%;
+  width: calc((100% - 15px*0.6666666666666667) / 1.6666666666666667);
+}
+.weui-row.weui-no-gutter .weui-col-60 {
+  width: 60%;
+}
+.weui-row .weui-col-50 {
+  width: 50%;
+  width: calc((100% - 15px*1) / 2);
+}
+.weui-row.weui-no-gutter .weui-col-50 {
+  width: 50%;
+}
+.weui-row .weui-col-40 {
+  width: 40%;
+  width: calc((100% - 15px*1.5) / 2.5);
+}
+.weui-row.weui-no-gutter .weui-col-40 {
+  width: 40%;
+}
+.weui-row .weui-col-33 {
+  width: 33.333333333333336%;
+  width: calc((100% - 15px*2) / 3);
+}
+.weui-row.weui-no-gutter .weui-col-33 {
+  width: 33.333333333333336%;
+}
+.weui-row .weui-col-25 {
+  width: 25%;
+  width: calc((100% - 15px*3) / 4);
+}
+.weui-row.weui-no-gutter .weui-col-25 {
+  width: 25%;
+}
+.weui-row .weui-col-20 {
+  width: 20%;
+  width: calc((100% - 15px*4) / 5);
+}
+.weui-row.weui-no-gutter .weui-col-20 {
+  width: 20%;
+}
+.weui-row .weui-col-15 {
+  width: 15%;
+  width: calc((100% - 15px*5.666666666666667) / 6.666666666666667);
+}
+.weui-row.weui-no-gutter .weui-col-15 {
+  width: 15%;
+}
+.weui-row .weui-col-10 {
+  width: 10%;
+  width: calc((100% - 15px*9) / 10);
+}
+.weui-row.weui-no-gutter .weui-col-10 {
+  width: 10%;
+}
+.weui-row .weui-col-5 {
+  width: 5%;
+  width: calc((100% - 15px*19) / 20);
+}
+.weui-row.weui-no-gutter .weui-col-5 {
+  width: 5%;
+}
+.weui-row .weui-col-auto:nth-last-child(1),
+.weui-row .weui-col-auto:nth-last-child(1) ~ .weui-col-auto {
+  width: 100%;
+  width: calc((100% - 15px*0) / 1);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(1),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(1) ~ .weui-col-auto {
+  width: 100%;
+}
+.weui-row .weui-col-auto:nth-last-child(2),
+.weui-row .weui-col-auto:nth-last-child(2) ~ .weui-col-auto {
+  width: 50%;
+  width: calc((100% - 15px*1) / 2);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(2),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(2) ~ .weui-col-auto {
+  width: 50%;
+}
+.weui-row .weui-col-auto:nth-last-child(3),
+.weui-row .weui-col-auto:nth-last-child(3) ~ .weui-col-auto {
+  width: 33.33333333%;
+  width: calc((100% - 15px*2) / 3);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(3),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(3) ~ .weui-col-auto {
+  width: 33.33333333%;
+}
+.weui-row .weui-col-auto:nth-last-child(4),
+.weui-row .weui-col-auto:nth-last-child(4) ~ .weui-col-auto {
+  width: 25%;
+  width: calc((100% - 15px*3) / 4);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(4),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(4) ~ .weui-col-auto {
+  width: 25%;
+}
+.weui-row .weui-col-auto:nth-last-child(5),
+.weui-row .weui-col-auto:nth-last-child(5) ~ .weui-col-auto {
+  width: 20%;
+  width: calc((100% - 15px*4) / 5);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(5),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(5) ~ .weui-col-auto {
+  width: 20%;
+}
+.weui-row .weui-col-auto:nth-last-child(6),
+.weui-row .weui-col-auto:nth-last-child(6) ~ .weui-col-auto {
+  width: 16.66666667%;
+  width: calc((100% - 15px*5) / 6);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(6),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(6) ~ .weui-col-auto {
+  width: 16.66666667%;
+}
+.weui-row .weui-col-auto:nth-last-child(7),
+.weui-row .weui-col-auto:nth-last-child(7) ~ .weui-col-auto {
+  width: 14.28571429%;
+  width: calc((100% - 15px*6) / 7);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(7),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(7) ~ .weui-col-auto {
+  width: 14.28571429%;
+}
+.weui-row .weui-col-auto:nth-last-child(8),
+.weui-row .weui-col-auto:nth-last-child(8) ~ .weui-col-auto {
+  width: 12.5%;
+  width: calc((100% - 15px*7) / 8);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(8),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(8) ~ .weui-col-auto {
+  width: 12.5%;
+}
+.weui-row .weui-col-auto:nth-last-child(9),
+.weui-row .weui-col-auto:nth-last-child(9) ~ .weui-col-auto {
+  width: 11.11111111%;
+  width: calc((100% - 15px*8) / 9);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(9),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(9) ~ .weui-col-auto {
+  width: 11.11111111%;
+}
+.weui-row .weui-col-auto:nth-last-child(10),
+.weui-row .weui-col-auto:nth-last-child(10) ~ .weui-col-auto {
+  width: 10%;
+  width: calc((100% - 15px*9) / 10);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(10),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(10) ~ .weui-col-auto {
+  width: 10%;
+}
+.weui-row .weui-col-auto:nth-last-child(11),
+.weui-row .weui-col-auto:nth-last-child(11) ~ .weui-col-auto {
+  width: 9.09090909%;
+  width: calc((100% - 15px*10) / 11);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(11),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(11) ~ .weui-col-auto {
+  width: 9.09090909%;
+}
+.weui-row .weui-col-auto:nth-last-child(12),
+.weui-row .weui-col-auto:nth-last-child(12) ~ .weui-col-auto {
+  width: 8.33333333%;
+  width: calc((100% - 15px*11) / 12);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(12),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(12) ~ .weui-col-auto {
+  width: 8.33333333%;
+}
+.weui-row .weui-col-auto:nth-last-child(13),
+.weui-row .weui-col-auto:nth-last-child(13) ~ .weui-col-auto {
+  width: 7.69230769%;
+  width: calc((100% - 15px*12) / 13);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(13),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(13) ~ .weui-col-auto {
+  width: 7.69230769%;
+}
+.weui-row .weui-col-auto:nth-last-child(14),
+.weui-row .weui-col-auto:nth-last-child(14) ~ .weui-col-auto {
+  width: 7.14285714%;
+  width: calc((100% - 15px*13) / 14);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(14),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(14) ~ .weui-col-auto {
+  width: 7.14285714%;
+}
+.weui-row .weui-col-auto:nth-last-child(15),
+.weui-row .weui-col-auto:nth-last-child(15) ~ .weui-col-auto {
+  width: 6.66666667%;
+  width: calc((100% - 15px*14) / 15);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(15),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(15) ~ .weui-col-auto {
+  width: 6.66666667%;
+}
+@media all and (min-width: 768px) {
+  .row .tablet-100 {
+    width: 100%;
+    width: calc((100% - 15px*0) / 1);
+  }
+  .row.no-gutter .tablet-100 {
+    width: 100%;
+  }
+  .row .tablet-95 {
+    width: 95%;
+    width: calc((100% - 15px*0.05263157894736836) / 1.0526315789473684);
+  }
+  .row.no-gutter .tablet-95 {
+    width: 95%;
+  }
+  .row .tablet-90 {
+    width: 90%;
+    width: calc((100% - 15px*0.11111111111111116) / 1.1111111111111112);
+  }
+  .row.no-gutter .tablet-90 {
+    width: 90%;
+  }
+  .row .tablet-85 {
+    width: 85%;
+    width: calc((100% - 15px*0.17647058823529416) / 1.1764705882352942);
+  }
+  .row.no-gutter .tablet-85 {
+    width: 85%;
+  }
+  .row .tablet-80 {
+    width: 80%;
+    width: calc((100% - 15px*0.25) / 1.25);
+  }
+  .row.no-gutter .tablet-80 {
+    width: 80%;
+  }
+  .row .tablet-75 {
+    width: 75%;
+    width: calc((100% - 15px*0.33333333333333326) / 1.3333333333333333);
+  }
+  .row.no-gutter .tablet-75 {
+    width: 75%;
+  }
+  .row .tablet-66 {
+    width: 66.66666666666666%;
+    width: calc((100% - 15px*0.5000000000000002) / 1.5000000000000002);
+  }
+  .row.no-gutter .tablet-66 {
+    width: 66.66666666666666%;
+  }
+  .row .tablet-60 {
+    width: 60%;
+    width: calc((100% - 15px*0.6666666666666667) / 1.6666666666666667);
+  }
+  .row.no-gutter .tablet-60 {
+    width: 60%;
+  }
+  .row .tablet-50 {
+    width: 50%;
+    width: calc((100% - 15px*1) / 2);
+  }
+  .row.no-gutter .tablet-50 {
+    width: 50%;
+  }
+  .row .tablet-40 {
+    width: 40%;
+    width: calc((100% - 15px*1.5) / 2.5);
+  }
+  .row.no-gutter .tablet-40 {
+    width: 40%;
+  }
+  .row .tablet-33 {
+    width: 33.333333333333336%;
+    width: calc((100% - 15px*2) / 3);
+  }
+  .row.no-gutter .tablet-33 {
+    width: 33.333333333333336%;
+  }
+  .row .tablet-25 {
+    width: 25%;
+    width: calc((100% - 15px*3) / 4);
+  }
+  .row.no-gutter .tablet-25 {
+    width: 25%;
+  }
+  .row .tablet-20 {
+    width: 20%;
+    width: calc((100% - 15px*4) / 5);
+  }
+  .row.no-gutter .tablet-20 {
+    width: 20%;
+  }
+  .row .tablet-15 {
+    width: 15%;
+    width: calc((100% - 15px*5.666666666666667) / 6.666666666666667);
+  }
+  .row.no-gutter .tablet-15 {
+    width: 15%;
+  }
+  .row .tablet-10 {
+    width: 10%;
+    width: calc((100% - 15px*9) / 10);
+  }
+  .row.no-gutter .tablet-10 {
+    width: 10%;
+  }
+  .row .tablet-5 {
+    width: 5%;
+    width: calc((100% - 15px*19) / 20);
+  }
+  .row.no-gutter .tablet-5 {
+    width: 5%;
+  }
+  .row .tablet-auto:nth-last-child(1),
+  .row .tablet-auto:nth-last-child(1) ~ .col-auto {
+    width: 100%;
+    width: calc((100% - 15px*0) / 1);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(1),
+  .row.no-gutter .tablet-auto:nth-last-child(1) ~ .tablet-auto {
+    width: 100%;
+  }
+  .row .tablet-auto:nth-last-child(2),
+  .row .tablet-auto:nth-last-child(2) ~ .col-auto {
+    width: 50%;
+    width: calc((100% - 15px*1) / 2);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(2),
+  .row.no-gutter .tablet-auto:nth-last-child(2) ~ .tablet-auto {
+    width: 50%;
+  }
+  .row .tablet-auto:nth-last-child(3),
+  .row .tablet-auto:nth-last-child(3) ~ .col-auto {
+    width: 33.33333333%;
+    width: calc((100% - 15px*2) / 3);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(3),
+  .row.no-gutter .tablet-auto:nth-last-child(3) ~ .tablet-auto {
+    width: 33.33333333%;
+  }
+  .row .tablet-auto:nth-last-child(4),
+  .row .tablet-auto:nth-last-child(4) ~ .col-auto {
+    width: 25%;
+    width: calc((100% - 15px*3) / 4);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(4),
+  .row.no-gutter .tablet-auto:nth-last-child(4) ~ .tablet-auto {
+    width: 25%;
+  }
+  .row .tablet-auto:nth-last-child(5),
+  .row .tablet-auto:nth-last-child(5) ~ .col-auto {
+    width: 20%;
+    width: calc((100% - 15px*4) / 5);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(5),
+  .row.no-gutter .tablet-auto:nth-last-child(5) ~ .tablet-auto {
+    width: 20%;
+  }
+  .row .tablet-auto:nth-last-child(6),
+  .row .tablet-auto:nth-last-child(6) ~ .col-auto {
+    width: 16.66666667%;
+    width: calc((100% - 15px*5) / 6);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(6),
+  .row.no-gutter .tablet-auto:nth-last-child(6) ~ .tablet-auto {
+    width: 16.66666667%;
+  }
+  .row .tablet-auto:nth-last-child(7),
+  .row .tablet-auto:nth-last-child(7) ~ .col-auto {
+    width: 14.28571429%;
+    width: calc((100% - 15px*6) / 7);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(7),
+  .row.no-gutter .tablet-auto:nth-last-child(7) ~ .tablet-auto {
+    width: 14.28571429%;
+  }
+  .row .tablet-auto:nth-last-child(8),
+  .row .tablet-auto:nth-last-child(8) ~ .col-auto {
+    width: 12.5%;
+    width: calc((100% - 15px*7) / 8);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(8),
+  .row.no-gutter .tablet-auto:nth-last-child(8) ~ .tablet-auto {
+    width: 12.5%;
+  }
+  .row .tablet-auto:nth-last-child(9),
+  .row .tablet-auto:nth-last-child(9) ~ .col-auto {
+    width: 11.11111111%;
+    width: calc((100% - 15px*8) / 9);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(9),
+  .row.no-gutter .tablet-auto:nth-last-child(9) ~ .tablet-auto {
+    width: 11.11111111%;
+  }
+  .row .tablet-auto:nth-last-child(10),
+  .row .tablet-auto:nth-last-child(10) ~ .col-auto {
+    width: 10%;
+    width: calc((100% - 15px*9) / 10);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(10),
+  .row.no-gutter .tablet-auto:nth-last-child(10) ~ .tablet-auto {
+    width: 10%;
+  }
+  .row .tablet-auto:nth-last-child(11),
+  .row .tablet-auto:nth-last-child(11) ~ .col-auto {
+    width: 9.09090909%;
+    width: calc((100% - 15px*10) / 11);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(11),
+  .row.no-gutter .tablet-auto:nth-last-child(11) ~ .tablet-auto {
+    width: 9.09090909%;
+  }
+  .row .tablet-auto:nth-last-child(12),
+  .row .tablet-auto:nth-last-child(12) ~ .col-auto {
+    width: 8.33333333%;
+    width: calc((100% - 15px*11) / 12);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(12),
+  .row.no-gutter .tablet-auto:nth-last-child(12) ~ .tablet-auto {
+    width: 8.33333333%;
+  }
+  .row .tablet-auto:nth-last-child(13),
+  .row .tablet-auto:nth-last-child(13) ~ .col-auto {
+    width: 7.69230769%;
+    width: calc((100% - 15px*12) / 13);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(13),
+  .row.no-gutter .tablet-auto:nth-last-child(13) ~ .tablet-auto {
+    width: 7.69230769%;
+  }
+  .row .tablet-auto:nth-last-child(14),
+  .row .tablet-auto:nth-last-child(14) ~ .col-auto {
+    width: 7.14285714%;
+    width: calc((100% - 15px*13) / 14);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(14),
+  .row.no-gutter .tablet-auto:nth-last-child(14) ~ .tablet-auto {
+    width: 7.14285714%;
+  }
+  .row .tablet-auto:nth-last-child(15),
+  .row .tablet-auto:nth-last-child(15) ~ .col-auto {
+    width: 6.66666667%;
+    width: calc((100% - 15px*14) / 15);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(15),
+  .row.no-gutter .tablet-auto:nth-last-child(15) ~ .tablet-auto {
+    width: 6.66666667%;
+  }
+}
+.weui-cell__hd img {
+  display: block;
+  margin-right: 5px;
+}
+.weui-cell_swiped .weui-cell__bd {
+  -webkit-transition: -webkit-transform .3s;
+  transition: -webkit-transform .3s;
+  transition: transform .3s;
+  transition: transform .3s, -webkit-transform .3s;
+}
+.swipeout-touching .weui-cell__bd {
+  -webkit-transition: none;
+  transition: none;
+}
+.weui-dialog,
+.weui-toast {
+  -webkit-transition-duration: .2s;
+          transition-duration: .2s;
+  opacity: 0;
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+  -webkit-transform-origin: 0 0;
+          transform-origin: 0 0;
+  visibility: hidden;
+  margin: 0;
+  top: 45%;
+  z-index: 2000;
+}
+.weui-dialog .weui-dialog__btn.default,
+.weui-toast .weui-dialog__btn.default {
+  color: #5f646e;
+}
+.weui-dialog .weui-dialog__btn + .weui-dialog__btn,
+.weui-toast .weui-dialog__btn + .weui-dialog__btn {
+  position: relative;
+}
+.weui-dialog .weui-dialog__btn + .weui-dialog__btn:after,
+.weui-toast .weui-dialog__btn + .weui-dialog__btn:after {
+  content: " ";
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 1px;
+  height: 100%;
+  border-left: 1px solid #D5D5D6;
+  color: #D5D5D6;
+  -webkit-transform-origin: 0 0;
+          transform-origin: 0 0;
+  -webkit-transform: scaleX(0.5);
+          transform: scaleX(0.5);
+}
+.weui-dialog.weui-dialog--visible,
+.weui-toast.weui-dialog--visible,
+.weui-dialog.weui-toast--visible,
+.weui-toast.weui-toast--visible {
+  opacity: 1;
+  visibility: visible;
+}
+.weui-toast_forbidden {
+  color: #F76260;
+}
+.weui-toast_cancel .weui-icon-toast:before {
+  content: "\EA0D";
+}
+.weui-toast_forbidden .weui-icon-toast:before {
+  content: "\EA0B";
+  color: #F76260;
+}
+.weui-toast_text {
+  min-height: 1em;
+  width: auto;
+  height: 45px;
+  border-radius: 25px;
+  margin-left: 0;
+  -webkit-transform: scale(0.9) translate3d(-50%, 0, 0);
+          transform: scale(0.9) translate3d(-50%, 0, 0);
+  -webkit-transform-origin: left;
+          transform-origin: left;
+}
+.weui-toast_text.weui-toast--visible {
+  -webkit-transform: scale(1) translate3d(-50%, 0, 0);
+          transform: scale(1) translate3d(-50%, 0, 0);
+}
+.weui-toast_text .weui-icon-toast {
+  display: none;
+}
+.weui-toast_text .weui-toast_content {
+  margin: 10px 15px;
+}
+.weui-mask {
+  opacity: 0;
+  -webkit-transition-duration: .3s;
+          transition-duration: .3s;
+  visibility: hidden;
+}
+.weui-mask.weui-mask--visible {
+  opacity: 1;
+  visibility: visible;
+}
+.weui-prompt-input {
+  padding: 4px 6px;
+  border: 1px solid #ccc;
+  box-sizing: border-box;
+  height: 2em;
+  width: 80%;
+  margin-top: 10px;
+}
+.weui-pull-to-refresh {
+  margin-top: -50px;
+  -webkit-transition: -webkit-transform .4s;
+  transition: -webkit-transform .4s;
+  transition: transform .4s;
+  transition: transform .4s, -webkit-transform .4s;
+}
+.weui-pull-to-refresh.refreshing {
+  -webkit-transform: translate3d(0, 50px, 0);
+          transform: translate3d(0, 50px, 0);
+}
+.weui-pull-to-refresh.touching {
+  -webkit-transition-duration: 0s;
+          transition-duration: 0s;
+}
+.weui-pull-to-refresh__layer {
+  height: 30px;
+  line-height: 30px;
+  padding: 10px;
+  text-align: center;
+}
+.weui-pull-to-refresh__layer .down {
+  display: inline-block;
+}
+.weui-pull-to-refresh__layer .up,
+.weui-pull-to-refresh__layer .refresh {
+  display: none;
+}
+.weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+  display: inline-block;
+  z-index: 10;
+  width: 20px;
+  height: 20px;
+  margin-right: 4px;
+  vertical-align: -4px;
+  background: no-repeat center;
+  background-size: 13px 20px;
+  -webkit-transition-duration: 300ms;
+          transition-duration: 300ms;
+  -webkit-transform: rotate(0deg) translate3d(0, 0, 0);
+          transform: rotate(0deg) translate3d(0, 0, 0);
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2026%2040'%3E%3Cpolygon%20points%3D'9%2C22%209%2C0%2017%2C0%2017%2C22%2026%2C22%2013.5%2C40%200%2C22'%20fill%3D'%238c8c8c'%2F%3E%3C%2Fsvg%3E");
+}
+.weui-pull-to-refresh__layer .weui-pull-to-refresh__preloader {
+  display: none;
+  vertical-align: -4px;
+  margin-right: 4px;
+  width: 20px;
+  height: 20px;
+  -webkit-transform-origin: 50%;
+          transform-origin: 50%;
+  -webkit-animation: preloader-spin 1s steps(12, end) infinite;
+          animation: preloader-spin 1s steps(12, end) infinite;
+}
+.weui-pull-to-refresh__layer .weui-pull-to-refresh__preloader:after {
+  display: block;
+  width: 100%;
+  height: 100%;
+  content: "";
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+  background-repeat: no-repeat;
+  background-position: 50%;
+  background-size: 100%;
+}
+.pull-up .weui-pull-to-refresh__layer .down,
+.refreshing .weui-pull-to-refresh__layer .down {
+  display: none;
+}
+.pull-up .weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+  display: inline-block;
+  -webkit-transform: rotate(180deg) translate3d(0, 0, 0);
+          transform: rotate(180deg) translate3d(0, 0, 0);
+}
+.pull-up .weui-pull-to-refresh__layer .up {
+  display: inline-block;
+}
+.pull-down .weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+  display: inline-block;
+}
+.pull-down .weui-pull-to-refresh__layer .down {
+  display: inline-block;
+}
+.refreshing .weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+  display: none;
+}
+.refreshing .weui-pull-to-refresh__layer .weui-pull-to-refresh__preloader {
+  display: inline-block;
+}
+.refreshing .weui-pull-to-refresh__layer .refresh {
+  display: inline-block;
+}
+@keyframes preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+  }
+}
+.weui-tab__bd-item.weui-pull-to-refresh {
+  position: absolute;
+  top: 50px;
+}
+.weui-tabbar__item {
+  position: relative;
+}
+.weui-tabbar__item.weui-bar__item--on .weui-tabbar__label {
+  color: #04BE02;
+}
+.weui-navbar__item {
+  color: #888;
+}
+.weui-navbar__item.weui-bar__item--on {
+  color: #666;
+  background-color: #f1f1f1;
+}
+.weui-tab__bd {
+  box-sizing: border-box;
+  height: 100%;
+}
+.weui-tab__bd .weui-tab__bd-item {
+  display: none;
+  height: 100%;
+  overflow: auto;
+}
+.weui-tab__bd .weui-tab__bd-item.weui-tab__bd-item--active {
+  display: block;
+}
+.weui-navbar + .weui-tab__bd {
+  padding-top: 50px;
+}
+.toolbar {
+  position: relative;
+  width: 100%;
+  font-size: .85rem;
+  line-height: 1.5;
+  color: #3d4145;
+  background: #f7f7f8;
+}
+.toolbar:before {
+  content: '';
+  position: absolute;
+  left: 0;
+  top: 0;
+  bottom: auto;
+  right: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #d9d9d9;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 0%;
+          transform-origin: 50% 0%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .toolbar:before {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .toolbar:before {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.toolbar .toolbar-inner {
+  height: 2.2rem;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  text-align: center;
+}
+.toolbar .title {
+  position: absolute;
+  display: block;
+  width: 100%;
+  padding: 0;
+  font-size: .85rem;
+  font-weight: normal;
+  line-height: 2.2rem;
+  color: #3d4145;
+  text-align: center;
+  white-space: nowrap;
+}
+.toolbar .picker-button {
+  position: absolute;
+  right: 0;
+  box-sizing: border-box;
+  height: 2.2rem;
+  line-height: 2.2rem;
+  color: #04BE02;
+  z-index: 1;
+  padding: 0 .5rem;
+}
+/* === Columns Picker === */
+.weui-picker-modal {
+  width: 100%;
+  position: absolute;
+  bottom: 0;
+  text-align: center;
+  border-radius: 0;
+  opacity: 0.6;
+  color: #3d4145;
+  -webkit-transition-duration: .3s;
+          transition-duration: .3s;
+  height: 13rem;
+  background: #EFEFF4;
+  -webkit-transform: translate3d(0, 100%, 0);
+          transform: translate3d(0, 100%, 0);
+  -webkit-transition-property: opacity, -webkit-transform;
+  transition-property: opacity, -webkit-transform;
+  transition-property: transform, opacity;
+  transition-property: transform, opacity, -webkit-transform;
+}
+.weui-picker-modal.picker-modal-inline {
+  height: 10.8rem;
+  opacity: 1;
+  position: static;
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+.weui-picker-modal.picker-modal-inline .toolbar {
+  display: none;
+}
+.weui-picker-modal.picker-columns-single .picker-items-col {
+  width: 100%;
+}
+.weui-picker-modal.weui-picker-modal-visible {
+  opacity: 1;
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+.weui-picker-modal .picker-modal-inner {
+  position: relative;
+  height: 10.8rem;
+}
+.weui-picker-modal .picker-columns {
+  width: 100%;
+  height: 13rem;
+  z-index: 11500;
+}
+.weui-picker-modal .picker-columns.picker-modal-inline,
+.popover .weui-picker-modal .picker-columns {
+  height: 10rem;
+}
+@media (orientation: landscape) and (max-height: 415px) {
+  .weui-picker-modal .picker-columns:not(.picker-modal-inline) {
+    height: 10rem;
+  }
+}
+.weui-picker-modal .popover.popover-picker-columns {
+  width: 14rem;
+}
+.weui-picker-modal .picker-items {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  -webkit-justify-content: center;
+  justify-content: center;
+  width: 100%;
+  padding: 0;
+  text-align: right;
+  font-size: 1rem;
+  font-weight: normal;
+  -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, white 20%, white 80%, transparent 95%, transparent);
+  -webkit-mask-box-image: linear-gradient(to top, transparent, transparent 5%, white 20%, white 80%, transparent 95%, transparent);
+}
+.weui-picker-modal .bar + .picker-items {
+  height: 10.8rem;
+}
+.weui-picker-modal .picker-items-col {
+  overflow: hidden;
+  position: relative;
+  max-height: 100%;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-left {
+  text-align: left;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-center {
+  text-align: center;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-right {
+  text-align: right;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-divider {
+  color: #3d4145;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+}
+.weui-picker-modal .picker-items-col-wrapper {
+  -webkit-transition: 300ms;
+  transition: 300ms;
+  -webkit-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+}
+.weui-picker-modal .picker-item {
+  height: 32px;
+  line-height: 32px;
+  padding: 0 10px;
+  white-space: nowrap;
+  position: relative;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  color: #9b9b9b;
+  left: 0;
+  top: 0;
+  width: 100%;
+  box-sizing: border-box;
+  -webkit-transition: 300ms;
+  transition: 300ms;
+}
+.picker-items-col-absolute .weui-picker-modal .picker-item {
+  position: absolute;
+}
+.weui-picker-modal .picker-item.picker-item-far {
+  pointer-events: none;
+}
+.weui-picker-modal .picker-item.picker-selected {
+  color: #3d4145;
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+  -webkit-transform: rotateX(0deg);
+          transform: rotateX(0deg);
+}
+.weui-picker-modal .picker-center-highlight {
+  height: 32px;
+  box-sizing: border-box;
+  position: absolute;
+  left: 0;
+  width: 100%;
+  top: 50%;
+  margin-top: -16px;
+  pointer-events: none;
+}
+.weui-picker-modal .picker-center-highlight:before {
+  content: '';
+  position: absolute;
+  left: 0;
+  top: 0;
+  bottom: auto;
+  right: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #D9D9D9;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 0%;
+          transform-origin: 50% 0%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .weui-picker-modal .picker-center-highlight:before {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .weui-picker-modal .picker-center-highlight:before {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.weui-picker-modal .picker-center-highlight:after {
+  content: '';
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  right: auto;
+  top: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #D9D9D9;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 100%;
+          transform-origin: 50% 100%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .weui-picker-modal .picker-center-highlight:after {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .weui-picker-modal .picker-center-highlight:after {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.weui-picker-modal .picker-3d .picker-items {
+  overflow: hidden;
+  -webkit-perspective: 1200px;
+  perspective: 1200px;
+}
+.weui-picker-modal .picker-3d .picker-items-col,
+.weui-picker-modal .picker-3d .picker-items-col-wrapper,
+.weui-picker-modal .picker-3d .picker-item {
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d;
+}
+.weui-picker-modal .picker-3d .picker-items-col {
+  overflow: visible;
+}
+.weui-picker-modal .picker-3d .picker-item {
+  -webkit-transform-origin: center center -110px;
+  transform-origin: center center -110px;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  -webkit-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+}
+.weui-picker-overlay,
+.weui-picker-container {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  height: 0;
+  width: 100%;
+  z-index: 1000;
+}
+.city-picker .picker-items-col {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  max-width: 7rem;
+}
+.weui-picker-container .weui-cells {
+  margin: 0;
+  text-align: left;
+}
+.datetime-picker .picker-item {
+  text-overflow: initial;
+}
+.weui-select-modal {
+  height: auto;
+}
+.weui-select-modal .weui-cells {
+  margin: 0;
+  text-align: left;
+  overflow-y: auto;
+  overflow-x: hidden;
+  max-height: 16rem;
+}
+.weui-select-modal .weui-cells:after {
+  display: none;
+}
+/* === Calendar === */
+.weui-picker-calendar {
+  background: #fff;
+  height: 15rem;
+  width: 100%;
+  overflow: hidden;
+}
+.weui-picker-calendar .picker-modal-inner {
+  overflow: hidden;
+  height: 12.8rem;
+}
+.picker-calendar-week-days {
+  height: .9rem;
+  background: #f7f7f8;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  font-size: 11px;
+  box-sizing: border-box;
+  position: relative;
+}
+.picker-calendar-week-days:after {
+  content: '';
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  right: auto;
+  top: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #c4c4c4;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 100%;
+          transform-origin: 50% 100%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .picker-calendar-week-days:after {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .picker-calendar-week-days:after {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.picker-calendar-week-days .picker-calendar-week-day {
+  -webkit-flex-shrink: 1;
+  -ms-flex: 0 1 auto;
+  -webkit-flex-shrink: 1;
+      -ms-flex-negative: 1;
+          flex-shrink: 1;
+  width: 14.28571429%;
+  width: calc(100% / 7);
+  line-height: 17px;
+  text-align: center;
+}
+.picker-calendar-week-days + .picker-calendar-months {
+  height: 11.9rem;
+}
+.picker-calendar-months {
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+  position: relative;
+}
+.picker-calendar-months-wrapper {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  -webkit-transition: 300ms;
+  transition: 300ms;
+}
+.picker-calendar-month {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -ms-flex-direction: column;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  left: 0;
+  top: 0;
+}
+.picker-calendar-row {
+  height: 16.66666667%;
+  height: calc(100% / 6);
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-flex-shrink: 1;
+  -ms-flex: 0 1 auto;
+  -webkit-flex-shrink: 1;
+      -ms-flex-negative: 1;
+          flex-shrink: 1;
+  width: 100%;
+  position: relative;
+}
+.picker-calendar-row:after {
+  content: '';
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  right: auto;
+  top: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #ccc;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 100%;
+          transform-origin: 50% 100%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .picker-calendar-row:after {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .picker-calendar-row:after {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.weui-picker-modal .picker-calendar-row:last-child:after {
+  display: none;
+}
+.picker-calendar-day {
+  -webkit-flex-shrink: 1;
+  -ms-flex: 0 1 auto;
+  -webkit-flex-shrink: 1;
+      -ms-flex-negative: 1;
+          flex-shrink: 1;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  -webkit-justify-content: center;
+  justify-content: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+  box-sizing: border-box;
+  width: 14.28571429%;
+  width: calc(100% / 7);
+  text-align: center;
+  color: #3d4145;
+  font-size: 15px;
+  cursor: pointer;
+}
+.picker-calendar-day.picker-calendar-day-prev,
+.picker-calendar-day.picker-calendar-day-next {
+  color: #ccc;
+}
+.picker-calendar-day.picker-calendar-day-disabled {
+  color: #d4d4d4;
+  cursor: auto;
+}
+.picker-calendar-day.picker-calendar-day-today span {
+  background: #e3e3e3;
+}
+.picker-calendar-day.picker-calendar-day-selected span {
+  background: #04BE02;
+  color: #fff;
+}
+.picker-calendar-day span {
+  display: inline-block;
+  border-radius: 100%;
+  width: 30px;
+  height: 30px;
+  line-height: 30px;
+}
+.picker-calendar-month-picker,
+.picker-calendar-year-picker {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+  -webkit-box-pack: justify;
+  -ms-flex-pack: justify;
+  -webkit-justify-content: space-between;
+  justify-content: space-between;
+  width: 50%;
+  max-width: 200px;
+  -webkit-flex-shrink: 10;
+  -ms-flex: 0 10 auto;
+  -webkit-flex-shrink: 10;
+      -ms-flex-negative: 10;
+          flex-shrink: 10;
+}
+.picker-calendar-month-picker a.icon-only,
+.picker-calendar-year-picker a.icon-only {
+  min-width: 36px;
+}
+.picker-calendar-month-picker span,
+.picker-calendar-year-picker span {
+  -webkit-flex-shrink: 1;
+  -ms-flex: 0 1 auto;
+  -webkit-flex-shrink: 1;
+      -ms-flex-negative: 1;
+          flex-shrink: 1;
+  position: relative;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.popover .picker-calendar .picker-calendar-week-days,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days {
+  background: none;
+}
+.popover .picker-calendar .toolbar:before,
+.picker-calendar.picker-modal-inline .toolbar:before,
+.popover .picker-calendar .picker-calendar-week-days:before,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days:before {
+  display: none;
+}
+.popover .picker-calendar .toolbar:after,
+.picker-calendar.picker-modal-inline .toolbar:after,
+.popover .picker-calendar .picker-calendar-week-days:after,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days:after {
+  display: none;
+}
+.popover .picker-calendar .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+.picker-calendar.picker-modal-inline .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+.popover .picker-calendar .picker-calendar-week-days ~ .picker-calendar-months:before,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days ~ .picker-calendar-months:before {
+  content: '';
+  position: absolute;
+  left: 0;
+  top: 0;
+  bottom: auto;
+  right: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #c4c4c4;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 0%;
+          transform-origin: 50% 0%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .popover .picker-calendar .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+  .picker-calendar.picker-modal-inline .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+  .popover .picker-calendar .picker-calendar-week-days ~ .picker-calendar-months:before,
+  .picker-calendar.picker-modal-inline .picker-calendar-week-days ~ .picker-calendar-months:before {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .popover .picker-calendar .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+  .picker-calendar.picker-modal-inline .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+  .popover .picker-calendar .picker-calendar-week-days ~ .picker-calendar-months:before,
+  .picker-calendar.picker-modal-inline .picker-calendar-week-days ~ .picker-calendar-months:before {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.picker-calendar-month-picker,
+.picker-calendar-year-picker {
+  display: block;
+  line-height: 2.2rem;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+}
+.picker-calendar-month-picker a.icon-only,
+.picker-calendar-year-picker a.icon-only {
+  float: left;
+  width: 25%;
+  height: 2.2rem;
+  line-height: 2rem;
+}
+.picker-calendar-month-picker .current-month-value,
+.picker-calendar-year-picker .current-month-value,
+.picker-calendar-month-picker .current-year-value,
+.picker-calendar-year-picker .current-year-value {
+  float: left;
+  width: 50%;
+  height: 2.2rem;
+}
+i.icon {
+  display: inline-block;
+  vertical-align: middle;
+  background-size: 100% auto;
+  background-position: center;
+  background-repeat: no-repeat;
+  font-style: normal;
+  position: relative;
+}
+i.icon.icon-next,
+i.icon.icon-prev {
+  width: 0.75rem;
+  height: 0.75rem;
+}
+i.icon.icon-next {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2015%2015'%3E%3Cg%3E%3Cpath%20fill%3D'%2304BE02'%20d%3D'M1%2C1.6l11.8%2C5.8L1%2C13.4V1.6%20M0%2C0v15l15-7.6L0%2C0L0%2C0z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+i.icon.icon-prev {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2015%2015'%3E%3Cg%3E%3Cpath%20fill%3D'%2304BE02'%20d%3D'M14%2C1.6v11.8L2.2%2C7.6L14%2C1.6%20M15%2C0L0%2C7.6L15%2C15V0L15%2C0z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+/**
+ * Swiper 3.3.1
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
+ * 
+ * http://www.idangero.us/swiper/
+ * 
+ * Copyright 2016, Vladimir Kharlampidi
+ * The iDangero.us
+ * http://www.idangero.us/
+ * 
+ * Licensed under MIT
+ * 
+ * Released on: February 7, 2016
+ */
+.swiper-container {
+  margin: 0 auto;
+  position: relative;
+  overflow: hidden;
+  /* Fix of Webkit flickering */
+  z-index: 1;
+}
+.swiper-container-no-flexbox .swiper-slide {
+  float: left;
+}
+.swiper-container-vertical > .swiper-wrapper {
+  -webkit-box-orient: vertical;
+  -ms-flex-direction: column;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+}
+.swiper-wrapper {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  z-index: 1;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-transition-property: -webkit-transform;
+  transition-property: -webkit-transform;
+  transition-property: transform;
+  transition-property: transform, -webkit-transform;
+  box-sizing: content-box;
+}
+.swiper-container-android .swiper-slide,
+.swiper-wrapper {
+  -webkit-transform: translate3d(0px, 0, 0);
+  transform: translate3d(0px, 0, 0);
+}
+.swiper-container-multirow > .swiper-wrapper {
+  -webkit-box-lines: multiple;
+  -moz-box-lines: multiple;
+  -ms-flex-wrap: wrap;
+  -webkit-flex-wrap: wrap;
+  flex-wrap: wrap;
+}
+.swiper-container-free-mode > .swiper-wrapper {
+  -webkit-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+  margin: 0 auto;
+}
+.swiper-slide {
+  -webkit-flex-shrink: 0;
+  -ms-flex: 0 0 auto;
+  -webkit-flex-shrink: 0;
+      -ms-flex-negative: 0;
+          flex-shrink: 0;
+  width: 100%;
+  height: 100%;
+  position: relative;
+}
+/* Auto Height */
+.swiper-container-autoheight,
+.swiper-container-autoheight .swiper-slide {
+  height: auto;
+}
+.swiper-container-autoheight .swiper-wrapper {
+  -webkit-box-align: start;
+  -ms-flex-align: start;
+  -webkit-align-items: flex-start;
+  align-items: flex-start;
+  -webkit-transition-property: -webkit-transform, height;
+  -webkit-transition-property: height, -webkit-transform;
+  transition-property: height, -webkit-transform;
+  transition-property: transform, height;
+  transition-property: transform, height, -webkit-transform;
+}
+/* a11y */
+.swiper-container .swiper-notification {
+  position: absolute;
+  left: 0;
+  top: 0;
+  pointer-events: none;
+  opacity: 0;
+  z-index: -1000;
+}
+/* IE10 Windows Phone 8 Fixes */
+.swiper-wp8-horizontal {
+  -ms-touch-action: pan-y;
+  touch-action: pan-y;
+}
+.swiper-wp8-vertical {
+  -ms-touch-action: pan-x;
+  touch-action: pan-x;
+}
+/* Arrows */
+.swiper-button-prev,
+.swiper-button-next {
+  position: absolute;
+  top: 50%;
+  width: 27px;
+  height: 44px;
+  margin-top: -22px;
+  z-index: 10;
+  cursor: pointer;
+  background-size: 27px 44px;
+  background-position: center;
+  background-repeat: no-repeat;
+}
+.swiper-button-prev.swiper-button-disabled,
+.swiper-button-next.swiper-button-disabled {
+  opacity: 0.35;
+  cursor: auto;
+  pointer-events: none;
+}
+.swiper-button-prev,
+.swiper-container-rtl .swiper-button-next {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+  left: 10px;
+  right: auto;
+}
+.swiper-button-prev.swiper-button-black,
+.swiper-container-rtl .swiper-button-next.swiper-button-black {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-prev.swiper-button-white,
+.swiper-container-rtl .swiper-button-next.swiper-button-white {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next,
+.swiper-container-rtl .swiper-button-prev {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+  right: 10px;
+  left: auto;
+}
+.swiper-button-next.swiper-button-black,
+.swiper-container-rtl .swiper-button-prev.swiper-button-black {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next.swiper-button-white,
+.swiper-container-rtl .swiper-button-prev.swiper-button-white {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+/* Pagination Styles */
+.swiper-pagination {
+  position: absolute;
+  text-align: center;
+  -webkit-transition: 300ms;
+  transition: 300ms;
+  -webkit-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0);
+  z-index: 10;
+}
+.swiper-pagination.swiper-pagination-hidden {
+  opacity: 0;
+}
+/* Common Styles */
+.swiper-pagination-fraction,
+.swiper-pagination-custom,
+.swiper-container-horizontal > .swiper-pagination-bullets {
+  bottom: 10px;
+  left: 0;
+  width: 100%;
+}
+/* Bullets */
+.swiper-pagination-bullet {
+  width: 8px;
+  height: 8px;
+  display: inline-block;
+  border-radius: 100%;
+  background: #000;
+  opacity: 0.2;
+}
+button.swiper-pagination-bullet {
+  border: none;
+  margin: 0;
+  padding: 0;
+  box-shadow: none;
+  -moz-appearance: none;
+  -ms-appearance: none;
+  -webkit-appearance: none;
+  appearance: none;
+}
+.swiper-pagination-clickable .swiper-pagination-bullet {
+  cursor: pointer;
+}
+.swiper-pagination-white .swiper-pagination-bullet {
+  background: #fff;
+}
+.swiper-pagination-bullet-active {
+  opacity: 1;
+  background: #04BE02;
+}
+.swiper-pagination-white .swiper-pagination-bullet-active {
+  background: #fff;
+}
+.swiper-pagination-black .swiper-pagination-bullet-active {
+  background: #000;
+}
+.swiper-container-vertical > .swiper-pagination-bullets {
+  right: 10px;
+  top: 50%;
+  -webkit-transform: translate3d(0px, -50%, 0);
+  transform: translate3d(0px, -50%, 0);
+}
+.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
+  margin: 5px 0;
+  display: block;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
+  margin: 0 5px;
+}
+/* Progress */
+.swiper-pagination-progress {
+  background: rgba(0, 0, 0, 0.25);
+  position: absolute;
+}
+.swiper-pagination-progress .swiper-pagination-progressbar {
+  background: #007aff;
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  -webkit-transform: scale(0);
+  transform: scale(0);
+  -webkit-transform-origin: left top;
+  transform-origin: left top;
+}
+.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar {
+  -webkit-transform-origin: right top;
+  transform-origin: right top;
+}
+.swiper-container-horizontal > .swiper-pagination-progress {
+  width: 100%;
+  height: 4px;
+  left: 0;
+  top: 0;
+}
+.swiper-container-vertical > .swiper-pagination-progress {
+  width: 4px;
+  height: 100%;
+  left: 0;
+  top: 0;
+}
+.swiper-pagination-progress.swiper-pagination-white {
+  background: rgba(255, 255, 255, 0.5);
+}
+.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar {
+  background: #fff;
+}
+.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar {
+  background: #000;
+}
+/* 3D Container */
+.swiper-container-3d {
+  -webkit-perspective: 1200px;
+  -o-perspective: 1200px;
+  perspective: 1200px;
+}
+.swiper-container-3d .swiper-wrapper,
+.swiper-container-3d .swiper-slide,
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom,
+.swiper-container-3d .swiper-cube-shadow {
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d;
+}
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  pointer-events: none;
+  z-index: 10;
+}
+.swiper-container-3d .swiper-slide-shadow-left {
+  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  /* Safari 4+, Chrome */
+  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Chrome 10+, Safari 5.1+, iOS 5+ */
+  /* Firefox 3.6-15 */
+  /* Opera 11.10-12.00 */
+  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Firefox 16+, IE10, Opera 12.50+ */
+}
+.swiper-container-3d .swiper-slide-shadow-right {
+  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  /* Safari 4+, Chrome */
+  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Chrome 10+, Safari 5.1+, iOS 5+ */
+  /* Firefox 3.6-15 */
+  /* Opera 11.10-12.00 */
+  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Firefox 16+, IE10, Opera 12.50+ */
+}
+.swiper-container-3d .swiper-slide-shadow-top {
+  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  /* Safari 4+, Chrome */
+  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Chrome 10+, Safari 5.1+, iOS 5+ */
+  /* Firefox 3.6-15 */
+  /* Opera 11.10-12.00 */
+  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Firefox 16+, IE10, Opera 12.50+ */
+}
+.swiper-container-3d .swiper-slide-shadow-bottom {
+  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  /* Safari 4+, Chrome */
+  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Chrome 10+, Safari 5.1+, iOS 5+ */
+  /* Firefox 3.6-15 */
+  /* Opera 11.10-12.00 */
+  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Firefox 16+, IE10, Opera 12.50+ */
+}
+/* Coverflow */
+.swiper-container-coverflow .swiper-wrapper,
+.swiper-container-flip .swiper-wrapper {
+  /* Windows 8 IE 10 fix */
+  -ms-perspective: 1200px;
+}
+/* Cube + Flip */
+.swiper-container-cube,
+.swiper-container-flip {
+  overflow: visible;
+}
+.swiper-container-cube .swiper-slide,
+.swiper-container-flip .swiper-slide {
+  pointer-events: none;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  z-index: 1;
+}
+.swiper-container-cube .swiper-slide .swiper-slide,
+.swiper-container-flip .swiper-slide .swiper-slide {
+  pointer-events: none;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-flip .swiper-slide-active,
+.swiper-container-cube .swiper-slide-active .swiper-slide-active,
+.swiper-container-flip .swiper-slide-active .swiper-slide-active {
+  pointer-events: auto;
+}
+.swiper-container-cube .swiper-slide-shadow-top,
+.swiper-container-flip .swiper-slide-shadow-top,
+.swiper-container-cube .swiper-slide-shadow-bottom,
+.swiper-container-flip .swiper-slide-shadow-bottom,
+.swiper-container-cube .swiper-slide-shadow-left,
+.swiper-container-flip .swiper-slide-shadow-left,
+.swiper-container-cube .swiper-slide-shadow-right,
+.swiper-container-flip .swiper-slide-shadow-right {
+  z-index: 0;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+}
+/* Cube */
+.swiper-container-cube .swiper-slide {
+  visibility: hidden;
+  -webkit-transform-origin: 0 0;
+  transform-origin: 0 0;
+  width: 100%;
+  height: 100%;
+}
+.swiper-container-cube.swiper-container-rtl .swiper-slide {
+  -webkit-transform-origin: 100% 0;
+  transform-origin: 100% 0;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-cube .swiper-slide-next,
+.swiper-container-cube .swiper-slide-prev,
+.swiper-container-cube .swiper-slide-next + .swiper-slide {
+  pointer-events: auto;
+  visibility: visible;
+}
+.swiper-container-cube .swiper-cube-shadow {
+  position: absolute;
+  left: 0;
+  bottom: 0px;
+  width: 100%;
+  height: 100%;
+  background: #000;
+  opacity: 0.6;
+  -webkit-filter: blur(50px);
+  filter: blur(50px);
+  z-index: 0;
+}
+/* Fade */
+.swiper-container-fade.swiper-container-free-mode .swiper-slide {
+  -webkit-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+}
+.swiper-container-fade .swiper-slide {
+  pointer-events: none;
+  -webkit-transition-property: opacity;
+  transition-property: opacity;
+}
+.swiper-container-fade .swiper-slide .swiper-slide {
+  pointer-events: none;
+}
+.swiper-container-fade .swiper-slide-active,
+.swiper-container-fade .swiper-slide-active .swiper-slide-active {
+  pointer-events: auto;
+}
+/* Scrollbar */
+.swiper-scrollbar {
+  border-radius: 10px;
+  position: relative;
+  -ms-touch-action: none;
+  background: rgba(0, 0, 0, 0.1);
+}
+.swiper-container-horizontal > .swiper-scrollbar {
+  position: absolute;
+  left: 1%;
+  bottom: 3px;
+  z-index: 50;
+  height: 5px;
+  width: 98%;
+}
+.swiper-container-vertical > .swiper-scrollbar {
+  position: absolute;
+  right: 3px;
+  top: 1%;
+  z-index: 50;
+  width: 5px;
+  height: 98%;
+}
+.swiper-scrollbar-drag {
+  height: 100%;
+  width: 100%;
+  position: relative;
+  background: rgba(0, 0, 0, 0.5);
+  border-radius: 10px;
+  left: 0;
+  top: 0;
+}
+.swiper-scrollbar-cursor-drag {
+  cursor: move;
+}
+/* Preloader */
+.swiper-lazy-preloader {
+  width: 42px;
+  height: 42px;
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  margin-left: -21px;
+  margin-top: -21px;
+  z-index: 10;
+  -webkit-transform-origin: 50%;
+  transform-origin: 50%;
+  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
+  animation: swiper-preloader-spin 1s steps(12, end) infinite;
+}
+.swiper-lazy-preloader:after {
+  display: block;
+  content: "";
+  width: 100%;
+  height: 100%;
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+  background-position: 50%;
+  background-size: 100%;
+  background-repeat: no-repeat;
+}
+.swiper-lazy-preloader-white:after {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+@-webkit-keyframes swiper-preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+  }
+}
+@keyframes swiper-preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+  }
+}
+.weui-actionsheet {
+  z-index: 10000;
+}
+.weui-popup__overlay,
+.weui-popup__container {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  height: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 10;
+}
+.weui-popup__overlay {
+  background-color: rgba(0, 0, 0, 0.6);
+  opacity: 0;
+  -webkit-transition: opacity .3s;
+  transition: opacity .3s;
+}
+.weui-popup__container {
+  display: none;
+}
+.weui-popup__container.weui-popup__container--visible {
+  display: block;
+}
+.weui-popup__container .weui-cells {
+  margin: 0;
+  text-align: left;
+}
+.weui-popup__modal {
+  width: 100%;
+  position: absolute;
+  z-index: 100;
+  bottom: 0;
+  border-radius: 0;
+  opacity: 0.6;
+  color: #3d4145;
+  -webkit-transition-duration: .3s;
+          transition-duration: .3s;
+  height: 100%;
+  background: #EFEFF4;
+  -webkit-transform: translate3d(0, 100%, 0);
+          transform: translate3d(0, 100%, 0);
+  -webkit-transition-property: opacity, -webkit-transform;
+  transition-property: opacity, -webkit-transform;
+  transition-property: transform, opacity;
+  transition-property: transform, opacity, -webkit-transform;
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.popup-bottom .weui-popup__modal {
+  height: auto;
+}
+.weui-popup__modal .toolbar {
+  position: absolute;
+  left: 0;
+  top: 0;
+  right: 0;
+  z-index: 1;
+}
+.weui-popup__modal .modal-content {
+  height: 100%;
+  padding-top: 2.2rem;
+  overflow: auto;
+  box-sizing: border-box;
+}
+.weui-popup__container--visible .weui-popup__overlay {
+  opacity: 1;
+}
+.weui-popup__container--visible .weui-popup__modal {
+  opacity: 1;
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+.weui-notification {
+  position: fixed;
+  width: 100%;
+  min-height: 3.4rem;
+  top: -2rem;
+  padding-top: 2rem;
+  left: 0;
+  right: 0;
+  z-index: 9999;
+  background-color: rgba(0, 0, 0, 0.85);
+  color: white;
+  font-size: .65rem;
+  -webkit-transform: translate3d(0, -100%, 0);
+          transform: translate3d(0, -100%, 0);
+  -webkit-transition: .4s;
+  transition: .4s;
+}
+.weui-notification.weui-notification--in {
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+.weui-notification.weui-notification--touching {
+  -webkit-transition-duration: 0s;
+          transition-duration: 0s;
+}
+.weui-notification .weui-notification__inner {
+  padding: .4rem .6rem 1rem .6rem;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-align: start;
+  -ms-flex-align: start;
+  -webkit-align-items: flex-start;
+  align-items: flex-start;
+}
+.weui-notification .weui-notification__content {
+  width: 100%;
+  margin: 0rem .4rem;
+}
+.weui-notification .weui-notification__title {
+  font-weight: bold;
+}
+.weui-notification .weui-notification__text {
+  line-height: 1;
+}
+.weui-notification .weui-notification__media {
+  height: 1rem;
+  width: 1rem;
+}
+.weui-notification .weui-notification__media img {
+  width: 100%;
+}
+.weui-notification .weui-notification__handle-bar {
+  position: absolute;
+  bottom: .2rem;
+  left: 50%;
+  -webkit-transform: translate3d(-50%, 0, 0);
+          transform: translate3d(-50%, 0, 0);
+  width: 2rem;
+  height: .3rem;
+  border-radius: .15rem;
+  background: white;
+  opacity: .5;
+}
+.weui-photo-browser-modal {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background: black;
+  display: none;
+  opacity: 0;
+  -webkit-transition: opacity .3s;
+  transition: opacity .3s;
+}
+.weui-photo-browser-modal.weui-photo-browser-modal-visible {
+  opacity: 1;
+}
+.weui-photo-browser-modal .swiper-container {
+  height: 100%;
+  -webkit-transform: scale(0.2);
+          transform: scale(0.2);
+  -webkit-transition: -webkit-transform .5s;
+  transition: -webkit-transform .5s;
+  transition: transform .5s;
+  transition: transform .5s, -webkit-transform .5s;
+}
+.weui-photo-browser-modal .swiper-container .swiper-pagination-bullet {
+  background: white;
+  visibility: hidden;
+}
+.weui-photo-browser-modal .swiper-container.swiper-container-visible {
+  -webkit-transform: scale(1);
+          transform: scale(1);
+}
+.weui-photo-browser-modal .swiper-container.swiper-container-visible .swiper-pagination-bullet {
+  visibility: visible;
+  -webkit-transition-property: visibility;
+  transition-property: visibility;
+  -webkit-transition-delay: .5s;
+          transition-delay: .5s;
+}
+.weui-photo-browser-modal .swiper-container .swiper-pagination {
+  bottom: 10px;
+  left: 0;
+  width: 100%;
+}
+.weui-photo-browser-modal .photo-container {
+  height: 100%;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  overflow: hidden;
+}
+.weui-photo-browser-modal .photo-container img {
+  max-width: 100%;
+  margin-top: -30px;
+}
+.weui-photo-browser-modal .caption {
+  position: absolute;
+  bottom: 40px;
+  left: 0;
+  right: 0;
+  color: white;
+  text-align: center;
+  padding: 0 12px;
+  min-height: 3rem;
+  font-size: 14px;
+  z-index: 10;
+  -webkit-transition: opacity .3s;
+  transition: opacity .3s;
+  -webkit-transition-delay: .5s;
+          transition-delay: .5s;
+  opacity: 0;
+}
+.weui-photo-browser-modal .caption .caption-item {
+  display: none;
+  opacity: 0;
+  -webkit-transition: opacity .15s;
+  transition: opacity .15s;
+}
+.weui-photo-browser-modal .caption .caption-item.active {
+  display: block;
+  opacity: 1;
+}
+.weui-photo-browser-modal .swiper-container-visible .caption {
+  opacity: 1;
+}
+.color-primary {
+  color: #04BE02;
+}
+.color-danger,
+.color-error {
+  color: #f6383a;
+}
+.color-warning {
+  color: #f60;
+}
+.color-success {
+  color: #4cd964;
+}
+.bg-primary,
+.bg-success,
+.bg-danger,
+.bg-error,
+.bg-warning {
+  color: white;
+}
+.bg-primary {
+  background-color: #04BE02;
+}
+.bg-danger,
+.bg-error {
+  background-color: #f6383a;
+}
+.bg-warning {
+  background-color: #f60;
+}
+.bg-success {
+  background-color: #4cd964;
+}
+.weui-toptips {
+  z-index: 100;
+  opacity: 0;
+  -webkit-transition: opacity .3s;
+  transition: opacity .3s;
+}
+.weui-toptips.weui-toptips_visible {
+  opacity: 1;
+}
+.weui-icon_toast {
+  font-size: 55px;
+  color: white;
+  margin-bottom: 6px;
+}
+.weui-toast--forbidden .weui-icon_toast {
+  color: #f6383a;
+}
+.weui-toast--text {
+  min-height: initial;
+  font-size: 18px;
+  padding: 8px 16px;
+  width: auto;
+  top: 40%;
+}
+.weui-toast--text .weui-icon_toast {
+  display: none;
+}
+.weui-count {
+  display: inline-block;
+  height: 25px;
+  line-height: 25px;
+}
+.weui-count .weui-count__btn {
+  height: 21px;
+  width: 21px;
+  line-height: 21px;
+  display: inline-block;
+  position: relative;
+  border: 1px solid #04BE02;
+  border-radius: 50%;
+  vertical-align: -6px;
+}
+.weui-count .weui-count__btn:after,
+.weui-count .weui-count__btn:before {
+  content: " ";
+  position: absolute;
+  height: 1px;
+  width: 11px;
+  background-color: #04BE02;
+  left: 50%;
+  top: 50%;
+  margin-left: -5.5px;
+}
+.weui-count .weui-count__btn:after {
+  height: 11px;
+  width: 1px;
+  margin-top: -5.5px;
+  margin-left: -1px;
+}
+.weui-count .weui-count__decrease:after {
+  display: none;
+}
+.weui-count .weui-count__increase {
+  background-color: #04BE02;
+}
+.weui-count .weui-count__increase:after,
+.weui-count .weui-count__increase:before {
+  background-color: white;
+}
+.weui-count .weui-count__number {
+  background-color: transparent;
+  font-size: .8rem;
+  border: 0;
+  width: 1.3rem;
+  text-align: center;
+  color: #5f646e;
+}
+.weui-panel .weui-media-box__title-after {
+  color: #9b9b9b;
+  font-size: .65rem;
+  float: right;
+}
diff --git a/oauth/src/main/resources/static/css/weui.min.css b/oauth/src/main/resources/static/css/weui.min.css
new file mode 100644
index 0000000..380d74f
--- /dev/null
+++ b/oauth/src/main/resources/static/css/weui.min.css
@@ -0,0 +1,5 @@
+/*!
+ * WeUI v1.1.2 (https://github.com/weui/weui)
+ * Copyright 2017 Tencent, Inc.
+ * Licensed under the MIT license
+ */html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{line-height:1.6;font-family:-apple-system-font,Helvetica Neue,sans-serif}*{margin:0;padding:0}a img{border:0}a{text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}@font-face{font-weight:400;font-style:normal;font-family:weui;src:url("data:application/octet-stream;base64,AAEAAAALAIAAAwAwR1NVQrD+s+0AAAE4AAAAQk9TLzJAKEx+AAABfAAAAFZjbWFw65cFHQAAAhwAAAJQZ2x5ZvCRR/EAAASUAAAKtGhlYWQMPROtAAAA4AAAADZoaGVhCCwD+gAAALwAAAAkaG10eEJo//8AAAHUAAAASGxvY2EYqhW4AAAEbAAAACZtYXhwASEAVQAAARgAAAAgbmFtZeNcHtgAAA9IAAAB5nBvc3T6bLhLAAARMAAAAOYAAQAAA+gAAABaA+j/////A+kAAQAAAAAAAAAAAAAAAAAAABIAAQAAAAEAACbZbxtfDzz1AAsD6AAAAADUm2dvAAAAANSbZ2///wAAA+kD6gAAAAgAAgAAAAAAAAABAAAAEgBJAAUAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAAAAQOwAZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6gHqEQPoAAAAWgPqAAAAAAABAAAAAAAAAAAAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+j//wPoAAAD6AAAAAAABQAAAAMAAAAsAAAABAAAAXQAAQAAAAAAbgADAAEAAAAsAAMACgAAAXQABABCAAAABAAEAAEAAOoR//8AAOoB//8AAAABAAQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAANwAAAAAAAAAEQAA6gEAAOoBAAAAAQAA6gIAAOoCAAAAAgAA6gMAAOoDAAAAAwAA6gQAAOoEAAAABAAA6gUAAOoFAAAABQAA6gYAAOoGAAAABgAA6gcAAOoHAAAABwAA6ggAAOoIAAAACAAA6gkAAOoJAAAACQAA6goAAOoKAAAACgAA6gsAAOoLAAAACwAA6gwAAOoMAAAADAAA6g0AAOoNAAAADQAA6g4AAOoOAAAADgAA6g8AAOoPAAAADwAA6hAAAOoQAAAAEAAA6hEAAOoRAAAAEQAAAAAARgCMANIBJAF4AcQCMgJgAqgC/ANIA6YD/gROBKAE9AVaAAAAAgAAAAADrwOtABQAKQAAASIHBgcGFBcWFxYyNzY3NjQnJicmAyInJicmNDc2NzYyFxYXFhQHBgcGAfV4Z2Q7PDw7ZGfwZmQ7PDw7ZGZ4bl5bNjc3Nlte215bNjc3NlteA608O2Rn8GdjOzw8O2Nn8GdkOzz8rzc1W17bXlw1Nzc1XF7bXls1NwAAAAACAAAAAAOzA7MAFwAtAAABIgcGBwYVFBcWFxYzMjc2NzY1NCcmJyYTBwYiLwEmNjsBETQ2OwEyFhURMzIWAe52Z2Q7PT07ZGd2fGpmOz4+O2ZpIXYOKA52Dg0XXQsHJgcLXRcNA7M+O2ZqfHZnZDs9PTtkZ3Z9aWY7Pv3wmhISmhIaARcICwsI/ukaAAMAAAAAA+UD5QAXACMALAAAASIHBgcGFRQXFhcWMzI3Njc2NTQnJicmAxQrASI1AzQ7ATIHJyImNDYyFhQGAe6Ecm9BRERBb3KEiXZxQkREQnF1aQIxAwgCQgMBIxIZGSQZGQPkREJxdomEcm9BRERBb3KEinVxQkT9HQICAWICAjEZIxkZIxkAAAAAAgAAAAADsQPkABkALgAAAQYHBgc2BREUFxYXFhc2NzY3NjURJBcmJyYTAQYvASY/ATYyHwEWNjclNjIfARYB9VVVQk+v/tFHPmxebGxdbT1I/tGvT0JVo/7VBASKAwMSAQUBcQEFAgESAgUBEQQD4xMYEhk3YP6sjnVlSD8cHD9IZXWOAVRgNxkSGP62/tkDA48EBBkCAVYCAQHlAQIQBAAAAAADAAAAAAOxA+QAGwAqADMAAAEGBwYHBgcGNxEUFxYXFhc2NzY3NjURJBcmJyYHMzIWFQMUBisBIicDNDYTIiY0NjIWFAYB9UFBODssO38gRz5sXmxsXW09SP7YqFBBVW80BAYMAwImBQELBh4PFhYeFRUD5A8SDhIOEikK/q2PdWRJPh0dPklkdY8BU141GRIY/AYE/sYCAwUBOgQG/kAVHxUVHxUAAAACAAAAAAPkA+QAFwAtAAABIgcGBwYVFBcWFxYzMjc2NzY1NCcmJyYTAQYiLwEmPwE2Mh8BFjI3ATYyHwEWAe6Ecm9BQ0NCbnODiXVxQkREQnF1kf6gAQUBowMDFgEFAYUCBQEBQwIFARUEA+NEQnF1iYNzbkJDQ0FvcoSJdXFCRP6j/qUBAagEBR4CAWYBAQENAgIVBAAAAAQAAAAAA68DrQAUACkAPwBDAAABIgcGBwYUFxYXFjI3Njc2NCcmJyYDIicmJyY0NzY3NjIXFhcWFAcGBwYTBQ4BLwEmBg8BBhYfARYyNwE+ASYiFzAfAQH1eGdkOzw8O2Rn8GZkOzw8O2RmeG5eWzY3NzZbXtteWzY3NzZbXmn+9gYSBmAGDwUDBQEGfQUQBgElBQELEBUBAQOtPDtkZ/BnYzs8PDtjZ/BnZDs8/K83NVte215cNTc3NVxe215bNTcCJt0FAQVJBQIGBAcRBoAGBQEhBQ8LBAEBAAABAAAAAAO7AzoAFwAAEy4BPwE+AR8BFjY3ATYWFycWFAcBBiInPQoGBwUHGgzLDCELAh0LHwsNCgr9uQoeCgGzCyEOCw0HCZMJAQoBvgkCCg0LHQv9sQsKAAAAAAIAAAAAA+UD5gAXACwAAAEiBwYHBhUUFxYXFjMyNzY3NjU0JyYnJhMHBi8BJicmNRM0NjsBMhYVExceAQHvhHJvQUNDQm5zg4l1cUJEREJxdVcQAwT6AwIEEAMCKwIDDsUCAQPlREJxdYmDc25CQ0NBb3KEiXVxQkT9VhwEAncCAgMGAXoCAwMC/q2FAgQAAAQAAAAAA68DrQADABgALQAzAAABMB8BAyIHBgcGFBcWFxYyNzY3NjQnJicmAyInJicmNDc2NzYyFxYXFhQHBgcGAyMVMzUjAuUBAfJ4Z2Q7PDw7ZGfwZmQ7PDw7ZGZ4bl5bNjc3Nlte215bNjc3NltemyT92QKDAQEBLDw7ZGfwZ2M7PDw7Y2fwZ2Q7PPyvNzVbXtteXDU3NzVcXtteWzU3AjH9JAAAAAMAAAAAA+QD5AAXACcAMAAAASIHBgcGFRQXFhcWMzI3Njc2NTQnJicmAzMyFhUDFAYrASImNQM0NhMiJjQ2MhYUBgHuhHJvQUNDQm5zg4l1cUJEREJxdZ42BAYMAwInAwMMBh8PFhYeFhYD40RCcXWJg3NuQkNDQW9yhIl1cUJE/vYGBf7AAgMDAgFABQb+NhYfFhYfFgAABAAAAAADwAPAAAgAEgAoAD0AAAEyNjQmIgYUFhcjFTMRIxUzNSMDIgcGBwYVFBYXFjMyNzY3NjU0Jy4BAyInJicmNDc2NzYyFxYXFhQHBgcGAfQYISEwISFRjzk5yTorhG5rPT99am+DdmhlPD4+PMyFbV5bNTc3NVte2l5bNTc3NVteAqAiLyIiLyI5Hf7EHBwCsT89a26Ed8w8Pj48ZWh2g29qffyjNzVbXtpeWzU3NzVbXtpeWzU3AAADAAAAAAOoA6gACwAgADUAAAEHJwcXBxc3FzcnNwMiBwYHBhQXFhcWMjc2NzY0JyYnJgMiJyYnJjQ3Njc2MhcWFxYUBwYHBgKOmpocmpocmpocmpq2dmZiOjs7OmJm7GZiOjs7OmJmdmtdWTQ2NjRZXdZdWTQ2NjRZXQKqmpocmpocmpocmpoBGTs6YmbsZmI6Ozs6YmbsZmI6O/zCNjRZXdZdWTQ2NjRZXdZdWTQ2AAMAAAAAA+kD6gAaAC8AMAAAAQYHBiMiJyYnJjQ3Njc2MhcWFxYVFAcGBwEHATI3Njc2NCcmJyYiBwYHBhQXFhcWMwKONUBCR21dWjU3NzVaXdpdWzU2GBcrASM5/eBXS0grKysrSEuuSkkqLCwqSUpXASMrFxg2NVtd2l1aNTc3NVpdbUdCQDX+3jkBGSsrSEuuSkkqLCwqSUquS0grKwAC//8AAAPoA+gAFAAwAAABIgcGBwYQFxYXFiA3Njc2ECcmJyYTFg4BIi8BBwYuATQ/AScmPgEWHwE3Nh4BBg8BAfSIdHFDRERDcXQBEHRxQ0REQ3F0SQoBFBsKoqgKGxMKqKIKARQbCqKoChsUAQqoA+hEQ3F0/vB0cUNERENxdAEQdHFDRP1jChsTCqiiCgEUGwqiqAobFAEKqKIKARQbCqIAAAIAAAAAA+QD5AAXADQAAAEiBwYHBhUUFxYXFjMyNzY3NjU0JyYnJhMUBiMFFxYUDwEGLwEuAT8BNh8BFhQPAQUyFh0BAe6Ecm9BQ0NCbnODiXVxQkREQnF1fwQC/pGDAQEVAwTsAgEC7AQEFAIBhAFwAgMD40RCcXWJg3NuQkNDQW9yhIl1cUJE/fYCAwuVAgQCFAQE0AIFAtEEBBQCBQGVCwMDJwAAAAUAAAAAA9QD0wAjACcANwBHAEgAAAERFAYjISImNREjIiY9ATQ2MyE1NDYzITIWHQEhMhYdARQGIyERIREHIgYVERQWOwEyNjURNCYjISIGFREUFjsBMjY1ETQmKwEDeyYb/XYbJkMJDQ0JAQYZEgEvExkBBgkNDQn9CQJc0QkNDQktCQ0NCf7sCQ0NCS0JDQ0JLQMi/TQbJiYbAswMCiwJDS4SGRkSLg0JLAoM/UwCtGsNCf5NCQ0NCQGzCQ0NCf5NCQ0NCQGzCQ0AAAAAEADGAAEAAAAAAAEABAAAAAEAAAAAAAIABwAEAAEAAAAAAAMABAALAAEAAAAAAAQABAAPAAEAAAAAAAUACwATAAEAAAAAAAYABAAeAAEAAAAAAAoAKwAiAAEAAAAAAAsAEwBNAAMAAQQJAAEACABgAAMAAQQJAAIADgBoAAMAAQQJAAMACAB2AAMAAQQJAAQACAB+AAMAAQQJAAUAFgCGAAMAAQQJAAYACACcAAMAAQQJAAoAVgCkAAMAAQQJAAsAJgD6d2V1aVJlZ3VsYXJ3ZXVpd2V1aVZlcnNpb24gMS4wd2V1aUdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAHcAZQB1AGkAUgBlAGcAdQBsAGEAcgB3AGUAdQBpAHcAZQB1AGkAVgBlAHIAcwBpAG8AbgAgADEALgAwAHcAZQB1AGkARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETAAZjaXJjbGUIZG93bmxvYWQEaW5mbwxzYWZlX3N1Y2Nlc3MJc2FmZV93YXJuB3N1Y2Nlc3MOc3VjY2Vzcy1jaXJjbGURc3VjY2Vzcy1uby1jaXJjbGUHd2FpdGluZw53YWl0aW5nLWNpcmNsZQR3YXJuC2luZm8tY2lyY2xlBmNhbmNlbAZzZWFyY2gFY2xlYXIEYmFjawZkZWxldGUAAAAA") format("truetype")}[class*=" weui-icon-"],[class^=weui-icon-]{display:inline-block;vertical-align:middle;font:normal normal normal 14px/1 weui;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}[class*=" weui-icon-"]:before,[class^=weui-icon-]:before{display:inline-block;margin-left:.2em;margin-right:.2em}.weui-icon-circle:before{content:"\EA01"}.weui-icon-download:before{content:"\EA02"}.weui-icon-info:before{content:"\EA03"}.weui-icon-safe-success:before{content:"\EA04"}.weui-icon-safe-warn:before{content:"\EA05"}.weui-icon-success:before{content:"\EA06"}.weui-icon-success-circle:before{content:"\EA07"}.weui-icon-success-no-circle:before{content:"\EA08"}.weui-icon-waiting:before{content:"\EA09"}.weui-icon-waiting-circle:before{content:"\EA0A"}.weui-icon-warn:before{content:"\EA0B"}.weui-icon-info-circle:before{content:"\EA0C"}.weui-icon-cancel:before{content:"\EA0D"}.weui-icon-search:before{content:"\EA0E"}.weui-icon-clear:before{content:"\EA0F"}.weui-icon-back:before{content:"\EA10"}.weui-icon-delete:before{content:"\EA11"}[class*=" weui-icon_"]:before,[class^=weui-icon_]:before{margin:0}.weui-icon-success{font-size:23px;color:#09bb07}.weui-icon-waiting{font-size:23px;color:#10aeff}.weui-icon-warn{font-size:23px;color:#f43530}.weui-icon-info{font-size:23px;color:#10aeff}.weui-icon-success-circle,.weui-icon-success-no-circle{font-size:23px;color:#09bb07}.weui-icon-waiting-circle{font-size:23px;color:#10aeff}.weui-icon-circle{font-size:23px;color:#c9c9c9}.weui-icon-download,.weui-icon-info-circle{font-size:23px;color:#09bb07}.weui-icon-safe-success{color:#09bb07}.weui-icon-safe-warn{color:#ffbe00}.weui-icon-cancel{color:#f43530;font-size:22px}.weui-icon-clear,.weui-icon-search{color:#b2b2b2;font-size:14px}.weui-icon-delete.weui-icon_gallery-delete{color:#fff;font-size:22px}.weui-icon_msg{font-size:93px}.weui-icon_msg.weui-icon-warn{color:#f76260}.weui-icon_msg-primary{font-size:93px}.weui-icon_msg-primary.weui-icon-warn{color:#ffbe00}.weui-btn{position:relative;display:block;margin-left:auto;margin-right:auto;padding-left:14px;padding-right:14px;box-sizing:border-box;font-size:18px;text-align:center;text-decoration:none;color:#fff;line-height:2.55555556;border-radius:5px;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:hidden}.weui-btn:after{content:" ";width:200%;height:200%;position:absolute;top:0;left:0;border:1px solid rgba(0,0,0,.2);-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;box-sizing:border-box;border-radius:10px}.weui-btn_inline{display:inline-block}.weui-btn_default{color:#000;background-color:#f8f8f8}.weui-btn_default:not(.weui-btn_disabled):visited{color:#000}.weui-btn_default:not(.weui-btn_disabled):active{color:rgba(0,0,0,.6);background-color:#dedede}.weui-btn_primary{background-color:#1aad19}.weui-btn_primary:not(.weui-btn_disabled):visited{color:#fff}.weui-btn_primary:not(.weui-btn_disabled):active{color:hsla(0,0%,100%,.6);background-color:#179b16}.weui-btn_warn{background-color:#e64340}.weui-btn_warn:not(.weui-btn_disabled):visited{color:#fff}.weui-btn_warn:not(.weui-btn_disabled):active{color:hsla(0,0%,100%,.6);background-color:#ce3c39}.weui-btn_disabled{color:hsla(0,0%,100%,.6)}.weui-btn_disabled.weui-btn_default{color:rgba(0,0,0,.3);background-color:#f7f7f7}.weui-btn_disabled.weui-btn_primary{background-color:#9ed99d}.weui-btn_disabled.weui-btn_warn{background-color:#ec8b89}.weui-btn_loading .weui-loading{margin:-.2em .34em 0 0}.weui-btn_loading.weui-btn_primary,.weui-btn_loading.weui-btn_warn{color:hsla(0,0%,100%,.6)}.weui-btn_loading.weui-btn_primary{background-color:#179b16}.weui-btn_loading.weui-btn_warn{background-color:#ce3c39}.weui-btn_plain-primary{color:#1aad19;border:1px solid #1aad19}.weui-btn_plain-primary:not(.weui-btn_plain-disabled):active{color:rgba(26,173,25,.6);border-color:rgba(26,173,25,.6)}.weui-btn_plain-primary:after{border-width:0}.weui-btn_plain-default{color:#353535;border:1px solid #353535}.weui-btn_plain-default:not(.weui-btn_plain-disabled):active{color:rgba(53,53,53,.6);border-color:rgba(53,53,53,.6)}.weui-btn_plain-default:after{border-width:0}.weui-btn_plain-disabled{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}button.weui-btn,input.weui-btn{width:100%;border-width:0;outline:0;-webkit-appearance:none}button.weui-btn:focus,input.weui-btn:focus{outline:0}button.weui-btn_inline,button.weui-btn_mini,input.weui-btn_inline,input.weui-btn_mini{width:auto}button.weui-btn_plain-default,button.weui-btn_plain-primary,input.weui-btn_plain-default,input.weui-btn_plain-primary{border-width:1px;background-color:transparent}.weui-btn_mini{display:inline-block;padding:0 1.32em;line-height:2.3;font-size:13px}.weui-btn+.weui-btn{margin-top:15px}.weui-btn.weui-btn_inline+.weui-btn.weui-btn_inline{margin-top:auto;margin-left:15px}.weui-btn-area{margin:1.17647059em 15px .3em}.weui-btn-area_inline{display:-webkit-box;display:-webkit-flex;display:flex}.weui-btn-area_inline .weui-btn{margin-top:auto;margin-right:15px;width:100%;-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-btn-area_inline .weui-btn:last-child{margin-right:0}.weui-cells{margin-top:1.17647059em;background-color:#fff;line-height:1.47058824;font-size:17px;overflow:hidden;position:relative}.weui-cells:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-cells:after,.weui-cells:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5;z-index:2}.weui-cells:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-cells__title{margin-top:.77em;margin-bottom:.3em;padding-left:15px;padding-right:15px;color:#999;font-size:14px}.weui-cells__title+.weui-cells{margin-top:0}.weui-cells__tips{margin-top:.3em;color:#999;padding-left:15px;padding-right:15px;font-size:14px}.weui-cell{padding:10px 15px;position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px;z-index:2}.weui-cell:first-child:before{display:none}.weui-cell_primary{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.weui-cell__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-cell__ft{text-align:right;color:#999}.weui-cell_swiped{display:block;padding:0}.weui-cell_swiped>.weui-cell__bd{position:relative;z-index:1;background-color:#fff}.weui-cell_swiped>.weui-cell__ft{position:absolute;right:0;top:0;bottom:0;display:-webkit-box;display:-webkit-flex;display:flex;color:#fff}.weui-swiped-btn{display:block;padding:10px 1em;line-height:1.47058824;color:inherit}.weui-swiped-btn_default{background-color:#c7c7cc}.weui-swiped-btn_warn{background-color:#ff3b30}.weui-cell_access{-webkit-tap-highlight-color:rgba(0,0,0,0);color:inherit}.weui-cell_access:active{background-color:#ececec}.weui-cell_access .weui-cell__ft{padding-right:13px;position:relative}.weui-cell_access .weui-cell__ft:after{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;margin-top:-4px;right:2px}.weui-cell_link{color:#586c94;font-size:14px}.weui-cell_link:first-child:before{display:block}.weui-check__label{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-check__label:active{background-color:#ececec}.weui-check{position:absolute;left:-9999em}.weui-cells_radio .weui-cell__ft{padding-left:.35em}.weui-cells_radio .weui-check:checked+.weui-icon-checked:before{display:block;content:"\EA08";color:#09bb07;font-size:16px}.weui-cells_checkbox .weui-cell__hd{padding-right:.35em}.weui-cells_checkbox .weui-icon-checked:before{content:"\EA01";color:#c9c9c9;font-size:23px;display:block}.weui-cells_checkbox .weui-check:checked+.weui-icon-checked:before{content:"\EA06";color:#09bb07}.weui-label{display:block;width:105px;word-wrap:break-word;word-break:break-all}.weui-input{width:100%;border:0;outline:0;-webkit-appearance:none;background-color:transparent;font-size:inherit;color:inherit;height:1.47058824em;line-height:1.47058824}.weui-input::-webkit-inner-spin-button,.weui-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.weui-textarea{display:block;border:0;resize:none;width:100%;color:inherit;font-size:1em;line-height:inherit;outline:0}.weui-textarea-counter{color:#b2b2b2;text-align:right}.weui-cell_warn .weui-textarea-counter{color:#e64340}.weui-toptips{display:none;position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);top:0;left:0;right:0;padding:5px;font-size:14px;text-align:center;color:#fff;z-index:5000;word-wrap:break-word;word-break:break-all}.weui-toptips_warn{background-color:#e64340}.weui-cells_form .weui-cell__ft{font-size:0}.weui-cells_form .weui-icon-warn{display:none}.weui-cells_form input,.weui-cells_form label[for],.weui-cells_form textarea{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-cell_warn{color:#e64340}.weui-cell_warn .weui-icon-warn{display:inline-block}.weui-form-preview{position:relative;background-color:#fff}.weui-form-preview:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview:after,.weui-form-preview:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-form-preview:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview__hd{position:relative;padding:10px 15px;text-align:right;line-height:2.5em}.weui-form-preview__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui-form-preview__hd .weui-form-preview__value{font-style:normal;font-size:1.6em}.weui-form-preview__bd{padding:10px 15px;font-size:.9em;text-align:right;color:#999;line-height:2}.weui-form-preview__ft{position:relative;line-height:50px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-form-preview__ft:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-form-preview__item{overflow:hidden}.weui-form-preview__label{float:left;margin-right:1em;min-width:4em;color:#999;text-align:justify;text-align-last:justify}.weui-form-preview__value{display:block;overflow:hidden;word-break:normal;word-wrap:break-word}.weui-form-preview__btn{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}button.weui-form-preview__btn{background-color:transparent;border:0;outline:0;line-height:inherit;font-size:inherit}.weui-form-preview__btn:active{background-color:#eee}.weui-form-preview__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-form-preview__btn:first-child:after{display:none}.weui-form-preview__btn_default{color:#999}.weui-form-preview__btn_primary{color:#0bb20c}.weui-cell_select{padding:0}.weui-cell_select .weui-select{padding-right:30px}.weui-cell_select .weui-cell__bd:after{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-select{-webkit-appearance:none;border:0;outline:0;background-color:transparent;width:100%;font-size:inherit;height:45px;line-height:45px;position:relative;z-index:1;padding-left:15px}.weui-cell_select-before{padding-right:15px}.weui-cell_select-before .weui-select{width:105px;box-sizing:border-box}.weui-cell_select-before .weui-cell__hd{position:relative}.weui-cell_select-before .weui-cell__hd:after{content:" ";position:absolute;right:0;top:0;width:1px;bottom:0;border-right:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-cell_select-before .weui-cell__hd:before{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-cell_select-before .weui-cell__bd{padding-left:15px}.weui-cell_select-before .weui-cell__bd:after{display:none}.weui-cell_select-after{padding-left:15px}.weui-cell_select-after .weui-select{padding-left:0}.weui-cell_vcode{padding-top:0;padding-right:0;padding-bottom:0}.weui-vcode-btn,.weui-vcode-img{margin-left:5px;height:45px;vertical-align:middle}.weui-vcode-btn{display:inline-block;padding:0 .6em 0 .7em;border-left:1px solid #e5e5e5;line-height:45px;font-size:17px;color:#3cc51f}button.weui-vcode-btn{background-color:transparent;border-top:0;border-right:0;border-bottom:0;outline:0}.weui-vcode-btn:active{color:#52a341}.weui-gallery{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000;z-index:1000}.weui-gallery__img{position:absolute;top:0;right:0;bottom:60px;left:0;background:50% no-repeat;background-size:contain}.weui-gallery__opr{position:absolute;right:0;bottom:0;left:0;background-color:#0d0d0d;color:#fff;line-height:60px;text-align:center}.weui-gallery__del{display:block}.weui-cell_switch{padding-top:6.5px;padding-bottom:6.5px}.weui-switch{-webkit-appearance:none;appearance:none}.weui-switch,.weui-switch-cp__box{position:relative;width:52px;height:32px;border:1px solid #dfdfdf;outline:0;border-radius:16px;box-sizing:border-box;background-color:#dfdfdf;-webkit-transition:background-color .1s,border .1s;transition:background-color .1s,border .1s}.weui-switch-cp__box:before,.weui-switch:before{content:" ";position:absolute;top:0;left:0;width:50px;height:30px;border-radius:15px;background-color:#fdfdfd;-webkit-transition:-webkit-transform .35s cubic-bezier(.45,1,.4,1);transition:-webkit-transform .35s cubic-bezier(.45,1,.4,1);transition:transform .35s cubic-bezier(.45,1,.4,1);transition:transform .35s cubic-bezier(.45,1,.4,1),-webkit-transform .35s cubic-bezier(.45,1,.4,1)}.weui-switch-cp__box:after,.weui-switch:after{content:" ";position:absolute;top:0;left:0;width:30px;height:30px;border-radius:15px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4);-webkit-transition:-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35);transition:-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35);transition:transform .35s cubic-bezier(.4,.4,.25,1.35);transition:transform .35s cubic-bezier(.4,.4,.25,1.35),-webkit-transform .35s cubic-bezier(.4,.4,.25,1.35)}.weui-switch-cp__input:checked~.weui-switch-cp__box,.weui-switch:checked{border-color:#04be02;background-color:#04be02}.weui-switch-cp__input:checked~.weui-switch-cp__box:before,.weui-switch:checked:before{-webkit-transform:scale(0);transform:scale(0)}.weui-switch-cp__input:checked~.weui-switch-cp__box:after,.weui-switch:checked:after{-webkit-transform:translateX(20px);transform:translateX(20px)}.weui-switch-cp__input{position:absolute;left:-9999px}.weui-switch-cp__box{display:block}.weui-uploader__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding-bottom:10px;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-uploader__title{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-uploader__info{color:#b2b2b2}.weui-uploader__bd{margin-bottom:-4px;margin-right:-9px;overflow:hidden}.weui-uploader__files{list-style:none}.weui-uploader__file{float:left;margin-right:9px;margin-bottom:9px;width:79px;height:79px;background:no-repeat 50%;background-size:cover}.weui-uploader__file_status{position:relative}.weui-uploader__file_status:before{content:" ";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.5)}.weui-uploader__file_status .weui-uploader__file-content{display:block}.weui-uploader__file-content{display:none;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff}.weui-uploader__file-content .weui-icon-warn{display:inline-block}.weui-uploader__input-box{float:left;position:relative;margin-right:9px;margin-bottom:9px;width:77px;height:77px;border:1px solid #d9d9d9}.weui-uploader__input-box:after,.weui-uploader__input-box:before{content:" ";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#d9d9d9}.weui-uploader__input-box:before{width:2px;height:39.5px}.weui-uploader__input-box:after{width:39.5px;height:2px}.weui-uploader__input-box:active{border-color:#999}.weui-uploader__input-box:active:after,.weui-uploader__input-box:active:before{background-color:#999}.weui-uploader__input{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-msg{padding-top:36px;text-align:center}.weui-msg__icon-area{margin-bottom:30px}.weui-msg__text-area{margin-bottom:25px;padding:0 20px}.weui-msg__text-area a{color:#586c94}.weui-msg__title{margin-bottom:5px;font-weight:400;font-size:20px}.weui-msg__desc{font-size:14px;color:#999}.weui-msg__opr-area{margin-bottom:25px}.weui-msg__extra-area{margin-bottom:15px;font-size:14px;color:#999}.weui-msg__extra-area a{color:#586c94}@media screen and (min-height:438px){.weui-msg__extra-area{position:fixed;left:0;bottom:0;width:100%;text-align:center}}.weui-article{padding:20px 15px;font-size:15px}.weui-article section{margin-bottom:1.5em}.weui-article h1{font-size:18px;font-weight:400;margin-bottom:.9em}.weui-article h2{font-size:16px}.weui-article h2,.weui-article h3{font-weight:400;margin-bottom:.34em}.weui-article h3{font-size:15px}.weui-article *{max-width:100%;box-sizing:border-box;word-wrap:break-word}.weui-article p{margin:0 0 .8em}.weui-tabbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;bottom:0;width:100%;background-color:#f7f7fa}.weui-tabbar:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #c0bfc4;color:#c0bfc4;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-tabbar__item{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:5px 0 0;font-size:0;color:#999;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon,.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon>i,.weui-tabbar__item.weui-bar__item_on .weui-tabbar__label{color:#09bb07}.weui-tabbar__icon{display:inline-block;width:27px;height:27px}.weui-tabbar__icon>i,i.weui-tabbar__icon{font-size:24px;color:#999}.weui-tabbar__icon img{width:100%;height:100%}.weui-tabbar__label{text-align:center;color:#999;font-size:10px;line-height:1.8}.weui-navbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;top:0;width:100%;background-color:#fafafa}.weui-navbar:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #ccc;color:#ccc;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-navbar+.weui-tab__panel{padding-top:50px;padding-bottom:0}.weui-navbar__item{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:13px 0;text-align:center;font-size:15px;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui-navbar__item:active{background-color:#ededed}.weui-navbar__item.weui-bar__item_on{background-color:#eaeaea}.weui-navbar__item:after{content:" ";position:absolute;right:0;top:0;width:1px;bottom:0;border-right:1px solid #ccc;color:#ccc;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-navbar__item:last-child:after{display:none}.weui-tab{position:relative;height:100%}.weui-tab__panel{box-sizing:border-box;height:100%;padding-bottom:50px;overflow:auto;-webkit-overflow-scrolling:touch}.weui-tab__content{display:none}.weui-progress{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-progress__bar{background-color:#ebebeb;height:3px;-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-progress__inner-bar{width:0;height:100%;background-color:#09bb07}.weui-progress__opr{display:block;margin-left:15px;font-size:0}.weui-panel{background-color:#fff;margin-top:10px;position:relative;overflow:hidden}.weui-panel:first-child{margin-top:0}.weui-panel:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-panel:after,.weui-panel:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-panel:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-panel__hd{padding:14px 15px 10px;color:#999;font-size:13px;position:relative}.weui-panel__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui-media-box{padding:15px;position:relative}.weui-media-box:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui-media-box:first-child:before{display:none}a.weui-media-box{color:#000;-webkit-tap-highlight-color:rgba(0,0,0,0)}a.weui-media-box:active{background-color:#ececec}.weui-media-box__title{font-weight:400;font-size:17px;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;word-wrap:break-word;word-break:break-all}.weui-media-box__desc{color:#999;font-size:13px;line-height:1.2;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui-media-box__info{margin-top:15px;padding-bottom:5px;font-size:13px;color:#cecece;line-height:1em;list-style:none;overflow:hidden}.weui-media-box__info__meta{float:left;padding-right:1em}.weui-media-box__info__meta_extra{padding-left:1em;border-left:1px solid #cecece}.weui-media-box_text .weui-media-box__title{margin-bottom:8px}.weui-media-box_appmsg{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-media-box_appmsg .weui-media-box__hd{margin-right:.8em;width:60px;height:60px;line-height:60px;text-align:center}.weui-media-box_appmsg .weui-media-box__thumb{width:100%;max-height:100%;vertical-align:top}.weui-media-box_appmsg .weui-media-box__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0}.weui-media-box_small-appmsg{padding:0}.weui-media-box_small-appmsg .weui-cells{margin-top:0}.weui-media-box_small-appmsg .weui-cells:before{display:none}.weui-grids{position:relative;overflow:hidden}.weui-grids:before{right:0;height:1px;border-top:1px solid #d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-grids:after,.weui-grids:before{content:" ";position:absolute;left:0;top:0;color:#d9d9d9}.weui-grids:after{width:1px;bottom:0;border-left:1px solid #d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-grid{position:relative;float:left;padding:20px 10px;width:33.33333333%;box-sizing:border-box}.weui-grid:before{top:0;width:1px;border-right:1px solid #d9d9d9;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-grid:after,.weui-grid:before{content:" ";position:absolute;right:0;bottom:0;color:#d9d9d9}.weui-grid:after{left:0;height:1px;border-bottom:1px solid #d9d9d9;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-grid:active{background-color:#ececec}.weui-grid__icon{width:28px;height:28px;margin:0 auto}.weui-grid__icon img{display:block;width:100%;height:100%}.weui-grid__icon+.weui-grid__label{margin-top:5px}.weui-grid__label{display:block;color:#000;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.weui-footer,.weui-grid__label{text-align:center;font-size:14px}.weui-footer{color:#999}.weui-footer a{color:#586c94}.weui-footer_fixed-bottom{position:fixed;bottom:.52em;left:0;right:0}.weui-footer__links{font-size:0}.weui-footer__link{display:inline-block;vertical-align:top;margin:0 .62em;position:relative;font-size:14px}.weui-footer__link:before{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #c7c7c7;color:#c7c7c7;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5);left:-.65em;top:.36em;bottom:.36em}.weui-footer__link:first-child:before{display:none}.weui-footer__text{padding:0 .34em;font-size:12px}.weui-flex{display:-webkit-box;display:-webkit-flex;display:flex}.weui-flex__item{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-dialog{position:fixed;z-index:5000;width:80%;max-width:300px;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#fff;text-align:center;border-radius:3px;overflow:hidden}.weui-dialog__hd{padding:1.3em 1.6em .5em}.weui-dialog__title{font-weight:400;font-size:18px}.weui-dialog__bd{padding:0 1.6em .8em;min-height:40px;font-size:15px;line-height:1.3;word-wrap:break-word;word-break:break-all;color:#999}.weui-dialog__bd:first-child{padding:2.7em 20px 1.7em;color:#353535}.weui-dialog__ft{position:relative;line-height:48px;font-size:18px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-dialog__ft:after{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-dialog__btn{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative}.weui-dialog__btn:active{background-color:#eee}.weui-dialog__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui-dialog__btn:first-child:after{display:none}.weui-dialog__btn_default{color:#353535}.weui-dialog__btn_primary{color:#0bb20c}.weui-skin_android .weui-dialog{text-align:left;box-shadow:0 6px 30px 0 rgba(0,0,0,.1)}.weui-skin_android .weui-dialog__title{font-size:21px}.weui-skin_android .weui-dialog__hd{text-align:left}.weui-skin_android .weui-dialog__bd{color:#999;padding:.25em 1.6em 2em;font-size:17px;text-align:left}.weui-skin_android .weui-dialog__bd:first-child{padding:1.6em 1.6em 2em;color:#353535}.weui-skin_android .weui-dialog__ft{display:block;text-align:right;line-height:42px;font-size:16px;padding:0 1.6em .7em}.weui-skin_android .weui-dialog__ft:after{display:none}.weui-skin_android .weui-dialog__btn{display:inline-block;vertical-align:top;padding:0 .8em}.weui-skin_android .weui-dialog__btn:after{display:none}.weui-skin_android .weui-dialog__btn:active,.weui-skin_android .weui-dialog__btn:visited{background-color:rgba(0,0,0,.06)}.weui-skin_android .weui-dialog__btn:last-child{margin-right:-.8em}.weui-skin_android .weui-dialog__btn_default{color:gray}@media screen and (min-width:1024px){.weui-dialog{width:35%}}.weui-toast{position:fixed;z-index:5000;width:7.6em;min-height:7.6em;top:180px;left:50%;background:hsla(0,0%,7%,.7);text-align:center;border-radius:5px;color:#fff}.weui-icon_toast{margin:22px 0 0;display:block}.weui-icon_toast.weui-icon-success-no-circle:before{color:#fff;font-size:55px}.weui-icon_toast.weui-loading{margin:30px 0 0;width:38px;height:38px;vertical-align:baseline}.weui-toast__content{margin:0 0 15px}.weui-mask{background:rgba(0,0,0,.6)}.weui-mask,.weui-mask_transparent{position:fixed;z-index:2000;top:0;right:0;left:0;bottom:0}.weui-actionsheet{position:fixed;left:0;bottom:0;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:5000;width:100%;background-color:#efeff4;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-actionsheet__title{position:relative;height:65px;padding:0 20px;line-height:1.4;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;text-align:center;font-size:14px;color:#888;background:#fcfcfd}.weui-actionsheet__title:before{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-actionsheet__title .weui-actionsheet__title-text{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui-actionsheet__menu{background-color:#fcfcfd}.weui-actionsheet__action{margin-top:6px;background-color:#fcfcfd}.weui-actionsheet__cell{position:relative;padding:10px 0;text-align:center;font-size:18px}.weui-actionsheet__cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-actionsheet__cell:active{background-color:#ececec}.weui-actionsheet__cell:first-child:before{display:none}.weui-skin_android .weui-actionsheet{position:fixed;left:50%;top:50%;bottom:auto;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:274px;box-sizing:border-box;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:transparent;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-skin_android .weui-actionsheet__action{display:none}.weui-skin_android .weui-actionsheet__menu{border-radius:2px;box-shadow:0 6px 30px 0 rgba(0,0,0,.1)}.weui-skin_android .weui-actionsheet__cell{padding:13px 24px;font-size:16px;line-height:1.4;text-align:left}.weui-skin_android .weui-actionsheet__cell:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.weui-skin_android .weui-actionsheet__cell:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.weui-actionsheet_toggle{-webkit-transform:translate(0);transform:translate(0)}.weui-loadmore{width:65%;margin:1.5em auto;line-height:1.6em;font-size:14px;text-align:center}.weui-loadmore__tips{display:inline-block;vertical-align:middle}.weui-loadmore_line{border-top:1px solid #e5e5e5;margin-top:2.4em}.weui-loadmore_line .weui-loadmore__tips{position:relative;top:-.9em;padding:0 .55em;background-color:#fff;color:#999}.weui-loadmore_dot .weui-loadmore__tips{padding:0 .16em}.weui-loadmore_dot .weui-loadmore__tips:before{content:" ";width:4px;height:4px;border-radius:50%;background-color:#e5e5e5;display:inline-block;position:relative;vertical-align:0;top:-.16em}.weui-badge{display:inline-block;padding:.15em .4em;min-width:8px;border-radius:18px;background-color:#f43530;color:#fff;line-height:1.2;text-align:center;font-size:12px;vertical-align:middle}.weui-badge_dot{padding:.4em;min-width:0}.weui-search-bar{position:relative;padding:8px 10px;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;background-color:#efeff4}.weui-search-bar:before{top:0;border-top:1px solid #d7d6dc;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-search-bar:after,.weui-search-bar:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#d7d6dc}.weui-search-bar:after{bottom:0;border-bottom:1px solid #d7d6dc;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-search-bar.weui-search-bar_focusing .weui-search-bar__cancel-btn{display:block}.weui-search-bar.weui-search-bar_focusing .weui-search-bar__label{display:none}.weui-search-bar__form{position:relative;-webkit-box-flex:1;-webkit-flex:auto;flex:auto;background-color:#efeff4}.weui-search-bar__form:after{content:"";position:absolute;left:0;top:0;width:200%;height:200%;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;border-radius:10px;border:1px solid #e6e6ea;box-sizing:border-box;background:#fff}.weui-search-bar__box{position:relative;padding-left:30px;padding-right:30px;height:100%;width:100%;box-sizing:border-box;z-index:1}.weui-search-bar__box .weui-search-bar__input{padding:4px 0;width:100%;height:1.42857143em;border:0;font-size:14px;line-height:1.42857143em;box-sizing:content-box;background:transparent}.weui-search-bar__box .weui-search-bar__input:focus{outline:none}.weui-search-bar__box .weui-icon-search{position:absolute;left:10px;top:0;line-height:28px}.weui-search-bar__box .weui-icon-clear{position:absolute;top:0;right:0;padding:0 10px;line-height:28px}.weui-search-bar__label{position:absolute;top:1px;right:1px;bottom:1px;left:1px;z-index:2;border-radius:3px;text-align:center;color:#9b9b9b;background:#fff}.weui-search-bar__label span{display:inline-block;font-size:14px;vertical-align:middle}.weui-search-bar__label .weui-icon-search{margin-right:5px}.weui-search-bar__cancel-btn{display:none;margin-left:10px;line-height:28px;color:#09bb07;white-space:nowrap}.weui-search-bar__input:not(:valid)~.weui-icon-clear{display:none}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-results-button,input[type=search]::-webkit-search-results-decoration{display:none}.weui-picker{position:fixed;width:100%;left:0;bottom:0;z-index:5000;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-picker__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding:9px 15px;background-color:#fff;position:relative;text-align:center;font-size:17px}.weui-picker__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__action{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#1aad19}.weui-picker__action:first-child{text-align:left;color:#888}.weui-picker__action:last-child{text-align:right}.weui-picker__bd{display:-webkit-box;display:-webkit-flex;display:flex;position:relative;background-color:#fff;height:238px;overflow:hidden}.weui-picker__group{-webkit-box-flex:1;-webkit-flex:1;flex:1;position:relative;height:100%}.weui-picker__mask{top:0;height:100%;margin:0 auto;background:-webkit-linear-gradient(top,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),-webkit-linear-gradient(bottom,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background:linear-gradient(180deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),linear-gradient(0deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background-position:top,bottom;background-size:100% 102px;background-repeat:no-repeat;-webkit-transform:translateZ(0);transform:translateZ(0)}.weui-picker__indicator,.weui-picker__mask{position:absolute;left:0;width:100%;z-index:3}.weui-picker__indicator{height:34px;top:102px}.weui-picker__indicator:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__indicator:after,.weui-picker__indicator:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-picker__indicator:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__content{position:absolute;top:0;left:0;width:100%}.weui-picker__item{padding:0;height:34px;line-height:34px;text-align:center;color:#000;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.weui-picker__item_disabled{color:#999}@-webkit-keyframes a{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes a{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.weui-animate-slide-up{-webkit-animation:a ease .3s forwards;animation:a ease .3s forwards}@-webkit-keyframes b{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes b{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.weui-animate-slide-down{-webkit-animation:b ease .3s forwards;animation:b ease .3s forwards}@-webkit-keyframes c{0%{opacity:0}to{opacity:1}}@keyframes c{0%{opacity:0}to{opacity:1}}.weui-animate-fade-in{-webkit-animation:c ease .3s forwards;animation:c ease .3s forwards}@-webkit-keyframes d{0%{opacity:1}to{opacity:0}}@keyframes d{0%{opacity:1}to{opacity:0}}.weui-animate-fade-out{-webkit-animation:d ease .3s forwards;animation:d ease .3s forwards}.weui-agree{display:block;padding:.5em 15px;font-size:13px}.weui-agree a{color:#586c94}.weui-agree__text{color:#999}.weui-agree__checkbox{-webkit-appearance:none;appearance:none;outline:0;font-size:0;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:13px;height:13px;position:relative;vertical-align:0;top:2px}.weui-agree__checkbox:checked:before{font-family:weui;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-align:center;speak:none;display:inline-block;vertical-align:middle;text-decoration:inherit;content:"\EA08";color:#09bb07;font-size:13px;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-48%) scale(.73);transform:translate(-50%,-48%) scale(.73)}.weui-agree__checkbox:disabled{background-color:#e1e1e1}.weui-agree__checkbox:disabled:before{color:#adadad}.weui-loading{width:20px;height:20px;display:inline-block;vertical-align:middle;-webkit-animation:e 1s steps(12) infinite;animation:e 1s steps(12) infinite;background:transparent url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E9E9E9' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23989697' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%239B999A' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23A3A1A2' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23ABA9AA' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23B2B2B2' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23BAB8B9' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23C2C0C1' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23CBCBCB' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23D2D2D2' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23DADADA' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E2E2E2' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E") no-repeat;background-size:100%}.weui-btn_loading.weui-btn_primary .weui-loading,.weui-btn_loading.weui-btn_warn .weui-loading,.weui-loading.weui-loading_transparent{background-image:url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E")}@-webkit-keyframes e{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes e{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.weui-slider{padding:15px 18px;-webkit-user-select:none;user-select:none}.weui-slider__inner{position:relative;height:2px;background-color:#e9e9e9}.weui-slider__track{height:2px;background-color:#1aad19;width:0}.weui-slider__handler{position:absolute;left:0;top:50%;width:28px;height:28px;margin-left:-14px;margin-top:-14px;border-radius:50%;background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.2)}.weui-slider-box{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-slider-box .weui-slider{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-slider-box__value{margin-left:.5em;min-width:24px;color:#888;text-align:center;font-size:14px}
\ No newline at end of file
diff --git a/oauth/src/main/resources/templates/login.html b/oauth/src/main/resources/templates/login.html
index ac69dd1..f3ef3d6 100644
--- a/oauth/src/main/resources/templates/login.html
+++ b/oauth/src/main/resources/templates/login.html
@@ -6,74 +6,38 @@
     <meta name="_csrf" th:content="${_csrf.token}"/>
     <!-- default header name is X-CSRF-TOKEN -->
     <meta name="_csrf_header" th:content="${_csrf.headerName}"/>
+    <link rel="stylesheet" type="text/css" th:href="@{/static/css/weui.min.css}"/>
+    <link rel="stylesheet" type="text/css" th:href="@{/static/css/jquery-weui.css}"/>
 </head>
 <body>
-<div class="login-wrapper">
-    <div class=" login-body">
-        <div class="layui-card">
-            <div class="layui-card-header">
-                <i class="layui-icon layui-icon-engine"></i>&nbsp;&nbsp;统一身份认证
+<p style="color:red;padding: 0 0 10px 0;"
+   th:if="${session['SPRING_SECURITY_LAST_EXCEPTION']!=null and session['SPRING_SECURITY_LAST_EXCEPTION'].message!=null}"
+   th:text="${session['SPRING_SECURITY_LAST_EXCEPTION'].message}"></p>
+<form th:action="@{/login/form}" method="post">
+    <input type="hidden"
+           th:name="${_csrf.parameterName}"
+           th:value="${_csrf.token}"/>
+    <div class="weui-cells__title">统一身份认证</div>
+    <div class="weui-cells" style="margin-top:30%;">
+        <div class="weui-cell">
+            <div class="weui-cell__hd">
+                <label class="weui-label">账号</label>
             </div>
-            <div class="layui-card-body layui-form layui-form-pane">
-                <p style="color:red;padding: 0 0 10px 0;" th:if="${session['SPRING_SECURITY_LAST_EXCEPTION']!=null and session['SPRING_SECURITY_LAST_EXCEPTION'].message!=null}" th:text="${session['SPRING_SECURITY_LAST_EXCEPTION'].message}"></p>
-                <form th:action="@{/login/form}" method="post">
-                    <div class="layui-form-item">
-                        <label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
-                        <div class="layui-input-block">
-                            <input name="username" type="text" lay-verify="required" placeholder="账号"
-                                   class="layui-input">
-                            <input type="hidden"
-                                   th:name="${_csrf.parameterName}"
-                                   th:value="${_csrf.token}"/>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label"><i class="layui-icon layui-icon-password"></i></label>
-                        <div class="layui-input-block">
-                            <input name="password" type="password" lay-verify="required" placeholder="密码"
-                                   class="layui-input">
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
-                        <div class="layui-input-block">
-                            <div class="layui-row inline-block">
-                                <div class="layui-col-xs7">
-                                    <input name="verifyCodeActual" type="text" placeholder="验证码"
-                                           class="layui-input">
-                                </div>
-                                <div class="layui-col-xs5" style="padding-left: 10px;">
-                                    <img width="100px" height="35px" class="login-captcha" th:src="@{/code/image}">
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-form-item">
-                        <!--<a href="javascript:;" class="layui-link">帐号注册</a>-->
-                        <a href="javascript:;" class="layui-link pull-right">忘记密码?</a>
-                    </div>
-                    <div class="layui-form-item">
-                        <button type="submit" lay-filter="login-submit" class="layui-btn layui-btn-fluid" lay-submit>登 录</button>
-                    </div>
-                </form>
-                <!--<div class="layui-form-item login-other">-->
-                <!--<label>第三方登录</label>-->
-                <!--<a href="javascript:;"><i class="layui-icon layui-icon-login-qq"></i></a>-->
-                <!--<a href="javascript:;"><i class="layui-icon layui-icon-login-wechat"></i></a>-->
-                <!--<a href="javascript:;"><i class="layui-icon layui-icon-login-weibo"></i></a>-->
-                <!--</div>-->
+            <div class="weui-cell__bd">
+                <input class="weui-input" type="text" id="username" name="username" placeholder="学工号、手机号、邮箱">
             </div>
         </div>
-    </div>
+        <div class="weui-cell">
+            <div class="weui-cell__hd">
+                <label class="weui-label">密码</label>
+            </div>
+            <div class="weui-cell__bd">
+                <input class="weui-input" type="password" id="password" name="password" placeholder="请输入密码">
+            </div>
+        </div>
 
-    <div class="login-footer">
-        <p>© 2019 <a href="javascript:;" target="_blank">上海树维信息科技有限公司 版权所有</a></p>
-        <!--<p>-->
-        <!--<span><a href="javascript:;" target="_blank">前往github</a></span>-->
-        <!--<span><a href="https://gitee.com/andyzy/zy-admin.git" target="_blank">前往gitee</a></span>-->
-        <!--<span><a href="javascript:;" target="_blank">文档说明</a></span>-->
-        <!--</p>-->
     </div>
-</div>
+    <button type="submit" class="weui-btn weui-btn_plain-primary">登 录</button>
+</form>
 </body>
 </html>
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 1591191..5dc7de1 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -161,7 +161,6 @@
                         .antMatchers("/api/auth/**").permitAll()
                         .antMatchers("/api/notify/**").permitAll()
                         .antMatchers("/api/common/**").permitAll()
-                        .antMatchers("/api/userinfor").hasAnyRole("ADMIN", "THIRD_ADMIN")
                         .antMatchers("/api/consume/**").hasRole("THIRD_CONSUME")
                         .antMatchers("/api/recharge/**").hasRole("THIRD_DEPOSIT")
                         .antMatchers("/api/user/**").hasRole("THIRD_ADMIN")
@@ -296,7 +295,7 @@
                 http.apply(validateCodeSecurityConfig)
                         .and()
                         .authorizeRequests()
-                        .antMatchers("/login", "/login/form", "/mobileapi/**").permitAll()
+                        .antMatchers("/login", "/login/form", "/mobileapi/**","/userinfor").permitAll()
                         .antMatchers("/static/**").permitAll()
                         .antMatchers("/code/image").permitAll()
                         .antMatchers("/**").hasAnyRole("USER", "ADMIN")