`
@@ -0,0 +1,68 @@
|
|||||||
|
# Compiled class file
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Log file
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# BlueJ files
|
||||||
|
*.ctxt
|
||||||
|
|
||||||
|
# Mobile Tools for Java (J2ME)
|
||||||
|
.mtj.tmp/
|
||||||
|
|
||||||
|
# Package Files #
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.nar
|
||||||
|
*.ear
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.rar
|
||||||
|
|
||||||
|
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||||
|
hs_err_pid*
|
||||||
|
|
||||||
|
# Eclipse IDE #
|
||||||
|
/.settings/
|
||||||
|
/.classpath
|
||||||
|
/.project
|
||||||
|
/bin/
|
||||||
|
/tmp/
|
||||||
|
/target/
|
||||||
|
/.factorypath
|
||||||
|
/build/
|
||||||
|
|
||||||
|
# IntelliJ IDEA #
|
||||||
|
.idea/
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
/out/
|
||||||
|
|
||||||
|
# NetBeans IDE #
|
||||||
|
/nbproject/private/
|
||||||
|
/build/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
|
||||||
|
# VS Code #
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# Maven
|
||||||
|
log/
|
||||||
|
**/target/
|
||||||
|
|
||||||
|
# Gradle
|
||||||
|
.gradle
|
||||||
|
**/build/
|
||||||
|
|
||||||
|
# Other common build directories
|
||||||
|
out/
|
||||||
|
|
||||||
|
# macOS specific
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Windows specific
|
||||||
|
Thumbs.db
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
FROM nexus.172-26-10-182.nip.io:5000/openjdk-17:latest
|
||||||
|
|
||||||
|
ENV TZ=Asia/Seoul
|
||||||
|
|
||||||
|
RUN mkdir -p /apigw-app
|
||||||
|
|
||||||
|
WORKDIR /apigw-app
|
||||||
|
|
||||||
|
ADD ./US_API_GW.jar /apigw-app/US_API_GW.jar
|
||||||
|
|
||||||
|
RUN chmod +x /apigw-app/US_API_GW.jar
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
ENTRYPOINT java -jar US_API_GW.jar
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>2.7.12</version><!-- 이건 스프링부트 버전입니다 -->
|
||||||
|
<relativePath />
|
||||||
|
</parent>
|
||||||
|
<groupId>egov</groupId>
|
||||||
|
<artifactId>US_API_GW</artifactId>
|
||||||
|
<version>1.4.592</version>
|
||||||
|
<name>US_API_GW</name>
|
||||||
|
<description>MSA Sample Project</description>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>17</java.version>
|
||||||
|
<spring-cloud.version>2021.0.8</spring-cloud.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>mvn2s</id>
|
||||||
|
<url>https://repo1.maven.org/maven2/</url>
|
||||||
|
<releases>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</releases>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>egovframe</id>
|
||||||
|
<url>https://maven.egovframe.go.kr/maven/</url>
|
||||||
|
<releases>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</releases>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-logging</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-gateway</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-webflux</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-security</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-devtools</artifactId>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.egovframe.rte</groupId>
|
||||||
|
<artifactId>org.egovframe.rte.fdl.crypto</artifactId>
|
||||||
|
<version>4.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
|
<artifactId>jjwt-api</artifactId>
|
||||||
|
<version>0.12.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
|
<artifactId>jjwt-impl</artifactId>
|
||||||
|
<version>0.12.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
|
<artifactId>jjwt-jackson</artifactId>
|
||||||
|
<version>0.12.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.xml.bind</groupId>
|
||||||
|
<artifactId>jaxb-api</artifactId>
|
||||||
|
<version>2.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.28</version>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.junit.vintage</groupId>
|
||||||
|
<artifactId>junit-vintage-engine</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-dependencies</artifactId>
|
||||||
|
<version>${spring-cloud.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>US_API_GW</finalName>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package egovframework.msa.sample;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class GatewayServerApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(GatewayServerApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public WebClient.Builder webClientBuilder() {
|
||||||
|
return WebClient.builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,460 @@
|
|||||||
|
package egovframework.msa.sample.config;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import javax.crypto.SecretKey;
|
||||||
|
|
||||||
|
import org.egovframe.rte.fdl.cryptography.impl.ARIACipher;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.core.io.ClassPathResource;
|
||||||
|
import org.springframework.core.io.Resource;
|
||||||
|
import org.springframework.http.HttpCookie;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.util.MultiValueMap;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
import org.springframework.web.util.UriUtils;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
import io.jsonwebtoken.Claims;
|
||||||
|
import io.jsonwebtoken.ExpiredJwtException;
|
||||||
|
import io.jsonwebtoken.Jwts;
|
||||||
|
import io.jsonwebtoken.MalformedJwtException;
|
||||||
|
import io.jsonwebtoken.UnsupportedJwtException;
|
||||||
|
import io.jsonwebtoken.io.Decoders;
|
||||||
|
import io.jsonwebtoken.security.Keys;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@Getter
|
||||||
|
@Slf4j
|
||||||
|
public class GatewayJwtProvider {
|
||||||
|
|
||||||
|
private static final String CRYPTO_ALGORITHM = "SHA-256";
|
||||||
|
private static final String CRYPTO_SALT = "035e35d21d529f4dcbe998beb4367ed3";
|
||||||
|
private static final String ROLE_GRANTED = "O";
|
||||||
|
|
||||||
|
@Value("${token.accessSecret}")
|
||||||
|
private String accessSecret;
|
||||||
|
@Value("${token.refreshSecret}")
|
||||||
|
private String refreshSecret;
|
||||||
|
@Value("${token.accessExpiration}")
|
||||||
|
private String accessExpiration;
|
||||||
|
@Value("${token.refreshExpiration}")
|
||||||
|
private String refreshExpiration;
|
||||||
|
@Value("${json.role.path}")
|
||||||
|
private String roleJsonPath;
|
||||||
|
@Value("${json.statTarget.path}")
|
||||||
|
private String statTargetPath;
|
||||||
|
|
||||||
|
public SecretKey getSigningKey(String secret) {
|
||||||
|
byte[] keyBytes = Decoders.BASE64.decode(secret);
|
||||||
|
return Keys.hmacShaKeyFor(keyBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int accessValidateToken(String token) {
|
||||||
|
try {
|
||||||
|
accessExtractClaims(token);
|
||||||
|
return 200;
|
||||||
|
} catch (MalformedJwtException | UnsupportedJwtException | IllegalArgumentException e) {
|
||||||
|
log.error("GatewayJwtProvider.accessValidateToken Invalid Access Token: {}", token, e);
|
||||||
|
return 400;
|
||||||
|
} catch (ExpiredJwtException e) {
|
||||||
|
log.error("GatewayJwtProvider.accessValidateToken Expired Access Token: {}", token, e);
|
||||||
|
return 401;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int refreshValidateToken(String token) {
|
||||||
|
try {
|
||||||
|
refreshExtractClaims(token);
|
||||||
|
return 200;
|
||||||
|
} catch (MalformedJwtException | UnsupportedJwtException | IllegalArgumentException e) {
|
||||||
|
log.error("GatewayJwtProvider.refreshValidateToken Invalid Access Token: {}", token, e);
|
||||||
|
return 400;
|
||||||
|
} catch (ExpiredJwtException e) {
|
||||||
|
log.error("GatewayJwtProvider.refreshValidateToken Expired Access Token: {}", token, e);
|
||||||
|
return 401;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Claims accessExtractClaims(String token) {
|
||||||
|
SecretKey key = getSigningKey(this.accessSecret);
|
||||||
|
return Jwts.parser().verifyWith(key).build().parseSignedClaims(token).getPayload();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Claims refreshExtractClaims(String token) {
|
||||||
|
SecretKey key = getSigningKey(this.refreshSecret);
|
||||||
|
return Jwts.parser().verifyWith(key).build().parseSignedClaims(token).getPayload();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractUserId(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("userId")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("userId").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractUserNm(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("userNm")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("userNm").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractAuthId(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("authId")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("authId").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractAuthNm(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("authNm")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("authNm").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractDeptCd(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("deptCd")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("deptCd").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractDeptNm(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("deptNm")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("deptNm").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractParntsDeptCd(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("parntsDeptCd")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("parntsDeptCd").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractParntsDeptNm(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("parntsDeptNm")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("parntsDeptNm").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractParntsRealWorkDeptCd(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("parntsRealWorkDeptCd")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("parntsRealWorkDeptCd").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractRealWorkDeptCd(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("realWorkDeptCd")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("realWorkDeptCd").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractRealWorkDeptNm(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("realWorkDeptNm")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("realWorkDeptNm").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractWorkSttusCd(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("workSttusCd")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("workSttusCd").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractWorkSttusNm(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("workSttusNm")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("workSttusNm").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractUserSeCd(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("userSeCd")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("userSeCd").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractAuthPgrmList(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("authPgrmList")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("authPgrmList").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractDeptList(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("deptList")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("deptList").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractPswdChngDt(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("pswdChngDt")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(accessExtractClaims(token).get("pswdChngDt").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractLoginDt(String token) {
|
||||||
|
return ObjectUtils.isEmpty(accessExtractClaims(token).get("loginDt")) ?
|
||||||
|
"" : UriUtils.encode(accessExtractClaims(token).get("loginDt").toString(), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String refreshExtractPswdChngDt(String token) {
|
||||||
|
return ObjectUtils.isEmpty(refreshExtractClaims(token).get("pswdChngDt")) ?
|
||||||
|
"" : UriUtils.encode(refreshExtractClaims(token).get("pswdChngDt").toString(), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String refreshExtractAuthId(String token) {
|
||||||
|
return ObjectUtils.isEmpty(refreshExtractClaims(token).get("authId")) ?
|
||||||
|
"" : UriUtils.encode(decrypt(refreshExtractClaims(token).get("authId").toString()), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getUserAgent(ServerWebExchange exchange) {
|
||||||
|
|
||||||
|
String userAgent = exchange.getRequest().getHeaders().getFirst("User-Agent");
|
||||||
|
|
||||||
|
Map<String, String> parsedData = new HashMap<>();
|
||||||
|
parsedData.put("browser", "");
|
||||||
|
parsedData.put("version", "");
|
||||||
|
parsedData.put("os", "");
|
||||||
|
parsedData.put("device", "");
|
||||||
|
|
||||||
|
if (userAgent == null) {
|
||||||
|
return parsedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 브라우저와 버전을 추출
|
||||||
|
if (userAgent.contains("Firefox")) {
|
||||||
|
parsedData.put("browser", "Firefox");
|
||||||
|
String version = userAgent.substring(userAgent.indexOf("Firefox/") + "Firefox/".length()).split(" ")[0];
|
||||||
|
parsedData.put("version", version);
|
||||||
|
} else if (userAgent.contains("Chrome") && userAgent.contains("Safari")) {
|
||||||
|
parsedData.put("browser", "Chrome");
|
||||||
|
String version = userAgent.substring(userAgent.indexOf("Chrome/") + "Chrome/".length()).split(" ")[0];
|
||||||
|
parsedData.put("version", version);
|
||||||
|
} else if (userAgent.contains("Safari") && userAgent.contains("Version")) {
|
||||||
|
parsedData.put("browser", "Safari");
|
||||||
|
String version = userAgent.substring(userAgent.indexOf("Version/") + "Version/".length()).split(" ")[0];
|
||||||
|
parsedData.put("version", version);
|
||||||
|
} else if (userAgent.contains("MSIE")) {
|
||||||
|
parsedData.put("browser", "Internet Explorer");
|
||||||
|
String version = userAgent.substring(userAgent.indexOf("MSIE ") + "MSIE ".length()).split(" ")[0];
|
||||||
|
parsedData.put("version", version);
|
||||||
|
} else if (userAgent.contains("Trident")) {
|
||||||
|
parsedData.put("browser", "Internet Explorer");
|
||||||
|
String version = userAgent.substring(userAgent.indexOf("rv:") + "rv:".length()).split("\\)")[0];
|
||||||
|
parsedData.put("version", version);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 운영 체제를 추출
|
||||||
|
if (userAgent.contains("Windows NT")) {
|
||||||
|
String osVersion = userAgent.substring(userAgent.indexOf("Windows NT") + "Windows NT ".length()).split(";")[0];
|
||||||
|
parsedData.put("os", "Windows NT " + osVersion);
|
||||||
|
} else if (userAgent.contains("Mac OS X")) {
|
||||||
|
String osVersion = userAgent.substring(userAgent.indexOf("Mac OS X") + "Mac OS X ".length()).split("\\)")[0];
|
||||||
|
parsedData.put("os", "Mac OS X " + osVersion);
|
||||||
|
} else if (userAgent.contains("Linux")) {
|
||||||
|
parsedData.put("os", "Linux");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 장치 유형을 추출 (간단히 모바일과 데스크톱으로 구분)
|
||||||
|
if (userAgent.contains("Mobi") || userAgent.contains("Android")) {
|
||||||
|
parsedData.put("device", "MOB");
|
||||||
|
} else {
|
||||||
|
parsedData.put("device", "PC");
|
||||||
|
}
|
||||||
|
|
||||||
|
return parsedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentDate() {
|
||||||
|
Date date = new Date();
|
||||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
|
||||||
|
return dateFormat.format(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getClientIp() {
|
||||||
|
InetAddress address;
|
||||||
|
try {
|
||||||
|
address = InetAddress.getLocalHost();
|
||||||
|
return address.getHostAddress();
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
log.error("GatewayJwtProvider.getClientIp Client Ip Invalid", e);
|
||||||
|
return "0.0.0.0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String decrypt(String s) {
|
||||||
|
byte[] decryptBaseByte = Base64.getDecoder().decode(s);
|
||||||
|
ARIACipher cipher = new ARIACipher();
|
||||||
|
cipher.setPassword(CRYPTO_SALT);
|
||||||
|
byte[] decryptByte = cipher.decrypt(decryptBaseByte);
|
||||||
|
return new String(decryptByte, StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerHttpRequest headerSetting(ServerWebExchange exchange, String accessToken) {
|
||||||
|
return exchange.getRequest().mutate()
|
||||||
|
.headers(httpHeaders -> {
|
||||||
|
httpHeaders.set("X-CONECT-SE-CD", getUserAgent(exchange).get("device"));
|
||||||
|
httpHeaders.set("X-CONECT-DT", getCurrentDate());
|
||||||
|
httpHeaders.set("X-CONECT-IP", getClientIp());
|
||||||
|
httpHeaders.set("X-MAC-ADRS", "");
|
||||||
|
httpHeaders.set("X-USER-ID", extractUserId(accessToken));
|
||||||
|
httpHeaders.set("X-USER-NM", extractUserNm(accessToken));
|
||||||
|
httpHeaders.set("X-AUTH-ID", extractAuthId(accessToken));
|
||||||
|
httpHeaders.set("X-DEPT-CD", extractDeptCd(accessToken));
|
||||||
|
httpHeaders.set("X-PARNTS-DEPT-CD", extractParntsDeptCd(accessToken));
|
||||||
|
httpHeaders.set("X-PARNTS-REAL-WORK-DEPT-CD", extractParntsRealWorkDeptCd(accessToken));
|
||||||
|
httpHeaders.set("X-REAL-WORK-DEPT-CD", extractRealWorkDeptCd(accessToken));
|
||||||
|
httpHeaders.set("X-USER-SE-CD", extractUserSeCd(accessToken));
|
||||||
|
httpHeaders.set("X-AUTH-PGRM", extractAuthPgrmList(accessToken));
|
||||||
|
httpHeaders.set("X-DEPT-LIST", extractDeptList(accessToken));
|
||||||
|
})
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void expandedLogSetting(ServerWebExchange exchange, String accessToken) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.append("userIdLog=");
|
||||||
|
sb.append(UriUtils.decode(extractUserId(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",userNmLog=");
|
||||||
|
sb.append(UriUtils.decode(extractUserNm(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",authIdLog=");
|
||||||
|
sb.append(UriUtils.decode(extractAuthId(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",authNmLog=");
|
||||||
|
sb.append(UriUtils.decode(extractAuthNm(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",deptCdLog=");
|
||||||
|
sb.append(UriUtils.decode(extractRealWorkDeptCd(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",deptNmLog=");
|
||||||
|
sb.append(UriUtils.decode(extractRealWorkDeptNm(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",conectSeCdLog=");
|
||||||
|
sb.append(UriUtils.decode(getUserAgent(exchange).get("device"), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",conectDtLog=");
|
||||||
|
sb.append(UriUtils.decode(getCurrentDate(), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",conectIpLog=");
|
||||||
|
sb.append(UriUtils.decode(getClientIp(), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",parntsRealWorkDeptCdLog=");
|
||||||
|
sb.append(UriUtils.decode(extractParntsRealWorkDeptCd(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",realWorkDeptCdLog=");
|
||||||
|
sb.append(UriUtils.decode(extractRealWorkDeptCd(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",realWorkDeptNmLog=");
|
||||||
|
sb.append(UriUtils.decode(extractRealWorkDeptNm(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",workSttusCdLog=");
|
||||||
|
sb.append(UriUtils.decode(extractWorkSttusCd(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",workSttusNmLog=");
|
||||||
|
sb.append(UriUtils.decode(extractWorkSttusNm(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",loginDtLog=");
|
||||||
|
sb.append(UriUtils.decode(extractLoginDt(accessToken), StandardCharsets.UTF_8));
|
||||||
|
log.debug("AuthGatewayFilterFactory tokenInfo -- {}", sb);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void logSetting(ServerWebExchange exchange, String accessToken) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.append("userIdLog=");
|
||||||
|
sb.append(UriUtils.decode(extractUserId(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",userNmLog=");
|
||||||
|
sb.append(UriUtils.decode(extractUserNm(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",deptNmLog=");
|
||||||
|
sb.append(UriUtils.decode(extractRealWorkDeptNm(accessToken), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",conectSeCdLog=");
|
||||||
|
sb.append(UriUtils.decode(getUserAgent(exchange).get("device"), StandardCharsets.UTF_8));
|
||||||
|
sb.append(",conectDtLog=");
|
||||||
|
sb.append(UriUtils.decode(getCurrentDate(), StandardCharsets.UTF_8));
|
||||||
|
|
||||||
|
log.debug("AuthGatewayFilterFactory tokenInfo -- {}", sb);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCookie(ServerHttpRequest request, String coookieName) {
|
||||||
|
String cookieValue = "";
|
||||||
|
MultiValueMap<String, HttpCookie> cookies = request.getCookies();
|
||||||
|
HttpCookie sessionIdCookie = cookies.getFirst(coookieName);
|
||||||
|
if (sessionIdCookie != null) {
|
||||||
|
cookieValue = sessionIdCookie.getValue();
|
||||||
|
}
|
||||||
|
return cookieValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getJsonPgrmRoleList(String path, String authId) throws JsonProcessingException {
|
||||||
|
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
List<Map<String, String>> list;
|
||||||
|
|
||||||
|
Resource resource = new ClassPathResource(roleJsonPath);
|
||||||
|
if (!resource.exists()) {
|
||||||
|
log.error("BackGatewayFilterFactory classPath 경로가 잘못되었거나 경로에 파일이 존재하지 않습니다.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try (InputStream inputStream = resource.getInputStream()) {
|
||||||
|
list = objectMapper.readValue(inputStream, new TypeReference<List<Map<String, String>>>() {});
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("GatewayJwtProvider getJsonPgrmRoleList ERROR " + e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 특정 URL에 해당하는 항목 찾기
|
||||||
|
Optional<Map<String, String>> result = list.stream()
|
||||||
|
.filter(map -> path.equals(map.get("URL")))
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
// 결과 체크 및 authId 값 검사
|
||||||
|
if (result.isPresent()) {
|
||||||
|
Map<String, String> map = result.get();
|
||||||
|
String roleValue = map.get(authId);
|
||||||
|
log.debug(roleValue);
|
||||||
|
return ROLE_GRANTED.equals(roleValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getParntsDeptNm(String accessToken) {
|
||||||
|
if (ObjectUtils.isEmpty(accessToken)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String deptNm = "";
|
||||||
|
String extractedRealWorkDeptNm = extractRealWorkDeptNm(accessToken);
|
||||||
|
|
||||||
|
if (!ObjectUtils.isEmpty(extractedRealWorkDeptNm)) {
|
||||||
|
deptNm = UriUtils.decode(extractRealWorkDeptNm(accessToken), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
return extractBetween(deptNm, "서울특별시 ", " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String extractBetween(String input, String start, String end) {
|
||||||
|
String patternStr = Pattern.quote(start) + "(.*?)" + Pattern.quote(end);
|
||||||
|
Pattern pattern = Pattern.compile(patternStr);
|
||||||
|
Matcher matcher = pattern.matcher(input);
|
||||||
|
|
||||||
|
if (matcher.find()) {
|
||||||
|
return matcher.group(1);
|
||||||
|
} else { // // NOSONAR -- 공백이 없는 경우 문자열의 끝까지 추출
|
||||||
|
patternStr = Pattern.quote(start) + "(.*)";
|
||||||
|
pattern = Pattern.compile(patternStr);
|
||||||
|
matcher = pattern.matcher(input);
|
||||||
|
if (matcher.find()) {
|
||||||
|
return matcher.group(1);
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String generateHash(String data) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
try {
|
||||||
|
MessageDigest md = MessageDigest.getInstance(CRYPTO_ALGORITHM);
|
||||||
|
byte[] bytes = md.digest(data.getBytes(StandardCharsets.UTF_8));
|
||||||
|
for (byte b : bytes) {
|
||||||
|
sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
|
||||||
|
}
|
||||||
|
} catch (NoSuchAlgorithmException e) { // NOSONAR --
|
||||||
|
sb.setLength(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package egovframework.msa.sample.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.http.HttpMethod;
|
||||||
|
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
|
||||||
|
import org.springframework.security.config.web.server.ServerHttpSecurity;
|
||||||
|
import org.springframework.security.web.server.SecurityWebFilterChain;
|
||||||
|
import org.springframework.security.web.server.header.XFrameOptionsServerHttpHeadersWriter;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.cors.reactive.CorsWebFilter;
|
||||||
|
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableWebFluxSecurity
|
||||||
|
public class GatewaySecurityConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
|
||||||
|
http.csrf().disable()
|
||||||
|
.cors().and()
|
||||||
|
.formLogin().disable()
|
||||||
|
.httpBasic().disable()
|
||||||
|
.authorizeExchange()
|
||||||
|
.pathMatchers(HttpMethod.PUT, "/**").authenticated()
|
||||||
|
.pathMatchers(HttpMethod.DELETE, "/**").authenticated()
|
||||||
|
.pathMatchers(HttpMethod.PATCH, "/**").authenticated()
|
||||||
|
.pathMatchers(HttpMethod.HEAD, "/**").authenticated()
|
||||||
|
.pathMatchers(HttpMethod.OPTIONS, "/**").authenticated()
|
||||||
|
.pathMatchers(HttpMethod.TRACE, "/**").authenticated()
|
||||||
|
.anyExchange().permitAll().and()
|
||||||
|
.headers(headers -> headers.frameOptions(frameOptions -> frameOptions.mode(XFrameOptionsServerHttpHeadersWriter.Mode.SAMEORIGIN)));
|
||||||
|
return http.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public CorsWebFilter corsWebFilter() {
|
||||||
|
CorsConfiguration config = new CorsConfiguration();
|
||||||
|
config.setAllowCredentials(true);
|
||||||
|
// 내부망 및 외부망 도메인 허용
|
||||||
|
config.addAllowedOriginPattern("*");
|
||||||
|
config.addAllowedHeader("*");
|
||||||
|
config.addAllowedMethod("*");
|
||||||
|
|
||||||
|
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
||||||
|
source.registerCorsConfiguration("/**", config);
|
||||||
|
return new CorsWebFilter(source);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
package egovframework.msa.sample.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.Model;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
|
import egovframework.msa.sample.config.GatewayJwtProvider;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@Slf4j
|
||||||
|
public class GatewayController {
|
||||||
|
|
||||||
|
private static final String ACCESS_TOKEN = "at";
|
||||||
|
private static final String REFRESH_TOKEN = "rt";
|
||||||
|
|
||||||
|
private final GatewayJwtProvider gatewayJwtProvider;
|
||||||
|
|
||||||
|
public GatewayController(GatewayJwtProvider gatewayJwtProvider) {
|
||||||
|
this.gatewayJwtProvider = gatewayJwtProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/ercs-main")
|
||||||
|
public String getErcsMain(ServerHttpRequest request, ServerHttpResponse response, Model model) {
|
||||||
|
|
||||||
|
boolean isMobi = isMobile(request);
|
||||||
|
|
||||||
|
model.addAttribute("isMobi", isMobi);
|
||||||
|
|
||||||
|
return "ercs/ercsMain";
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/menu.do")
|
||||||
|
public String getErcsMenu(ServerHttpRequest request, ServerHttpResponse resopnse, Model model) {
|
||||||
|
|
||||||
|
boolean isMobi = isMobile(request);
|
||||||
|
model.addAttribute("isMobi", isMobi);
|
||||||
|
return "ercs/menu";
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/header.do")
|
||||||
|
public String getErcsHeader() {
|
||||||
|
return "ercs/header";
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/")
|
||||||
|
public String index(ServerHttpRequest request, ServerHttpResponse response, Model model) {
|
||||||
|
|
||||||
|
boolean isMobi = isMobile(request);
|
||||||
|
//String redirectLoginUrl = isMobi ? "/auth/mobLogin.do" : "/auth/login.do";
|
||||||
|
|
||||||
|
String accessToken = gatewayJwtProvider.getCookie(request, ACCESS_TOKEN);
|
||||||
|
String refreshToken = gatewayJwtProvider.getCookie(request, REFRESH_TOKEN);
|
||||||
|
|
||||||
|
// 엑세스토큰이 있는 경우
|
||||||
|
if (!ObjectUtils.isEmpty(accessToken)) {
|
||||||
|
String pswdChngDt = gatewayJwtProvider.extractPswdChngDt(accessToken);
|
||||||
|
log.debug("GatewayController pswdChngDt = {}", pswdChngDt);
|
||||||
|
if (ObjectUtils.isEmpty(pswdChngDt)) {
|
||||||
|
String refreshPswdChngDt = gatewayJwtProvider.refreshExtractPswdChngDt(refreshToken);
|
||||||
|
log.debug("GatewayController pswdChngDt = {}", refreshPswdChngDt);
|
||||||
|
if (ObjectUtils.isEmpty(refreshPswdChngDt)) {
|
||||||
|
model.addAttribute("loginErrorMsg", "비정상적인 접근입니다. 비밀번호를 변경해주세요.");
|
||||||
|
}
|
||||||
|
return "redirect:/auth/pswdChange.do";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 액세스토큰이 없는 경우
|
||||||
|
} else {
|
||||||
|
// refreshToken도 없음
|
||||||
|
if (ObjectUtils.isEmpty(refreshToken)) {
|
||||||
|
return "redirect:/auth/login.do";
|
||||||
|
} else { // refreshToken 있음
|
||||||
|
String pswdChngDt = gatewayJwtProvider.refreshExtractPswdChngDt(refreshToken);
|
||||||
|
if (ObjectUtils.isEmpty(pswdChngDt)) {
|
||||||
|
model.addAttribute("loginErrorMsg", "비정상적인 접근입니다. 비밀번호를 변경해주세요.");
|
||||||
|
return "redirect:/auth/pswdChange.do";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
model.addAttribute("isMobi", isMobi);
|
||||||
|
|
||||||
|
return "index";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isMobile(ServerHttpRequest request) {
|
||||||
|
List<String> userAgent = request.getHeaders().get("User-Agent");
|
||||||
|
String userAgentString = "";
|
||||||
|
|
||||||
|
if (ObjectUtils.isEmpty(userAgent)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
userAgentString = userAgent.toString().toUpperCase(Locale.ENGLISH);;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userAgentString.indexOf("MOBI") > -1) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/error")
|
||||||
|
public String error(@RequestParam String url, @RequestParam String status, Model model) {
|
||||||
|
log.debug("GatewayController error url >>> {}", url);
|
||||||
|
log.debug("GatewayController error status >>> {}", status);
|
||||||
|
model.addAttribute("url", url);
|
||||||
|
model.addAttribute("status", status);
|
||||||
|
return "error";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/captcha")
|
||||||
|
public String captcha(@RequestParam(required = false, defaultValue = "") String pod, Model model) {
|
||||||
|
log.debug("capcha");
|
||||||
|
model.addAttribute("pod", pod);
|
||||||
|
return "captcha";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,273 @@
|
|||||||
|
package egovframework.msa.sample.filter;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||||
|
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
|
||||||
|
import org.springframework.core.io.buffer.DataBuffer;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseCookie;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
import org.springframework.web.util.UriUtils;
|
||||||
|
|
||||||
|
import egovframework.msa.sample.config.GatewayJwtProvider;
|
||||||
|
import egovframework.msa.sample.token.GatewayToken;
|
||||||
|
import egovframework.msa.sample.token.GatewayTokenService;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class AuthGatewayFilterFactory extends AbstractGatewayFilterFactory<AuthGatewayFilterFactory.Config> {
|
||||||
|
|
||||||
|
@Value("${auth.host}")
|
||||||
|
private String authHost;
|
||||||
|
|
||||||
|
private final WebClient.Builder webClientBuilder;
|
||||||
|
private final GatewayJwtProvider gatewayJwtProvider;
|
||||||
|
private final GatewayTokenService gatewayTokenService;
|
||||||
|
private String accessToken;
|
||||||
|
private String refreshToken;
|
||||||
|
|
||||||
|
public AuthGatewayFilterFactory(WebClient.Builder webClientBuilder, GatewayJwtProvider gatewayJwtProvider, GatewayTokenService gatewayTokenService) {
|
||||||
|
super(Config.class);
|
||||||
|
this.webClientBuilder = webClientBuilder;
|
||||||
|
this.gatewayJwtProvider = gatewayJwtProvider;
|
||||||
|
this.gatewayTokenService = gatewayTokenService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AuthGatewayFilter 시작
|
||||||
|
* application.yml 에 route filter를 적용한 url은 모두 해당 필터에 걸림
|
||||||
|
*
|
||||||
|
* 토큰 검증 흐름
|
||||||
|
* 1. AccessToken Null 체크
|
||||||
|
* 2. RefreshToken Null 체크
|
||||||
|
* 3. AccessToken 검증
|
||||||
|
* 4. RefreshToken 검증
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public GatewayFilter apply(Config config) {
|
||||||
|
|
||||||
|
return (exchange, chain) -> {
|
||||||
|
|
||||||
|
String path = exchange.getRequest().getURI().getPath();
|
||||||
|
|
||||||
|
// 특정 경로 필터링 예외 처리
|
||||||
|
if (path.contains("/bsi_ui/com") || path.contains("/bsi_ui/css") || path.contains("/bsi_ui/js") || path.contains("/bsi_ui/fonts")
|
||||||
|
|| path.contains("/bsi_ui/img") || path.contains("/adi_ui/com") || path.contains("/adi_ui/images")
|
||||||
|
|| path.contains("/gis_ui/img") || path.contains("/gis_ui/js") || path.contains("/gis_ui/css")
|
||||||
|
|| path.contains("/dsr_ui/css") || path.contains("/dsr_ui/fonts")
|
||||||
|
|| path.contains("/dsr_ui/gis") || path.contains("/dsr_ui/img") || path.contains("/dsr_ui/js")
|
||||||
|
|| path.contains("/dsr_ui/kendo") || path.contains("/opt_ui/js") || path.contains("/opt_ui/img")
|
||||||
|
|| path.contains("/opt_ui/*.svg") || path.contains("/opt_ui/favicon.ico") || path.contains("/adi/images")
|
||||||
|
|| path.contains("/dictionary.json") || path.contains(".svg")) {
|
||||||
|
return chain.filter(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 쿠키에서 accessToken, refreshToken 가져오기
|
||||||
|
accessToken = gatewayJwtProvider.getCookie(exchange.getRequest(), "at");
|
||||||
|
refreshToken = gatewayJwtProvider.getCookie(exchange.getRequest(), "rt");
|
||||||
|
|
||||||
|
if (ObjectUtils.isEmpty(accessToken)) { // 1. AccessToken 이 없을 경우
|
||||||
|
|
||||||
|
if (ObjectUtils.isEmpty(refreshToken)) { // 1.1 RefreshToken 도 없으면 401 에러
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1.2 RefreshToken 로컬 검증 (형식, 만료여부 등)
|
||||||
|
if (gatewayJwtProvider.refreshValidateToken(refreshToken) == 400 || gatewayJwtProvider.refreshValidateToken(refreshToken) == 401) {
|
||||||
|
// 1.2.1 refreshToken 로컬 검증 유효하지 않으면 401 에러
|
||||||
|
return onError(exchange);
|
||||||
|
} else { // NOSONAR
|
||||||
|
|
||||||
|
// 1.2.2 refreshToken 로컬 검증 유효하면 서버 검증
|
||||||
|
String refreshTokenValidateUrl = authHost + "/auth/validateRefreshToken.do";
|
||||||
|
String tokenRecreateUrl = authHost + "/auth/recreateToken.do";
|
||||||
|
|
||||||
|
return webClientBuilder.build().get()
|
||||||
|
.uri(refreshTokenValidateUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(Boolean.class)
|
||||||
|
.flatMap(isValid -> { // 1.2.2.1 refreshToken 서버 검증
|
||||||
|
|
||||||
|
if (Boolean.TRUE.equals(isValid)) { // 1.2.2.1.1 refreshToken 서버 검증 성공 시 accessToken 재발급
|
||||||
|
return webClientBuilder.build().post()
|
||||||
|
.uri(tokenRecreateUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(Map.class)
|
||||||
|
.flatMap(response -> {
|
||||||
|
String newAt = (String) response.get("at");
|
||||||
|
String newRt = (String) response.get("rt");
|
||||||
|
|
||||||
|
// 쿠키에 accessToken 추가
|
||||||
|
ResponseCookie accessTokenCookie = ResponseCookie.from("at", newAt)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getAccessExpiration())) / 1000 + 10)
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(accessTokenCookie);
|
||||||
|
|
||||||
|
// refreshToken 도 있으면 refreshToken 도 쿠키에 추가
|
||||||
|
if (!ObjectUtils.isEmpty(newRt)) {
|
||||||
|
log.debug("시스템관리자는 리프레시토큰 쿠키에 추가 됨 {}", newRt);
|
||||||
|
|
||||||
|
ResponseCookie refreshTokenCookie = ResponseCookie.from("rt", newRt)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getRefreshExpiration())) / 1000 + 10)
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(refreshTokenCookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 여기서 헤더 셋팅
|
||||||
|
gatewayJwtProvider.logSetting(exchange, newAt);
|
||||||
|
ServerHttpRequest request = gatewayJwtProvider.headerSetting(exchange, newAt);
|
||||||
|
|
||||||
|
//return chain.filter(exchange);
|
||||||
|
return chain.filter(exchange.mutate().request(request).build());
|
||||||
|
});
|
||||||
|
} else { // 1.2.2.1.2 refreshToken 서버 검증 실패 401 에러
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. AcessToken 이 유효하지 않은 경우 (형식, 키, 만료여부 등)
|
||||||
|
if (gatewayJwtProvider.accessValidateToken(accessToken) == 400 || gatewayJwtProvider.accessValidateToken(accessToken) == 401) { // NOSONAR
|
||||||
|
// 2.1 RefreshToken null 체크
|
||||||
|
if (ObjectUtils.isEmpty(refreshToken)) {
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.2 RefreshToken 로컬 검증 (형식, 키, 만료여부 등)
|
||||||
|
if (gatewayJwtProvider.refreshValidateToken(refreshToken) == 400 || gatewayJwtProvider.refreshValidateToken(refreshToken) == 401) {
|
||||||
|
// 2.2.1 RefreshToken 로컬 검증 실패시
|
||||||
|
return onError(exchange);
|
||||||
|
|
||||||
|
} else { // 2.2.2 RefreshToken 로컬 검증 성공시
|
||||||
|
|
||||||
|
String refreshTokenValidateUrl = authHost + "/auth/validateRefreshToken.do";
|
||||||
|
String tokenRecreateUrl = authHost + "/auth/recreateToken.do";
|
||||||
|
|
||||||
|
return webClientBuilder.build().get()
|
||||||
|
.uri(refreshTokenValidateUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(Boolean.class)
|
||||||
|
.flatMap(isValid -> { // 2.2.2.1 refreshToken 서버 검증
|
||||||
|
|
||||||
|
if (Boolean.TRUE.equals(isValid)) { // 2.2.2.1.1 refreshToken 서버 검증 성공 시 accessToken 재발급
|
||||||
|
return webClientBuilder.build().post()
|
||||||
|
.uri(tokenRecreateUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(Map.class)
|
||||||
|
.flatMap(response -> {
|
||||||
|
String newAt = (String) response.get("at");
|
||||||
|
String newRt = (String) response.get("rt");
|
||||||
|
|
||||||
|
// 쿠키에 accessToken 추가
|
||||||
|
ResponseCookie accessTokenCookie = ResponseCookie.from("at", newAt)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getAccessExpiration())) / 1000 + 10)
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(accessTokenCookie);
|
||||||
|
|
||||||
|
// refreshToken 도 있으면 refreshToken 도 쿠키에 추가
|
||||||
|
if (!ObjectUtils.isEmpty(newRt)) { // NOSONAR
|
||||||
|
log.debug("시스템관리자는 리프레시토큰 쿠키에 추가 됨 {}", newRt);
|
||||||
|
ResponseCookie refreshTokenCookie = ResponseCookie.from("rt", newRt)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getRefreshExpiration())) / 1000 + 10)
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(refreshTokenCookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 여기서 헤더 셋팅
|
||||||
|
gatewayJwtProvider.logSetting(exchange, newAt);
|
||||||
|
ServerHttpRequest request = gatewayJwtProvider.headerSetting(exchange, newAt);
|
||||||
|
|
||||||
|
//return chain.filter(exchange);
|
||||||
|
return chain.filter(exchange.mutate().request(request).build());
|
||||||
|
});
|
||||||
|
} else { // 2.2.2.1.2 refreshToken 서버 검증 실패 시 401 에러
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else { // 3. AccessToken 이 유효한 경우 사용자 정보 추출 및 토큰 검증
|
||||||
|
String username = UriUtils.decode(gatewayJwtProvider.extractUserId(accessToken), StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
GatewayToken gatewayToken = gatewayTokenService.findToken(username);
|
||||||
|
if (gatewayToken == null) {
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3.1 RefreshToken 일치 여부 확인
|
||||||
|
if (refreshToken.equals(gatewayToken.getRefreshToken())) { // 3.1.1 클라이언트 쿠키속 refreshToken 과 일치하면 사용자 정보 추출 및 헤더 셋팅
|
||||||
|
gatewayJwtProvider.logSetting(exchange, accessToken);
|
||||||
|
ServerHttpRequest request = gatewayJwtProvider.headerSetting(exchange, accessToken);
|
||||||
|
return chain.filter(exchange.mutate().request(request).build());
|
||||||
|
} else { // 3.1.2 클라이언트 쿠키속 refreshToken 과 일치하지 않으면 401 에러
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class Config {}
|
||||||
|
|
||||||
|
private static Mono<Void> onError(ServerWebExchange exchange) {
|
||||||
|
ServerHttpResponse response = exchange.getResponse();
|
||||||
|
response.setStatusCode(HttpStatus.UNAUTHORIZED);
|
||||||
|
|
||||||
|
// accessToken 쿠키 삭제
|
||||||
|
ResponseCookie deleteAccessTokenCookie = ResponseCookie.from("at", "")
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge(0) // 쿠키 즉시 삭제
|
||||||
|
.build();
|
||||||
|
response.addCookie(deleteAccessTokenCookie);
|
||||||
|
|
||||||
|
// refreshToken 쿠키 삭제
|
||||||
|
ResponseCookie deleteRefreshTokenCookie = ResponseCookie.from("rt", "")
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge(0) // 쿠키 즉시 삭제
|
||||||
|
.build();
|
||||||
|
response.addCookie(deleteRefreshTokenCookie);
|
||||||
|
|
||||||
|
DataBuffer buffer = response.bufferFactory().wrap("The requested token is invalid.".getBytes(StandardCharsets.UTF_8));
|
||||||
|
return response.writeWith(Mono.just(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isLocalhost(ServerHttpRequest request) {
|
||||||
|
String host = request.getURI().getHost();
|
||||||
|
return "localhost".equals(host);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,295 @@
|
|||||||
|
package egovframework.msa.sample.filter;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||||
|
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
|
||||||
|
import org.springframework.core.io.buffer.DataBuffer;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseCookie;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
import org.springframework.web.util.UriUtils;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
|
||||||
|
import egovframework.msa.sample.config.GatewayJwtProvider;
|
||||||
|
import egovframework.msa.sample.token.GatewayToken;
|
||||||
|
import egovframework.msa.sample.token.GatewayTokenService;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class BackGatewayFilterFactory extends AbstractGatewayFilterFactory<BackGatewayFilterFactory.Config> {
|
||||||
|
|
||||||
|
@Value("${auth.host}")
|
||||||
|
private String authHost;
|
||||||
|
|
||||||
|
private final WebClient.Builder webClientBuilder;
|
||||||
|
private final GatewayJwtProvider gatewayJwtProvider;
|
||||||
|
private final GatewayTokenService gatewayTokenService;
|
||||||
|
private String accessToken;
|
||||||
|
private String refreshToken;
|
||||||
|
|
||||||
|
public BackGatewayFilterFactory(WebClient.Builder webClientBuilder, GatewayJwtProvider gatewayJwtProvider, GatewayTokenService gatewayTokenService) {
|
||||||
|
super(Config.class);
|
||||||
|
this.webClientBuilder = webClientBuilder;
|
||||||
|
this.gatewayJwtProvider = gatewayJwtProvider;
|
||||||
|
this.gatewayTokenService = gatewayTokenService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class Config {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BackGatewayFilter 시작
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public GatewayFilter apply(Config config) {
|
||||||
|
log.debug("BackGatewayFilterFactory Filter Start");
|
||||||
|
|
||||||
|
return (exchange, chain) -> {
|
||||||
|
String path = exchange.getRequest().getURI().getPath();
|
||||||
|
|
||||||
|
if (path.endsWith("/health") || path.endsWith("/info") || path.contains("/bsi/files/downloadNotice.do") ||
|
||||||
|
path.contains("/bsi/stats/insertMenuStats.do") || path.contains("/dsr_ui/css") || path.contains("/dsr_ui/fonts")
|
||||||
|
|| path.contains(".svg")) {
|
||||||
|
return chain.filter(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 쿠키에서 accessToken, refreshToken 가져오기
|
||||||
|
accessToken = gatewayJwtProvider.getCookie(exchange.getRequest(), "at");
|
||||||
|
refreshToken = gatewayJwtProvider.getCookie(exchange.getRequest(), "rt");
|
||||||
|
|
||||||
|
if (ObjectUtils.isEmpty(accessToken)) { // NOSONAR -- 1. AccessToken 이 없을 경우
|
||||||
|
log.debug("AuthGatewayFilterFactory accessToken null...");
|
||||||
|
|
||||||
|
if (ObjectUtils.isEmpty(refreshToken)) { // 1.1 RefreshToken 도 없으면 401 에러
|
||||||
|
log.debug("AuthGatewayFilterFactory refreshToken null...");
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1.2 RefreshToken 로컬 검증 (형식, 만료여부 등)
|
||||||
|
if (gatewayJwtProvider.refreshValidateToken(refreshToken) == 400 || gatewayJwtProvider.refreshValidateToken(refreshToken) == 401) { // NOSONAR --
|
||||||
|
// 1.2.1 refreshToken 로컬 검증 유효하지 않으면 401 에러
|
||||||
|
log.debug("AuthGatewayFilterFactory refreshToken local invalid...");
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
} else { // NOSONAR
|
||||||
|
log.debug("AuthGatewayFilterFactory refreshToken local validate SUCCESS");
|
||||||
|
|
||||||
|
// 1.2.2 refreshToken 로컬 검증 유효하면 서버 검증
|
||||||
|
String refreshTokenValidateUrl = authHost + "/auth/validateRefreshToken.do";
|
||||||
|
String tokenRecreateUrl = authHost + "/auth/recreateToken.do";
|
||||||
|
|
||||||
|
return webClientBuilder.build().get()
|
||||||
|
.uri(refreshTokenValidateUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(Boolean.class)
|
||||||
|
.flatMap(isValid -> { // 1.2.2.1 refreshToken 서버 검증
|
||||||
|
log.debug("AuthGatewayFilterFactory refreshToken server validate isValid >>> {}", isValid);
|
||||||
|
|
||||||
|
if (Boolean.TRUE.equals(isValid)) { // NOSONAR -- 1.2.2.1.1 refreshToken 서버 검증 성공 시 accessToken 재발급
|
||||||
|
return webClientBuilder.build().post()
|
||||||
|
.uri(tokenRecreateUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(Map.class)
|
||||||
|
.flatMap(response -> {
|
||||||
|
String newAt = (String) response.get("at");
|
||||||
|
String newRt = (String) response.get("rt");
|
||||||
|
// 쿠키에 accessToken 추가
|
||||||
|
ResponseCookie accessTokenCookie = ResponseCookie.from("at", newAt)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getAccessExpiration())) / 1000 + 10)
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(accessTokenCookie);
|
||||||
|
// refreshToken 도 있으면 refreshToken 도 쿠키에 추가
|
||||||
|
if (!ObjectUtils.isEmpty(newRt)) { // NOSONAR -- 리팩토리 예정
|
||||||
|
log.debug("시스템관리자는 리프레시토큰 쿠키에 추가 됨 {}", newRt);
|
||||||
|
ResponseCookie refreshTokenCookie = ResponseCookie.from("rt", newRt)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getRefreshExpiration())) / 1000 + 10)
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(refreshTokenCookie);
|
||||||
|
}
|
||||||
|
String tokenAuthId = gatewayJwtProvider.extractAuthId(newAt);
|
||||||
|
boolean hasPermission = checkPermission(path, tokenAuthId);
|
||||||
|
if (!hasPermission) {
|
||||||
|
log.debug("권한 없는 사용자 접근 발생 -- 403 에러 반환");
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 여기서 헤더 셋팅
|
||||||
|
//gatewayJwtProvider.logSetting(exchange, token);
|
||||||
|
ServerHttpRequest request = gatewayJwtProvider.headerSetting(exchange, newAt);
|
||||||
|
|
||||||
|
return chain.filter(exchange.mutate().request(request).build());
|
||||||
|
});
|
||||||
|
} else { // 1.2.2.1.2 refreshToken 서버 검증 실패 401 에러
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. AcessToken 이 유효하지 않은 경우 (형식, 키, 만료여부 등)
|
||||||
|
if (gatewayJwtProvider.accessValidateToken(accessToken) == 400 || gatewayJwtProvider.accessValidateToken(accessToken) == 401) { // NOSONAR
|
||||||
|
log.debug("AuthGatewayFilterFactory accessToken invalid...");
|
||||||
|
|
||||||
|
// 2.1 RefreshToken null 체크
|
||||||
|
if (ObjectUtils.isEmpty(refreshToken)) {
|
||||||
|
log.debug("AuthGatewayFilterFactory refreshToken null...");
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.2 RefreshToken 로컬 검증 (형식, 키, 만료여부 등)
|
||||||
|
if (gatewayJwtProvider.refreshValidateToken(refreshToken) == 400 || gatewayJwtProvider.refreshValidateToken(refreshToken) == 401) {
|
||||||
|
log.debug("AuthGatewayFilterFactory refreshToken local invalid..."); // 2.2.1 RefreshToken 로컬 검증 실패시
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
|
||||||
|
} else { // 2.2.2 RefreshToken 로컬 검증 성공시
|
||||||
|
|
||||||
|
log.debug("AuthGatewayFilterFactory refreshToken local validate SUCCESS");
|
||||||
|
|
||||||
|
String refreshTokenValidateUrl = authHost + "/auth/validateRefreshToken.do";
|
||||||
|
String tokenRecreateUrl = authHost + "/auth/recreateToken.do";
|
||||||
|
|
||||||
|
return webClientBuilder.build().get()
|
||||||
|
.uri(refreshTokenValidateUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(Boolean.class)
|
||||||
|
.flatMap(isValid -> { // 2.2.2.1 refreshToken 서버 검증
|
||||||
|
log.debug("AuthGatewayFilterFactory refresh accessToken isvalid >>> {}", isValid);
|
||||||
|
|
||||||
|
if (Boolean.TRUE.equals(isValid)) { // 2.2.2.1.1 refreshToken 서버 검증 성공 시 accessToken 재발급
|
||||||
|
return webClientBuilder.build().post()
|
||||||
|
.uri(tokenRecreateUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(Map.class)
|
||||||
|
.flatMap(response -> {
|
||||||
|
String newAt = (String) response.get("at");
|
||||||
|
String newRt = (String) response.get("rt");
|
||||||
|
|
||||||
|
// 쿠키에 accessToken 추가
|
||||||
|
ResponseCookie accessTokenCookie = ResponseCookie.from("at", newAt)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getAccessExpiration())) / 1000 + 10)
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(accessTokenCookie);
|
||||||
|
|
||||||
|
// refreshToken 도 있으면 refreshToken 도 쿠키에 추가
|
||||||
|
if (!ObjectUtils.isEmpty(newRt)) { // NOSONAR -- 리팩토리 예정
|
||||||
|
log.debug("시스템관리자는 리프레시토큰 쿠키에 추가 됨 {}", newRt);
|
||||||
|
ResponseCookie refreshTokenCookie = ResponseCookie.from("rt", newRt)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getRefreshExpiration())) / 1000 + 10)
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(refreshTokenCookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
String tokenAuthId = gatewayJwtProvider.extractAuthId(newAt);
|
||||||
|
boolean hasPermission = checkPermission(path, tokenAuthId);
|
||||||
|
if (!hasPermission) {
|
||||||
|
log.debug("권한 없는 사용자 접근 발생 -- 403 에러 반환");
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 여기서 헤더 셋팅
|
||||||
|
//gatewayJwtProvider.logSetting(exchange, token);
|
||||||
|
ServerHttpRequest request = gatewayJwtProvider.headerSetting(exchange, newAt);
|
||||||
|
|
||||||
|
return chain.filter(exchange.mutate().request(request).build());
|
||||||
|
});
|
||||||
|
} else { // 2.2.2.1.2 refreshToken 서버 검증 실패 시 401 에러
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else { // 3. AccessToken 이 유효한 경우 사용자 정보 추출 및 토큰 검증
|
||||||
|
String username = UriUtils.decode(gatewayJwtProvider.extractUserId(accessToken), StandardCharsets.UTF_8);
|
||||||
|
String tokenAuthId = gatewayJwtProvider.extractAuthId(accessToken);
|
||||||
|
log.debug("AuthGatewayFilterFactory username >>> {}", username);
|
||||||
|
log.debug("AuthGatewayFilterFactory tokenAuthId >>> {}", tokenAuthId);
|
||||||
|
|
||||||
|
GatewayToken gatewayToken = gatewayTokenService.findToken(username);
|
||||||
|
if (gatewayToken == null) {
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean hasPermission = checkPermission(path, tokenAuthId);
|
||||||
|
if (!hasPermission) {
|
||||||
|
log.debug("권한 없는 사용자 접근 발생 -- 403 에러 반환");
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3.1 RefreshToken 일치 여부 확인
|
||||||
|
if (refreshToken.equals(gatewayToken.getRefreshToken())) { // 3.1.1 클라이언트 쿠키속 refreshToken 과 일치하면 사용자 정보 추출 및 헤더 셋팅
|
||||||
|
//gatewayJwtProvider.logSetting(exchange, accessToken);
|
||||||
|
ServerHttpRequest request = gatewayJwtProvider.headerSetting(exchange, accessToken);
|
||||||
|
log.debug("AuthGatewayFilterFactory headerSetting Complete >>>>>>> {}", request);
|
||||||
|
return chain.filter(exchange.mutate().request(request).build());
|
||||||
|
} else { // 3.1.2 클라이언트 쿠키속 refreshToken 과 일치하지 않으면 401 에러
|
||||||
|
return onError(exchange.getResponse());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : onError
|
||||||
|
* @author : wb_10_park1
|
||||||
|
* @date : 2024.11.11
|
||||||
|
* @description : 403 에러 반환 메서드
|
||||||
|
* @param response
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static Mono<Void> onError(ServerHttpResponse response) {
|
||||||
|
response.setStatusCode(HttpStatus.FORBIDDEN);
|
||||||
|
response.getHeaders().setContentType(MediaType.TEXT_PLAIN);
|
||||||
|
response.getHeaders().add("Content-Type", "text/plain; charset=UTF-8");
|
||||||
|
|
||||||
|
DataBuffer buffer = response.bufferFactory().wrap("NOT ALLOWED -- You are sending a wrong and dangerous request or you do not have access..".getBytes(StandardCharsets.UTF_8));
|
||||||
|
return response.writeWith(Mono.just(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isLocalhost(ServerHttpRequest request) {
|
||||||
|
String host = request.getURI().getHost();
|
||||||
|
return "localhost".equals(host);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean checkPermission(String path, String authId) {
|
||||||
|
boolean hasPermission;
|
||||||
|
try {
|
||||||
|
hasPermission = gatewayJwtProvider.getJsonPgrmRoleList(path, authId);
|
||||||
|
log.debug("checkPermission hasPermission 결과 ===== {} : {} : {}", path, authId, hasPermission);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
log.debug("checkPermission JsonPrecessingException == > ", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return hasPermission;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,255 @@
|
|||||||
|
package egovframework.msa.sample.filter;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||||
|
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
|
||||||
|
import org.springframework.core.io.buffer.DataBuffer;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseCookie;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
|
||||||
|
import egovframework.msa.sample.config.GatewayJwtProvider;
|
||||||
|
import egovframework.msa.sample.token.GatewayToken;
|
||||||
|
import egovframework.msa.sample.token.GatewayTokenService;
|
||||||
|
import lombok.Data;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class FrontGatewayFilterFactory extends AbstractGatewayFilterFactory<FrontGatewayFilterFactory.Config> {
|
||||||
|
|
||||||
|
@Value("${auth.host}")
|
||||||
|
private String authHost;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class Config {}
|
||||||
|
|
||||||
|
private final WebClient.Builder webClientBuilder;
|
||||||
|
private final GatewayJwtProvider gatewayJwtProvider;
|
||||||
|
private final GatewayTokenService gatewayTokenService;
|
||||||
|
private String accessToken;
|
||||||
|
private String refreshToken;
|
||||||
|
|
||||||
|
public FrontGatewayFilterFactory(WebClient.Builder webClientBuilder, GatewayJwtProvider gatewayJwtProvider, GatewayTokenService gatewayTokenService) {
|
||||||
|
super(Config.class);
|
||||||
|
this.webClientBuilder = webClientBuilder;
|
||||||
|
this.gatewayJwtProvider = gatewayJwtProvider;
|
||||||
|
this.gatewayTokenService = gatewayTokenService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @methodName : apply
|
||||||
|
* @author : wb_10_park1
|
||||||
|
* @date : 2024.08.22
|
||||||
|
* @description : 게이트웨이 프론트엔드 필터 적용 메서드
|
||||||
|
* @param exchange
|
||||||
|
* @return
|
||||||
|
*
|
||||||
|
* 액세스 토큰을 검증하고, 레디스 서버에서 refreshToken 을 검증한다.
|
||||||
|
*
|
||||||
|
* 1. AccessToken 이 null 인경우
|
||||||
|
* 2. AccessToken 이 유효하지 않은 경우 (형식, 키, 만료여부 등)
|
||||||
|
* 3. AccessToken 이 유효한 경우
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public GatewayFilter apply(Config config) {
|
||||||
|
|
||||||
|
String recreateAccessTokenUrl = authHost + "/auth/recreateAccessToken.do";
|
||||||
|
|
||||||
|
return (exchange, chain) -> {
|
||||||
|
|
||||||
|
String path = exchange.getRequest().getURI().getPath();
|
||||||
|
|
||||||
|
// 특정 경로 필터링 예외 처리
|
||||||
|
if (path.contains("/bsi_ui/com") || path.contains("/bsi_ui/css") || path.contains("/bsi_ui/js")
|
||||||
|
|| path.contains("/bsi_ui/img") || path.contains("/adi_ui/com") || path.contains("/adi_ui/images")
|
||||||
|
|| path.contains("/gis_ui/img") || path.contains("/gis_ui/js") || path.contains("/gis_ui/css")
|
||||||
|
|| path.contains("/dsr_ui/css") || path.contains("/dsr_ui/fonts")
|
||||||
|
|| path.contains("/dsr_ui/gis") || path.contains("/dsr_ui/img") || path.contains("/dsr_ui/js")
|
||||||
|
|| path.contains("/dsr_ui/kendo") || path.contains("/opt_ui/js") || path.contains("/opt_ui/img")
|
||||||
|
|| path.contains("/opt_ui/*.svg") || path.contains("/opt_ui/favicon.ico") || path.contains("/adi/images")
|
||||||
|
|| path.contains("/dictionary.json") || path.contains(".svg")) {
|
||||||
|
return chain.filter(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************/
|
||||||
|
/* 토큰 검증 & 재발급 */
|
||||||
|
/*********************************************/
|
||||||
|
|
||||||
|
// 쿠키에서 accessToken, refreshToken 가져오기
|
||||||
|
accessToken = gatewayJwtProvider.getCookie(exchange.getRequest(), "at");
|
||||||
|
|
||||||
|
// redis 조회 데이터
|
||||||
|
String tokenKey = gatewayJwtProvider.generateHash(accessToken);
|
||||||
|
String username = gatewayTokenService.findTokenById(tokenKey);
|
||||||
|
|
||||||
|
/* 1. AccessToken 이 null 인 경우 */
|
||||||
|
if (ObjectUtils.isEmpty(accessToken)) {
|
||||||
|
|
||||||
|
// 1-1. redis 토큰 검증
|
||||||
|
if (ObjectUtils.isEmpty(username)) {
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
GatewayToken gatewayToken = gatewayTokenService.findToken(username);
|
||||||
|
if (ObjectUtils.isEmpty(gatewayToken)) {
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
refreshToken = gatewayToken.getRefreshToken();
|
||||||
|
|
||||||
|
// 1-2. accessToken 재발급 & refreshToken 연장
|
||||||
|
return webClientBuilder.build().get()
|
||||||
|
.uri(recreateAccessTokenUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(String.class)
|
||||||
|
.flatMap(token -> {
|
||||||
|
ResponseCookie cookie = ResponseCookie.from("at", token)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getAccessExpiration())) / 1000 + 10) // NOSONAR -- 6시간 + 10초
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(cookie);
|
||||||
|
|
||||||
|
// 여기서 헤더 셋팅
|
||||||
|
ServerHttpRequest request = gatewayJwtProvider.headerSetting(exchange, token);
|
||||||
|
|
||||||
|
return chain.filter(exchange.mutate().request(request).build());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2. AccessToken 이 유효하지 않은 경우 (형식, 키, 만료여부 등) */
|
||||||
|
if (gatewayJwtProvider.accessValidateToken(accessToken) == 400) {
|
||||||
|
|
||||||
|
// 2-1. redis 토큰 검증
|
||||||
|
if (ObjectUtils.isEmpty(username)) {
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
GatewayToken gatewayToken = gatewayTokenService.findToken(username);
|
||||||
|
if (ObjectUtils.isEmpty(gatewayToken)) {
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
refreshToken = gatewayToken.getRefreshToken();
|
||||||
|
|
||||||
|
// 2-2. accessToken 재발급 & refreshToken 연장
|
||||||
|
return webClientBuilder.build().get()
|
||||||
|
.uri(recreateAccessTokenUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(String.class)
|
||||||
|
.flatMap(token -> {
|
||||||
|
ResponseCookie cookie = ResponseCookie.from("at", token)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getAccessExpiration())) / 1000 + 10) // NOSONAR -- 6시간 + 10초
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(cookie);
|
||||||
|
|
||||||
|
// 여기서 헤더 셋팅
|
||||||
|
ServerHttpRequest request = gatewayJwtProvider.headerSetting(exchange, token);
|
||||||
|
|
||||||
|
return chain.filter(exchange.mutate().request(request).build());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 3. AccessToken 이 유효한 경우 */
|
||||||
|
if (gatewayJwtProvider.accessValidateToken(accessToken) == 200) {
|
||||||
|
|
||||||
|
// 3-1. redis 토큰 검증
|
||||||
|
if (ObjectUtils.isEmpty(username)) {
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
GatewayToken gatewayToken = gatewayTokenService.findToken(username);
|
||||||
|
if (ObjectUtils.isEmpty(gatewayToken)) {
|
||||||
|
return onError(exchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
refreshToken = gatewayToken.getRefreshToken();
|
||||||
|
|
||||||
|
// 3-2. accessToken 재발급 & refreshToken 연장
|
||||||
|
return webClientBuilder.build().get()
|
||||||
|
.uri(recreateAccessTokenUrl)
|
||||||
|
.header("rt", refreshToken)
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(String.class)
|
||||||
|
.flatMap(token -> {
|
||||||
|
ResponseCookie cookie = ResponseCookie.from("at", token)
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge((Long.parseLong(gatewayJwtProvider.getAccessExpiration())) / 1000 + 10) // NOSONAR -- 6시간 + 10초
|
||||||
|
.sameSite("Strict")
|
||||||
|
.build();
|
||||||
|
exchange.getResponse().addCookie(cookie);
|
||||||
|
|
||||||
|
// 여기서 헤더 셋팅
|
||||||
|
ServerHttpRequest request = gatewayJwtProvider.headerSetting(exchange, token);
|
||||||
|
|
||||||
|
return chain.filter(exchange.mutate().request(request).build());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return chain.filter(exchange);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : onError
|
||||||
|
* @author : wb_10_park1
|
||||||
|
* @date : 2024.08.22
|
||||||
|
* @description : 에러 메서드
|
||||||
|
* @param exchange
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static Mono<Void> onError(ServerWebExchange exchange) {
|
||||||
|
ServerHttpResponse response = exchange.getResponse();
|
||||||
|
response.setStatusCode(HttpStatus.UNAUTHORIZED);
|
||||||
|
|
||||||
|
// accessToken 쿠키 삭제
|
||||||
|
ResponseCookie deleteAccessTokenCookie = ResponseCookie.from("at", "")
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge(0) // NOSONAR -- 쿠키 즉시 삭제
|
||||||
|
.build();
|
||||||
|
response.addCookie(deleteAccessTokenCookie);
|
||||||
|
|
||||||
|
// refreshToken 쿠키 삭제
|
||||||
|
ResponseCookie deleteRefreshTokenCookie = ResponseCookie.from("rt", "")
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(!isLocalhost(exchange.getRequest()))
|
||||||
|
.path("/")
|
||||||
|
.maxAge(0) // NOSONAR -- 쿠키 즉시 삭제
|
||||||
|
.build();
|
||||||
|
response.addCookie(deleteRefreshTokenCookie);
|
||||||
|
|
||||||
|
DataBuffer buffer = response.bufferFactory().wrap("The requested token is invalid".getBytes(StandardCharsets.UTF_8));
|
||||||
|
return response.writeWith(Mono.just(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : isLocalhost
|
||||||
|
* @author : wb_10_park1
|
||||||
|
* @date : 2024.08.22
|
||||||
|
* @description : 로컬 호스트 여부 확인
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static boolean isLocalhost(ServerHttpRequest request) {
|
||||||
|
String host = request.getURI().getHost();
|
||||||
|
return "localhost".equals(host);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package egovframework.msa.sample.filter.global;
|
||||||
|
|
||||||
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
||||||
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||||
|
import org.springframework.core.Ordered;
|
||||||
|
import org.springframework.http.ResponseCookie;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class InterGatewayFilterFactory implements GlobalFilter, Ordered {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||||
|
String extIp = exchange.getRequest().getHeaders().getFirst("X-External-IP");
|
||||||
|
boolean extState = Boolean.parseBoolean(exchange.getRequest().getHeaders().getFirst("X-External-Request"));
|
||||||
|
log.debug("##### InterGatewayFilterFactory extIp >>> {}", extIp);
|
||||||
|
log.debug("##### InterGatewayFilterFactory extState >>> {}", extState);
|
||||||
|
|
||||||
|
// 헤더값을 수정하여 로그인 검증서버로 넘기기
|
||||||
|
ServerHttpRequest modifiedRequest = exchange.getRequest().mutate()
|
||||||
|
.header("X-External-IP", extIp)
|
||||||
|
.header("X-External-Request", String.valueOf(extState))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 외부 접근시
|
||||||
|
if (extState) {
|
||||||
|
ServerHttpResponse response = exchange.getResponse();
|
||||||
|
ResponseCookie cookie = ResponseCookie.from("exReq", "true")
|
||||||
|
.path("/")
|
||||||
|
.httpOnly(true)
|
||||||
|
.secure(true)
|
||||||
|
.build();
|
||||||
|
response.addCookie(cookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
return chain.filter(exchange.mutate().request(modifiedRequest).build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getOrder() {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,164 @@
|
|||||||
|
package egovframework.msa.sample.filter.global;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
||||||
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||||
|
import org.springframework.core.io.ClassPathResource;
|
||||||
|
import org.springframework.core.io.Resource;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
import org.springframework.web.reactive.function.BodyInserters;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
import org.springframework.web.util.UriUtils;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
import egovframework.msa.sample.config.GatewayJwtProvider;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @packageName : egovframework.msa.sample.filter
|
||||||
|
* @fileName : LogFilter.java
|
||||||
|
* @author : wb_10_park1
|
||||||
|
* @date : 2024.08.14
|
||||||
|
* @description :
|
||||||
|
*<pre>
|
||||||
|
* ===========================================================
|
||||||
|
* DATE AUTHOR NOTE
|
||||||
|
* -----------------------------------------------------------
|
||||||
|
* 2024.08.14 wb_10_park1 최초 생성
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class LogFilter implements GlobalFilter {
|
||||||
|
|
||||||
|
@Value("${json.statTarget.path}")
|
||||||
|
private String statTargetPath;
|
||||||
|
|
||||||
|
@Value("${bsi.backend.host}")
|
||||||
|
private String bsiBackendHost;
|
||||||
|
|
||||||
|
private final GatewayJwtProvider gatewayJwtProvider;
|
||||||
|
private final WebClient.Builder webClientBuilder;
|
||||||
|
|
||||||
|
private String accessToken;
|
||||||
|
private String parntsDeptNm;
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
public LogFilter(GatewayJwtProvider gatewayJwtProvider, WebClient.Builder webClientBuilder) {
|
||||||
|
this.gatewayJwtProvider = gatewayJwtProvider;
|
||||||
|
this.webClientBuilder = webClientBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||||
|
return chain.filter(exchange).doFinally(signalType -> {
|
||||||
|
|
||||||
|
String responsePath = exchange.getRequest().getURI().getPath();
|
||||||
|
String statusCode = exchange.getResponse().getStatusCode() != null
|
||||||
|
? exchange.getResponse().getStatusCode().toString()
|
||||||
|
: "NON";
|
||||||
|
|
||||||
|
accessToken = gatewayJwtProvider.getCookie(exchange.getRequest(), "at");
|
||||||
|
|
||||||
|
if (ObjectUtils.isEmpty(accessToken)) {
|
||||||
|
logResponse("UNKNOWN", "UNKNOWN", responsePath, statusCode);
|
||||||
|
} else {
|
||||||
|
handleAccessToken(accessToken, responsePath, statusCode);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleAccessToken(String accessToken, String responsePath, String statusCode) {
|
||||||
|
String validateAccessToken = Integer.toString(gatewayJwtProvider.accessValidateToken(accessToken));
|
||||||
|
|
||||||
|
if ("200".equals(validateAccessToken)) {
|
||||||
|
String extractedDeptNm = gatewayJwtProvider.getParntsDeptNm(accessToken);
|
||||||
|
String extractedUserId = gatewayJwtProvider.extractUserId(accessToken);
|
||||||
|
|
||||||
|
if (!ObjectUtils.isEmpty(extractedDeptNm) && !ObjectUtils.isEmpty(extractedUserId)) {
|
||||||
|
parntsDeptNm = extractedDeptNm;
|
||||||
|
userId = UriUtils.decode(extractedUserId, StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
logResponse(userId, parntsDeptNm, responsePath, statusCode);
|
||||||
|
|
||||||
|
processStats(responsePath, accessToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logResponse(String userId, String parntsDeptNm, String responsePath, String statusCode) {
|
||||||
|
log.info("내부망 RESPONSE TRACE LOG -- traceUrl={},traceStatus={},traceId={},traceParntsDept={},traceTime={}",
|
||||||
|
responsePath, statusCode, userId, parntsDeptNm,
|
||||||
|
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processStats(String responsePath, String accessToken) {
|
||||||
|
Resource resource = new ClassPathResource(statTargetPath);
|
||||||
|
if (!resource.exists()) {
|
||||||
|
log.error("로그 필터 classPath 경로 오류");
|
||||||
|
} else {
|
||||||
|
try (InputStream inputStream = resource.getInputStream()) {
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
List<Map<String, String>> list = objectMapper.readValue(inputStream, new TypeReference<List<Map<String, String>>>() {
|
||||||
|
});
|
||||||
|
|
||||||
|
Optional<Map<String, String>> result = list.stream()
|
||||||
|
.filter(map -> responsePath.equals(map.get("URL")))
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
result.ifPresent(map -> processResult(map, accessToken));
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("LogFilter IOException --- " + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processResult(Map<String, String> map, String accessToken) {
|
||||||
|
String url = map.get("URL");
|
||||||
|
String menu = map.get("PARNTS_MENU");
|
||||||
|
String deptCd = UriUtils.decode(
|
||||||
|
gatewayJwtProvider.extractParntsRealWorkDeptCd(accessToken),
|
||||||
|
StandardCharsets.UTF_8
|
||||||
|
);
|
||||||
|
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
String formattedDate = now.format(formatter);
|
||||||
|
|
||||||
|
log.info("내부망 RESPONSE TRACE LOG -- traceUrl={},traceStatus={},traceId={},traceParntsDept={},traceTime={}",
|
||||||
|
url, deptCd, userId, parntsDeptNm,
|
||||||
|
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
|
||||||
|
|
||||||
|
Map<String, String> requestBody = Map.of(
|
||||||
|
"url", url,
|
||||||
|
"menuNm", menu,
|
||||||
|
"deptCd", deptCd
|
||||||
|
);
|
||||||
|
|
||||||
|
String menuStatsUrl = bsiBackendHost + "/bsi/stats/insertMenuStats.do";
|
||||||
|
|
||||||
|
webClientBuilder.build().post()
|
||||||
|
.uri(menuStatsUrl)
|
||||||
|
.body(BodyInserters.fromValue(requestBody))
|
||||||
|
.retrieve()
|
||||||
|
.bodyToMono(Void.class)
|
||||||
|
.subscribe(response -> log.info("이용률 통계 insert API 성공"),
|
||||||
|
error -> log.error("이용률 통계 insert API 실패", error));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package egovframework.msa.sample.token;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.data.redis.cache.RedisCacheConfiguration;
|
||||||
|
import org.springframework.data.redis.cache.RedisCacheManager;
|
||||||
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||||
|
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
|
||||||
|
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
|
||||||
|
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
||||||
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableRedisRepositories("egovframework.msa.sample.token")
|
||||||
|
public class GatewayRedisConfig {
|
||||||
|
|
||||||
|
@Value("${spring.redis.host}")
|
||||||
|
private String host;
|
||||||
|
|
||||||
|
@Value("${spring.redis.port}")
|
||||||
|
private int port;
|
||||||
|
|
||||||
|
@Value("${spring.redis.password}")
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RedisConnectionFactory redisConnectionFactory() {
|
||||||
|
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
|
||||||
|
redisStandaloneConfiguration.setHostName(this.host);
|
||||||
|
redisStandaloneConfiguration.setPort(this.port);
|
||||||
|
redisStandaloneConfiguration.setPassword(this.password);
|
||||||
|
return new LettuceConnectionFactory(redisStandaloneConfiguration);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RedisTemplate<String, GatewayToken> authRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
||||||
|
RedisTemplate<String, GatewayToken> template = new RedisTemplate<>();
|
||||||
|
template.setConnectionFactory(redisConnectionFactory);
|
||||||
|
template.setKeySerializer(new StringRedisSerializer());
|
||||||
|
template.setValueSerializer(new Jackson2JsonRedisSerializer<>(GatewayToken.class));
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RedisTemplate<String, String> tokenRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
||||||
|
RedisTemplate<String, String> template = new RedisTemplate<>();
|
||||||
|
template.setConnectionFactory(redisConnectionFactory());
|
||||||
|
template.setKeySerializer(new StringRedisSerializer());
|
||||||
|
template.setValueSerializer(new StringRedisSerializer());
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) {
|
||||||
|
RedisCacheConfiguration cacheConfig = RedisCacheConfiguration.defaultCacheConfig()
|
||||||
|
.entryTtl(Duration.ofHours(1L))
|
||||||
|
.disableCachingNullValues();
|
||||||
|
|
||||||
|
return RedisCacheManager.RedisCacheManagerBuilder
|
||||||
|
.fromConnectionFactory(redisConnectionFactory)
|
||||||
|
.cacheDefaults(cacheConfig)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package egovframework.msa.sample.token;
|
||||||
|
|
||||||
|
import org.springframework.data.redis.core.RedisHash;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@RedisHash("Token")
|
||||||
|
public class GatewayToken {
|
||||||
|
|
||||||
|
private String username;
|
||||||
|
//private String tokenKey;
|
||||||
|
private String refreshToken;
|
||||||
|
private String regDate;
|
||||||
|
|
||||||
|
private String userNm;
|
||||||
|
private String realWorkDeptCd;
|
||||||
|
private String clsfNm;
|
||||||
|
private String lastCUDdate;
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package egovframework.msa.sample.token;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
|
import org.springframework.data.redis.core.Cursor;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.data.redis.core.ScanOptions;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class GatewayTokenService {
|
||||||
|
|
||||||
|
private final RedisTemplate<String, GatewayToken> authRedisTemplate;
|
||||||
|
private final RedisTemplate<String, String> tokenRedisTemplate;
|
||||||
|
|
||||||
|
public GatewayTokenService(RedisTemplate<String, GatewayToken> authRedisTemplate,
|
||||||
|
RedisTemplate<String, String> tokenRedisTemplate) {
|
||||||
|
this.authRedisTemplate = authRedisTemplate;
|
||||||
|
this.tokenRedisTemplate = tokenRedisTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Cacheable(value="Token", key="#username")
|
||||||
|
public GatewayToken findToken(String username) {
|
||||||
|
return authRedisTemplate.opsForValue().get(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Cacheable(value="TokenKey", key="#tokenKey")
|
||||||
|
public String findTokenById(String tokenKey) {
|
||||||
|
return tokenRedisTemplate.opsForValue().get(tokenKey) != null ? tokenRedisTemplate.opsForValue().get(tokenKey) : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getKeyCount() {
|
||||||
|
Set<String> keys = new HashSet<>();
|
||||||
|
Cursor<byte[]> cursor = authRedisTemplate.getConnectionFactory().getConnection().scan(ScanOptions.scanOptions().match("*").build()); // NOSONAR
|
||||||
|
while (cursor.hasNext()) {
|
||||||
|
keys.add(new String(cursor.next())); // NOSONAR
|
||||||
|
}
|
||||||
|
return keys.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getAllKeys() {
|
||||||
|
Set<String> keys = new HashSet<>();
|
||||||
|
Cursor<byte[]> cursor = authRedisTemplate.getConnectionFactory().getConnection().scan(ScanOptions.scanOptions().match("*").build()); // NOSONAR
|
||||||
|
while (cursor.hasNext()) {
|
||||||
|
keys.add(new String(cursor.next())); // NOSONAR
|
||||||
|
}
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,228 @@
|
|||||||
|
server:
|
||||||
|
port: 80
|
||||||
|
|
||||||
|
servlet:
|
||||||
|
encoding:
|
||||||
|
charset: UTF-8
|
||||||
|
enabled: true
|
||||||
|
force: true
|
||||||
|
|
||||||
|
spring:
|
||||||
|
main:
|
||||||
|
web-application-type: reactive
|
||||||
|
application:
|
||||||
|
name: api-gw
|
||||||
|
|
||||||
|
#redis:
|
||||||
|
#host: ${redis.host:redis-primary-0.redis-headless.api-gw.svc.cluster.local}
|
||||||
|
#port: ${redis.port:6379}
|
||||||
|
#password: ${redis.password:Thqkd119!@}
|
||||||
|
|
||||||
|
redis:
|
||||||
|
host: 172.26.10.46
|
||||||
|
port: 30079
|
||||||
|
password: Thqkd119!@
|
||||||
|
|
||||||
|
cloud:
|
||||||
|
gateway:
|
||||||
|
httpclient:
|
||||||
|
pool:
|
||||||
|
max-idle-time: 1000
|
||||||
|
|
||||||
|
# default-filters:
|
||||||
|
# - DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials
|
||||||
|
#
|
||||||
|
# globalcors:
|
||||||
|
# cors-Configurations:
|
||||||
|
# '[/**]':
|
||||||
|
# allowedOrigins:
|
||||||
|
# - "https://api-gw-ext.210-90-169-94.nip.io" # 외부망 경로
|
||||||
|
# - '${private.cloud.gateway.url}'
|
||||||
|
# - '${auth.server.url}'
|
||||||
|
# - 'https://sb-dev.172-26-10-182.nip.io'
|
||||||
|
# allowCredentials: true
|
||||||
|
# allowedHeaders: '*'
|
||||||
|
# allowedMethods:
|
||||||
|
# - GET
|
||||||
|
# - POST
|
||||||
|
# - PUT
|
||||||
|
# - DELETE
|
||||||
|
|
||||||
|
routes:
|
||||||
|
|
||||||
|
# openapi.seoul.go.kr
|
||||||
|
- id: openapi_pmisPjtPhoto_route
|
||||||
|
uri: http://openapi.seoul.go.kr:8088/647264687153656f3531414f656375/xml/pmisPjtPhoto/**
|
||||||
|
predicates:
|
||||||
|
- Path=/647264687153656f3531414f656375/xml/pmisPjtPhoto/**
|
||||||
|
|
||||||
|
# 인증서버
|
||||||
|
- id: author_route
|
||||||
|
uri: http://localhost:8090
|
||||||
|
predicates:
|
||||||
|
- Path=/auth/**
|
||||||
|
|
||||||
|
# 기준정보
|
||||||
|
- id: bsi_file_route
|
||||||
|
uri: ${bsi.backend.server.url:lb://bsi-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/bsi/files/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/bsi/files/(?<segment>.*), /bsi/files/${segment}
|
||||||
|
|
||||||
|
- id: bsi_ui_route
|
||||||
|
uri: ${bsi.frontend.server.url:lb://bsi-frontend}
|
||||||
|
predicates:
|
||||||
|
- Path=/bsi_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/bsi_ui/(?<segment>.*), /bsi_ui/${segment}
|
||||||
|
- name: Auth
|
||||||
|
|
||||||
|
- id: bsi_route
|
||||||
|
uri: http://localhost:8085
|
||||||
|
predicates:
|
||||||
|
- Path=/bsi/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/bsi/(?<segment>.*), /bsi/${segment}
|
||||||
|
- name: Back
|
||||||
|
|
||||||
|
#재난정보
|
||||||
|
- id: dsr_ui_route
|
||||||
|
uri: http://localhost:8081
|
||||||
|
predicates:
|
||||||
|
- Path=/dsr_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/dsr_ui/(?<segment>.*), /dsr_ui/${segment}
|
||||||
|
- name: Auth
|
||||||
|
|
||||||
|
- id: dsr_route
|
||||||
|
uri: http://localhost:8082
|
||||||
|
predicates:
|
||||||
|
- Path=/dsr/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/dsr/(?<segment>.*), /dsr/${segment}
|
||||||
|
- name: Back
|
||||||
|
|
||||||
|
# 작전현장
|
||||||
|
- id: opt_ui_route
|
||||||
|
uri: ${opt.frontend.server.url:lb://opt-frontend}
|
||||||
|
predicates:
|
||||||
|
- Path=/opt_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/opt_ui/(?<segment>.*), /opt_ui/${segment}
|
||||||
|
- name: Auth
|
||||||
|
|
||||||
|
- id: opt_route
|
||||||
|
uri: ${opt.backend.server.url:lb://opt-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/opt/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/opt/(?<segment>.*), /opt/${segment}
|
||||||
|
- name: Back
|
||||||
|
|
||||||
|
# 부가정보
|
||||||
|
- id: adi_ui_route
|
||||||
|
uri: http://localhost:8083
|
||||||
|
predicates:
|
||||||
|
- Path=/adi_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/adi_ui/(?<segment>.*), /adi_ui/${segment}
|
||||||
|
- name: Auth
|
||||||
|
|
||||||
|
- id: adi_route
|
||||||
|
uri: http://localhost:8084
|
||||||
|
predicates:
|
||||||
|
- Path=/adi/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/adi/(?<segment>.*), /adi/${segment}
|
||||||
|
- name: Back
|
||||||
|
|
||||||
|
# 지리정보(GIS)
|
||||||
|
- id: gis_ui_route
|
||||||
|
uri: ${gis.frontend.server.url:lb://gis-frontend}
|
||||||
|
predicates:
|
||||||
|
- Path=/gis_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/gis_ui/(?<segment>.*), /gis_ui/${segment}
|
||||||
|
- name: Auth
|
||||||
|
|
||||||
|
- id: gis_route
|
||||||
|
uri: ${gis.backend.server.url:lb://gis-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/gis/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/gis/(?<segment>.*), /gis/${segment}
|
||||||
|
- name: Back
|
||||||
|
|
||||||
|
# 연계
|
||||||
|
- id: wad_route
|
||||||
|
uri: ${wad.backend.server.url:lb://wad-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/wad/**
|
||||||
|
|
||||||
|
# 긴통단 지휘통제
|
||||||
|
- id: dnc_ui_route
|
||||||
|
# uri: ${dnc.frontend.server.url:lb://dnc-frontend}
|
||||||
|
uri: http://localhost:8080
|
||||||
|
predicates:
|
||||||
|
- Path=/dnc_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/dnc_ui/(?<segment>.*), /dnc_ui/${segment}
|
||||||
|
|
||||||
|
- id: dnc_route
|
||||||
|
# uri: ${dnc.backend.server.url:lb://dnc-backend}
|
||||||
|
uri: http://localhost:8081
|
||||||
|
predicates:
|
||||||
|
- Path=/dnc/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/dnc/(?<segment>.*), /dnc/${segment}
|
||||||
|
|
||||||
|
#auth:
|
||||||
|
#host: ${auth.server.url:lb://auth-server}
|
||||||
|
|
||||||
|
auth:
|
||||||
|
host: http://localhost:8090
|
||||||
|
|
||||||
|
#bsi:
|
||||||
|
# backend:
|
||||||
|
# host: ${bsi.backend.server.url:lb://bsi-backend}
|
||||||
|
|
||||||
|
bsi:
|
||||||
|
backend:
|
||||||
|
host: http://localhost:8085
|
||||||
|
|
||||||
|
token:
|
||||||
|
accessSecret: ${access.token.secret:BA2E0C5454AC60E5C04D4D241D2022AB6085855446BF223089B509967ABFA1CF}
|
||||||
|
refreshSecret: ${refresh.token.secret:BA2E0C5454AC60E5C04D4D241D2022AB6085855446BF223089B509967ABFA1CF}
|
||||||
|
dataSecret: ${data.secret:BA2E0C5454AC60E5C04D4D241D2022AB6085855446BF223089B509967ABFA1CF}
|
||||||
|
accessExpiration: 43200000 # TTL (millisecond, 12 hours)
|
||||||
|
refreshExpiration: 86400000 # TTL (millisecond, 24 hours)
|
||||||
|
#accessExpiration: 300000 # TTL (millisecond, 15 minutes)
|
||||||
|
#refreshExpiration: 1800000 # TTL (millisecond, 30 minutes)
|
||||||
|
|
||||||
|
logging:
|
||||||
|
level:
|
||||||
|
org.springframework.web: DEBUG
|
||||||
|
egovframework.msa.sample: DEBUG
|
||||||
|
org.thymeleaf: DEBUG
|
||||||
|
|
||||||
|
management:
|
||||||
|
endpoints:
|
||||||
|
web:
|
||||||
|
base-path: /
|
||||||
|
|
||||||
|
#json:
|
||||||
|
# role:
|
||||||
|
# path: classpath:/static/role.json
|
||||||
|
# dictionary:
|
||||||
|
# path: classpath:/static/dictionary.json
|
||||||
|
# statTarget:
|
||||||
|
# path: classpath:/static/statTarget.json
|
||||||
|
|
||||||
|
json:
|
||||||
|
role:
|
||||||
|
path: /static/role.json
|
||||||
|
dictionary:
|
||||||
|
path: /static/dictionary.json
|
||||||
|
statTarget:
|
||||||
|
path: /static/statTarget.json
|
||||||
@@ -0,0 +1,191 @@
|
|||||||
|
server:
|
||||||
|
port: 8080
|
||||||
|
|
||||||
|
servlet:
|
||||||
|
encoding:
|
||||||
|
charset: UTF-8
|
||||||
|
enabled: true
|
||||||
|
force: true
|
||||||
|
|
||||||
|
spring:
|
||||||
|
main:
|
||||||
|
web-application-type: reactive
|
||||||
|
application:
|
||||||
|
name: api-gw
|
||||||
|
|
||||||
|
redis:
|
||||||
|
host: ${redis.host:redis-primary-0.redis-headless.api-gw.svc.cluster.local}
|
||||||
|
port: ${redis.port:6379}
|
||||||
|
password: ${redis.password:Thqkd119!@}
|
||||||
|
|
||||||
|
cloud:
|
||||||
|
gateway:
|
||||||
|
httpclient:
|
||||||
|
pool:
|
||||||
|
max-idle-time: 1000
|
||||||
|
|
||||||
|
# default-filters:
|
||||||
|
# - DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials
|
||||||
|
#
|
||||||
|
# globalcors:
|
||||||
|
# cors-Configurations:
|
||||||
|
# '[/**]':
|
||||||
|
# allowedOrigins:
|
||||||
|
# - "https://api-gw-ext.210-90-169-94.nip.io" # 외부망 경로
|
||||||
|
# - '${private.cloud.gateway.url}'
|
||||||
|
# - '${auth.server.url}'
|
||||||
|
# - 'https://sb-dev.172-26-10-182.nip.io'
|
||||||
|
# allowCredentials: true
|
||||||
|
# allowedHeaders: '*'
|
||||||
|
# allowedMethods:
|
||||||
|
# - GET
|
||||||
|
# - POST
|
||||||
|
# - PUT
|
||||||
|
# - DELETE
|
||||||
|
|
||||||
|
routes:
|
||||||
|
|
||||||
|
# openapi.seoul.go.kr
|
||||||
|
- id: openapi_pmisPjtPhoto_route
|
||||||
|
uri: http://openapi.seoul.go.kr:8088/647264687153656f3531414f656375/xml/pmisPjtPhoto/**
|
||||||
|
predicates:
|
||||||
|
- Path=/647264687153656f3531414f656375/xml/pmisPjtPhoto/**
|
||||||
|
|
||||||
|
# 인증서버
|
||||||
|
- id: author_route
|
||||||
|
uri: ${auth.server.url:lb://auth-server}
|
||||||
|
predicates:
|
||||||
|
- Path=/auth/**
|
||||||
|
|
||||||
|
# 기준정보
|
||||||
|
- id: bsi_file_route
|
||||||
|
uri: ${bsi.backend.server.url:lb://bsi-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/bsi/files/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/bsi/files/(?<segment>.*), /bsi/files/${segment}
|
||||||
|
|
||||||
|
- id: bsi_ui_route
|
||||||
|
uri: ${bsi.frontend.server.url:lb://bsi-frontend}
|
||||||
|
predicates:
|
||||||
|
- Path=/bsi_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/bsi_ui/(?<segment>.*), /bsi_ui/${segment}
|
||||||
|
- name: Auth
|
||||||
|
|
||||||
|
- id: bsi_route
|
||||||
|
uri: ${bsi.backend.server.url:lb://bsi-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/bsi/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/bsi/(?<segment>.*), /bsi/${segment}
|
||||||
|
- name: Back
|
||||||
|
|
||||||
|
#재난정보
|
||||||
|
- id: dsr_ui_route
|
||||||
|
uri: ${dsr.frontend.server.url:lb://dsr-frontend}
|
||||||
|
predicates:
|
||||||
|
- Path=/dsr_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/dsr_ui/(?<segment>.*), /dsr_ui/${segment}
|
||||||
|
- name: Auth
|
||||||
|
|
||||||
|
- id: dsr_route
|
||||||
|
uri: ${dsr.backend.server.url:lb://dsr-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/dsr/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/dsr/(?<segment>.*), /dsr/${segment}
|
||||||
|
- name: Back
|
||||||
|
|
||||||
|
# 작전현장
|
||||||
|
- id: opt_ui_route
|
||||||
|
uri: ${opt.frontend.server.url:lb://opt-frontend}
|
||||||
|
predicates:
|
||||||
|
- Path=/opt_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/opt_ui/(?<segment>.*), /opt_ui/${segment}
|
||||||
|
- name: Auth
|
||||||
|
|
||||||
|
- id: opt_route
|
||||||
|
uri: ${opt.backend.server.url:lb://opt-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/opt/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/opt/(?<segment>.*), /opt/${segment}
|
||||||
|
- name: Back
|
||||||
|
|
||||||
|
# 부가정보
|
||||||
|
- id: adi_ui_route
|
||||||
|
uri: ${adi.frontend.server.url:lb://adi-frontend}
|
||||||
|
predicates:
|
||||||
|
- Path=/adi_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/adi_ui/(?<segment>.*), /adi_ui/${segment}
|
||||||
|
- name: Auth
|
||||||
|
|
||||||
|
- id: adi_route
|
||||||
|
uri: ${adi.backend.server.url:lb://adi-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/adi/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/adi/(?<segment>.*), /adi/${segment}
|
||||||
|
- name: Back
|
||||||
|
|
||||||
|
# 지리정보(GIS)
|
||||||
|
- id: gis_ui_route
|
||||||
|
uri: ${gis.frontend.server.url:lb://gis-frontend}
|
||||||
|
predicates:
|
||||||
|
- Path=/gis_ui/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/gis_ui/(?<segment>.*), /gis_ui/${segment}
|
||||||
|
- name: Auth
|
||||||
|
|
||||||
|
- id: gis_route
|
||||||
|
uri: ${gis.backend.server.url:lb://gis-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/gis/**
|
||||||
|
filters:
|
||||||
|
- RewritePath=/gis/(?<segment>.*), /gis/${segment}
|
||||||
|
- name: Back
|
||||||
|
|
||||||
|
# 연계
|
||||||
|
- id: wad_route
|
||||||
|
uri: ${wad.backend.server.url:lb://wad-backend}
|
||||||
|
predicates:
|
||||||
|
- Path=/wad/**
|
||||||
|
|
||||||
|
auth:
|
||||||
|
host: ${auth.server.url:lb://auth-server}
|
||||||
|
|
||||||
|
bsi:
|
||||||
|
backend:
|
||||||
|
host: ${bsi.backend.server.url:lb://bsi-backend}
|
||||||
|
|
||||||
|
token:
|
||||||
|
accessSecret: ${access.token.secret:BA2E0C5454AC60E5C04D4D241D2022AB6085855446BF223089B509967ABFA1CF}
|
||||||
|
refreshSecret: ${refresh.token.secret:BA2E0C5454AC60E5C04D4D241D2022AB6085855446BF223089B509967ABFA1CF}
|
||||||
|
dataSecret: ${data.secret:BA2E0C5454AC60E5C04D4D241D2022AB6085855446BF223089B509967ABFA1CF}
|
||||||
|
accessExpiration: 43200000 # TTL (millisecond, 12 hours)
|
||||||
|
refreshExpiration: 86400000 # TTL (millisecond, 24 hours)
|
||||||
|
#accessExpiration: 300000 # TTL (millisecond, 15 minutes)
|
||||||
|
#refreshExpiration: 1800000 # TTL (millisecond, 30 minutes)
|
||||||
|
|
||||||
|
logging:
|
||||||
|
level:
|
||||||
|
org.springframework.web: DEBUG
|
||||||
|
egovframework.msa.sample: DEBUG
|
||||||
|
org.thymeleaf: DEBUG
|
||||||
|
|
||||||
|
management:
|
||||||
|
endpoints:
|
||||||
|
web:
|
||||||
|
base-path: /
|
||||||
|
|
||||||
|
json:
|
||||||
|
role:
|
||||||
|
path: classpath:/static/role.json
|
||||||
|
dictionary:
|
||||||
|
path: classpath:/static/dictionary.json
|
||||||
|
statTarget:
|
||||||
|
path: classpath:/static/statTarget.json
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE xml>
|
||||||
|
<Configuration>
|
||||||
|
<Appenders>
|
||||||
|
<Console name="console" target="SYSTEM_OUT">
|
||||||
|
<PatternLayout pattern="%m%n" />
|
||||||
|
</Console>
|
||||||
|
</Appenders>
|
||||||
|
<Loggers>
|
||||||
|
<Logger name="java.sql" level="INFO" additivity="false">
|
||||||
|
<AppenderRef ref="console" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="egovframework" level="DEBUG" additivity="false">
|
||||||
|
<AppenderRef ref="console" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="org.egovframe" level="DEBUG" additivity="false">
|
||||||
|
<AppenderRef ref="console" />
|
||||||
|
</Logger>
|
||||||
|
<!-- log SQL with timing information, post execution -->
|
||||||
|
<Logger name="jdbc.sqltiming" level="INFO" additivity="false">
|
||||||
|
<AppenderRef ref="console" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="org.springframework" level="INFO" additivity="false">
|
||||||
|
<AppenderRef ref="console" />
|
||||||
|
</Logger>
|
||||||
|
<Root level="INFO">
|
||||||
|
<AppenderRef ref="console" level="INFO"/>
|
||||||
|
</Root>
|
||||||
|
</Loggers>
|
||||||
|
</Configuration>
|
||||||
@@ -0,0 +1,330 @@
|
|||||||
|
@charset "utf-8";
|
||||||
|
@import url(//fonts.googleapis.com/earlyaccess/nanumgothic.css);
|
||||||
|
/* base */
|
||||||
|
html, body, div, span, applet, object, iframe,
|
||||||
|
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||||
|
a, abbr, acronym, address, big, cite, code,
|
||||||
|
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||||
|
small, strike, strong, sub, sup, tt, var,
|
||||||
|
b, u, i, center,
|
||||||
|
dl, dt, dd, ol, ul, li,
|
||||||
|
fieldset, form, label, legend,
|
||||||
|
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||||
|
article, aside, canvas, details, embed,
|
||||||
|
figure, figcaption, footer, header, hgroup,
|
||||||
|
menu, nav, output, ruby, section, summary,
|
||||||
|
time, mark, audio, video
|
||||||
|
{margin:0; padding:0; border:0;}
|
||||||
|
|
||||||
|
/* Common */
|
||||||
|
img,fieldset{border:0;}
|
||||||
|
ul,ol,li{list-style:none;}
|
||||||
|
em,address{font-style:normal;}
|
||||||
|
img{vertical-align:top;}
|
||||||
|
hr {display: none;}
|
||||||
|
h1,h2,h3,h4,h5,h6{font-size:100%;}
|
||||||
|
table{border-collapse:collapse; border-spacing:0; width:100%;}
|
||||||
|
|
||||||
|
/* default */
|
||||||
|
.fl-L{float:left !important;}
|
||||||
|
.fl-R{float:right !important;}
|
||||||
|
.fl-N{float:none !important;}
|
||||||
|
.align-L{text-align:left !important;}
|
||||||
|
.align-C{text-align:center !important;}
|
||||||
|
.align-R{text-align:right !important;}
|
||||||
|
.align-J{ text-align:justify !important;}
|
||||||
|
.align-T{vertical-align:top !important;}
|
||||||
|
.align-M{vertical-align:middle !important;}
|
||||||
|
.align-B{vertical-align:bottom !important;}
|
||||||
|
|
||||||
|
|
||||||
|
/* hidden 적용 */
|
||||||
|
#accessibility {position:fixed !important;top:0; left:0; width:100%; text-align:center; z-index:9999;}
|
||||||
|
#accessibility h1{position:absolute; top:0; left:-9999px; height:1px; width:1px; overflow:hidden; font-size:0; text-align:left; line-height:0; z-index:-99;}
|
||||||
|
#accessibility a{display:block; height:1px; width:1px; margin-bottom:-1px; overflow:hidden; text-align:center; color:#000; white-space:nowrap;}
|
||||||
|
#accessibility a:focus,
|
||||||
|
#accessibility a:active {height:auto; width:100%; padding:5px; margin-bottom:10px; background:#FFFFCC; position:absolute; top:0;}
|
||||||
|
.hidden, legend{position:absolute; left:-9999px;top:-9999px;overflow:hidden; height:0; width:0; font-size:0; visibility:hidden; text-align:left;}
|
||||||
|
caption{overflow:hidden; height:0; width:0; font-size:0; visibility:hidden; text-align:left; text-indent:-99999px; line-height:0;}
|
||||||
|
.none{display:none;}
|
||||||
|
select{border:1px solid #d2d2d2;color:#555;height:23px;padding:1px;font-family:"나눔고딕", "nanum gothic","돋움",Dotum,arial,sans-serif; font-size:1em}
|
||||||
|
textarea{width:95%;border:1px solid #d2d2d2; font-family:"나눔고딕", "nanum gothic","돋움",Dotum,arial,sans-serif; line-height:150%;}
|
||||||
|
input[type="file"]{border:0px solid #d2d2d2;color:#555;}
|
||||||
|
input[type="image"]{border:0;width:auto;height:auto;}
|
||||||
|
input[type="checkbox"],input[type="radio"],.checkbox{border:0;vertical-align:middle;width:13px;height:13px;margin:2px 2px 2px 5px;padding:0}
|
||||||
|
input, button { font-family:"나눔고딕", "nanum gothic","돋움",Dotum,arial,sans-serif;}
|
||||||
|
button {cursor: pointer; }
|
||||||
|
|
||||||
|
.clearfix{*zoom:1;}
|
||||||
|
.clearfix:after{content:"";display:block;clear:both;height:0;}
|
||||||
|
|
||||||
|
|
||||||
|
/* clear 적용 */
|
||||||
|
.clear {clear:both;}
|
||||||
|
|
||||||
|
/* html5 블럭인식 */
|
||||||
|
section, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, summary, caption, ul, li{display: block;}
|
||||||
|
|
||||||
|
|
||||||
|
/* font 설정 */
|
||||||
|
body{font-family:"나눔고딕", "nanum gothic","돋움",Dotum,arial,sans-serif; font-size:12px; color:#444;}
|
||||||
|
.bold{font-weight:bold;}
|
||||||
|
.bigfont {font-size:13px; line-height:200%;}
|
||||||
|
.txt_red {color:#c00 !important;}
|
||||||
|
.txt_blue {color:#2009c4!important;}
|
||||||
|
|
||||||
|
|
||||||
|
/* width size */
|
||||||
|
.w0{width:0 !important;}
|
||||||
|
.w1{width:1% !important;}
|
||||||
|
.w2{width:2% !important;}
|
||||||
|
.w3{width:3% !important;}
|
||||||
|
.w4{width:4% !important;}
|
||||||
|
.w5{width:5% !important;}
|
||||||
|
.w6{width:6% !important;}
|
||||||
|
.w7{width:7% !important;}
|
||||||
|
.w8{width:8% !important;}
|
||||||
|
.w9{width:9% !important;}
|
||||||
|
.w10{width:10% !important;}
|
||||||
|
.w11{width:11% !important;}
|
||||||
|
.w12{width:12% !important;}
|
||||||
|
.w13{width:13% !important;}
|
||||||
|
.w14{width:14% !important;}
|
||||||
|
.w15{width:15% !important;}
|
||||||
|
.w16{width:16% !important;}
|
||||||
|
.w17{width:17% !important;}
|
||||||
|
.w18{width:18% !important;}
|
||||||
|
.w19{width:19% !important;}
|
||||||
|
.w20{width:20% !important;}
|
||||||
|
.w21{width:21% !important;}
|
||||||
|
.w22{width:22% !important;}
|
||||||
|
.w23{width:23% !important;}
|
||||||
|
.w24{width:24% !important;}
|
||||||
|
.w25{width:25% !important;}
|
||||||
|
.w26{width:26% !important;}
|
||||||
|
.w27{width:27% !important;}
|
||||||
|
.w28{width:28% !important;}
|
||||||
|
.w29{width:29% !important;}
|
||||||
|
.w30{width:30% !important;}
|
||||||
|
.w31{width:31% !important;}
|
||||||
|
.w32{width:32% !important;}
|
||||||
|
.w33{width:33% !important;}
|
||||||
|
.w34{width:34% !important;}
|
||||||
|
.w35{width:35% !important;}
|
||||||
|
.w36{width:36% !important;}
|
||||||
|
.w37{width:37% !important;}
|
||||||
|
.w38{width:38% !important;}
|
||||||
|
.w39{width:39% !important;}
|
||||||
|
.w40{width:40% !important;}
|
||||||
|
.w45{width:45% !important;}
|
||||||
|
.w50{width:50% !important;}
|
||||||
|
.w55{width:55% !important;}
|
||||||
|
.w60{width:60% !important;}
|
||||||
|
.w65{width:65% !important;}
|
||||||
|
.w69{width:69% !important;}
|
||||||
|
.w70{width:70% !important;}
|
||||||
|
.w75{width:75% !important;}
|
||||||
|
.w80{width:80% !important;}
|
||||||
|
.w85{width:85% !important;}
|
||||||
|
.w90{width:90% !important;}
|
||||||
|
.w91{width:91% !important;}
|
||||||
|
.w92{width:92% !important;}
|
||||||
|
.w93{width:93% !important;}
|
||||||
|
.w94{width:94% !important;}
|
||||||
|
.w95{width:95% !important;}
|
||||||
|
.w96{width:96% !important;}
|
||||||
|
.w97{width:97% !important;}
|
||||||
|
.w98{width:98% !important;}
|
||||||
|
.w99{width:99% !important;}
|
||||||
|
.w100{width:100% !important;}
|
||||||
|
|
||||||
|
.wx5{width:5px !important;}
|
||||||
|
.wx10{width:10px !important;}
|
||||||
|
.wx15{width:15px !important;}
|
||||||
|
.wx20{width:20px !important;}
|
||||||
|
.wx25{width:25px !important;}
|
||||||
|
.wx30{width:30px !important;}
|
||||||
|
.wx35{width:35px !important;}
|
||||||
|
.wx40{width:40px !important;}
|
||||||
|
.wx45{width:45px !important;}
|
||||||
|
.wx50{width:50px !important;}
|
||||||
|
.wx55{width:55px !important;}
|
||||||
|
.wx60{width:60px !important;}
|
||||||
|
.wx65{width:65px !important;}
|
||||||
|
.wx70{width:70px !important;}
|
||||||
|
.wx75{width:75px !important;}
|
||||||
|
.wx80{width:80px !important;}
|
||||||
|
.wx85{width:85px !important;}
|
||||||
|
.wx90{width:90px !important;}
|
||||||
|
.wx95{width:95px !important;}
|
||||||
|
.wx100{width:100px !important;}
|
||||||
|
.wx110{width:110px !important;}
|
||||||
|
.wx115{width:115px !important;}
|
||||||
|
.wx120{width:120px !important;}
|
||||||
|
.wx125{width:125px !important;}
|
||||||
|
.wx130{width:130px !important;}
|
||||||
|
.wx135{width:135px !important;}
|
||||||
|
.wx140{width:140px !important;}
|
||||||
|
.wx145{width:145px !important;}
|
||||||
|
.wx150{width:150px !important;}
|
||||||
|
.wx155{width:155px !important;}
|
||||||
|
.wx160{width:160px !important;}
|
||||||
|
.wx165{width:165px !important;}
|
||||||
|
.wx170{width:170px !important;}
|
||||||
|
.wx175{width:175px !important;}
|
||||||
|
.wx180{width:180px !important;}
|
||||||
|
.wx185{width:185px !important;}
|
||||||
|
.wx190{width:190px !important;}
|
||||||
|
.wx195{width:195px !important;}
|
||||||
|
.wx200{width:200px !important;}
|
||||||
|
.wx210{width:210px !important;}
|
||||||
|
.wx220{width:220px !important;}
|
||||||
|
.wx224{width:224px !important;}
|
||||||
|
.wx230{width:230px !important;}
|
||||||
|
.wx240{width:240px !important;}
|
||||||
|
.wx250{width:250px !important;}
|
||||||
|
.wx260{width:260px !important;}
|
||||||
|
.wx270{width:270px !important;}
|
||||||
|
.wx280{width:280px !important;}
|
||||||
|
.wx290{width:290px !important;}
|
||||||
|
.wx300{width:300px !important;}
|
||||||
|
.wx310{width:310px !important;}
|
||||||
|
.wx320{width:320px !important;}
|
||||||
|
.wx330{width:330px !important;}
|
||||||
|
.wx340{width:340px !important;}
|
||||||
|
.wx350{width:350px !important;}
|
||||||
|
.wx360{width:360px !important;}
|
||||||
|
.wx370{width:370px !important;}
|
||||||
|
.wx380{width:380px !important;}
|
||||||
|
.wx390{width:390px !important;}
|
||||||
|
.wx400{width:400px !important;}
|
||||||
|
.wx500{width:500px !important;}
|
||||||
|
.wx510{width:510px !important;}
|
||||||
|
.wx520{width:520px !important;}
|
||||||
|
.wx525{width:525px !important;}
|
||||||
|
.wx580{width:580px !important;}
|
||||||
|
|
||||||
|
/* padding */
|
||||||
|
.p1{padding:1px; !important;}
|
||||||
|
|
||||||
|
.ptb40{padding-top:40px !important;padding-bottom:40px !important;}
|
||||||
|
.pb0{padding-bottom:0 !important;}
|
||||||
|
.pb5{padding-bottom:5px !important;}
|
||||||
|
.pb10{padding-bottom:10px !important;}
|
||||||
|
.pb15{padding-bottom:15px !important;}
|
||||||
|
.pb20{padding-bottom:20px !important;}
|
||||||
|
.pb25{padding-bottom:25px !important;}
|
||||||
|
.pb30{padding-bottom:30px !important;}
|
||||||
|
.pb35{padding-bottom:35px !important;}
|
||||||
|
.pb40{padding-bottom:40px !important;}
|
||||||
|
.pb45{padding-bottom:45px !important;}
|
||||||
|
.pb46{padding-bottom:46px !important;}
|
||||||
|
.pb50{padding-bottom:50px !important;}
|
||||||
|
.pb60{padding-bottom:60px !important;}
|
||||||
|
.pb70{padding-bottom:70px !important;}
|
||||||
|
.pb80{padding-bottom:80px !important;}
|
||||||
|
.pb90{padding-bottom:90px !important;}
|
||||||
|
.pb100{padding-bottom:100px !important;}
|
||||||
|
.pb110{padding-bottom:110px !important;}
|
||||||
|
.pb120{padding-bottom:120px !important;}
|
||||||
|
.pb130{padding-bottom:130px !important;}
|
||||||
|
.pb140{padding-bottom:140px !important;}
|
||||||
|
.pb150{padding-bottom:150px !important;}
|
||||||
|
|
||||||
|
.pt6{padding-top:6px !important;}
|
||||||
|
.pt10{padding-top:10px !important;}
|
||||||
|
.pt20{padding-top:20px !important;}
|
||||||
|
.pt30{padding-top:30px !important;}
|
||||||
|
.pl20{padding-left:22px !important;}
|
||||||
|
.pl35{padding-left:35px !important;}
|
||||||
|
|
||||||
|
/* margin */
|
||||||
|
.mg0{margin:0 !important;}
|
||||||
|
|
||||||
|
.mb0{margin-bottom:0px !important;}
|
||||||
|
.mb1{margin-bottom:1px !important;}
|
||||||
|
.mb2{margin-bottom:2px !important;}
|
||||||
|
.mb3{margin-bottom:3px !important;}
|
||||||
|
.mb4{margin-bottom:4px !important;}
|
||||||
|
.mb5{margin-bottom:5px !important;}
|
||||||
|
.mb6{margin-bottom:6px !important;}
|
||||||
|
.mb7{margin-bottom:7px !important;}
|
||||||
|
.mb8{margin-bottom:8px !important;}
|
||||||
|
.mb9{margin-bottom:9px !important;}
|
||||||
|
.mb10{margin-bottom:10px !important;}
|
||||||
|
.mb11{margin-bottom:11px !important;}
|
||||||
|
.mb12{margin-bottom:12px !important;}
|
||||||
|
.mb13{margin-bottom:13px !important;}
|
||||||
|
.mb14{margin-bottom:14px !important;}
|
||||||
|
.mb15{margin-bottom:15px !important;}
|
||||||
|
.mb16{margin-bottom:16px !important;}
|
||||||
|
.mb17{margin-bottom:17px !important;}
|
||||||
|
.mb18{margin-bottom:18px !important;}
|
||||||
|
.mb19{margin-bottom:19px !important;}
|
||||||
|
.mb20{margin-bottom:20px !important;}
|
||||||
|
.mb21{margin-bottom:21px !important;}
|
||||||
|
.mb22{margin-bottom:22px !important;}
|
||||||
|
.mb23{margin-bottom:23px !important;}
|
||||||
|
.mb24{margin-bottom:24px !important;}
|
||||||
|
.mb25{margin-bottom:25px !important;}
|
||||||
|
.mb26{margin-bottom:26px !important;}
|
||||||
|
.mb27{margin-bottom:27px !important;}
|
||||||
|
.mb28{margin-bottom:28px !important;}
|
||||||
|
.mb29{margin-bottom:29px !important;}
|
||||||
|
.mb30{margin-bottom:30px !important;}
|
||||||
|
.mb31{margin-bottom:31px !important;}
|
||||||
|
.mb32{margin-bottom:32px !important;}
|
||||||
|
.mb33{margin-bottom:33px !important;}
|
||||||
|
.mb34{margin-bottom:34px !important;}
|
||||||
|
.mb35{margin-bottom:35px !important;}
|
||||||
|
.mb36{margin-bottom:36px !important;}
|
||||||
|
.mb37{margin-bottom:37px !important;}
|
||||||
|
.mb38{margin-bottom:38px !important;}
|
||||||
|
.mb39{margin-bottom:39px !important;}
|
||||||
|
.mb40{margin-bottom:40px !important;}
|
||||||
|
.mb45{margin-bottom:45px !important;}
|
||||||
|
.mb50{margin-bottom:50px !important;}
|
||||||
|
.mb53{margin-bottom:53px !important;}
|
||||||
|
.mb55{margin-bottom:55px !important;}
|
||||||
|
.mb60{margin-bottom:60px !important;}
|
||||||
|
.mb65{margin-bottom:65px !important;}
|
||||||
|
.mb70{margin-bottom:70px !important;}
|
||||||
|
.mb75{margin-bottom:75px !important;}
|
||||||
|
.mb80{margin-bottom:80px !important;}
|
||||||
|
.mb85{margin-bottom:85px !important;}
|
||||||
|
.mb90{margin-bottom:90px !important;}
|
||||||
|
.mb95{margin-bottom:95px !important;}
|
||||||
|
.mb100{margin-bottom:100px !important;}
|
||||||
|
|
||||||
|
.mr0{margin-right:0 !important;}
|
||||||
|
.mr6{margin-right:6px !important;}
|
||||||
|
.mr7{margin-right:7px !important;}
|
||||||
|
.mr15{margin-right:15px !important;}
|
||||||
|
|
||||||
|
.mt-25{margin-top:-25px !important;}
|
||||||
|
.mt0{margin-top:0px !important;}
|
||||||
|
.mt5{margin-top:5px !important;}
|
||||||
|
.mt10{margin-top:10px !important;}
|
||||||
|
.mt15{margin-top:15px !important;}
|
||||||
|
.mt18{margin-top:18px !important;}
|
||||||
|
.mt20{margin-top:20px !important;}
|
||||||
|
.mt25{margin-top:25px !important;}
|
||||||
|
.mt30{margin-top:30px !important;}
|
||||||
|
.mt40{margin-top:40px !important;}
|
||||||
|
.mt60{margin-top:60px !important;}
|
||||||
|
.mt200{margin-top:200px !important;}
|
||||||
|
|
||||||
|
.ml164{margin-left:164px !important;}
|
||||||
|
.ml50{margin-left:50px !important;}
|
||||||
|
.ml30{margin-left:30px !important;}
|
||||||
|
.ml28{margin-left:28px !important;}
|
||||||
|
.ml20{margin-left:20px !important;}
|
||||||
|
.ml19{margin-left:19px !important;}
|
||||||
|
.ml18{margin-left:18px !important;}
|
||||||
|
.ml11{margin-left:11px !important;}
|
||||||
|
.ml10{margin-left:10px !important;}
|
||||||
|
.ml9{margin-left:9px !important;}
|
||||||
|
.ml7{margin-left:7px !important;}
|
||||||
|
.ml5{margin-left:5px !important;}
|
||||||
|
.ml2{margin-left:2px !important;}
|
||||||
|
.ml1{margin-left:1px !important;}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
{
|
||||||
|
"passwords":[
|
||||||
|
"!@#$AHmeD",
|
||||||
|
"$$Awojide",
|
||||||
|
"01Brandon$",
|
||||||
|
"12345Aa*",
|
||||||
|
"123@abcA",
|
||||||
|
"123abcA!",
|
||||||
|
"123qweC!",
|
||||||
|
"20yuvi91Z!",
|
||||||
|
"2r3F8ebF#",
|
||||||
|
"72Logan!",
|
||||||
|
"8469939912M@c",
|
||||||
|
"@Pr0ject",
|
||||||
|
"A1!?*hind",
|
||||||
|
"AAbc123!@#",
|
||||||
|
"Ac%%19!?",
|
||||||
|
"Amy#1sameer",
|
||||||
|
"AupaAlaves.",
|
||||||
|
"Austin6!",
|
||||||
|
"Avadhesh67@",
|
||||||
|
"B24318c*",
|
||||||
|
"Barca123#",
|
||||||
|
"Bell!@#",
|
||||||
|
"Boogaboo7!",
|
||||||
|
"Costy2014!",
|
||||||
|
"Coxa1974@",
|
||||||
|
"Diit25!@",
|
||||||
|
"Doraray@",
|
||||||
|
"FACEbook1234@",
|
||||||
|
"FAIZbls92@",
|
||||||
|
"Fine@flies",
|
||||||
|
"Fv$$indi@",
|
||||||
|
"Getme$in",
|
||||||
|
"Gtl123$",
|
||||||
|
"Hlubkojxwb@",
|
||||||
|
"Ichangeditagain.",
|
||||||
|
"India123#",
|
||||||
|
"Jansen1!",
|
||||||
|
"Jitendra0143$$$$",
|
||||||
|
"Joeljoy789@",
|
||||||
|
"Kath@28kapli",
|
||||||
|
"Kutty0220@",
|
||||||
|
"Man_143@kumar",
|
||||||
|
"Manith@123#",
|
||||||
|
"Meer1234%^&*",
|
||||||
|
"Munde88kesye*",
|
||||||
|
"Navpreet@",
|
||||||
|
"P@$$w0rd",
|
||||||
|
"P@ssw0rd",
|
||||||
|
"P@ssword",
|
||||||
|
"Pa$$W0rd",
|
||||||
|
"Padden666!",
|
||||||
|
"Passwd@12#",
|
||||||
|
"Payal1404...",
|
||||||
|
"Pizza2014!",
|
||||||
|
"Portal2014*",
|
||||||
|
"Power123@",
|
||||||
|
"Pr0Metr!c",
|
||||||
|
"Qwert123@#",
|
||||||
|
"Qwerty1@",
|
||||||
|
"Renuga123$",
|
||||||
|
"Ruth@lav.me",
|
||||||
|
"S%23_wAimon_24%A",
|
||||||
|
"S@lut1ons",
|
||||||
|
"STprow21**",
|
||||||
|
"Sab2189@in",
|
||||||
|
"Shansdivs1!",
|
||||||
|
"Singhsukhr@j",
|
||||||
|
"Sm@had1k",
|
||||||
|
"Smile$%#",
|
||||||
|
"Swetha123*",
|
||||||
|
"Tasleem123**",
|
||||||
|
"Test123$",
|
||||||
|
"Th3.r1rs",
|
||||||
|
"VlorianVeliu9!",
|
||||||
|
"acjk361mz@T",
|
||||||
|
"aloksaini@123A",
|
||||||
|
"amanindian1@E",
|
||||||
|
"b_deviney@yahoo.comHappyeft0nes",
|
||||||
|
"cc9e@10QIEb@",
|
||||||
|
"emie93@UTeM",
|
||||||
|
"gOPI232$",
|
||||||
|
"hUSSEIN.",
|
||||||
|
"ja1ja1hanum@N",
|
||||||
|
"m@nN08love",
|
||||||
|
"premium@ASCII",
|
||||||
|
"zC.n",
|
||||||
|
"qkek",
|
||||||
|
"skfk",
|
||||||
|
"love",
|
||||||
|
"tkrhk",
|
||||||
|
"Tkrhk"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/* Error: Undefined mixin.
|
||||||
|
* ,
|
||||||
|
* 190 | / @include size-medium {
|
||||||
|
* 191 | | font-size: var(--wb-button--mobile-font-size-#{$unit});
|
||||||
|
* 192 | \ }
|
||||||
|
* '
|
||||||
|
* source/dist/scss/common/mixins/_utils.scss 190:2 btn-size()
|
||||||
|
* source/dist/scss/component/_button.scss 68:3 button-size-variable()
|
||||||
|
* source/dist/scss/component/_button.scss 254:2 @import
|
||||||
|
* source/dist/scss/component/component.scss 6:9 root stylesheet */
|
||||||
|
|
||||||
|
body::before {
|
||||||
|
font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
|
||||||
|
"Droid Sans Mono", monospace, monospace;
|
||||||
|
white-space: pre;
|
||||||
|
display: block;
|
||||||
|
padding: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
border-bottom: 2px solid black;
|
||||||
|
content: "Error: Undefined mixin.\a \2577 \a 190 \2502 \250c @include size-medium {\a 191 \2502 \2502 font-size: var(--wb-button--mobile-font-size-#{$unit});\a 192 \2502 \2514 }\a \2575 \a source/dist/scss/common/mixins/_utils.scss 190:2 btn-size()\a source/dist/scss/component/_button.scss 68:3 button-size-variable()\a source/dist/scss/component/_button.scss 254:2 @import\a source/dist/scss/component/component.scss 6:9 root stylesheet";
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sourceRoot":"","sources":["../../../source/dist/scss/component/component.css"],"names":[],"mappings":";AACA;AACA;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACI;EACI;EACR;EACI;EACI;EACR;EACA;EACI;EACI;EACR;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACQ;;;AAGV;EACE;;;AAGF;EACE;EACQ;;;AAGV;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAEF","file":"component.css"}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/* Error: Undefined mixin.
|
||||||
|
* ,
|
||||||
|
* 190 | / @include size-medium {
|
||||||
|
* 191 | | font-size: var(--wb-button--mobile-font-size-#{$unit});
|
||||||
|
* 192 | \ }
|
||||||
|
* '
|
||||||
|
* source/dist/scss/common/mixins/_utils.scss 190:2 btn-size()
|
||||||
|
* source/dist/scss/component/_button.scss 68:3 button-size-variable()
|
||||||
|
* source/dist/scss/component/_button.scss 254:2 @import
|
||||||
|
* source/dist/scss/component/component.scss 6:9 @import
|
||||||
|
* source/dist/scss/component/output.scss 7:10 root stylesheet */
|
||||||
|
|
||||||
|
body::before {
|
||||||
|
font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono",
|
||||||
|
"Droid Sans Mono", monospace, monospace;
|
||||||
|
white-space: pre;
|
||||||
|
display: block;
|
||||||
|
padding: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
border-bottom: 2px solid black;
|
||||||
|
content: "Error: Undefined mixin.\a \2577 \a 190 \2502 \250c @include size-medium {\a 191 \2502 \2502 font-size: var(--wb-button--mobile-font-size-#{$unit});\a 192 \2502 \2514 }\a \2575 \a source/dist/scss/common/mixins/_utils.scss 190:2 btn-size()\a source/dist/scss/component/_button.scss 68:3 button-size-variable()\a source/dist/scss/component/_button.scss 254:2 @import\a source/dist/scss/component/component.scss 6:9 @import\a source/dist/scss/component/output.scss 7:10 root stylesheet";
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sourceRoot":"","sources":["../../source/dist/scss/reset.scss"],"names":[],"mappings":"AAAA;AAEA;AACA;EACE;EACA;;;AAGF;EACE;EACA;;;AAIF;AACA;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;;;AAGF;AACA;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;AACA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;;;AAGF;AAEE;EACE;;;AAIJ;EACE;;;AAIF;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AAGT;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AAGT;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AAGT;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AAGT;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AAGT;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AAGT;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AAGT;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AAGT;EAAO;;;AACP;EAAW;;;AACX;EAAW;;;AACX;EAAY;;;AACZ;EAAc;;;AACd;EAAS;;;AACT;EAAY;;;AACZ;EAAe;;;AACf;EAAY;;;AAGZ;EAAgB;;;AAChB;EAAc;;;AACd;EAAiB;;;AACjB;EAAkB;;;AAClB;EAAiB;;;AACjB;EAAiB;;;AAGjB;EAAc;;;AACd;EAAY;;;AACZ;EAAe;;;AACf;EAAiB;;;AACjB;EAAgB;;;AAGhB;EAAY;;;AACZ;EAAa;;;AACb;EAAW;;;AACX;EAAc;;;AACd;EAAe;;;AAGf;EAAe;;;AAGf;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AAET;EACE;;;AAGF;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAe;;;AACf;EAAe;;;AACf;EAAe;;;AAEf;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AAEd;EAAgB;;;AAChB;EAAgB;;;AAChB;EAAsB;;;AACtB;EAAsB;;;AAEtB;EAAiB;;;AACjB;EAAe;;;AAEf;EAAiB;;;AACjB;EAAe","file":"reset.css"}
|
||||||
|
After Width: | Height: | Size: 468 B |
|
After Width: | Height: | Size: 305 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="12" height="24" viewBox="0 0 12 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M2.45199 6.57999L3.51299 5.51999L9.29199 11.297C9.38514 11.3896 9.45907 11.4996 9.50952 11.6209C9.55997 11.7421 9.58594 11.8722 9.58594 12.0035C9.58594 12.1348 9.55997 12.2648 9.50952 12.3861C9.45907 12.5073 9.38514 12.6174 9.29199 12.71L3.51299 18.49L2.45299 17.43L7.87699 12.005L2.45199 6.57999Z" fill="#6D7882"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 428 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M5.4125 8.5L5.525 6.80467L4.0875 7.75061L3.5 6.75553L5.05 6.00614L3.5 5.24447L4.0875 4.24939L5.525 5.19533L5.4125 3.5H6.5875L6.475 5.19533L7.9125 4.24939L8.5 5.24447L6.95 6.00614L8.5 6.75553L7.9125 7.75061L6.475 6.80467L6.5875 8.5H5.4125Z" fill="#DE3412"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 369 B |
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M14.252 18.6842C13.9173 18.6842 13.6827 18.5171 13.2895 18.1485L10.2595 15.3864L4.60948 15.3946C2.11484 15.4032 0.775551 14.0135 0.775551 11.561V5.14925C0.775551 2.69675 2.11484 1.31567 4.60912 1.31567H15.3905C17.8763 1.31567 19.2241 2.68817 19.2241 5.14925V11.561C19.2241 14.0217 17.8766 15.3946 15.3905 15.3864H14.997V17.8221C14.997 18.341 14.7209 18.6842 14.252 18.6842ZM9.94126 9.79496C10.3766 9.79496 10.6277 9.53532 10.6445 9.09174L10.753 4.95674C10.7698 4.49603 10.4266 4.16996 9.94948 4.16996C9.48091 4.16996 9.11269 4.5046 9.12912 4.96496L9.25484 9.09174C9.27162 9.54389 9.51412 9.79496 9.94126 9.79496ZM9.94126 12.8753C10.4184 12.8753 10.8788 12.4903 10.8788 11.971C10.8788 11.4517 10.4266 11.0675 9.94126 11.0675C9.44734 11.0675 9.00376 11.4439 9.00376 11.971C9.00376 12.4985 9.45591 12.8753 9.94126 12.8753Z" fill="#DE3412"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 950 B |
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="35" height="34" viewBox="0 0 35 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_2244_15248)">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.0636 7.83696V9.99689C34.0636 10.1904 33.93 10.353 33.7401 10.3904L32.5745 10.6202L31.735 12.6463L32.3968 13.6332C32.5046 13.7939 32.4842 14.0033 32.3474 14.1402L30.82 15.6675C30.6832 15.8043 30.4738 15.8248 30.313 15.717L29.3261 15.0552L27.3 15.8946L27.0702 17.0603C27.0327 17.2501 26.8702 17.3837 26.6767 17.3837H25.581L23.0316 12.968C23.7733 13.4387 24.6531 13.7114 25.5966 13.7114C28.2446 13.7114 30.3912 11.5648 30.3912 8.91693C30.3912 6.26904 28.2446 4.12239 25.5966 4.12239C22.9487 4.12239 20.8021 6.26898 20.8021 8.91693C20.8021 8.983 20.8038 9.04868 20.8064 9.11409L19.703 7.20285C19.5059 6.86132 19.2681 6.55904 18.9974 6.30006L19.4583 5.18748L18.7965 4.20062C18.6887 4.03992 18.7092 3.83047 18.846 3.69361L20.3733 2.16633C20.5102 2.02954 20.7196 2.00908 20.8803 2.11686L21.8671 2.77866L23.8932 1.93929L24.1231 0.77366C24.1605 0.583805 24.323 0.450195 24.5166 0.450195H26.6766C26.8701 0.450195 27.0327 0.583805 27.0701 0.77366L27.3 1.93929L29.3261 2.77866L30.3129 2.11686C30.4737 2.00908 30.683 2.02954 30.82 2.16633L32.3473 3.69361C32.4842 3.83047 32.5045 4.03992 32.3968 4.20062L31.735 5.18748L32.5744 7.21361L33.74 7.44344C33.9299 7.48089 34.0635 7.64339 34.0635 7.83696H34.0636ZM25.5968 12.5065C26.0307 12.5065 26.3824 12.1548 26.3824 11.7209C26.3824 11.287 26.0307 10.9352 25.5968 10.9352C25.1629 10.9352 24.8111 11.287 24.8111 11.7209C24.8111 12.1548 25.1629 12.5065 25.5968 12.5065ZM25.5968 10.0975C25.9121 10.0975 26.1678 9.84183 26.1678 9.5264V5.8983C26.1678 5.58293 25.9121 5.32727 25.5968 5.32727C25.2814 5.32727 25.0257 5.58293 25.0257 5.8983V9.5264C25.0257 9.84177 25.2814 10.0975 25.5968 10.0975ZM31.2359 29.0374C31.7882 29.9941 31.7882 31.0891 31.2359 32.0457C30.6835 33.0023 29.7352 33.5499 28.6306 33.5499H3.95497C2.85037 33.5499 1.90202 33.0023 1.34972 32.0457C0.797488 31.0891 0.797488 29.994 1.34972 29.0374L13.6875 7.66769C14.2398 6.71104 15.1882 6.16352 16.2928 6.16352C17.3974 6.16352 18.3457 6.71104 18.898 7.66769L31.2359 29.0374ZM21.9941 20.1354C21.651 19.4656 21.2679 18.8187 20.8004 17.787C20.522 17.1726 20.3466 16.5912 20.3648 16.0763C19.1544 17.4823 19.824 18.7393 19.3191 20.2547C19.0185 17.3783 15.3982 15.1449 18.572 11.8525C12.1866 13.4098 14.3974 17.5602 13.5688 20.1606C12.6918 22.9128 10.7283 19.5372 11.8636 16.6187C10.449 17.8213 9.43196 20.3466 9.31097 22.7532C9.01028 28.7338 12.5061 31.0691 16.5444 31.0869C19.7357 31.0869 22.7243 29.1906 23.2235 25.9137C23.5098 24.0347 22.8673 21.8404 21.994 20.1354H21.9941ZM18.454 23.2841C17.4302 22.5815 16.4154 22.2188 16.5156 20.3255C14.9211 21.2748 14.8902 22.8084 15.2627 24.1117C15.6134 25.3392 14.5219 25.9423 13.6143 25.1019C13.1493 24.6713 12.821 23.964 12.7164 23.4634C12.4953 24.0179 12.3633 24.6565 12.3305 25.309C12.1678 28.5448 14.125 29.9066 16.4542 29.9066C17.39 29.8929 18.1959 29.6357 18.8785 29.1625C21.041 27.6632 20.4985 24.687 18.454 23.2841Z" fill="#CDD1D5"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_2244_15248">
|
||||||
|
<rect width="34" height="34" fill="white" transform="translate(0.5)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="35" height="34" viewBox="0 0 35 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_2244_15254)">
|
||||||
|
<path d="M26.4007 31.8751H4.57031V4.01652H9.00784V4.84507C9.00784 5.43183 9.48351 5.90757 10.0703 5.90757H19.8382C20.425 5.90757 20.9007 5.43183 20.9007 4.84507V4.01652H25.3382V11.9199C25.3382 12.5066 25.8139 12.9824 26.4007 12.9824C26.9875 12.9824 27.4632 12.5066 27.4632 11.9199V2.95402C27.4632 2.36725 26.9875 1.89152 26.4007 1.89152H20.9007V1.0625C20.9007 0.475734 20.425 0 19.8382 0H10.0703C9.48351 0 9.00784 0.475734 9.00784 1.0625V1.89152H3.50781C2.92098 1.89152 2.44531 2.36725 2.44531 2.95402V32.9376C2.44531 33.5244 2.92098 34.0001 3.50781 34.0001H26.4007C26.9875 34.0001 27.4632 33.5244 27.4632 32.9376C27.4632 32.3509 26.9875 31.8751 26.4007 31.8751ZM11.1328 2.125H18.7757V3.78257H11.1328V2.125ZM22.4576 12.6451H13.9594C13.3725 12.6451 12.8969 12.1693 12.8969 11.5826C12.8969 10.9958 13.3725 10.5201 13.9594 10.5201H22.4577C23.0445 10.5201 23.5202 10.9958 23.5202 11.5826C23.5202 12.1693 23.0445 12.6451 22.4576 12.6451ZM11.4619 10.1083C11.4619 9.52153 10.9862 9.04579 10.3994 9.04579H7.45088C6.86405 9.04579 6.38838 9.52153 6.38838 10.1083V13.0568C6.38838 13.6436 6.86405 14.1193 7.45088 14.1193H10.3994C10.9862 14.1193 11.4619 13.6436 11.4619 13.0568V10.1083ZM9.33689 11.9944H8.51338V11.1709H9.33689V11.9944ZM20.3486 19.6722H13.9593C13.3725 19.6722 12.8968 19.1965 12.8968 18.6097C12.8968 18.0229 13.3725 17.5472 13.9593 17.5472H20.3486C20.9355 17.5472 21.4111 18.0229 21.4111 18.6097C21.4111 19.1965 20.9355 19.6722 20.3486 19.6722ZM11.4619 17.1355C11.4619 16.5487 10.9862 16.073 10.3994 16.073H7.45088C6.86405 16.073 6.38838 16.5487 6.38838 17.1355V20.084C6.38838 20.6708 6.86405 21.1465 7.45088 21.1465H10.3994C10.9862 21.1465 11.4619 20.6708 11.4619 20.084V17.1355ZM9.33689 19.0215H8.51338V18.1979H9.33689V19.0215ZM17.9331 24.5747C18.5199 24.5747 18.9956 25.0504 18.9956 25.6372C18.9956 26.224 18.5199 26.6997 17.9331 26.6997H13.9593C13.3725 26.6997 12.8968 26.224 12.8968 25.6372C12.8968 25.0504 13.3725 24.5747 13.9593 24.5747H17.9331ZM10.3994 23.1005H7.45088C6.86405 23.1005 6.38838 23.5762 6.38838 24.163V27.1115C6.38838 27.6982 6.86405 28.174 7.45088 28.174H10.3994C10.9862 28.174 11.4619 27.6982 11.4619 27.1115V24.163C11.4619 23.5761 10.9862 23.1005 10.3994 23.1005ZM9.33689 26.049H8.51338V25.2255H9.33689V26.049ZM26.4005 21.7567C23.0072 21.7567 20.2466 24.5176 20.2466 27.9111C20.2466 28.5598 20.5437 29.7574 22.5331 30.4898C23.5712 30.872 24.9447 31.0825 26.4007 31.0825C27.8567 31.0825 29.2302 30.8721 30.2683 30.4898C32.2577 29.7574 32.5548 28.5598 32.5548 27.9111C32.5548 24.5176 29.7941 21.7567 26.4005 21.7567ZM29.5341 28.4957C28.737 28.7891 27.595 28.9574 26.4007 28.9574C25.2065 28.9574 24.0644 28.7891 23.2673 28.4957C22.5838 28.244 22.3716 27.9791 22.3716 27.911C22.3716 25.6892 24.1789 23.8817 26.4005 23.8817C28.6223 23.8817 30.4298 25.6892 30.4298 27.911C30.4298 27.9791 30.2176 28.244 29.5341 28.4957ZM22.9852 17.6717C22.9852 19.5552 24.5173 21.0875 26.4006 21.0875C28.284 21.0875 29.8164 19.5552 29.8164 17.6717C29.8164 15.7884 28.2841 14.2563 26.4006 14.2563C24.5173 14.2563 22.9852 15.7884 22.9852 17.6717ZM27.6913 17.6717C27.6913 18.3834 27.1122 18.9625 26.4005 18.9625C25.689 18.9625 25.1101 18.3834 25.1101 17.6717C25.1101 16.9602 25.689 16.3813 26.4005 16.3813C27.1122 16.3813 27.6913 16.9602 27.6913 17.6717Z" fill="#F4F5F6"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_2244_15254">
|
||||||
|
<rect width="34" height="34" fill="white" transform="translate(0.5)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,19 @@
|
|||||||
|
<svg width="35" height="34" viewBox="0 0 35 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_2244_15260)">
|
||||||
|
<path d="M25.9489 17.6696V6.23321C25.9489 5.25442 25.1247 4.43018 24.1459 4.43018H22.3944H16.7792H11.2156H5.65196H3.84893C2.87014 4.43018 2.0459 5.25442 2.0459 6.23321V30.6514C2.0459 31.6302 2.87014 32.4544 3.84893 32.4544H24.0944C25.1247 32.4544 25.8974 31.6302 25.8974 30.6514V25.7059" stroke="#F4F5F6" stroke-width="2.09952" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M22.3428 6.74844V1.54541" stroke="#F4F5F6" stroke-width="2.09952" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M16.7793 6.74844V1.54541" stroke="#F4F5F6" stroke-width="2.09952" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M11.2158 6.74844V1.54541" stroke="#F4F5F6" stroke-width="2.09952" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M5.65234 6.74844V1.54541" stroke="#F4F5F6" stroke-width="2.09952" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M6.68262 17.4636H20.6947" stroke="#F4F5F6" stroke-width="2.09952" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M6.68262 12.5696H20.6947" stroke="#F4F5F6" stroke-width="2.09952" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M6.68262 22.3574H16.0584" stroke="#F4F5F6" stroke-width="2.09952" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M6.68262 27.2515H15.7493" stroke="#F4F5F6" stroke-width="2.09952" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M32.1307 19.5242L24.8671 26.7878L19.0459 28.6424L20.8489 22.8212L28.1126 15.5575C29.2459 14.4242 30.9974 14.4242 32.1307 15.5575C32.6974 16.1242 32.955 16.8454 32.955 17.5666C32.955 18.2878 32.6974 19.009 32.1307 19.5242Z" stroke="#F4F5F6" stroke-width="2.09952" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_2244_15260">
|
||||||
|
<rect width="34" height="34" fill="white" transform="translate(0.5)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
<svg width="35" height="34" viewBox="0 0 35 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_2244_15279)">
|
||||||
|
<path d="M30.25 1.0625H4.75C3.62323 1.06379 2.54297 1.51198 1.74622 2.30872C0.949476 3.10547 0.501294 4.18573 0.5 5.3125L0.5 28.6875C0.501294 29.8143 0.949476 30.8945 1.74622 31.6913C2.54297 32.488 3.62323 32.9362 4.75 32.9375H30.25C31.3768 32.9362 32.457 32.488 33.2538 31.6913C34.0505 30.8945 34.4987 29.8143 34.5 28.6875V5.3125C34.4987 4.18573 34.0505 3.10547 33.2538 2.30872C32.457 1.51198 31.3768 1.06379 30.25 1.0625ZM32.375 28.6875C32.375 29.2511 32.1511 29.7916 31.7526 30.1901C31.3541 30.5886 30.8136 30.8125 30.25 30.8125H4.75C4.18641 30.8125 3.64591 30.5886 3.2474 30.1901C2.84888 29.7916 2.625 29.2511 2.625 28.6875V5.3125C2.625 4.74891 2.84888 4.20841 3.2474 3.8099C3.64591 3.41138 4.18641 3.1875 4.75 3.1875H30.25C30.8136 3.1875 31.3541 3.41138 31.7526 3.8099C32.1511 4.20841 32.375 4.74891 32.375 5.3125V28.6875Z" fill="#F4F5F6"/>
|
||||||
|
<path d="M11.125 8.5H23.875C24.1568 8.5 24.427 8.38806 24.6263 8.1888C24.8256 7.98954 24.9375 7.71929 24.9375 7.4375C24.9375 7.15571 24.8256 6.88546 24.6263 6.6862C24.427 6.48694 24.1568 6.375 23.875 6.375H11.125C10.8432 6.375 10.573 6.48694 10.3737 6.6862C10.1744 6.88546 10.0625 7.15571 10.0625 7.4375C10.0625 7.71929 10.1744 7.98954 10.3737 8.1888C10.573 8.38806 10.8432 8.5 11.125 8.5Z" fill="#F4F5F6"/>
|
||||||
|
<path d="M6.875 8.5C7.4618 8.5 7.9375 8.0243 7.9375 7.4375C7.9375 6.8507 7.4618 6.375 6.875 6.375C6.2882 6.375 5.8125 6.8507 5.8125 7.4375C5.8125 8.0243 6.2882 8.5 6.875 8.5Z" fill="#F4F5F6"/>
|
||||||
|
<path d="M28.125 8.5C28.7118 8.5 29.1875 8.0243 29.1875 7.4375C29.1875 6.8507 28.7118 6.375 28.125 6.375C27.5382 6.375 27.0625 6.8507 27.0625 7.4375C27.0625 8.0243 27.5382 8.5 28.125 8.5Z" fill="#F4F5F6"/>
|
||||||
|
<path d="M26 24.7031H13.2287C13.2657 24.7004 13.2955 24.7031 13.3331 24.6989C15.807 24.5807 18.1994 23.7776 20.2434 22.379C21.8696 21.2011 23.1704 19.6297 24.0237 17.812L25.0505 19.8658C25.1391 20.0423 25.275 20.1907 25.443 20.2944C25.6111 20.3981 25.8047 20.4531 26.0021 20.4531C26.1667 20.4535 26.3292 20.4151 26.4762 20.3411C26.601 20.2788 26.7124 20.1924 26.8038 20.087C26.8953 19.9816 26.9651 19.8592 27.0092 19.7268C27.0534 19.5944 27.071 19.4546 27.0611 19.3154C27.0512 19.1762 27.014 19.0403 26.9516 18.9155L24.8266 14.6655C24.8208 14.654 24.81 14.6476 24.8038 14.6366C24.7628 14.5699 24.7144 14.508 24.6595 14.4521C24.624 14.4048 24.5847 14.3605 24.542 14.3195C24.4884 14.2825 24.4315 14.2503 24.372 14.2235C24.3102 14.185 24.2444 14.1531 24.1759 14.1283C24.1634 14.1245 24.1546 14.1147 24.1415 14.1113C24.0905 14.1047 24.0392 14.102 23.9878 14.1032C23.9139 14.0911 23.8389 14.0872 23.7641 14.0915C23.6914 14.1032 23.6202 14.1226 23.5516 14.1493C23.5004 14.159 23.45 14.1727 23.4009 14.1901L19.1509 16.3151C18.8988 16.4411 18.7071 16.6621 18.618 16.9295C18.5288 17.1969 18.5495 17.4887 18.6755 17.7408C18.8016 17.9929 19.0226 18.1846 19.2899 18.2737C19.5573 18.3629 19.8491 18.3422 20.1012 18.2161L21.882 17.3258C21.1934 18.6419 20.2092 19.7806 19.0066 20.6524C17.2729 21.8185 15.2522 22.4861 13.165 22.5824C12.8095 22.6102 12.4888 22.6162 12.1875 22.6157V13.0156C12.1875 12.7338 12.0756 12.4636 11.8763 12.2643C11.677 12.0651 11.4068 11.9531 11.125 11.9531C10.8432 11.9531 10.573 12.0651 10.3737 12.2643C10.1744 12.4636 10.0625 12.7338 10.0625 13.0156V25.7656C10.0625 26.0474 10.1744 26.3177 10.3737 26.5169C10.573 26.7162 10.8432 26.8281 11.125 26.8281H26C26.2818 26.8281 26.552 26.7162 26.7513 26.5169C26.9506 26.3177 27.0625 26.0474 27.0625 25.7656C27.0625 25.4838 26.9506 25.2136 26.7513 25.0143C26.552 24.8151 26.2818 24.7031 26 24.7031Z" fill="#F4F5F6"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_2244_15279">
|
||||||
|
<rect width="34" height="34" fill="white" transform="translate(0.5)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -0,0 +1,16 @@
|
|||||||
|
<svg width="35" height="34" viewBox="0 0 35 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_2244_15290)">
|
||||||
|
<path d="M25.2913 33.9999C20.214 33.9999 16.083 29.8689 16.083 24.7916C16.083 19.7143 20.214 15.5833 25.2913 15.5833C30.3687 15.5833 34.4997 19.7143 34.4997 24.7916C34.4997 29.8689 30.3687 33.9999 25.2913 33.9999ZM25.2913 17.7083C21.3856 17.7083 18.208 20.8858 18.208 24.7916C18.208 28.6973 21.3856 31.8749 25.2913 31.8749C29.1971 31.8749 32.3747 28.6973 32.3747 24.7916C32.3747 20.8858 29.1971 17.7083 25.2913 17.7083Z" fill="#F4F5F6"/>
|
||||||
|
<path d="M25.292 29.7501C24.7055 29.7501 24.2295 29.2741 24.2295 28.6876V23.7292C24.2295 23.1427 24.7055 22.6667 25.292 22.6667C25.8785 22.6667 26.3545 23.1427 26.3545 23.7292V28.6876C26.3545 29.2741 25.8785 29.7501 25.292 29.7501Z" fill="#F4F5F6"/>
|
||||||
|
<path d="M25.292 21.9583C25.8788 21.9583 26.3545 21.4826 26.3545 20.8958C26.3545 20.3089 25.8788 19.8333 25.292 19.8333C24.7052 19.8333 24.2295 20.3089 24.2295 20.8958C24.2295 21.4826 24.7052 21.9583 25.292 21.9583Z" fill="#F4F5F6"/>
|
||||||
|
<path d="M12.1875 29.75H4.39583C2.24675 29.75 0.5 28.0032 0.5 25.8542V3.89583C0.5 1.74675 2.24675 0 4.39583 0H19.2708C21.4199 0 23.1667 1.74675 23.1667 3.89583V11.6875C23.1667 12.274 22.6907 12.75 22.1042 12.75C21.5177 12.75 21.0417 12.274 21.0417 11.6875V3.89583C21.0417 2.91975 20.2469 2.125 19.2708 2.125H4.39583C3.41975 2.125 2.625 2.91975 2.625 3.89583V25.8542C2.625 26.8302 3.41975 27.625 4.39583 27.625H12.1875C12.774 27.625 13.25 28.101 13.25 28.6875C13.25 29.274 12.774 29.75 12.1875 29.75Z" fill="#F4F5F6"/>
|
||||||
|
<path d="M14.3125 18.4166C13.726 18.4166 13.25 17.9406 13.25 17.3541V8.14575C13.25 7.55925 13.726 7.08325 14.3125 7.08325H17.8542C18.4407 7.08325 18.9167 7.55925 18.9167 8.14575V14.5208C18.9167 15.1073 18.4407 15.5833 17.8542 15.5833C17.2677 15.5833 16.7917 15.1073 16.7917 14.5208V9.20825H15.375V17.3541C15.375 17.9406 14.899 18.4166 14.3125 18.4166Z" fill="#F4F5F6"/>
|
||||||
|
<path d="M9.35417 21.25H5.8125C5.226 21.25 4.75 20.774 4.75 20.1875V13.8125C4.75 13.226 5.226 12.75 5.8125 12.75H9.35417C9.94067 12.75 10.4167 13.226 10.4167 13.8125V20.1875C10.4167 20.774 9.94067 21.25 9.35417 21.25ZM6.875 19.125H8.29167V14.875H6.875V19.125Z" fill="#F4F5F6"/>
|
||||||
|
<path d="M12.1872 21.25H4.39551C3.80901 21.25 3.33301 20.774 3.33301 20.1875C3.33301 19.601 3.80901 19.125 4.39551 19.125H12.1872C12.7737 19.125 13.2497 19.601 13.2497 20.1875C13.2497 20.774 12.7737 21.25 12.1872 21.25Z" fill="#F4F5F6"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_2244_15290">
|
||||||
|
<rect width="34" height="34" fill="white" transform="translate(0.5)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="35" height="34" viewBox="0 0 35 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_2244_15330)">
|
||||||
|
<path d="M33.9787 20.196C33.5891 19.5174 32.7235 19.2822 32.0449 19.6761L30.6608 20.4737C29.8038 19.55 28.6874 18.8785 27.4181 18.5881V17C27.4181 16.218 26.7848 15.5833 26.0014 15.5833C25.218 15.5833 24.5847 16.218 24.5847 17V18.5881C23.3154 18.8785 22.1977 19.5486 21.342 20.4737L19.9579 19.6761C19.2793 19.2837 18.4123 19.5188 18.0242 20.196C17.6332 20.8746 17.8669 21.7402 18.5441 22.1297L19.9367 22.9316C19.7539 23.5238 19.6278 24.14 19.6278 24.7917C19.6278 25.4433 19.7539 26.0596 19.9367 26.6517L18.5441 27.4536C17.8655 27.8432 17.6318 28.7102 18.0242 29.3873C18.2862 29.8421 18.7623 30.0971 19.2524 30.0971C19.4918 30.0971 19.7355 30.0362 19.9579 29.9072L21.342 29.1097C22.1991 30.0333 23.3154 30.7048 24.5847 30.9952V32.5833C24.5847 33.3667 25.218 34 26.0014 34C26.7848 34 27.4181 33.3667 27.4181 32.5833V30.9952C28.6874 30.7048 29.8052 30.0347 30.6608 29.1097L32.0449 29.9072C32.2673 30.0362 32.511 30.0971 32.7504 30.0971C33.2406 30.0971 33.718 29.8421 33.9787 29.3873C34.3697 28.7087 34.1359 27.8432 33.4587 27.4536L32.0662 26.6517C32.2489 26.0596 32.375 25.4433 32.375 24.7917C32.375 24.14 32.2489 23.5238 32.0662 22.9316L33.4587 22.1297C34.1373 21.7402 34.3711 20.8732 33.9787 20.196ZM26 28.3333C24.0464 28.3333 22.4583 26.7452 22.4583 24.7917C22.4583 22.8381 24.0464 21.25 26 21.25C27.9536 21.25 29.5417 22.8381 29.5417 24.7917C29.5417 26.7452 27.9536 28.3333 26 28.3333ZM27.4167 2.83333H18.1687C17.9505 2.83333 17.7309 2.78092 17.5368 2.68458L13.0644 0.447667C12.4779 0.154417 11.8206 0 11.1647 0H7.58333C3.67758 0 0.5 3.17758 0.5 7.08333V24.0833C0.5 27.9891 3.67758 31.1667 7.58333 31.1667H13.25C14.0334 31.1667 14.6667 30.5334 14.6667 29.75C14.6667 28.9666 14.0334 28.3333 13.25 28.3333H7.58333C5.24017 28.3333 3.33333 26.4265 3.33333 24.0833V11.3333H31.6667V15.5833C31.6667 16.3653 32.2999 17 33.0833 17C33.8667 17 34.5 16.3653 34.5 15.5833V9.91667C34.5 6.01092 31.3224 2.83333 27.4167 2.83333ZM3.33333 7.08333C3.33333 4.74017 5.24017 2.83333 7.58333 2.83333H11.1647C11.3828 2.83333 11.6024 2.88575 11.7965 2.98208L16.2675 5.21758C16.854 5.51083 17.5113 5.66525 18.1672 5.66525H27.4153C29.2598 5.66525 30.8181 6.85383 31.4046 8.49858H3.33333V7.08333Z" fill="#F4F5F6"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_2244_15330">
|
||||||
|
<rect width="34" height="34" fill="white" transform="translate(0.5)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.4 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="4" height="16" viewBox="0 0 4 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="2" cy="2" r="2" fill="#DE3412"/>
|
||||||
|
<circle cx="2" cy="8" r="2" fill="#346FB2"/>
|
||||||
|
<circle cx="2" cy="14" r="2" fill="#228738"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 237 B |
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g id="Frame 27">
|
||||||
|
<g id="person">
|
||||||
|
<path id="Vector (Stroke)" fill-rule="evenodd" clip-rule="evenodd" d="M16.0007 4.41743C13.6246 4.41743 11.306 5.14812 9.35932 6.51044C7.4126 7.87276 5.93192 9.80079 5.11805 12.0331C4.30418 14.2654 4.19648 16.694 4.80958 18.9896C5.3108 20.8663 6.27395 22.5799 7.60239 23.9784C8.0639 22.4005 8.96383 20.9747 10.2106 19.8743C11.0188 19.161 11.9446 18.6093 12.9381 18.2381C12.6625 18.0497 12.4031 17.835 12.1637 17.5956C11.1463 16.5782 10.5747 15.1982 10.5747 13.7593C10.5747 12.3204 11.1463 10.9405 12.1637 9.92305C13.1812 8.9056 14.5611 8.334 16 8.334C17.4389 8.334 18.8188 8.9056 19.8363 9.92305C20.8537 10.9405 21.4253 12.3204 21.4253 13.7593C21.4253 15.1982 20.8537 16.5782 19.8363 17.5956C19.5969 17.835 19.3374 18.0497 19.0619 18.2381C20.0554 18.6093 20.9812 19.161 21.7894 19.8743C23.0364 20.9749 23.9365 22.4011 24.3979 23.9795C25.7269 22.5808 26.6904 20.8668 27.1917 18.9896C27.8048 16.694 27.6971 14.2654 26.8833 12.0331C26.0694 9.80079 24.5887 7.87276 22.642 6.51044C20.6953 5.14812 18.3767 4.41743 16.0007 4.41743ZM24.3934 26.0364C24.4029 26.0292 24.4122 26.0217 24.4214 26.014C26.4754 24.2867 27.9485 21.9695 28.641 19.3767C29.3334 16.7838 29.2118 14.0407 28.2925 11.5193C27.3733 8.99791 25.7008 6.82021 23.502 5.28148C21.3032 3.74275 18.6844 2.91743 16.0007 2.91743C13.3169 2.91743 10.6981 3.74275 8.49929 5.28148C6.30048 6.82021 4.62806 8.99791 3.70879 11.5193C2.78952 14.0407 2.66789 16.7838 3.36037 19.3767C4.05274 21.9691 5.52544 24.2859 7.57887 26.0131C9.93392 28.0012 12.918 29.0892 16 29.0833C19.0699 29.0891 22.0427 28.0097 24.3934 26.0364ZM23.1309 25.1294C22.8389 23.5337 22.019 22.0776 20.7969 20.999C19.4724 19.83 17.7666 19.1848 16.0001 19.1847M23.1309 25.1294C21.1004 26.7217 18.5899 27.5885 16.0015 27.5833H15.9985C13.4101 27.5885 10.8996 26.7217 8.86904 25.1294C9.16106 23.5337 9.981 22.0776 11.2031 20.999C12.5276 19.83 14.2335 19.1848 16.0001 19.1847M16.0001 17.6847C14.959 17.6847 13.9605 17.2711 13.2244 16.535C12.4882 15.7988 12.0747 14.8004 12.0747 13.7593C12.0747 12.7183 12.4882 11.7198 13.2244 10.9837C13.9605 10.2476 14.9589 9.834 16 9.834C17.0411 9.834 18.0395 10.2476 18.7756 10.9837C19.5118 11.7198 19.9253 12.7183 19.9253 13.7593C19.9253 14.8004 19.5118 15.7988 18.7756 16.535C18.0395 17.2711 17.0411 17.6847 16.0001 17.6847Z" fill="#58616A" style="fill:#58616A;fill:color(display-p3 0.3451 0.3804 0.4157);fill-opacity:1;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 2.3 MiB |
@@ -0,0 +1,875 @@
|
|||||||
|
@import "tokens";
|
||||||
|
.flex{
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.d-block{
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
/* Body 스크롤 비활성화 */
|
||||||
|
.no-scroll {
|
||||||
|
overflow: hidden;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Content 스크롤 활성화 */
|
||||||
|
.scrollable {
|
||||||
|
overflow-y: auto;
|
||||||
|
scroll-behavior: smooth; /* 부드러운 스크롤 */
|
||||||
|
-webkit-overflow-scrolling: touch; /* iOS 스크롤 동작 개선 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.w-100{
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
.justify-end{
|
||||||
|
justify-content: end;
|
||||||
|
}
|
||||||
|
.gap-2{
|
||||||
|
gap: .5rem;
|
||||||
|
}
|
||||||
|
.btn-wrap .k-button{
|
||||||
|
min-width: 9.375rem !important;
|
||||||
|
}
|
||||||
|
.k-input-flat, .k-dropdownlist {
|
||||||
|
border-bottom: 1px solid #cdcdcd !important;
|
||||||
|
min-height: 2.1875rem;
|
||||||
|
}
|
||||||
|
.k-input-md .k-input-inner, .k-picker-md .k-input-inner{
|
||||||
|
max-height: 9.375rem;
|
||||||
|
width:100%;
|
||||||
|
border:none;
|
||||||
|
padding: $tb-figma-semantic-padding-metric-3
|
||||||
|
}
|
||||||
|
.wrap {
|
||||||
|
align-items: flex-start;
|
||||||
|
background-color: $tb-figma-primitive-color-light-gray-color-0-1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
position: relative;
|
||||||
|
row-gap: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
width: 100%;
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
|
.k-static{
|
||||||
|
position: static !important;
|
||||||
|
}
|
||||||
|
.wrap .alarm {
|
||||||
|
border : .0625rem solid $tb-figma-primitive-color-light-danger-color-50-1;
|
||||||
|
border-radius: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
align-items: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
column-gap: $tb-figma-spacing-w-bspacing-2;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
position: absolute;
|
||||||
|
right: 32px;
|
||||||
|
top: 82px;
|
||||||
|
}
|
||||||
|
.wrap .text {
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 150%;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
.wrap .Container {
|
||||||
|
align-items: flex-start;
|
||||||
|
align-self: stretch;
|
||||||
|
column-gap: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 90px 1fr;
|
||||||
|
height: 100%;
|
||||||
|
padding-bottom: 50px;
|
||||||
|
}
|
||||||
|
.wrap .Content {
|
||||||
|
align-items: flex-start;
|
||||||
|
align-self: stretch;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: $tb-figma-spacing-w-bspacing-9 $tb-figma-spacing-w-bspacing-8;
|
||||||
|
row-gap: $tb-figma-spacing-w-bspacing-7;
|
||||||
|
}
|
||||||
|
.wrap .Section {
|
||||||
|
align-items: flex-start;
|
||||||
|
align-self: stretch;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
row-gap: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
}
|
||||||
|
.wrap .tit-import{
|
||||||
|
color: $tb-figma-primitive-color-light-danger-color-60-1;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 18px;
|
||||||
|
position: absolute;
|
||||||
|
right:0;
|
||||||
|
}
|
||||||
|
.wrap .frame-3465198-1 {
|
||||||
|
align-items: flex-start;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
row-gap: 2px;
|
||||||
|
}
|
||||||
|
.wrap .grid-area {
|
||||||
|
align-items: flex-start;
|
||||||
|
align-self: stretch;
|
||||||
|
background-color: $tb-figma-primitive-color-light-secondary-color-10-1;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
border-bottom-right-radius: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
border-top-left-radius: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
border-top-right-radius: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding-bottom: $tb-figma-spacing-w-bspacing-6;
|
||||||
|
padding-left: $tb-figma-spacing-w-bspacing-7;
|
||||||
|
padding-right: $tb-figma-spacing-w-bspacing-7;
|
||||||
|
padding-top: $tb-figma-spacing-w-bspacing-8;
|
||||||
|
row-gap: $tb-figma-spacing-w-bspacing-5;
|
||||||
|
}
|
||||||
|
.ico-title-be{
|
||||||
|
width: .5rem !important;
|
||||||
|
height: 1.5rem !important;
|
||||||
|
}
|
||||||
|
.wrap .grid {
|
||||||
|
align-items: flex-start;
|
||||||
|
align-self: stretch;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
border-bottom-right-radius: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
border-top-left-radius: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
border-top-right-radius: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 360px;
|
||||||
|
overflow: hidden;
|
||||||
|
row-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
.k-grid.k-grid-md{
|
||||||
|
background-color: transparent;
|
||||||
|
border:none;
|
||||||
|
.k-grid-pager{
|
||||||
|
background: none;
|
||||||
|
border:none;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.wrap .header-row {
|
||||||
|
align-items: flex-start;
|
||||||
|
align-self: stretch;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.wrap .header-cell-7 {
|
||||||
|
align-items: flex-start;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
.wrap .base-grid-header-cell-7 {
|
||||||
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
background-color: $tb-figma-primitive-color-light-graphic-color-50-2;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-40-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
.wrap .content-7 {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-1-2;
|
||||||
|
display: flex;
|
||||||
|
height: 28px;
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
.wrap .text-21 {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-5-1;
|
||||||
|
font-family: "Pretendard GOV";
|
||||||
|
font-feature-settings: "liga" off, "clig" off;
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 28px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .header-cell-6 {
|
||||||
|
align-items: flex-start;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.wrap .base-grid-header-cell-6 {
|
||||||
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
background-color: $tb-figma-primitive-color-light-graphic-color-50-2;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-40-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.wrap .content-6 {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-1-2;
|
||||||
|
display: flex;
|
||||||
|
height: 28px;
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
.wrap .text-20 {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-5-1;
|
||||||
|
font-family: "Pretendard GOV";
|
||||||
|
font-feature-settings: "liga" off, "clig" off;
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 28px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .header-cell-5 {
|
||||||
|
align-items: flex-start;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
.wrap .base-grid-header-cell-5 {
|
||||||
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
background-color: $tb-figma-primitive-color-light-graphic-color-50-2;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-40-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
.wrap .content-5 {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-1-2;
|
||||||
|
display: flex;
|
||||||
|
height: 28px;
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
.wrap .text-19 {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-5-1;
|
||||||
|
font-family: "Pretendard GOV";
|
||||||
|
font-feature-settings: "liga" off, "clig" off;
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 28px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .header-cell-4 {
|
||||||
|
align-items: flex-start;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
.wrap .base-grid-header-cell-4 {
|
||||||
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
background-color: $tb-figma-primitive-color-light-graphic-color-50-2;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-40-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
.wrap .content-4 {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-1-2;
|
||||||
|
display: flex;
|
||||||
|
height: 28px;
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
.wrap .text-18 {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-5-1;
|
||||||
|
font-family: "Pretendard GOV";
|
||||||
|
font-feature-settings: "liga" off, "clig" off;
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 28px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .header-cell-3 {
|
||||||
|
align-items: flex-start;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 250px;
|
||||||
|
}
|
||||||
|
.wrap .base-grid-header-cell-3 {
|
||||||
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
background-color: $tb-figma-primitive-color-light-graphic-color-50-2;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-40-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 250px;
|
||||||
|
}
|
||||||
|
.wrap .content-3 {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-1-2;
|
||||||
|
display: flex;
|
||||||
|
height: 28px;
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
.wrap .text-17 {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-5-1;
|
||||||
|
font-family: "Pretendard GOV";
|
||||||
|
font-feature-settings: "liga" off, "clig" off;
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 28px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .header-cell-2 {
|
||||||
|
align-items: flex-start;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.wrap .base-grid-header-cell-2 {
|
||||||
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
background-color: $tb-figma-primitive-color-light-graphic-color-50-2;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-40-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.wrap .content-2 {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-1-2;
|
||||||
|
display: flex;
|
||||||
|
height: 28px;
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
.wrap .text-16 {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-5-1;
|
||||||
|
font-family: "Pretendard GOV";
|
||||||
|
font-feature-settings: "liga" off, "clig" off;
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 28px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .header-cell-1 {
|
||||||
|
align-items: flex-start;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 170px;
|
||||||
|
}
|
||||||
|
.wrap .base-grid-header-cell-1 {
|
||||||
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
background-color: $tb-figma-primitive-color-light-graphic-color-50-2;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-40-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 170px;
|
||||||
|
}
|
||||||
|
.wrap .content-1 {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-1-2;
|
||||||
|
display: flex;
|
||||||
|
height: 28px;
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
.wrap .text-15 {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-5-1;
|
||||||
|
font-family: "Pretendard GOV";
|
||||||
|
font-feature-settings: "liga" off, "clig" off;
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 28px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .header-cell {
|
||||||
|
align-items: flex-start;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 53px;
|
||||||
|
}
|
||||||
|
.wrap .base-grid-header-cell {
|
||||||
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
background-color: $tb-figma-primitive-color-light-graphic-color-50-2;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-bottom-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-40-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-left-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
border-top-right-radius: $tb-figma-border-radii-border-radius-null;
|
||||||
|
box-sizing: border-box;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
display: flex;
|
||||||
|
height: 40px;
|
||||||
|
justify-content: center;
|
||||||
|
padding-left: $tb-figma-spacing-w-bspacing-5;
|
||||||
|
padding-right: $tb-figma-spacing-w-bspacing-5;
|
||||||
|
width: 53px;
|
||||||
|
}
|
||||||
|
.wrap .content {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-kendo-spacing-1-2;
|
||||||
|
display: flex;
|
||||||
|
height: 28px;
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
.wrap .text-14 {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-5-1;
|
||||||
|
font-family: "Pretendard GOV";
|
||||||
|
font-feature-settings: "liga" off, "clig" off;
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 28px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .column-num {
|
||||||
|
align-items: flex-start;
|
||||||
|
column-gap: $tb-figma-spacing-w-bspacing-1;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.wrap .frame-3465173 {
|
||||||
|
align-items: flex-start;
|
||||||
|
column-gap: $tb-figma-spacing-w-bspacing-1;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.wrap .text-13 {
|
||||||
|
align-items: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
column-gap: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding-left: 1px;
|
||||||
|
padding-right: 1px;
|
||||||
|
}
|
||||||
|
.wrap .caption-10 {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-90-1;
|
||||||
|
font-family: "Pretendard GOV";
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 150%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .text-12 {
|
||||||
|
align-items: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
column-gap: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding-left: 1px;
|
||||||
|
padding-right: 1px;
|
||||||
|
}
|
||||||
|
.column-num .num {
|
||||||
|
color: $tb-figma-primitive-color-light-danger-color-50-1;
|
||||||
|
}
|
||||||
|
.k-radio{
|
||||||
|
width: 1.8rem !important;
|
||||||
|
height: 1.8rem !important;
|
||||||
|
}
|
||||||
|
.wrap .cont-area {
|
||||||
|
align-items: flex-start;
|
||||||
|
align-self: stretch;
|
||||||
|
border-bottom-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-bottom-left-radius: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
border-bottom-right-radius: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
border-left-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-left-style: solid;
|
||||||
|
border-left-width: 1px;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
border-top-left-radius: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
border-top-right-radius: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-width: 1px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding-bottom: $tb-figma-spacing-w-bspacing-6;
|
||||||
|
padding-left: $tb-figma-spacing-w-bspacing-7;
|
||||||
|
padding-right: $tb-figma-spacing-w-bspacing-7;
|
||||||
|
padding-top: $tb-figma-spacing-w-bspacing-8;
|
||||||
|
row-gap: $tb-figma-spacing-w-bspacing-5;
|
||||||
|
}
|
||||||
|
.wrap .form-sec {
|
||||||
|
align-items: flex-start;
|
||||||
|
align-self: stretch;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
row-gap: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
}
|
||||||
|
.wrap .label {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-70-1;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.wrap .area-title {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-w-bspacing-2;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.wrap .h-6-title {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-100-1;
|
||||||
|
font-size: 21px;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 150%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .title {
|
||||||
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
column-gap: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.wrap .h-5-title{
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-100-1;
|
||||||
|
font-size: 25px;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 150%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.wrap .h-7-title {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: 800;
|
||||||
|
color:$tb-figma-primitive-color-high-contrast-gray-color-50;
|
||||||
|
}
|
||||||
|
.wrap .head {
|
||||||
|
align-items: flex-start;
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom-left-radius: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
border-bottom-right-radius: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
border-top-left-radius: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
border-top-right-radius: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
width: 100%;
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 9;
|
||||||
|
}
|
||||||
|
.wrap .header {
|
||||||
|
@extend %tb-effects-figma-effects-shadow-y-12;
|
||||||
|
align-items: center;
|
||||||
|
border-bottom-left-radius: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
border-bottom-right-radius: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
border-top-left-radius: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
border-top-right-radius: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 0;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding-bottom: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
padding-left: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
padding-right: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
padding-top: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.wrap .user-info-container {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.wrap .button-group {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
}
|
||||||
|
.wrap .text-2 {
|
||||||
|
align-items: center;
|
||||||
|
border-bottom-color: $tb-figma-primitive-color-light-gray-color-50-3;
|
||||||
|
border-bottom-left-radius: $tb-figma-semantic-radius-small-1-1;
|
||||||
|
border-bottom-right-radius: $tb-figma-semantic-radius-small-1-1;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
border-left-color: $tb-figma-primitive-color-light-gray-color-50-3;
|
||||||
|
border-left-style: solid;
|
||||||
|
border-left-width: 1px;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-50-3;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-color: $tb-figma-primitive-color-light-gray-color-50-3;
|
||||||
|
border-top-left-radius: $tb-figma-semantic-radius-small-1-1;
|
||||||
|
border-top-right-radius: $tb-figma-semantic-radius-small-1-1;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-width: 1px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
column-gap: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
max-width: 110px;
|
||||||
|
min-width: 100px;
|
||||||
|
padding-bottom: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
padding-left: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
padding-right: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
padding-top: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
}
|
||||||
|
.wrap .logout-text {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-60-2;
|
||||||
|
font-size: 15px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 150%;
|
||||||
|
}
|
||||||
|
.wrap .text-1 {
|
||||||
|
align-items: center;
|
||||||
|
border-bottom-color: $tb-figma-primitive-color-light-gray-color-50-3;
|
||||||
|
border-bottom-left-radius: $tb-figma-semantic-radius-small-1-1;
|
||||||
|
border-bottom-right-radius: $tb-figma-semantic-radius-small-1-1;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
border-left-color: $tb-figma-primitive-color-light-gray-color-50-3;
|
||||||
|
border-left-style: solid;
|
||||||
|
border-left-width: 1px;
|
||||||
|
border-right-color: $tb-figma-primitive-color-light-gray-color-50-3;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-color: $tb-figma-primitive-color-light-gray-color-50-3;
|
||||||
|
border-top-left-radius: $tb-figma-semantic-radius-small-1-1;
|
||||||
|
border-top-right-radius: $tb-figma-semantic-radius-small-1-1;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-width: 1px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
column-gap: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
max-width: 110px;
|
||||||
|
min-width: 100px;
|
||||||
|
padding-bottom: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
padding-left: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
padding-right: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
padding-top: $tb-figma-spacing-w-bspacing-3;
|
||||||
|
}
|
||||||
|
.wrap .mobile-text {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-60-2;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 150%;
|
||||||
|
}
|
||||||
|
.head-user{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: $tb-figma-spacing-w-bspacing-2;
|
||||||
|
margin-right: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
}
|
||||||
|
.wrap .text {
|
||||||
|
align-items: center;
|
||||||
|
border-radius: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding-left: $tb-figma-spacing-w-bspacing-2;
|
||||||
|
i{
|
||||||
|
color:var(--wb-color-light-point-50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.wrap .text-group {
|
||||||
|
align-items: center;
|
||||||
|
column-gap: $tb-figma-spacing-w-bspacing-2;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.wrap .name {
|
||||||
|
color: $tb-figma-primitive-color-light-primary-color-50-4;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 150%;
|
||||||
|
}
|
||||||
|
.wrap .department {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-95-1;
|
||||||
|
font-size: 15px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 150%;
|
||||||
|
}
|
||||||
|
.wrap .proicons-person-circle {
|
||||||
|
height: 32px;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 32px;
|
||||||
|
}
|
||||||
|
.wrap .logo-container {
|
||||||
|
height: 49px;
|
||||||
|
position: relative;
|
||||||
|
width: 341px;
|
||||||
|
}
|
||||||
|
.wrap .mask-group {
|
||||||
|
flex-shrink: 0;
|
||||||
|
height: 47px;
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 2px;
|
||||||
|
width: 341px;
|
||||||
|
}
|
||||||
|
.wrap .image {
|
||||||
|
flex-shrink: 0;
|
||||||
|
height: 44px;
|
||||||
|
left: 6px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
width: 335px;
|
||||||
|
}
|
||||||
|
.wrap .system-name {
|
||||||
|
color: $tb-figma-primitive-color-light-primary-color-95-2;
|
||||||
|
font-size: 20px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
left: 60px;
|
||||||
|
line-height: 150%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,929 @@
|
|||||||
|
// Compatible with @progress/kendo-theme-default v.10.0.0
|
||||||
|
|
||||||
|
$tb-figma-primitive-number-metric-5: 8px;
|
||||||
|
$tb-figma-primitive-number-metric-3: 4px;
|
||||||
|
$tb-kendo-input-border-width: 1px;
|
||||||
|
$tb-figma-mode-border-width-static-medium: 2px;
|
||||||
|
$tb-figma-mode-border-width-static-regular: 1px;
|
||||||
|
$tb-figma-mode-border-width-variable-medium: 3px;
|
||||||
|
$tb-figma-mode-border-width-variable-regular: 2px;
|
||||||
|
$tb-figma-mode-shadow-blur-3: 16px;
|
||||||
|
$tb-figma-mode-shadow-blur-4: 24px;
|
||||||
|
$tb-figma-mode-shadow-y-3: 8px;
|
||||||
|
$tb-figma-mode-shadow-y-4: 16px;
|
||||||
|
$tb-figma-primitive-number-metric-0: 0px;
|
||||||
|
$tb-figma-primitive-number-metric-1: 1px;
|
||||||
|
$tb-figma-primitive-number-metric-10: 24px;
|
||||||
|
$tb-figma-primitive-number-metric-11: 28px;
|
||||||
|
$tb-figma-primitive-number-metric-12: 32px;
|
||||||
|
$tb-figma-primitive-number-metric-13: 36px;
|
||||||
|
$tb-figma-primitive-number-metric-14: 40px;
|
||||||
|
$tb-figma-primitive-number-metric-15: 44px;
|
||||||
|
$tb-figma-primitive-number-metric-16: 48px;
|
||||||
|
$tb-figma-primitive-number-metric-17: 56px;
|
||||||
|
$tb-figma-primitive-number-metric-18: 64px;
|
||||||
|
$tb-figma-primitive-number-metric-19: 72px;
|
||||||
|
$tb-figma-primitive-number-metric-2: 2px;
|
||||||
|
$tb-figma-primitive-number-metric-20: 80px;
|
||||||
|
$tb-figma-primitive-number-metric-21: 96px;
|
||||||
|
$tb-figma-primitive-number-metric-4: 6px;
|
||||||
|
$tb-figma-primitive-number-metric-6: 10px;
|
||||||
|
$tb-figma-primitive-number-metric-7: 12px;
|
||||||
|
$tb-figma-primitive-number-metric-8: 16px;
|
||||||
|
$tb-figma-primitive-number-metric-9: 20px;
|
||||||
|
$tb-figma-primitive-number-max: 1000px;
|
||||||
|
$tb-figma-primitive-typo-letter-spacing-metric-0: 0px;
|
||||||
|
$tb-figma-primitive-typo-letter-spacing-metric-1: 1px;
|
||||||
|
$tb-figma-responsive-font-size-body-large: 19px;
|
||||||
|
$tb-figma-responsive-font-size-body-medium: 17px;
|
||||||
|
$tb-figma-responsive-font-size-body-small: 15px;
|
||||||
|
$tb-figma-responsive-font-size-body-xsmall: 13px;
|
||||||
|
$tb-figma-responsive-font-size-display-large: 60px;
|
||||||
|
$tb-figma-responsive-font-size-display-medium: 44px;
|
||||||
|
$tb-figma-responsive-font-size-display-small: 36px;
|
||||||
|
$tb-figma-responsive-font-size-heading-large: 32px;
|
||||||
|
$tb-figma-responsive-font-size-heading-medium: 24px;
|
||||||
|
$tb-figma-responsive-font-size-heading-small: 19px;
|
||||||
|
$tb-figma-responsive-font-size-heading-xlarge: 40px;
|
||||||
|
$tb-figma-responsive-font-size-heading-xsmall: 17px;
|
||||||
|
$tb-figma-responsive-font-size-heading-xxsmall: 15px;
|
||||||
|
$tb-figma-responsive-font-size-label-large: 19px;
|
||||||
|
$tb-figma-responsive-font-size-label-medium: 17px;
|
||||||
|
$tb-figma-responsive-font-size-label-small: 15px;
|
||||||
|
$tb-figma-responsive-font-size-label-xsmall: 13px;
|
||||||
|
$tb-figma-responsive-font-size-navigation-depth-medium: 17px;
|
||||||
|
$tb-figma-responsive-font-size-navigation-depth-medium-bold: 17px;
|
||||||
|
$tb-figma-responsive-font-size-navigation-depth-small: 15px;
|
||||||
|
$tb-figma-responsive-font-size-navigation-depth-small-bold: 15px;
|
||||||
|
$tb-figma-responsive-font-size-navigation-title-medium: 24px;
|
||||||
|
$tb-figma-responsive-font-size-navigation-title-small: 19px;
|
||||||
|
$tb-figma-border-radii-border-radius-full: 9999px;
|
||||||
|
$tb-figma-spacing-kendo-spacing-1-1: 4px;
|
||||||
|
$tb-figma-spacing-kendo-spacing-0-1: 0px;
|
||||||
|
$tb-figma-primitive-number-metric-3-1: 4px;
|
||||||
|
$tb-figma-primitive-number-metric-5-1: 8px;
|
||||||
|
$tb-figma-size-space-metric-100: 4px;
|
||||||
|
$tb-figma-spacing-kendo-spacing-1-2: 12px;
|
||||||
|
$tb-figma-spacing-kendo-spacing-15: 6px;
|
||||||
|
$tb-figma-spacing-kendo-spacing-2-1: 8px;
|
||||||
|
$tb-figma-spacing-kendo-spacing-2-2: 8px;
|
||||||
|
$tb-figma-spacing-kendo-spacing-7: 28px;
|
||||||
|
$tb-figma-spacing-kendo-spacing-0-2: 0px;
|
||||||
|
$tb-figma-spacing-w-bspacing-0: 0px;
|
||||||
|
$tb-figma-spacing-w-bspacing-1: 2px;
|
||||||
|
$tb-figma-spacing-w-bspacing-11: 56px;
|
||||||
|
$tb-figma-spacing-w-bspacing-2: 4px;
|
||||||
|
$tb-figma-spacing-w-bspacing-3: 8px;
|
||||||
|
$tb-figma-spacing-w-bspacing-4: 12px;
|
||||||
|
$tb-figma-spacing-w-bspacing-5: 16px;
|
||||||
|
$tb-figma-spacing-w-bspacing-6: 20px;
|
||||||
|
$tb-figma-spacing-w-bspacing-7: 24px;
|
||||||
|
$tb-figma-spacing-w-bspacing-8: 32px;
|
||||||
|
$tb-figma-spacing-w-bspacing-9: 40px;
|
||||||
|
$tb-figma-typography-letter-spacing-null-6: 1.25px;
|
||||||
|
$tb-figma-semantic-padding-metric-3: $tb-figma-primitive-number-metric-5;
|
||||||
|
$tb-kendo-button-padding-x: $tb-figma-semantic-padding-metric-3;
|
||||||
|
$tb-kendo-button-padding-y: $tb-figma-primitive-number-metric-3;
|
||||||
|
$tb-figma-responsive-gap-layout-breadcrumb-h-1: $tb-figma-primitive-number-metric-14;
|
||||||
|
$tb-figma-responsive-gap-layout-contents-footer: $tb-figma-primitive-number-metric-18;
|
||||||
|
$tb-figma-responsive-gap-layout-contents-right: $tb-figma-primitive-number-metric-14;
|
||||||
|
$tb-figma-responsive-gap-layout-h-1-h-2: $tb-figma-primitive-number-metric-16;
|
||||||
|
$tb-figma-responsive-gap-layout-h-2-h-2: $tb-figma-primitive-number-metric-20;
|
||||||
|
$tb-figma-responsive-gap-layout-h-2-h-3: $tb-figma-primitive-number-metric-14;
|
||||||
|
$tb-figma-responsive-gap-layout-h-3-h-3: $tb-figma-primitive-number-metric-18;
|
||||||
|
$tb-figma-responsive-gap-layout-h-3-h-4: $tb-figma-primitive-number-metric-10;
|
||||||
|
$tb-figma-responsive-gap-layout-h-4-h-4: $tb-figma-primitive-number-metric-14;
|
||||||
|
$tb-figma-responsive-gap-layout-h-4-h-5: $tb-figma-primitive-number-metric-8;
|
||||||
|
$tb-figma-responsive-gap-layout-h-5-h-5: $tb-figma-primitive-number-metric-12;
|
||||||
|
$tb-figma-responsive-gap-layout-header-breadcrumb: $tb-figma-primitive-number-metric-10;
|
||||||
|
$tb-figma-responsive-gap-layout-image-text-large: $tb-figma-primitive-number-metric-12;
|
||||||
|
$tb-figma-responsive-gap-layout-image-text-medium: $tb-figma-primitive-number-metric-10;
|
||||||
|
$tb-figma-responsive-gap-layout-image-text-small: $tb-figma-primitive-number-metric-9;
|
||||||
|
$tb-figma-responsive-gap-layout-left-contents: $tb-figma-primitive-number-metric-18;
|
||||||
|
$tb-figma-responsive-gap-layout-text-text-large: $tb-figma-primitive-number-metric-9;
|
||||||
|
$tb-figma-responsive-gap-layout-text-text-medium: $tb-figma-primitive-number-metric-8;
|
||||||
|
$tb-figma-responsive-gap-layout-text-text-small: $tb-figma-primitive-number-metric-7;
|
||||||
|
$tb-figma-responsive-gap-layout-title-body-large: $tb-figma-primitive-number-metric-10;
|
||||||
|
$tb-figma-responsive-gap-layout-title-body-medium: $tb-figma-primitive-number-metric-9;
|
||||||
|
$tb-figma-responsive-gap-layout-title-body-small: $tb-figma-primitive-number-metric-8;
|
||||||
|
$tb-figma-responsive-padding-card-large: $tb-figma-primitive-number-metric-14;
|
||||||
|
$tb-figma-responsive-padding-card-medium: $tb-figma-primitive-number-metric-12;
|
||||||
|
$tb-figma-responsive-padding-card-small: $tb-figma-primitive-number-metric-10;
|
||||||
|
$tb-figma-responsive-padding-card-xsmall: $tb-figma-primitive-number-metric-8;
|
||||||
|
$tb-figma-semantic-gap-metric-1: $tb-figma-primitive-number-metric-2;
|
||||||
|
$tb-figma-semantic-gap-metric-10: $tb-figma-primitive-number-metric-16;
|
||||||
|
$tb-figma-semantic-gap-metric-11: $tb-figma-primitive-number-metric-18;
|
||||||
|
$tb-figma-semantic-gap-metric-12: $tb-figma-primitive-number-metric-20;
|
||||||
|
$tb-figma-semantic-gap-metric-2: $tb-figma-primitive-number-metric-3;
|
||||||
|
$tb-figma-semantic-gap-metric-3: $tb-figma-primitive-number-metric-5;
|
||||||
|
$tb-figma-semantic-gap-metric-4: $tb-figma-primitive-number-metric-7;
|
||||||
|
$tb-figma-semantic-gap-metric-5: $tb-figma-primitive-number-metric-8;
|
||||||
|
$tb-figma-semantic-gap-metric-6: $tb-figma-primitive-number-metric-9;
|
||||||
|
$tb-figma-semantic-gap-metric-7: $tb-figma-primitive-number-metric-10;
|
||||||
|
$tb-figma-semantic-gap-metric-8: $tb-figma-primitive-number-metric-12;
|
||||||
|
$tb-figma-semantic-gap-metric-9: $tb-figma-primitive-number-metric-14;
|
||||||
|
$tb-figma-semantic-padding-metric-1: $tb-figma-primitive-number-metric-2;
|
||||||
|
$tb-figma-semantic-padding-metric-10: $tb-figma-primitive-number-metric-14;
|
||||||
|
$tb-figma-semantic-padding-metric-2: $tb-figma-primitive-number-metric-3;
|
||||||
|
$tb-figma-semantic-padding-metric-4: $tb-figma-primitive-number-metric-6;
|
||||||
|
$tb-figma-semantic-padding-metric-5: $tb-figma-primitive-number-metric-7;
|
||||||
|
$tb-figma-semantic-padding-metric-6: $tb-figma-primitive-number-metric-8;
|
||||||
|
$tb-figma-semantic-padding-metric-7: $tb-figma-primitive-number-metric-9;
|
||||||
|
$tb-figma-semantic-padding-metric-8: $tb-figma-primitive-number-metric-10;
|
||||||
|
$tb-figma-semantic-padding-metric-9: $tb-figma-primitive-number-metric-12;
|
||||||
|
$tb-figma-semantic-radius-large-1: $tb-figma-primitive-number-metric-6;
|
||||||
|
$tb-figma-semantic-radius-large-2: $tb-figma-primitive-number-metric-6;
|
||||||
|
$tb-figma-semantic-radius-max: $tb-figma-primitive-number-max;
|
||||||
|
$tb-figma-semantic-radius-medium-1: $tb-figma-primitive-number-metric-4;
|
||||||
|
$tb-figma-semantic-radius-medium-2: $tb-figma-primitive-number-metric-4;
|
||||||
|
$tb-figma-semantic-radius-medium-3: $tb-figma-primitive-number-metric-5;
|
||||||
|
$tb-figma-semantic-radius-medium-4: $tb-figma-primitive-number-metric-5;
|
||||||
|
$tb-figma-semantic-radius-small-1: $tb-figma-primitive-number-metric-3;
|
||||||
|
$tb-figma-semantic-radius-small-2: $tb-figma-primitive-number-metric-3;
|
||||||
|
$tb-figma-semantic-radius-small-3: $tb-figma-primitive-number-metric-3;
|
||||||
|
$tb-figma-semantic-radius-xlarge-1: $tb-figma-primitive-number-metric-7;
|
||||||
|
$tb-figma-semantic-radius-xlarge-2: $tb-figma-primitive-number-metric-7;
|
||||||
|
$tb-figma-semantic-radius-xsmall-1: $tb-figma-primitive-number-metric-2;
|
||||||
|
$tb-figma-semantic-radius-xsmall-2: $tb-figma-primitive-number-metric-2;
|
||||||
|
$tb-figma-semantic-radius-xsmall-3: $tb-figma-primitive-number-metric-2;
|
||||||
|
$tb-figma-semantic-size-height-metric-1: $tb-figma-primitive-number-metric-5;
|
||||||
|
$tb-figma-semantic-size-height-metric-10: $tb-figma-primitive-number-metric-19;
|
||||||
|
$tb-figma-semantic-size-height-metric-11: $tb-figma-primitive-number-metric-20;
|
||||||
|
$tb-figma-semantic-size-height-metric-2: $tb-figma-primitive-number-metric-8;
|
||||||
|
$tb-figma-semantic-size-height-metric-3: $tb-figma-primitive-number-metric-9;
|
||||||
|
$tb-figma-semantic-size-height-metric-4: $tb-figma-primitive-number-metric-10;
|
||||||
|
$tb-figma-semantic-size-height-metric-5: $tb-figma-primitive-number-metric-12;
|
||||||
|
$tb-figma-semantic-size-height-metric-6: $tb-figma-primitive-number-metric-14;
|
||||||
|
$tb-figma-semantic-size-height-metric-7: $tb-figma-primitive-number-metric-16;
|
||||||
|
$tb-figma-semantic-size-height-metric-8: $tb-figma-primitive-number-metric-17;
|
||||||
|
$tb-figma-semantic-size-height-metric-9: $tb-figma-primitive-number-metric-18;
|
||||||
|
$tb-figma-border-radii-border-radius-md: $tb-figma-spacing-kendo-spacing-1-1;
|
||||||
|
$tb-figma-border-radii-border-radius-null: $tb-figma-spacing-kendo-spacing-0-1;
|
||||||
|
$tb-figma-semantic-radius-medium-3-1: $tb-figma-primitive-number-metric-5-1;
|
||||||
|
$tb-figma-semantic-radius-small-1-1: $tb-figma-primitive-number-metric-3-1;
|
||||||
|
$tb-on-app-surface: #3d3d3d;
|
||||||
|
$tb-surface-alt: #ffffff;
|
||||||
|
$tb-border: rgba(0, 0, 0, 0.08);
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-50: #256ef4;
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-60: #0b50d0;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-5: #f4f5f6;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-90: #1e2124;
|
||||||
|
$tb-on-primary: #ffffff;
|
||||||
|
$tb-error: #f31700;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-50: #6d7882;
|
||||||
|
$tb-base: #f5f5f5;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-10: #d8e5fd;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-50: #6d7882;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-30: #b1b8be;
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-70: #083891;
|
||||||
|
$tb-app-surface: #ffffff;
|
||||||
|
$tb-kendo-scrollview-navigation-color: white;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-20: #cdd1d5;
|
||||||
|
$tb-figma-primitive-color-light-alpha-white-0: rgba(255, 255, 255, 0);
|
||||||
|
$tb-figma-primitive-color-light-primary-color-50: #256ef4;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-5: #ecf2fe;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-70: #063a74;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-5: #eef2f7;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-0: #ffffff;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-10: #d6e0eb;
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-white-10: rgba(255, 255, 255, 0.1);
|
||||||
|
$tb-figma-primitive-color-light-alpha-white-100: #ffffff;
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-white-25: rgba(255, 255, 255, 0.25);
|
||||||
|
$tb-figma-primitive-color-light-alpha-white-50: rgba(255, 255, 255, 0.5);
|
||||||
|
$tb-figma-primitive-color-light-alpha-white-75: rgba(255, 255, 255, 0.75);
|
||||||
|
$tb-figma-primitive-color-light-alpha-black-0: rgba(0, 0, 0, 0);
|
||||||
|
$tb-figma-primitive-color-light-alpha-black-10: rgba(0, 0, 0, 0.1);
|
||||||
|
$tb-figma-primitive-color-light-alpha-black-100: #000000;
|
||||||
|
$tb-figma-primitive-color-light-alpha-black-25: rgba(0, 0, 0, 0.25);
|
||||||
|
$tb-figma-primitive-color-light-alpha-black-50: rgba(0, 0, 0, 0.5);
|
||||||
|
$tb-figma-primitive-color-light-alpha-black-75: rgba(0, 0, 0, 0.75);
|
||||||
|
$tb-figma-mode-color-alpha-shadow-1: rgba(0, 0, 0, 0.12);
|
||||||
|
$tb-figma-mode-color-alpha-shadow-2: rgba(0, 0, 0, 0.2);
|
||||||
|
$tb-figma-mode-color-alpha-shadow-3: rgba(0, 0, 0, 0.4);
|
||||||
|
$tb-figma-primitive-color-light-gray-color-10: #e6e8ea;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-5: #f4f5f6;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-90: #1e2124;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-50: #de3412;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-10: #fcdfd9;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-30: #b1b8be;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-60: #58616a;
|
||||||
|
$tb-figma-primitive-color-light-information-color-50: #0b78cb;
|
||||||
|
$tb-figma-primitive-color-light-information-color-10: #d3ebfd;
|
||||||
|
$tb-figma-primitive-color-light-point-color-50: #d63d4a;
|
||||||
|
$tb-figma-primitive-color-light-point-color-10: #f5d6d9;
|
||||||
|
$tb-figma-primitive-color-light-success-color-50: #228738;
|
||||||
|
$tb-figma-primitive-color-light-success-color-10: #d8eedd;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-50: #9e6a00;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-10: #ffe0a3;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-60: #0b50d0;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-70: #083891;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-20: #b1cefb;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-40: #8a949e;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-5: #fdefec;
|
||||||
|
$tb-figma-primitive-color-light-information-color-5: #e7f4fe;
|
||||||
|
$tb-figma-mode-color-element-logo-text: #ffffff;
|
||||||
|
$tb-figma-primitive-color-light-point-color-5: #fbeff0;
|
||||||
|
$tb-figma-primitive-color-light-success-color-5: #eaf6ec;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-30: #ffb114;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-5: #fff3db;
|
||||||
|
$tb-figma-primitive-color-light-graphic-color-50: #61758f;
|
||||||
|
$tb-figma-primitive-color-light-graphic-color-70: #39506c;
|
||||||
|
$tb-figma-primitive-color-light-graphic-color-90: #223a58;
|
||||||
|
$tb-figma-primitive-color-light-graphic-color-30: #98acc5;
|
||||||
|
$tb-figma-primitive-color-light-graphic-color-10: #e5ecf9;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-20: #ebadb2;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-40: #d65c66;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-70: #7a1f26;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-80: #33363d;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-70: #464c53;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-80: #052b57;
|
||||||
|
$tb-figma-mode-color-link-visited: #c49ff9;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-95: #131416;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-60: #bd2c0f;
|
||||||
|
$tb-figma-primitive-color-light-information-color-60: #096ab3;
|
||||||
|
$tb-figma-primitive-color-light-point-color-60: #ab2b36;
|
||||||
|
$tb-figma-primitive-color-light-success-color-60: #267337;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-60: #8a5c00;
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-black-0: rgba(0, 0, 0, 0);
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-black-10: rgba(0, 0, 0, 0.1);
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-black-100: #000000;
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-black-25: rgba(0, 0, 0, 0.25);
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-black-50: rgba(0, 0, 0, 0.5);
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-black-75: rgba(0, 0, 0, 0.75);
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-white-0: rgba(255, 255, 255, 0);
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-white-100: #ffffff;
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-white-50: rgba(255, 255, 255, 0.5);
|
||||||
|
$tb-figma-primitive-color-high-contrast-alpha-white-75: rgba(255, 255, 255, 0.75);
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-10: #fcdfd9;
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-20: #f7afa1;
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-30: #f48771;
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-40: #f05f42;
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-5: #fdefec;
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-50: #de3412;
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-60: #bd2c0f;
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-70: #8a240f;
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-80: #5c180a;
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-90: #390d05;
|
||||||
|
$tb-figma-primitive-color-high-contrast-danger-color-95: #260903;
|
||||||
|
$tb-figma-primitive-color-high-contrast-graphic-color-10: #e5ecf9;
|
||||||
|
$tb-figma-primitive-color-high-contrast-graphic-color-30: #98acc5;
|
||||||
|
$tb-figma-primitive-color-high-contrast-graphic-color-50: #61758f;
|
||||||
|
$tb-figma-primitive-color-high-contrast-graphic-color-70: #39506c;
|
||||||
|
$tb-figma-primitive-color-high-contrast-graphic-color-90: #223a58;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-0: #ffffff;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-10: #e6e8ea;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-100: #000000;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-20: #cdd1d5;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-40: #8a949e;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-60: #58616a;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-70: #464c53;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-80: #33363d;
|
||||||
|
$tb-figma-primitive-color-high-contrast-gray-color-95: #131416;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-10: #d3ebfd;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-20: #9ed2fa;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-30: #5fb5f7;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-40: #2098f3;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-5: #e7f4fe;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-50: #0b78cb;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-60: #096ab3;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-70: #085691;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-80: #053961;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-90: #03253f;
|
||||||
|
$tb-figma-primitive-color-high-contrast-information-color-95: #021a2c;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-10: #f5d6d9;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-30: #e0858c;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-5: #fbeff0;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-50: #d63d4a;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-60: #ab2b36;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-80: #521419;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-90: #310c0f;
|
||||||
|
$tb-figma-primitive-color-high-contrast-point-color-95: #21080a;
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-10: #d8e5fd;
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-20: #b1cefb;
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-30: #86aff9;
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-40: #4c87f6;
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-5: #ecf2fe;
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-80: #052561;
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-90: #03163a;
|
||||||
|
$tb-figma-primitive-color-high-contrast-primary-color-95: #020f27;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-10: #d5ebf1;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-20: #abd8e3;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-30: #75c0d1;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-40: #3d9fb8;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-5: #edf6f8;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-50: #268097;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-60: #1f687a;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-70: #17505e;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-80: #113b45;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-90: #0e3139;
|
||||||
|
$tb-figma-primitive-color-high-contrast-secondary-color-95: #091f25;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-10: #d8eedd;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-20: #a9dab4;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-30: #7ec88e;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-40: #3fa654;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-5: #eaf6ec;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-50: #228738;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-60: #267337;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-70: #285d33;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-80: #1f4727;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-90: #122b18;
|
||||||
|
$tb-figma-primitive-color-high-contrast-success-color-95: #0e2012;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-10: #ffe0a3;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-20: #ffc95c;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-30: #ffb114;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-40: #c78500;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-5: #fff3db;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-50: #9e6a00;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-60: #8a5c00;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-70: #614100;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-80: #422c00;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-90: #2e1f00;
|
||||||
|
$tb-figma-primitive-color-high-contrast-warning-color-95: #241800;
|
||||||
|
$tb-figma-primitive-color-light-alpha-white-10: rgba(255, 255, 255, 0.1);
|
||||||
|
$tb-figma-primitive-color-light-alpha-white-25: rgba(255, 255, 255, 0.25);
|
||||||
|
$tb-figma-primitive-color-light-danger-color-20: #f7afa1;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-30: #f48771;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-40: #f05f42;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-70: #8a240f;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-80: #5c180a;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-90: #390d05;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-95: #260903;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-100: #000000;
|
||||||
|
$tb-figma-primitive-color-light-information-color-20: #9ed2fa;
|
||||||
|
$tb-figma-primitive-color-light-information-color-30: #5fb5f7;
|
||||||
|
$tb-figma-primitive-color-light-information-color-40: #2098f3;
|
||||||
|
$tb-figma-primitive-color-light-information-color-70: #085691;
|
||||||
|
$tb-figma-primitive-color-light-information-color-80: #053961;
|
||||||
|
$tb-figma-primitive-color-light-information-color-90: #03253f;
|
||||||
|
$tb-figma-primitive-color-light-information-color-95: #021a2c;
|
||||||
|
$tb-figma-primitive-color-light-point-color-20: #ebadb2;
|
||||||
|
$tb-figma-primitive-color-light-point-color-30: #e0858c;
|
||||||
|
$tb-figma-primitive-color-light-point-color-40: #d65c66;
|
||||||
|
$tb-figma-primitive-color-light-point-color-70: #7a1f26;
|
||||||
|
$tb-figma-primitive-color-light-point-color-80: #521419;
|
||||||
|
$tb-figma-primitive-color-light-point-color-90: #310c0f;
|
||||||
|
$tb-figma-primitive-color-light-point-color-95: #21080a;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-30: #86aff9;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-40: #4c87f6;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-80: #052561;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-90: #03163a;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-95: #020f27;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-20: #bacbde;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-30: #90b0d5;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-40: #6b96c7;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-50: #346fb2;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-60: #1c589c;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-90: #031f3f;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-95: #02162c;
|
||||||
|
$tb-figma-primitive-color-light-success-color-20: #a9dab4;
|
||||||
|
$tb-figma-primitive-color-light-success-color-30: #7ec88e;
|
||||||
|
$tb-figma-primitive-color-light-success-color-40: #3fa654;
|
||||||
|
$tb-figma-primitive-color-light-success-color-70: #285d33;
|
||||||
|
$tb-figma-primitive-color-light-success-color-80: #1f4727;
|
||||||
|
$tb-figma-primitive-color-light-success-color-90: #122b18;
|
||||||
|
$tb-figma-primitive-color-light-success-color-95: #0e2012;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-20: #ffc95c;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-40: #c78500;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-70: #614100;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-80: #422c00;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-90: #2e1f00;
|
||||||
|
$tb-figma-primitive-color-light-warning-color-95: #241800;
|
||||||
|
$tb-figma-colors-gray: linear-gradient(180deg, rgba(255, 255, 255, 0) 25%, #f4f5f6 100%);
|
||||||
|
$tb-figma-colors-secondary: linear-gradient(180deg, rgba(255, 255, 255, 0) 25%, #eef2f7 100%);
|
||||||
|
$tb-figma-colors-white: linear-gradient(180deg, rgba(255, 255, 255, 0.25) 25%, #ffffff 100%);
|
||||||
|
$tb-figma-primitive-color-light-alpha-white-10-1: rgba(255, 255, 255, 0.1);
|
||||||
|
$tb-figma-primitive-color-light-danger-color-50-1: #de3412;
|
||||||
|
$tb-figma-primitive-color-light-danger-color-60-1: #bd2c0f;
|
||||||
|
$tb-figma-primitive-color-light-graphic-color-50-2: #61758f;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-0-1: #ffffff;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-100-1: #000000;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-20-1: #cdd1d5;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-30-1: #b1b8be;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-40-1: #8a949e;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-5-1: #f4f5f6;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-50-3: #6d7882;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-60-2: #58616a;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-70-1: #464c53;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-90-1: #1e2124;
|
||||||
|
$tb-figma-primitive-color-light-gray-color-95-1: #131416;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-50-4: #256ef4;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-60-3: #0b50d0;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-80-1: #052561;
|
||||||
|
$tb-figma-primitive-color-light-primary-color-95-2: #020f27;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-10-1: #d6e0eb;
|
||||||
|
$tb-figma-primitive-color-light-secondary-color-80-2: #052b57;
|
||||||
|
$tb-figma-tailwindcss-blue-color-600: #2563eb;
|
||||||
|
$tb-figma-mode-color-button-primary-fill: $tb-figma-primitive-color-high-contrast-primary-color-50;
|
||||||
|
$tb-primary: $tb-figma-mode-color-button-primary-fill;
|
||||||
|
$tb-figma-mode-color-button-primary-fill-hover: $tb-figma-primitive-color-high-contrast-primary-color-60;
|
||||||
|
$tb-primary-hover: $tb-figma-mode-color-button-primary-fill-hover;
|
||||||
|
$tb-kendo-button-bg: $tb-figma-primitive-color-high-contrast-gray-color-5;
|
||||||
|
$tb-kendo-button-text: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-base-on-surface: $tb-figma-primitive-color-high-contrast-gray-color-50;
|
||||||
|
$tb-kendo-chip-outline-hover-text: $tb-base;
|
||||||
|
$tb-kendo-chip-outline-selected-text: $tb-kendo-chip-outline-hover-text;
|
||||||
|
$tb-primary-subtle: $tb-figma-primitive-color-light-primary-color-10;
|
||||||
|
$tb-kendo-input-text: $tb-figma-primitive-color-light-gray-color-50;
|
||||||
|
$tb-kendo-input-border: $tb-figma-primitive-color-high-contrast-gray-color-30;
|
||||||
|
$tb-kendo-input-hover-border: $tb-figma-primitive-color-high-contrast-gray-color-5;
|
||||||
|
$tb-kendo-input-flat-border: $tb-kendo-input-border;
|
||||||
|
$tb-kendo-input-invalid-border: $tb-error;
|
||||||
|
$tb-kendo-listbox-text: $tb-on-app-surface;
|
||||||
|
$tb-kendo-panelbar-item-selected-text: $tb-on-primary;
|
||||||
|
$tb-figma-mode-color-button-primary-fill-pressed: $tb-figma-primitive-color-high-contrast-primary-color-70;
|
||||||
|
$tb-primary-active: $tb-figma-mode-color-button-primary-fill-pressed;
|
||||||
|
$tb-kendo-splitter-border: $tb-border;
|
||||||
|
$tb-on-base: $tb-base-on-surface;
|
||||||
|
$tb-figma-disabled: $tb-figma-primitive-color-high-contrast-gray-color-80;
|
||||||
|
$tb-figma-primary: $tb-figma-primitive-color-high-contrast-alpha-black-0;
|
||||||
|
$tb-figma-primary-active: $tb-figma-primitive-color-high-contrast-primary-color-50;
|
||||||
|
$tb-figma-primary-hover: $tb-figma-primitive-color-high-contrast-primary-color-95;
|
||||||
|
$tb-figma-primary-pressed: $tb-figma-primitive-color-high-contrast-primary-color-90;
|
||||||
|
$tb-figma-primary-selected: $tb-figma-primitive-color-high-contrast-primary-color-95;
|
||||||
|
$tb-figma-secondary: $tb-figma-primitive-color-light-alpha-black-0;
|
||||||
|
$tb-figma-secondary-active: $tb-figma-primitive-color-high-contrast-secondary-color-60;
|
||||||
|
$tb-figma-secondary-hover: $tb-figma-primitive-color-high-contrast-secondary-color-95;
|
||||||
|
$tb-figma-secondary-on: $tb-figma-primitive-color-high-contrast-alpha-black-0;
|
||||||
|
$tb-figma-secondary-on-hover: $tb-figma-primitive-color-high-contrast-gray-color-100;
|
||||||
|
$tb-figma-secondary-on-pressed: $tb-figma-primitive-color-high-contrast-secondary-color-90;
|
||||||
|
$tb-figma-secondary-on-selected: $tb-figma-primitive-color-high-contrast-gray-color-95;
|
||||||
|
$tb-figma-secondary-pressed: $tb-figma-primitive-color-high-contrast-secondary-color-90;
|
||||||
|
$tb-figma-secondary-selected: $tb-figma-primitive-color-high-contrast-secondary-color-95;
|
||||||
|
$tb-figma-white: $tb-figma-primitive-color-light-gray-color-100;
|
||||||
|
$tb-figma-mode-color-alpha-base-0: $tb-figma-primitive-color-light-alpha-black-0;
|
||||||
|
$tb-figma-mode-color-alpha-base-10: $tb-figma-primitive-color-high-contrast-alpha-black-10;
|
||||||
|
$tb-figma-mode-color-alpha-base-100: $tb-figma-primitive-color-high-contrast-alpha-black-100;
|
||||||
|
$tb-figma-mode-color-alpha-base-25: $tb-figma-primitive-color-high-contrast-alpha-black-25;
|
||||||
|
$tb-figma-mode-color-alpha-base-50: $tb-figma-primitive-color-high-contrast-alpha-black-50;
|
||||||
|
$tb-figma-mode-color-alpha-base-75: $tb-figma-primitive-color-high-contrast-alpha-black-75;
|
||||||
|
$tb-figma-mode-color-alpha-inverse-0: $tb-figma-primitive-color-high-contrast-alpha-white-0;
|
||||||
|
$tb-figma-mode-color-alpha-inverse-10: $tb-figma-primitive-color-high-contrast-alpha-black-25;
|
||||||
|
$tb-figma-mode-color-alpha-inverse-100: $tb-figma-primitive-color-high-contrast-alpha-white-100;
|
||||||
|
$tb-figma-mode-color-alpha-inverse-25: $tb-figma-primitive-color-high-contrast-alpha-white-25;
|
||||||
|
$tb-figma-mode-color-alpha-inverse-50: $tb-figma-primitive-color-high-contrast-alpha-white-50;
|
||||||
|
$tb-figma-mode-color-alpha-inverse-75: $tb-figma-primitive-color-high-contrast-alpha-white-75;
|
||||||
|
$tb-figma-mode-color-background-dim: $tb-figma-primitive-color-high-contrast-alpha-black-75;
|
||||||
|
$tb-figma-mode-color-background-gray-subtle: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-figma-mode-color-background-gray-subtler: $tb-figma-primitive-color-high-contrast-gray-color-95;
|
||||||
|
$tb-figma-mode-color-background-inverse: $tb-figma-primitive-color-high-contrast-gray-color-10;
|
||||||
|
$tb-figma-mode-color-background-white: $tb-figma-primitive-color-high-contrast-gray-color-100;
|
||||||
|
$tb-figma-mode-color-border-danger: $tb-figma-primitive-color-high-contrast-danger-color-50;
|
||||||
|
$tb-figma-mode-color-border-danger-light: $tb-figma-primitive-color-high-contrast-danger-color-90;
|
||||||
|
$tb-figma-mode-color-border-disabled: $tb-figma-primitive-color-high-contrast-gray-color-70;
|
||||||
|
$tb-figma-mode-color-border-gray: $tb-figma-primitive-color-high-contrast-gray-color-70;
|
||||||
|
$tb-figma-mode-color-border-gray-dark: $tb-figma-primitive-color-high-contrast-gray-color-40;
|
||||||
|
$tb-figma-mode-color-border-gray-darker: $tb-figma-primitive-color-high-contrast-gray-color-10;
|
||||||
|
$tb-figma-mode-color-border-gray-light: $tb-figma-primitive-color-high-contrast-gray-color-80;
|
||||||
|
$tb-figma-mode-color-border-information: $tb-figma-primitive-color-high-contrast-information-color-50;
|
||||||
|
$tb-figma-mode-color-border-information-light: $tb-figma-primitive-color-high-contrast-information-color-90;
|
||||||
|
$tb-figma-mode-color-border-inverse: $tb-figma-primitive-color-high-contrast-gray-color-100;
|
||||||
|
$tb-figma-mode-color-border-point: $tb-figma-primitive-color-high-contrast-point-color-50;
|
||||||
|
$tb-figma-mode-color-border-point-light: $tb-figma-primitive-color-high-contrast-point-color-90;
|
||||||
|
$tb-figma-mode-color-border-primary: $tb-figma-primitive-color-high-contrast-primary-color-50;
|
||||||
|
$tb-figma-mode-color-border-primary-light: $tb-figma-primitive-color-high-contrast-primary-color-90;
|
||||||
|
$tb-figma-mode-color-border-secondary: $tb-figma-primitive-color-high-contrast-secondary-color-60;
|
||||||
|
$tb-figma-mode-color-border-secondary-light: $tb-figma-primitive-color-high-contrast-secondary-color-90;
|
||||||
|
$tb-figma-mode-color-border-success: $tb-figma-primitive-color-high-contrast-success-color-50;
|
||||||
|
$tb-figma-mode-color-border-success-light: $tb-figma-primitive-color-high-contrast-success-color-90;
|
||||||
|
$tb-figma-mode-color-border-transparency: $tb-figma-primitive-color-high-contrast-alpha-white-25;
|
||||||
|
$tb-figma-mode-color-border-warning: $tb-figma-primitive-color-high-contrast-warning-color-50;
|
||||||
|
$tb-figma-mode-color-border-warning-light: $tb-figma-primitive-color-high-contrast-warning-color-90;
|
||||||
|
$tb-figma-mode-color-button-disabled-border: $tb-figma-primitive-color-high-contrast-gray-color-70;
|
||||||
|
$tb-figma-mode-color-button-disabled-fill: $tb-figma-primitive-color-high-contrast-gray-color-80;
|
||||||
|
$tb-figma-mode-color-button-secondary-border: $tb-figma-primitive-color-high-contrast-primary-color-50;
|
||||||
|
$tb-figma-mode-color-button-secondary-fill: $tb-figma-primitive-color-high-contrast-primary-color-95;
|
||||||
|
$tb-figma-mode-color-button-secondary-fill-hover: $tb-figma-primitive-color-high-contrast-primary-color-90;
|
||||||
|
$tb-figma-mode-color-button-secondary-fill-pressed: $tb-figma-primitive-color-high-contrast-primary-color-80;
|
||||||
|
$tb-figma-mode-color-button-tertiary-border: $tb-figma-primitive-color-high-contrast-gray-color-40;
|
||||||
|
$tb-figma-mode-color-button-tertiary-fill: $tb-figma-primitive-color-high-contrast-alpha-black-0;
|
||||||
|
$tb-figma-mode-color-button-tertiary-fill-hover: $tb-figma-primitive-color-high-contrast-gray-color-95;
|
||||||
|
$tb-figma-mode-color-button-tertiary-fill-pressed: $tb-figma-primitive-color-high-contrast-gray-color-80;
|
||||||
|
$tb-figma-mode-color-button-text-border: $tb-figma-primitive-color-high-contrast-alpha-white-50;
|
||||||
|
$tb-figma-mode-color-button-text-fill: $tb-figma-primitive-color-high-contrast-alpha-black-0;
|
||||||
|
$tb-figma-mode-color-button-text-fill-hover: $tb-figma-primitive-color-high-contrast-secondary-color-95;
|
||||||
|
$tb-figma-mode-color-button-text-fill-pressed: $tb-figma-primitive-color-high-contrast-secondary-color-90;
|
||||||
|
$tb-figma-mode-color-divider-error: $tb-figma-primitive-color-high-contrast-danger-color-50;
|
||||||
|
$tb-figma-mode-color-divider-gray: $tb-figma-primitive-color-high-contrast-gray-color-70;
|
||||||
|
$tb-figma-mode-color-divider-gray-dark: $tb-figma-primitive-color-high-contrast-gray-color-50;
|
||||||
|
$tb-figma-mode-color-divider-gray-darker: $tb-figma-primitive-color-high-contrast-gray-color-10;
|
||||||
|
$tb-figma-mode-color-divider-gray-light: $tb-figma-primitive-color-high-contrast-gray-color-80;
|
||||||
|
$tb-figma-mode-color-divider-inverse: $tb-figma-primitive-color-high-contrast-gray-color-100;
|
||||||
|
$tb-figma-mode-color-divider-point: $tb-figma-primitive-color-high-contrast-point-color-50;
|
||||||
|
$tb-figma-mode-color-divider-primary: $tb-figma-primitive-color-high-contrast-primary-color-50;
|
||||||
|
$tb-figma-mode-color-divider-primary-light: $tb-figma-primitive-color-high-contrast-primary-color-90;
|
||||||
|
$tb-figma-mode-color-divider-secondary: $tb-figma-primitive-color-high-contrast-secondary-color-60;
|
||||||
|
$tb-figma-mode-color-divider-secondary-light: $tb-figma-primitive-color-high-contrast-secondary-color-90;
|
||||||
|
$tb-figma-mode-color-element-danger: $tb-figma-primitive-color-high-contrast-danger-color-50;
|
||||||
|
$tb-figma-mode-color-element-danger-lighter: $tb-figma-primitive-color-high-contrast-danger-color-95;
|
||||||
|
$tb-figma-mode-color-element-disabled-dark: $tb-figma-primitive-color-high-contrast-gray-color-60;
|
||||||
|
$tb-figma-mode-color-element-disabled-light: $tb-figma-primitive-color-high-contrast-gray-color-80;
|
||||||
|
$tb-figma-mode-color-element-gray: $tb-figma-primitive-color-high-contrast-gray-color-50;
|
||||||
|
$tb-figma-mode-color-element-gray-dark: $tb-figma-primitive-color-high-contrast-gray-color-40;
|
||||||
|
$tb-figma-mode-color-element-gray-light: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-figma-mode-color-element-gray-lighter: $tb-figma-primitive-color-high-contrast-gray-color-95;
|
||||||
|
$tb-figma-mode-color-element-information: $tb-figma-primitive-color-high-contrast-information-color-50;
|
||||||
|
$tb-figma-mode-color-element-information-lighter: $tb-figma-primitive-color-high-contrast-information-color-95;
|
||||||
|
$tb-figma-mode-color-element-inverse: $tb-figma-primitive-color-high-contrast-gray-color-95;
|
||||||
|
$tb-figma-mode-color-element-inverse-static: $tb-figma-primitive-color-high-contrast-gray-color-0;
|
||||||
|
$tb-figma-mode-color-element-point: $tb-figma-primitive-color-high-contrast-point-color-50;
|
||||||
|
$tb-figma-mode-color-element-point-light: $tb-figma-primitive-color-high-contrast-point-color-90;
|
||||||
|
$tb-figma-mode-color-element-point-lighter: $tb-figma-primitive-color-high-contrast-point-color-95;
|
||||||
|
$tb-figma-mode-color-element-primary: $tb-figma-primitive-color-high-contrast-primary-color-50;
|
||||||
|
$tb-figma-mode-color-element-primary-light: $tb-figma-primitive-color-high-contrast-primary-color-90;
|
||||||
|
$tb-figma-mode-color-element-primary-lighter: $tb-figma-primitive-color-high-contrast-primary-color-95;
|
||||||
|
$tb-figma-mode-color-element-secondary: $tb-figma-primitive-color-high-contrast-secondary-color-60;
|
||||||
|
$tb-figma-mode-color-element-secondary-light: $tb-figma-primitive-color-high-contrast-secondary-color-90;
|
||||||
|
$tb-figma-mode-color-element-secondary-lighter: $tb-figma-primitive-color-high-contrast-secondary-color-95;
|
||||||
|
$tb-figma-mode-color-element-success: $tb-figma-primitive-color-high-contrast-success-color-50;
|
||||||
|
$tb-figma-mode-color-element-success-lighter: $tb-figma-primitive-color-high-contrast-success-color-95;
|
||||||
|
$tb-figma-mode-color-element-warning: $tb-figma-primitive-color-high-contrast-warning-color-30;
|
||||||
|
$tb-figma-mode-color-element-warning-lighter: $tb-figma-primitive-color-high-contrast-warning-color-95;
|
||||||
|
$tb-figma-mode-color-graphic-blue: $tb-figma-primitive-color-high-contrast-graphic-color-50;
|
||||||
|
$tb-figma-mode-color-graphic-blue-dark: $tb-figma-primitive-color-high-contrast-graphic-color-70;
|
||||||
|
$tb-figma-mode-color-graphic-blue-darker: $tb-figma-primitive-color-high-contrast-graphic-color-90;
|
||||||
|
$tb-figma-mode-color-graphic-blue-subtle: $tb-figma-primitive-color-high-contrast-graphic-color-30;
|
||||||
|
$tb-figma-mode-color-graphic-blue-subtler: $tb-figma-primitive-color-high-contrast-graphic-color-10;
|
||||||
|
$tb-figma-mode-color-graphic-brand: $tb-figma-primitive-color-high-contrast-primary-color-50;
|
||||||
|
$tb-figma-mode-color-graphic-red: $tb-figma-primitive-color-high-contrast-point-color-20;
|
||||||
|
$tb-figma-mode-color-graphic-red-dark: $tb-figma-primitive-color-high-contrast-point-color-40;
|
||||||
|
$tb-figma-mode-color-graphic-red-darker: $tb-figma-primitive-color-high-contrast-point-color-70;
|
||||||
|
$tb-figma-mode-color-graphic-red-subtle: $tb-figma-primitive-color-high-contrast-point-color-10;
|
||||||
|
$tb-figma-mode-color-graphic-red-subtler: $tb-figma-primitive-color-high-contrast-point-color-5;
|
||||||
|
$tb-figma-mode-color-icon-danger: $tb-figma-primitive-color-high-contrast-danger-color-20;
|
||||||
|
$tb-figma-mode-color-icon-danger-static: $tb-figma-primitive-color-high-contrast-danger-color-50;
|
||||||
|
$tb-figma-mode-color-icon-disabled: $tb-figma-primitive-color-high-contrast-gray-color-60;
|
||||||
|
$tb-figma-mode-color-icon-disabled-on: $tb-figma-primitive-color-high-contrast-gray-color-50;
|
||||||
|
$tb-figma-mode-color-icon-gray: $tb-figma-primitive-color-high-contrast-gray-color-5;
|
||||||
|
$tb-figma-mode-color-icon-gray-fill: $tb-figma-primitive-color-high-contrast-gray-color-70;
|
||||||
|
$tb-figma-mode-color-icon-gray-light: $tb-figma-primitive-color-high-contrast-gray-color-20;
|
||||||
|
$tb-figma-mode-color-icon-gray-static: $tb-figma-primitive-color-high-contrast-gray-color-80;
|
||||||
|
$tb-figma-mode-color-icon-information: $tb-figma-primitive-color-high-contrast-information-color-20;
|
||||||
|
$tb-figma-mode-color-icon-information-static: $tb-figma-primitive-color-high-contrast-information-color-50;
|
||||||
|
$tb-figma-mode-color-icon-inverse: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-figma-mode-color-icon-inverse-static: $tb-figma-primitive-color-high-contrast-gray-color-0;
|
||||||
|
$tb-figma-mode-color-icon-point: $tb-figma-primitive-color-high-contrast-point-color-20;
|
||||||
|
$tb-figma-mode-color-icon-point-static: $tb-figma-primitive-color-high-contrast-point-color-50;
|
||||||
|
$tb-figma-mode-color-icon-primary: $tb-figma-primitive-color-high-contrast-primary-color-20;
|
||||||
|
$tb-figma-mode-color-icon-primary-static: $tb-figma-primitive-color-high-contrast-primary-color-50;
|
||||||
|
$tb-figma-mode-color-icon-secondary: $tb-figma-primitive-color-high-contrast-secondary-color-20;
|
||||||
|
$tb-figma-mode-color-icon-secondary-static: $tb-figma-primitive-color-high-contrast-secondary-color-80;
|
||||||
|
$tb-figma-mode-color-icon-success: $tb-figma-primitive-color-high-contrast-success-color-20;
|
||||||
|
$tb-figma-mode-color-icon-success-static: $tb-figma-primitive-color-high-contrast-success-color-50;
|
||||||
|
$tb-figma-mode-color-icon-warning: $tb-figma-primitive-color-high-contrast-warning-color-20;
|
||||||
|
$tb-figma-mode-color-icon-warning-static: $tb-figma-primitive-color-high-contrast-warning-color-50;
|
||||||
|
$tb-figma-mode-color-input-border: $tb-figma-primitive-color-high-contrast-gray-color-40;
|
||||||
|
$tb-figma-mode-color-input-border-active: $tb-figma-primitive-color-high-contrast-primary-color-50;
|
||||||
|
$tb-figma-mode-color-input-border-disabled: $tb-figma-primitive-color-high-contrast-gray-color-70;
|
||||||
|
$tb-figma-mode-color-input-border-error: $tb-figma-primitive-color-high-contrast-danger-color-50;
|
||||||
|
$tb-figma-mode-color-input-surface: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-figma-mode-color-input-surface-disabled: $tb-figma-primitive-color-high-contrast-gray-color-95;
|
||||||
|
$tb-figma-mode-color-link-default: $tb-figma-primitive-color-high-contrast-primary-color-30;
|
||||||
|
$tb-figma-mode-color-link-hover: $tb-figma-primitive-color-high-contrast-primary-color-20;
|
||||||
|
$tb-figma-mode-color-link-pressed: $tb-figma-primitive-color-high-contrast-primary-color-10;
|
||||||
|
$tb-figma-mode-color-surface-danger-subtler: $tb-figma-primitive-color-high-contrast-danger-color-95;
|
||||||
|
$tb-figma-mode-color-surface-disabled: $tb-figma-primitive-color-high-contrast-gray-color-70;
|
||||||
|
$tb-figma-mode-color-surface-gray-subtle: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-figma-mode-color-surface-gray-subtler: $tb-figma-primitive-color-high-contrast-gray-color-95;
|
||||||
|
$tb-figma-mode-color-surface-information-subtler: $tb-figma-primitive-color-high-contrast-information-color-95;
|
||||||
|
$tb-figma-mode-color-surface-inverse: $tb-figma-primitive-color-high-contrast-gray-color-10;
|
||||||
|
$tb-figma-mode-color-surface-inverse-static: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-figma-mode-color-surface-point-subtler: $tb-figma-primitive-color-high-contrast-point-color-95;
|
||||||
|
$tb-figma-mode-color-surface-primary-subtler: $tb-figma-primitive-color-high-contrast-primary-color-95;
|
||||||
|
$tb-figma-mode-color-surface-secondary-subtler: $tb-figma-primitive-color-high-contrast-secondary-color-95;
|
||||||
|
$tb-figma-mode-color-surface-success-subtler: $tb-figma-primitive-color-high-contrast-success-color-95;
|
||||||
|
$tb-figma-mode-color-surface-warning-subtler: $tb-figma-primitive-color-high-contrast-warning-color-95;
|
||||||
|
$tb-figma-mode-color-surface-white: $tb-figma-primitive-color-high-contrast-gray-color-100;
|
||||||
|
$tb-figma-mode-color-surface-white-static: $tb-figma-primitive-color-high-contrast-gray-color-0;
|
||||||
|
$tb-figma-mode-color-surface-white-subtle: $tb-figma-primitive-color-high-contrast-gray-color-95;
|
||||||
|
$tb-figma-mode-color-surface-white-subtler: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-figma-mode-color-text-basic: $tb-figma-primitive-color-high-contrast-gray-color-5;
|
||||||
|
$tb-figma-mode-color-text-basic-inverse: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-figma-mode-color-text-bolder: $tb-figma-primitive-color-high-contrast-gray-color-10;
|
||||||
|
$tb-figma-mode-color-text-bolder-inverse: $tb-figma-primitive-color-high-contrast-gray-color-95;
|
||||||
|
$tb-figma-mode-color-text-danger: $tb-figma-primitive-color-high-contrast-danger-color-20;
|
||||||
|
$tb-figma-mode-color-text-disabled: $tb-figma-primitive-color-high-contrast-gray-color-60;
|
||||||
|
$tb-figma-mode-color-text-disabled-on: $tb-figma-primitive-color-high-contrast-gray-color-50;
|
||||||
|
$tb-figma-mode-color-text-information: $tb-figma-primitive-color-high-contrast-information-color-20;
|
||||||
|
$tb-figma-mode-color-text-inverse-static: $tb-figma-primitive-color-high-contrast-gray-color-0;
|
||||||
|
$tb-figma-mode-color-text-point: $tb-figma-primitive-color-high-contrast-point-color-20;
|
||||||
|
$tb-figma-mode-color-text-primary: $tb-figma-primitive-color-high-contrast-primary-color-20;
|
||||||
|
$tb-figma-mode-color-text-secondary: $tb-figma-primitive-color-high-contrast-secondary-color-20;
|
||||||
|
$tb-figma-mode-color-text-static: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-figma-mode-color-text-subtle: $tb-figma-primitive-color-high-contrast-gray-color-20;
|
||||||
|
$tb-figma-mode-color-text-subtle-inverse: $tb-figma-primitive-color-high-contrast-gray-color-70;
|
||||||
|
$tb-figma-mode-color-text-success: $tb-figma-primitive-color-high-contrast-success-color-20;
|
||||||
|
$tb-figma-mode-color-text-warning: $tb-figma-primitive-color-high-contrast-warning-color-20;
|
||||||
|
$tb-primary-subtle-hover: $tb-figma-primitive-color-high-contrast-information-color-20;
|
||||||
|
$tb-primary-subtle-active: $tb-figma-primitive-color-high-contrast-primary-color-30;
|
||||||
|
$tb-primary-emphasis: $tb-figma-primitive-color-high-contrast-primary-color-30;
|
||||||
|
$tb-primary-on-subtle: $tb-figma-primitive-color-high-contrast-primary-color-70;
|
||||||
|
$tb-primary-on-surface: $tb-figma-primitive-color-high-contrast-primary-color-40;
|
||||||
|
$tb-secondary-subtle: $tb-figma-primitive-color-high-contrast-gray-color-5;
|
||||||
|
$tb-secondary-subtle-hover: $tb-figma-primitive-color-high-contrast-gray-color-10;
|
||||||
|
$tb-secondary-subtle-active: $tb-figma-primitive-color-high-contrast-gray-color-20;
|
||||||
|
$tb-secondary: $tb-figma-primitive-color-high-contrast-gray-color-50;
|
||||||
|
$tb-secondary-hover: $tb-figma-primitive-color-high-contrast-gray-color-60;
|
||||||
|
$tb-secondary-active: $tb-figma-primitive-color-high-contrast-gray-color-70;
|
||||||
|
$tb-secondary-emphasis: $tb-figma-primitive-color-high-contrast-gray-color-10;
|
||||||
|
$tb-secondary-on-subtle: $tb-figma-primitive-color-high-contrast-gray-color-80;
|
||||||
|
$tb-on-secondary: $tb-figma-primitive-color-high-contrast-gray-color-0;
|
||||||
|
$tb-secondary-on-surface: $tb-figma-primitive-color-high-contrast-gray-color-90;
|
||||||
|
$tb-tertiary-subtle: $tb-figma-primitive-color-high-contrast-graphic-color-30;
|
||||||
|
$tb-tertiary-subtle-hover: $tb-figma-primitive-color-high-contrast-graphic-color-30;
|
||||||
|
$tb-tertiary-subtle-active: $tb-figma-primitive-color-high-contrast-graphic-color-50;
|
||||||
|
$tb-tertiary: $tb-figma-primitive-color-high-contrast-gray-color-10;
|
||||||
|
$tb-tertiary-hover: $tb-figma-primitive-color-high-contrast-gray-color-20;
|
||||||
|
$tb-tertiary-active: $tb-figma-primitive-color-high-contrast-gray-color-30;
|
||||||
|
$tb-tertiary-emphasis: $tb-figma-primitive-color-high-contrast-graphic-color-10;
|
||||||
|
$tb-tertiary-on-subtle: $tb-figma-primitive-color-high-contrast-graphic-color-70;
|
||||||
|
$tb-on-tertiary: $tb-figma-primitive-color-high-contrast-gray-color-100;
|
||||||
|
$tb-tertiary-on-surface: $tb-figma-primitive-color-high-contrast-graphic-color-30;
|
||||||
|
|
||||||
|
|
||||||
|
$tb-kendo-font-family: inherit;
|
||||||
|
$tb-kendo-font-size: 14px;
|
||||||
|
$tb-kendo-font-weight-normal: 400;
|
||||||
|
$tb-kendo-line-height: 1.4285714286;
|
||||||
|
$enable-gradients: true;
|
||||||
|
|
||||||
|
$tb-typography: (
|
||||||
|
kendo-default-typography: (
|
||||||
|
font-family: 'inherit',
|
||||||
|
font-size: 14px,
|
||||||
|
font-weight: 400,
|
||||||
|
line-height: 1.4285714286,
|
||||||
|
),
|
||||||
|
figma-typography-body-large: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 19px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-body-large-bold: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 19px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-body-medium: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 17px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-body-medium-bold: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 17px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-body-small: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 15px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-body-small-bold: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 15px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-body-xsmall: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 13px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-body-xsmall-bold: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 13px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-display-large: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 60px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
letter-spacing: 1px,
|
||||||
|
),
|
||||||
|
figma-typography-display-medium: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 44px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
letter-spacing: 1px,
|
||||||
|
),
|
||||||
|
figma-typography-display-small: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 36px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
letter-spacing: 1px,
|
||||||
|
),
|
||||||
|
figma-typography-heading-large: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 32px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
letter-spacing: 1px,
|
||||||
|
),
|
||||||
|
figma-typography-heading-medium: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 24px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-heading-small: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 19px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-heading-xlarge: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 40px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
letter-spacing: 1px,
|
||||||
|
),
|
||||||
|
figma-typography-heading-xsmall: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 17px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-heading-xxsmall: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 15px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-label-large: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 19px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-label-medium: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 17px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-label-small: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 15px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-label-xsmall: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 13px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-navigation-depth-medium: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 17px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-navigation-depth-medium-bold: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 17px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-navigation-depth-small: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 15px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-navigation-depth-small-bold: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 15px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-navigation-title-medium: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 24px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-navigation-title-small: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 19px,
|
||||||
|
font-weight: bold,
|
||||||
|
line-height: 150%,
|
||||||
|
),
|
||||||
|
figma-typography-underline-large: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 19px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
text-decoration-line: underline,
|
||||||
|
),
|
||||||
|
figma-typography-underline-medium: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 17px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
text-decoration-line: underline,
|
||||||
|
),
|
||||||
|
figma-typography-underline-small: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 15px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
text-decoration-line: underline,
|
||||||
|
),
|
||||||
|
figma-typography-underline-xsmall: (
|
||||||
|
font-family: 'Pretendard GOV',
|
||||||
|
font-size: 13px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 150%,
|
||||||
|
text-decoration-line: underline,
|
||||||
|
),
|
||||||
|
figma-typography-base-text-md-default-body-2-grid-grid-cell-text: (
|
||||||
|
font-family: 'Roboto',
|
||||||
|
font-size: 14px,
|
||||||
|
font-weight: normal,
|
||||||
|
line-height: 28px,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
@mixin typography-classes ($typography) {
|
||||||
|
@each $selector, $property in $typography {
|
||||||
|
&-#{$selector} {
|
||||||
|
@each $propName, $propValue in $property {
|
||||||
|
#{$propName}: #{$propValue};
|
||||||
|
}
|
||||||
|
} &-#{$selector}-important {
|
||||||
|
@each $propName, $propValue in $property {
|
||||||
|
#{$propName}: $propValue !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$tb-effects: (
|
||||||
|
tb-internal-none-effects: (
|
||||||
|
box-shadow: (none), filter: (none), backdrop-filter: (none), ),
|
||||||
|
figma-effects-shadow-1: (
|
||||||
|
box-shadow: (0px 0px 2px 0 rgba(0, 0, 0, 0.05000000074505806), 0px 1px 2px 0 rgba(0, 0, 0, 0.05000000074505806)), ),
|
||||||
|
figma-effects-shadow-2: (
|
||||||
|
box-shadow: (0px 4px 8px 0 rgba(0, 0, 0, 0.07999999821186066), 0px 0px 2px 0 rgba(0, 0, 0, 0.05000000074505806)), ),
|
||||||
|
figma-effects-shadow-3: (
|
||||||
|
box-shadow: (0px 8px 16px 0 rgba(0, 0, 0, 0.11999999731779099), 0px 0px 2px 0 rgba(0, 0, 0, 0.07999999821186066)), ),
|
||||||
|
figma-effects-shadow-4: (
|
||||||
|
box-shadow: (0px 16px 24px 0 rgba(0, 0, 0, 0.11999999731779099), 0px 0px 2px 0 rgba(0, 0, 0, 0.07999999821186066)), ),
|
||||||
|
figma-effects-shadow-out: (
|
||||||
|
box-shadow: (0px 4px 5px 0 rgba(0, 0, 0, 0.07999999821186066)), ),
|
||||||
|
figma-effects-shadow-y-12: (
|
||||||
|
box-shadow: (0px 4px 15px 0 rgba(0, 0, 0, 0.10000000149011612)), ),
|
||||||
|
);
|
||||||
|
@mixin tb-effect($effect-name, $default: null) {
|
||||||
|
$effect: map-get($tb-effects, $effect-name);
|
||||||
|
@if $effect != null {
|
||||||
|
@if map-has-key($effect, box-shadow) {
|
||||||
|
box-shadow: map-get($effect, box-shadow);
|
||||||
|
}
|
||||||
|
@if map-has-key($effect, filter) {
|
||||||
|
filter: map-get($effect, filter);
|
||||||
|
}
|
||||||
|
@if map-has-key($effect, backdrop-filter) {
|
||||||
|
backdrop-filter: map-get($effect, backdrop-filter);
|
||||||
|
}
|
||||||
|
} @else if $default != null {
|
||||||
|
@warn "Warning: Effect #{$effect-name} not found. Applying default.";
|
||||||
|
box-shadow: $default;
|
||||||
|
} @else {
|
||||||
|
@error "Error: Effect #{$effect-name} not found in \$tb-effects map.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin effects-classes ($effects) {
|
||||||
|
@each $selector, $property in $effects {
|
||||||
|
&-#{$selector} {
|
||||||
|
@each $propName, $propValue in $property {
|
||||||
|
#{$propName}: $propValue;
|
||||||
|
}
|
||||||
|
} &-#{$selector}-important {
|
||||||
|
@each $propName, $propValue in $property {
|
||||||
|
#{$propName}: $propValue !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
%tb-typography {
|
||||||
|
@include typography-classes($tb-typography);
|
||||||
|
}
|
||||||
|
|
||||||
|
%tb-effects {
|
||||||
|
@include effects-classes($tb-effects);
|
||||||
|
}
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
//사이즈 정의
|
||||||
|
@mixin dropdown-size-variable() {
|
||||||
|
--wb-dropdown--menu-radius: var(--wb-radius-medium4);
|
||||||
|
--wb-dropdown--menu-padding: var(--wb-padding-3);
|
||||||
|
--wb-dropdown--menu-margin-top: var(--wb-padding-6);
|
||||||
|
--wb-dropdown--menu-gap: var(--wb-gap-3);
|
||||||
|
--wb-dropdown--list-item-radius: var(--wb-radius-medium2);
|
||||||
|
--wb-dropdown--list-item-height: var(--wb-size-height-7);
|
||||||
|
--wb-dropdown--list-item-pc-font-size: var(--wb-pc-font-size-navigation-depth-medium);
|
||||||
|
--wb-dropdown--list-item-mobile-font-size: var(--wb-mobile-font-size-navigation-depth-medium);
|
||||||
|
}
|
||||||
|
|
||||||
|
//컬러 정의
|
||||||
|
@mixin dropdown-color-variable($mode: light) {
|
||||||
|
--wb-dropdown--menu-color-border: var(--wb-#{$mode}-color-border-gray-light);
|
||||||
|
--wb-dropdown--menu-color-surface: var(--wb-#{$mode}-color-surface-white-subtler);
|
||||||
|
--wb-dropdown--menu-color-alpha-shadow: 0 0 0.2rem 0 var(--wb-#{$mode}-color-alpha-shadow1), 0 0.4rem 0.8rem 0 var(--wb-#{$mode}-color-alpha-shadow2);
|
||||||
|
--wb-dropdown--list-item-color-action-hover: var(--wb-#{$mode}-color-action-secondary-hover);
|
||||||
|
--wb-dropdown--list-item-color-action-pressed: var(--wb-#{$mode}-color-action-secondary-pressed);
|
||||||
|
--wb-dropdown--list-item-color-action-selected: var(--wb-#{$mode}-color-action-secondary-selected);
|
||||||
|
--wb-dropdown--list-item-color-text-selected: var(--wb-#{$mode}-color-text-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
//모드 설정
|
||||||
|
$mode-setting: light;
|
||||||
|
/* wb-drop-wrap */
|
||||||
|
.wb-drop-wrap {
|
||||||
|
@include dropdown-size-variable();
|
||||||
|
@include dropdown-color-variable(#{$mode-setting});
|
||||||
|
|
||||||
|
display: inline-flex;
|
||||||
|
position: relative;
|
||||||
|
.drop-menu {
|
||||||
|
@include position($t: 100%, $l: 50%);
|
||||||
|
display: none;
|
||||||
|
z-index: 6;
|
||||||
|
min-width: 13rem;
|
||||||
|
border-radius: var(--wb-dropdown--menu-radius);
|
||||||
|
padding: var(--wb-dropdown--menu-padding);
|
||||||
|
margin-top: var(--wb-dropdown--menu-margin-top);
|
||||||
|
background-color: var(--wb-dropdown--menu-color-surface);
|
||||||
|
border: 0.1rem solid var(--wb-dropdown--menu-color-border);
|
||||||
|
box-shadow: var(--wb-dropdown--menu-color-alpha-shadow);
|
||||||
|
transform: translateX(-50%);
|
||||||
|
&::before {
|
||||||
|
@include pseudo();
|
||||||
|
@include square(1.2rem);
|
||||||
|
@include position($b: 100%, $l: 50%);
|
||||||
|
display: block;
|
||||||
|
margin-bottom: -0.5rem;
|
||||||
|
margin-left: -0.6rem;
|
||||||
|
transform: rotate(-135deg);
|
||||||
|
background-color: var(--wb-dropdown--menu-color-surface);
|
||||||
|
border: 0.1rem solid var(--wb-dropdown--menu-color-border);
|
||||||
|
border-top-color: transparent;
|
||||||
|
border-left-color: transparent;
|
||||||
|
}
|
||||||
|
.drop-in {
|
||||||
|
// @include flex-layout($fd: column, $ai: flex-start);
|
||||||
|
gap: var(--wb-dropdown--menu-gap);
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.drop-top {
|
||||||
|
width: 100%;
|
||||||
|
padding: var(--wb-padding-3) var(--wb-padding-6);
|
||||||
|
border-bottom: 0.1rem solid var(--wb-dropdown--menu-color-border);
|
||||||
|
}
|
||||||
|
.drop-bottom {
|
||||||
|
// @include flex-layout($jc: center);
|
||||||
|
width: 100%;
|
||||||
|
padding: var(--wb-padding-3) 0;
|
||||||
|
border-top: 0.1rem solid var(--wb-dropdown--menu-color-border);
|
||||||
|
}
|
||||||
|
.drop-list {
|
||||||
|
width: 100%;
|
||||||
|
.item-link {
|
||||||
|
// @include flex-layout($jc: flex-start, $ai: center);
|
||||||
|
width: 100%;
|
||||||
|
gap: var(--wb-gap-3);
|
||||||
|
padding: 0 var(--wb-padding-6);
|
||||||
|
font-size: var(--wb-dropdown--list-item-pc-font-size);
|
||||||
|
border-radius: var(--wb-dropdown--list-item-radius);
|
||||||
|
height: var(--wb-dropdown--list-item-height);
|
||||||
|
background-color: var(--wb-dropdown--menu-color-surface);
|
||||||
|
.ico-go {
|
||||||
|
@include svg-icon($size: var(--wb-icon--size-medium), $mode: #{$mode-setting});
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--wb-dropdown--list-item-color-action-hover);
|
||||||
|
}
|
||||||
|
&:active {
|
||||||
|
background-color: var(--wb-dropdown--list-item-color-action-pressed);
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
font-weight: var(--wb-font-weight-bold);
|
||||||
|
color: var(--wb-dropdown--list-item-color-text-selected);
|
||||||
|
background-color: var(--wb-dropdown--list-item-color-action-selected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.drop-left {
|
||||||
|
.drop-menu {
|
||||||
|
left: 0;
|
||||||
|
right: unset;
|
||||||
|
transform: none;
|
||||||
|
&::before {
|
||||||
|
left: 2.4rem;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.drop-right {
|
||||||
|
.drop-menu {
|
||||||
|
left: unset;
|
||||||
|
right: 0;
|
||||||
|
transform: none;
|
||||||
|
&::before {
|
||||||
|
left: unset;
|
||||||
|
right: 2.4rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//고대비모드
|
||||||
|
@include color-mode($mode: high-contrast) {
|
||||||
|
//모드 설정
|
||||||
|
$mode-setting: high-contrast;
|
||||||
|
|
||||||
|
/* wb-drop-wrap */
|
||||||
|
.wb-drop-wrap {
|
||||||
|
@include dropdown-color-variable(#{$mode-setting});
|
||||||
|
.drop-list {
|
||||||
|
.item-link {
|
||||||
|
.ico-go {
|
||||||
|
@include svg-icon($size: var(--wb-icon--size-medium), $mode: #{$mode-setting});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
@import "mixins/breakpoints";
|
||||||
|
@import "mixins/utils";
|
||||||
|
@import "mixins/icons";
|
||||||
|
@import "mixins/form";
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
//@use 'sass:map';
|
||||||
|
//scss variables 모음
|
||||||
|
@import "variables_for_code";
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
.svg-icon {
|
||||||
|
&.ico-angle { //꺽쇠모양
|
||||||
|
@include icon-set(ico-angle, pure);
|
||||||
|
//disabled (for selectbox)
|
||||||
|
&.disabled {
|
||||||
|
@include icon-set(ico_angle_disabled, $effect: pure);
|
||||||
|
}
|
||||||
|
//default: down
|
||||||
|
&.up {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
&.left {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
&.right {
|
||||||
|
transform: rotate(-90deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.ico-user{
|
||||||
|
@include icon-set(ico-user, pure);
|
||||||
|
}
|
||||||
|
&.ico-mark {
|
||||||
|
@include icon-set(ico-mark, pure);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.ico-title-be {
|
||||||
|
@include icon-set(ico-title-be, pure);
|
||||||
|
}
|
||||||
|
&.ico-menu01 {
|
||||||
|
@include icon-set(ico-menu01, pure);
|
||||||
|
}
|
||||||
|
&.ico-menu02 {
|
||||||
|
@include icon-set(ico-menu02, pure);
|
||||||
|
}
|
||||||
|
&.ico-menu03 {
|
||||||
|
@include icon-set(ico-menu03, pure);
|
||||||
|
}
|
||||||
|
&.ico-menu04 {
|
||||||
|
@include icon-set(ico-menu04, pure);
|
||||||
|
}
|
||||||
|
&.ico-menu05 {
|
||||||
|
@include icon-set(ico-menu05, pure);
|
||||||
|
}
|
||||||
|
&.ico-menu06 {
|
||||||
|
@include icon-set(ico-menu06, pure);
|
||||||
|
}
|
||||||
|
&.ico-menu07 {
|
||||||
|
@include icon-set(ico-menu07, pure);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
//@use 'sass:map';
|
||||||
|
//*** mixin
|
||||||
|
|
||||||
|
//mixin
|
||||||
|
@import "group_mixins";
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
@import "../tokens";
|
||||||
|
.menu{
|
||||||
|
height:100%;
|
||||||
|
background-color: $tb-figma-primitive-color-light-secondary-color-80-2;
|
||||||
|
.menu-container {
|
||||||
|
align-items: flex-start;
|
||||||
|
align-self: stretch;
|
||||||
|
background-image: none;
|
||||||
|
column-gap: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background-image: none;
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-direction: column;
|
||||||
|
padding-bottom: $tb-figma-spacing-w-bspacing-8;
|
||||||
|
padding-top: $tb-figma-spacing-w-bspacing-8;
|
||||||
|
row-gap: $tb-figma-spacing-w-bspacing-7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.group {
|
||||||
|
left: 15.58px;
|
||||||
|
position: absolute;
|
||||||
|
top: 15.58px;
|
||||||
|
}
|
||||||
|
.menu-item-container {
|
||||||
|
position: relative;
|
||||||
|
align-items: center;
|
||||||
|
border-bottom-left-radius: $tb-figma-semantic-radius-medium-3-1;
|
||||||
|
border-bottom-right-radius: $tb-figma-semantic-radius-medium-3-1;
|
||||||
|
border-top-left-radius: $tb-figma-semantic-radius-medium-3-1;
|
||||||
|
border-top-right-radius: $tb-figma-semantic-radius-medium-3-1;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
padding-bottom: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
padding-left: $tb-figma-spacing-w-bspacing-2;
|
||||||
|
padding-right: $tb-figma-spacing-w-bspacing-2;
|
||||||
|
padding-top: $tb-figma-spacing-w-bspacing-4;
|
||||||
|
row-gap: $tb-figma-spacing-w-bspacing-0;
|
||||||
|
&.active .menu-sub {
|
||||||
|
display: block;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
&:hover{
|
||||||
|
background-color: $tb-figma-primitive-color-light-alpha-white-10;
|
||||||
|
}
|
||||||
|
&:focus{
|
||||||
|
background-color: $tb-figma-primitive-color-light-alpha-white-25;
|
||||||
|
}
|
||||||
|
.menu-sub{
|
||||||
|
position: absolute;
|
||||||
|
top:0;
|
||||||
|
right: -234px;
|
||||||
|
background: #fff;
|
||||||
|
@include tb-effect('figma-effects-shadow-3');
|
||||||
|
border-radius: 0 $tb-figma-spacing-w-bspacing-2 $tb-figma-spacing-w-bspacing-2 0;
|
||||||
|
padding: $tb-figma-spacing-w-bspacing-7;
|
||||||
|
z-index: 9;
|
||||||
|
width: 21.875rem;
|
||||||
|
display: none;
|
||||||
|
transition: max-height 0.3s ease, opacity 0.3s ease;
|
||||||
|
opacity: 0;
|
||||||
|
.container{
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(45%, auto));
|
||||||
|
gap: $tb-figma-semantic-padding-metric-5;
|
||||||
|
li{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: $tb-figma-semantic-gap-metric-3;
|
||||||
|
flex: 1 1 50%;
|
||||||
|
.element-2-depth{
|
||||||
|
border: 1px solid $tb-figma-primitive-color-light-primary-color-30;
|
||||||
|
border-radius: $tb-figma-spacing-w-bspacing-2;
|
||||||
|
text-align: center;
|
||||||
|
padding: $tb-figma-spacing-w-bspacing-2;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
ul{
|
||||||
|
li{
|
||||||
|
a{
|
||||||
|
text-align: center;
|
||||||
|
&:hover{
|
||||||
|
color: $tb-figma-primitive-color-light-primary-color-60-3
|
||||||
|
}
|
||||||
|
&:focus{
|
||||||
|
color: $tb-figma-primitive-color-light-primary-color-80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
~li{
|
||||||
|
margin-top: $tb-figma-semantic-gap-metric-3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.wrap .element-1-depth {
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
row-gap: 8px;
|
||||||
|
}
|
||||||
|
.wrap .menu-item-text {
|
||||||
|
color: $tb-figma-primitive-color-light-gray-color-30-1;
|
||||||
|
|
||||||
|
font-size: 15px;
|
||||||
|
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 150%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
// Spacing (4의 배수)
|
||||||
|
$spacing-0: 0;
|
||||||
|
$spacing-4: 0.25rem;
|
||||||
|
$spacing-8: 0.5rem;
|
||||||
|
$spacing-12: 0.75rem;
|
||||||
|
$spacing-16: 1rem;
|
||||||
|
$spacing-20: 1.25rem;
|
||||||
|
$spacing-24: 1.5rem;
|
||||||
|
$spacing-28: 1.75rem;
|
||||||
|
$spacing-32: 2rem;
|
||||||
|
$spacing-36: 2.25rem;
|
||||||
|
$spacing-40: 2.5rem;
|
||||||
|
$spacing-44: 2.75rem;
|
||||||
|
$spacing-48: 3rem;
|
||||||
|
$spacing-52: 3.25rem;
|
||||||
|
$spacing-56: 3.5rem;
|
||||||
|
$spacing-60: 3.75rem;
|
||||||
|
$spacing-64: 4rem;
|
||||||
|
|
||||||
|
// Font Size (4의 배수)
|
||||||
|
$font-12: 0.75rem;
|
||||||
|
$font-16: 1rem;
|
||||||
|
$font-14: 0.875rem;
|
||||||
|
$font-18: 1.125rem;
|
||||||
|
$font-20: 1.25rem;
|
||||||
|
$font-24: 1.5rem;
|
||||||
|
$font-28: 1.75rem;
|
||||||
|
$font-32: 2rem;
|
||||||
|
$font-36: 2.25rem;
|
||||||
|
$font-40: 2.5rem;
|
||||||
|
|
||||||
|
// Border Radius (4의 배수)
|
||||||
|
$radius-4: 0.25rem;
|
||||||
|
$radius-8: 0.5rem;
|
||||||
|
$radius-12: 0.75rem;
|
||||||
|
$radius-16: 1rem;
|
||||||
|
$radius-20: 1.25rem;
|
||||||
|
$radius-24: 1.5rem;
|
||||||
|
$radius-28: 1.75rem;
|
||||||
|
$radius-32: 2rem;
|
||||||
|
|
||||||
|
// Line Height (4의 배수)
|
||||||
|
$line-16: 1rem;
|
||||||
|
$line-20: 1.25rem;
|
||||||
|
$line-24: 1.5rem;
|
||||||
|
$line-28: 1.75rem;
|
||||||
|
$line-32: 2rem;
|
||||||
|
$line-36: 2.25rem;
|
||||||
|
$line-40: 2.5rem;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
//*** path setting
|
||||||
|
$url: "../.." !default; //img
|
||||||
@@ -0,0 +1,318 @@
|
|||||||
|
/* reset */
|
||||||
|
//모드 설정
|
||||||
|
$mode-setting: light;
|
||||||
|
html, body {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
font-family: var(--wb-font-family-base);
|
||||||
|
color: var(--wb-#{$mode-setting}-color-text-basic);
|
||||||
|
font-weight: var(--wb-font-weight-regular);
|
||||||
|
line-height: var(--wb-line-height-base);
|
||||||
|
word-break: keep-all;
|
||||||
|
word-wrap: break-word;
|
||||||
|
-webkit-tap-highlight-color : transparent;
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
font-size: var(--wb-font-size-base);
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
background-color: var(--wb-#{$mode-setting}-color-background-white);
|
||||||
|
font-size: var(--wb-pc-font-size-body-xsmall);
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
//시스템 고대비모드 켜도 우리 style 적용되도록
|
||||||
|
* {
|
||||||
|
//forced-color-adjust: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
//고대비모드
|
||||||
|
@include color-mode(high-contrast) {
|
||||||
|
//모드 설정
|
||||||
|
$mode-setting: high-contrast;
|
||||||
|
html, body {
|
||||||
|
color: var(--wb-#{$mode-setting}-color-text-basic);
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
background-color: var(--wb-#{$mode-setting}-color-background-white);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*:focus {
|
||||||
|
//@include focus();
|
||||||
|
outline: 0.2rem solid var(--wb-light-color-border-inverse);
|
||||||
|
outline-offset: 0;
|
||||||
|
box-shadow: var(--wb-box-shadow-outline);
|
||||||
|
transition: outline 0s, box-shadow 0s !important;
|
||||||
|
}
|
||||||
|
::-moz-selection {
|
||||||
|
background: var(--wb-color-light-secondary-50);
|
||||||
|
color: var(--wb-color-light-gray-0);
|
||||||
|
}
|
||||||
|
::selection {
|
||||||
|
background: var(--wb-color-light-secondary-50);
|
||||||
|
color: var(--wb-color-light-gray-0);
|
||||||
|
}
|
||||||
|
|
||||||
|
body,
|
||||||
|
div,
|
||||||
|
p,
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6,
|
||||||
|
ul,
|
||||||
|
ol,
|
||||||
|
li,
|
||||||
|
dl,
|
||||||
|
dt,
|
||||||
|
dd,
|
||||||
|
table,
|
||||||
|
th,
|
||||||
|
td,
|
||||||
|
form,
|
||||||
|
fieldset,
|
||||||
|
legend,
|
||||||
|
input,
|
||||||
|
textarea,
|
||||||
|
a,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
ul,
|
||||||
|
li,
|
||||||
|
span,
|
||||||
|
em,
|
||||||
|
label,
|
||||||
|
:before,
|
||||||
|
:after {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
-webkit-text-size-adjust: none;
|
||||||
|
font-family: inherit;
|
||||||
|
line-height: var(--wb-line-height-base);
|
||||||
|
letter-spacing: inherit;
|
||||||
|
}
|
||||||
|
pre {
|
||||||
|
font-family: inherit;
|
||||||
|
}
|
||||||
|
input,
|
||||||
|
textarea,
|
||||||
|
a,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
span,
|
||||||
|
label,
|
||||||
|
:before,
|
||||||
|
:after {
|
||||||
|
font: {
|
||||||
|
size: inherit;
|
||||||
|
weight: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6,
|
||||||
|
strong {
|
||||||
|
font-weight: var(--wb-font-weight-bold);
|
||||||
|
}
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
details,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
hgroup,
|
||||||
|
main,
|
||||||
|
menu,
|
||||||
|
nav,
|
||||||
|
section {
|
||||||
|
display: block;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
img,
|
||||||
|
fieldset {
|
||||||
|
border: 0
|
||||||
|
}
|
||||||
|
fieldset {
|
||||||
|
min-width: 100%;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
ul,
|
||||||
|
ol {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
em,
|
||||||
|
address,
|
||||||
|
i {
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
a,
|
||||||
|
button {
|
||||||
|
transition: var(--wb-transition-base);
|
||||||
|
}
|
||||||
|
a,
|
||||||
|
a:hover,
|
||||||
|
a:active,
|
||||||
|
a:focus {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
button,
|
||||||
|
input[type="submit"],
|
||||||
|
input[type="button"] {
|
||||||
|
overflow: visible;
|
||||||
|
margin: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
border: none;
|
||||||
|
-webkit-appearance: button;
|
||||||
|
cursor: pointer;
|
||||||
|
font: inherit;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
input::-moz-focus-inner {
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
resize: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
appearance: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="tel"],
|
||||||
|
input[type="password"],
|
||||||
|
input[type="file"],
|
||||||
|
input[type="number"],
|
||||||
|
input[type="email"],
|
||||||
|
input[type="date"],
|
||||||
|
input[type="search"],
|
||||||
|
textarea {
|
||||||
|
-webkit-box-shadow: none;
|
||||||
|
box-shadow: none;
|
||||||
|
appearance: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
}
|
||||||
|
input[type="number"] {
|
||||||
|
-moz-appearance: textfield;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
input[type=number]::-webkit-inner-spin-button,
|
||||||
|
input[type=number]::-webkit-outer-spin-button {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type='text']::-ms-clear {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
caption {
|
||||||
|
position: static !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
table-layout: fixed;
|
||||||
|
max-width: none;
|
||||||
|
width: auto;
|
||||||
|
min-width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
[role="button"] {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img img {
|
||||||
|
min-width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
.img.bg-img {
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blind,
|
||||||
|
hr,
|
||||||
|
.sr-only,
|
||||||
|
legend,
|
||||||
|
caption {
|
||||||
|
@include sr-only;
|
||||||
|
}
|
||||||
|
.hide {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.show {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.al {
|
||||||
|
text-align: left !important;
|
||||||
|
}
|
||||||
|
.ac {
|
||||||
|
text-align: center !important;
|
||||||
|
}
|
||||||
|
.ar {
|
||||||
|
text-align: right !important;
|
||||||
|
}
|
||||||
|
.underline {
|
||||||
|
@include underline();
|
||||||
|
}
|
||||||
|
.break-all {
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
//svg icon
|
||||||
|
.svg-icon {
|
||||||
|
@include svg-icon();
|
||||||
|
&.pure {
|
||||||
|
@include svg-icon($effect: pure);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.inner {
|
||||||
|
max-width: var(--wb-contents-wrap-size);
|
||||||
|
padding-left: var(--wb-contents-padding-x);
|
||||||
|
padding-right: var(--wb-contents-padding-x);
|
||||||
|
}
|
||||||
|
|
||||||
|
//responsive mobile
|
||||||
|
@include size-medium {
|
||||||
|
body {
|
||||||
|
font-size: var(--wb-mobile-font-size-body-medium);
|
||||||
|
}
|
||||||
|
.pc-only {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.pc-only.read {
|
||||||
|
@include sr-only;
|
||||||
|
}
|
||||||
|
.mob-line {
|
||||||
|
display: block;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
@import "group_variables";
|
||||||
|
|
||||||
|
//모드 설정
|
||||||
|
$mode-setting: light;
|
||||||
|
:root {
|
||||||
|
//* PRIMITIVE *
|
||||||
|
--wb-font-family-base: var(--wb-typo-font-type);
|
||||||
|
--wb-font-size-base: #{$font-size-base};
|
||||||
|
|
||||||
|
//line heights
|
||||||
|
@each $type, $value in $font-line-heights {
|
||||||
|
--wb-line-height-#{$type}: #{$value};
|
||||||
|
}
|
||||||
|
|
||||||
|
//letter spacings
|
||||||
|
@each $type, $value in $font-letter-spacings {
|
||||||
|
--wb-letter-spacing-#{$type}: #{$value};
|
||||||
|
}
|
||||||
|
|
||||||
|
//font weight
|
||||||
|
@each $type, $value in $font-weights {
|
||||||
|
--wb-font-weight-#{$type}: #{$value};
|
||||||
|
}
|
||||||
|
|
||||||
|
//transition
|
||||||
|
--wb-transition-base: #{$transition-base};
|
||||||
|
--wb-transition-fade: #{$transition-fade};
|
||||||
|
--wb-transition-collapse: #{$transition-collapse};
|
||||||
|
--wb-transition-collapse-width: #{$transition-collapse-width};
|
||||||
|
|
||||||
|
//contents size
|
||||||
|
--wb-contents-size: #{$contents-size};
|
||||||
|
--wb-contents-padding-x: #{$contents-padding-x-pc};
|
||||||
|
--wb-contents-wrap-size: #{$contents-wrap-size};
|
||||||
|
|
||||||
|
//box shadow (only for focus outline)
|
||||||
|
--wb-box-shadow-outline: 0 0 0 0.4rem var(--wb-#{$mode-setting}-color-border-primary);
|
||||||
|
--wb-box-shadow-outline-inset: inset 0 0 0 0.2rem var(--wb-#{$mode-setting}-color-border-primary);
|
||||||
|
|
||||||
|
//screen zoom sizes
|
||||||
|
@each $type, $value in $screen-zoom-sizes {
|
||||||
|
--wb-zoom-#{$type}: #{$value};
|
||||||
|
}
|
||||||
|
|
||||||
|
//text underline offset
|
||||||
|
--wb-font-underline-offset: #{$font-underline-offset-default};
|
||||||
|
|
||||||
|
//svg icon size
|
||||||
|
@each $size, $value in $icon-sizes {
|
||||||
|
--wb-icon--size-#{$size}: #{$value};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//고대비모드
|
||||||
|
@include color-mode($mode: high-contrast) {
|
||||||
|
//모드 설정
|
||||||
|
$mode-setting: high-contrast;
|
||||||
|
|
||||||
|
:root {
|
||||||
|
//box shadow (only for focus outline)
|
||||||
|
--wb-box-shadow-outline: 0 0 0 0.4rem var(--wb-#{$mode-setting}-color-border-primary);
|
||||||
|
--wb-box-shadow-outline-inset: inset 0 0 0 0.2rem var(--wb-#{$mode-setting}-color-border-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
//CONTENTS MAX WIDTH
|
||||||
|
$contents-size: 1200px !default;
|
||||||
|
$contents-padding-x-pc: 28px !default;
|
||||||
|
$contents-padding-x-mobile: 16px !default;
|
||||||
|
$contents-wrap-size: $contents-size + ($contents-padding-x-pc * 2) !default;
|
||||||
|
|
||||||
|
//BREAK POINTS
|
||||||
|
$breakpoint-small: 360px !default;
|
||||||
|
$breakpoint-medium: 768px !default;
|
||||||
|
$breakpoint-large: 1024px !default;
|
||||||
|
$breakpoint-xlarge: 1280px !default;
|
||||||
|
$breakpoint-xxlarge: 1440px !default;
|
||||||
|
|
||||||
|
//TYPO CUSTOM
|
||||||
|
$font-family-base: "Pretendard GOV", sans-serif !default;
|
||||||
|
$font-size-base: 62.5% !default; //10px 1rem으로 설정
|
||||||
|
|
||||||
|
$font-letter-spacings: (
|
||||||
|
none: var(--wb-typo-letter-spacing-0),
|
||||||
|
wide: var(--wb-typo-letter-spacing-1),
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
//font weight
|
||||||
|
$font-weight-regular: 400 !default;
|
||||||
|
$font-weight-bold: 700 !default;
|
||||||
|
$font-weights: (
|
||||||
|
regular: $font-weight-regular,
|
||||||
|
bold: $font-weight-bold,
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
//line height style
|
||||||
|
$font-line-height-none: 1 !default;
|
||||||
|
$font-line-height-base: 1.5 !default;
|
||||||
|
$font-line-heights: (
|
||||||
|
none: $font-line-height-none,
|
||||||
|
base: $font-line-height-base,
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
//TYPO UNDERLINE OFFESET
|
||||||
|
$font-underline-offset-default: 0.3rem !default;
|
||||||
|
|
||||||
|
//IMG BACKGROUND URL
|
||||||
|
$url: "../../img" !default;
|
||||||
|
|
||||||
|
//TRANSITION
|
||||||
|
$transition-base: .4s ease-in-out !default;
|
||||||
|
$transition-fade: opacity .4s linear !default;
|
||||||
|
$transition-collapse: max-height .4s ease !default;
|
||||||
|
$transition-collapse-width: width .4s ease !default;
|
||||||
|
|
||||||
|
//SVG ICON SIZE
|
||||||
|
$icon-sizes: (
|
||||||
|
xsmall: var(--wb-size-height-2),
|
||||||
|
small: var(--wb-size-height-2),
|
||||||
|
medium: var(--wb-size-height-3),
|
||||||
|
large: var(--wb-size-height-4),
|
||||||
|
xlarge: var(--wb-size-height-4),
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
//SCREEN ZOOM
|
||||||
|
$screen-zoom-sizes: (
|
||||||
|
small: 0.9,
|
||||||
|
medium: 1,
|
||||||
|
large: 1.1,
|
||||||
|
xlarge: 1.3,
|
||||||
|
xxlarge: 1.5,
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
/////////////////////////////////// variable group setting ///////////////////////////////////////////////////
|
||||||
@@ -0,0 +1,782 @@
|
|||||||
|
|
||||||
|
:root {
|
||||||
|
/* PRIMITIVE */
|
||||||
|
--wb-color-light-primary-5: #ecf2fe;
|
||||||
|
--wb-color-light-primary-10: #d8e5fd;
|
||||||
|
--wb-color-light-primary-20: #b1cefb;
|
||||||
|
--wb-color-light-primary-30: #86aff9;
|
||||||
|
--wb-color-light-primary-40: #4c87f6;
|
||||||
|
--wb-color-light-primary-50: #256ef4;
|
||||||
|
--wb-color-light-primary-60: #0b50d0;
|
||||||
|
--wb-color-light-primary-70: #083891;
|
||||||
|
--wb-color-light-primary-80: #052561;
|
||||||
|
--wb-color-light-primary-90: #03163a;
|
||||||
|
--wb-color-light-primary-95: #020f27;
|
||||||
|
--wb-color-light-secondary-5: #eef2f7;
|
||||||
|
--wb-color-light-secondary-10: #d6e0eb;
|
||||||
|
--wb-color-light-secondary-20: #bacbde;
|
||||||
|
--wb-color-light-secondary-30: #90b0d5;
|
||||||
|
--wb-color-light-secondary-40: #6b96c7;
|
||||||
|
--wb-color-light-secondary-50: #346fb2;
|
||||||
|
--wb-color-light-secondary-60: #1c589c;
|
||||||
|
--wb-color-light-secondary-70: #063a74;
|
||||||
|
--wb-color-light-secondary-80: #052b57;
|
||||||
|
--wb-color-light-secondary-90: #031f3f;
|
||||||
|
--wb-color-light-secondary-95: #02162c;
|
||||||
|
--wb-color-light-gray-0: #ffffff;
|
||||||
|
--wb-color-light-gray-5: #f4f5f6;
|
||||||
|
--wb-color-light-gray-10: #e6e8ea;
|
||||||
|
--wb-color-light-gray-20: #cdd1d5;
|
||||||
|
--wb-color-light-gray-30: #b1b8be;
|
||||||
|
--wb-color-light-gray-40: #8a949e;
|
||||||
|
--wb-color-light-gray-50: #6d7882;
|
||||||
|
--wb-color-light-gray-60: #58616a;
|
||||||
|
--wb-color-light-gray-70: #464c53;
|
||||||
|
--wb-color-light-gray-80: #33363d;
|
||||||
|
--wb-color-light-gray-90: #1e2124;
|
||||||
|
--wb-color-light-gray-95: #131416;
|
||||||
|
--wb-color-light-gray-100: #000000;
|
||||||
|
--wb-color-light-alpha-black100: #000000;
|
||||||
|
--wb-color-light-alpha-black75: #000000bf;
|
||||||
|
--wb-color-light-alpha-black50: #00000080;
|
||||||
|
--wb-color-light-alpha-black25: #00000040;
|
||||||
|
--wb-color-light-alpha-black10: #0000001a;
|
||||||
|
--wb-color-light-alpha-black0: #00000000;
|
||||||
|
--wb-color-light-alpha-white100: #ffffff;
|
||||||
|
--wb-color-light-alpha-white75: #ffffffbf;
|
||||||
|
--wb-color-light-alpha-white50: #ffffff80;
|
||||||
|
--wb-color-light-alpha-white25: #ffffff40;
|
||||||
|
--wb-color-light-alpha-white10: #ffffff1a;
|
||||||
|
--wb-color-light-alpha-white0: #ffffff00;
|
||||||
|
--wb-color-light-danger-5: #fdefec;
|
||||||
|
--wb-color-light-danger-10: #fcdfd9;
|
||||||
|
--wb-color-light-danger-20: #f7afa1;
|
||||||
|
--wb-color-light-danger-30: #f48771;
|
||||||
|
--wb-color-light-danger-40: #f05f42;
|
||||||
|
--wb-color-light-danger-50: #de3412;
|
||||||
|
--wb-color-light-danger-60: #bd2c0f;
|
||||||
|
--wb-color-light-danger-70: #8a240f;
|
||||||
|
--wb-color-light-danger-80: #5c180a;
|
||||||
|
--wb-color-light-danger-90: #390d05;
|
||||||
|
--wb-color-light-danger-95: #260903;
|
||||||
|
--wb-color-light-information-5: #e7f4fe;
|
||||||
|
--wb-color-light-information-10: #d3ebfd;
|
||||||
|
--wb-color-light-information-20: #9ed2fa;
|
||||||
|
--wb-color-light-information-30: #5fb5f7;
|
||||||
|
--wb-color-light-information-40: #2098f3;
|
||||||
|
--wb-color-light-information-50: #0b78cb;
|
||||||
|
--wb-color-light-information-60: #096ab3;
|
||||||
|
--wb-color-light-information-70: #085691;
|
||||||
|
--wb-color-light-information-80: #053961;
|
||||||
|
--wb-color-light-information-90: #03253f;
|
||||||
|
--wb-color-light-information-95: #021a2c;
|
||||||
|
--wb-color-light-warning-5: #fff3db;
|
||||||
|
--wb-color-light-warning-10: #ffe0a3;
|
||||||
|
--wb-color-light-warning-20: #ffc95c;
|
||||||
|
--wb-color-light-warning-30: #ffb114;
|
||||||
|
--wb-color-light-warning-40: #c78500;
|
||||||
|
--wb-color-light-warning-50: #9e6a00;
|
||||||
|
--wb-color-light-warning-60: #8a5c00;
|
||||||
|
--wb-color-light-warning-70: #614100;
|
||||||
|
--wb-color-light-warning-80: #422c00;
|
||||||
|
--wb-color-light-warning-90: #2e1f00;
|
||||||
|
--wb-color-light-warning-95: #241800;
|
||||||
|
--wb-color-light-success-5: #eaf6ec;
|
||||||
|
--wb-color-light-success-10: #d8eedd;
|
||||||
|
--wb-color-light-success-20: #a9dab4;
|
||||||
|
--wb-color-light-success-30: #7ec88e;
|
||||||
|
--wb-color-light-success-40: #3fa654;
|
||||||
|
--wb-color-light-success-50: #228738;
|
||||||
|
--wb-color-light-success-60: #267337;
|
||||||
|
--wb-color-light-success-70: #285d33;
|
||||||
|
--wb-color-light-success-80: #1f4727;
|
||||||
|
--wb-color-light-success-90: #122b18;
|
||||||
|
--wb-color-light-success-95: #0e2012;
|
||||||
|
--wb-color-light-point-5: #fbeff0;
|
||||||
|
--wb-color-light-point-10: #f5d6d9;
|
||||||
|
--wb-color-light-point-20: #ebadb2;
|
||||||
|
--wb-color-light-point-30: #e0858c;
|
||||||
|
--wb-color-light-point-40: #d65c66;
|
||||||
|
--wb-color-light-point-50: #d63d4a;
|
||||||
|
--wb-color-light-point-60: #ab2b36;
|
||||||
|
--wb-color-light-point-70: #7a1f26;
|
||||||
|
--wb-color-light-point-80: #521419;
|
||||||
|
--wb-color-light-point-90: #310c0f;
|
||||||
|
--wb-color-light-point-95: #21080a;
|
||||||
|
--wb-color-light-graphic-10: #e5ecf9;
|
||||||
|
--wb-color-light-graphic-30: #98acc5;
|
||||||
|
--wb-color-light-graphic-50: #61758f;
|
||||||
|
--wb-color-light-graphic-70: #39506c;
|
||||||
|
--wb-color-light-graphic-90: #223a58;
|
||||||
|
--wb-color-high-contrast-gray-0: #ffffff;
|
||||||
|
--wb-color-high-contrast-gray-5: #f4f5f6;
|
||||||
|
--wb-color-high-contrast-gray-10: #e6e8ea;
|
||||||
|
--wb-color-high-contrast-gray-20: #cdd1d5;
|
||||||
|
--wb-color-high-contrast-gray-30: #b1b8be;
|
||||||
|
--wb-color-high-contrast-gray-40: #8a949e;
|
||||||
|
--wb-color-high-contrast-gray-50: #6d7882;
|
||||||
|
--wb-color-high-contrast-gray-60: #58616a;
|
||||||
|
--wb-color-high-contrast-gray-70: #464c53;
|
||||||
|
--wb-color-high-contrast-gray-80: #33363d;
|
||||||
|
--wb-color-high-contrast-gray-90: #1e2124;
|
||||||
|
--wb-color-high-contrast-gray-95: #131416;
|
||||||
|
--wb-color-high-contrast-gray-100: #000000;
|
||||||
|
--wb-color-high-contrast-primary-5: #ecf2fe;
|
||||||
|
--wb-color-high-contrast-primary-10: #d8e5fd;
|
||||||
|
--wb-color-high-contrast-primary-20: #b1cefb;
|
||||||
|
--wb-color-high-contrast-primary-30: #86aff9;
|
||||||
|
--wb-color-high-contrast-primary-40: #4c87f6;
|
||||||
|
--wb-color-high-contrast-primary-50: #256ef4;
|
||||||
|
--wb-color-high-contrast-primary-60: #0b50d0;
|
||||||
|
--wb-color-high-contrast-primary-70: #083891;
|
||||||
|
--wb-color-high-contrast-primary-80: #052561;
|
||||||
|
--wb-color-high-contrast-primary-90: #03163a;
|
||||||
|
--wb-color-high-contrast-primary-95: #020f27;
|
||||||
|
--wb-color-high-contrast-secondary-5: #edf6f8;
|
||||||
|
--wb-color-high-contrast-secondary-10: #d5ebf1;
|
||||||
|
--wb-color-high-contrast-secondary-20: #abd8e3;
|
||||||
|
--wb-color-high-contrast-secondary-30: #75c0d1;
|
||||||
|
--wb-color-high-contrast-secondary-40: #3d9fb8;
|
||||||
|
--wb-color-high-contrast-secondary-50: #268097;
|
||||||
|
--wb-color-high-contrast-secondary-60: #1f687a;
|
||||||
|
--wb-color-high-contrast-secondary-70: #17505e;
|
||||||
|
--wb-color-high-contrast-secondary-80: #113b45;
|
||||||
|
--wb-color-high-contrast-secondary-90: #0e3139;
|
||||||
|
--wb-color-high-contrast-secondary-95: #091f25;
|
||||||
|
--wb-color-high-contrast-point-5: #fbeff0;
|
||||||
|
--wb-color-high-contrast-point-10: #f5d6d9;
|
||||||
|
--wb-color-high-contrast-point-20: #ebadb2;
|
||||||
|
--wb-color-high-contrast-point-30: #e0858c;
|
||||||
|
--wb-color-high-contrast-point-40: #d65c66;
|
||||||
|
--wb-color-high-contrast-point-50: #d63d4a;
|
||||||
|
--wb-color-high-contrast-point-60: #ab2b36;
|
||||||
|
--wb-color-high-contrast-point-70: #7a1f26;
|
||||||
|
--wb-color-high-contrast-point-80: #521419;
|
||||||
|
--wb-color-high-contrast-point-90: #310c0f;
|
||||||
|
--wb-color-high-contrast-point-95: #21080a;
|
||||||
|
--wb-color-high-contrast-danger-5: #fdefec;
|
||||||
|
--wb-color-high-contrast-danger-10: #fcdfd9;
|
||||||
|
--wb-color-high-contrast-danger-20: #f7afa1;
|
||||||
|
--wb-color-high-contrast-danger-30: #f48771;
|
||||||
|
--wb-color-high-contrast-danger-40: #f05f42;
|
||||||
|
--wb-color-high-contrast-danger-50: #de3412;
|
||||||
|
--wb-color-high-contrast-danger-60: #bd2c0f;
|
||||||
|
--wb-color-high-contrast-danger-70: #8a240f;
|
||||||
|
--wb-color-high-contrast-danger-80: #5c180a;
|
||||||
|
--wb-color-high-contrast-danger-90: #390d05;
|
||||||
|
--wb-color-high-contrast-danger-95: #260903;
|
||||||
|
--wb-color-high-contrast-warning-5: #fff3db;
|
||||||
|
--wb-color-high-contrast-warning-10: #ffe0a3;
|
||||||
|
--wb-color-high-contrast-warning-20: #ffc95c;
|
||||||
|
--wb-color-high-contrast-warning-30: #ffb114;
|
||||||
|
--wb-color-high-contrast-warning-40: #c78500;
|
||||||
|
--wb-color-high-contrast-warning-50: #9e6a00;
|
||||||
|
--wb-color-high-contrast-warning-60: #8a5c00;
|
||||||
|
--wb-color-high-contrast-warning-70: #614100;
|
||||||
|
--wb-color-high-contrast-warning-80: #422c00;
|
||||||
|
--wb-color-high-contrast-warning-90: #2e1f00;
|
||||||
|
--wb-color-high-contrast-warning-95: #241800;
|
||||||
|
--wb-color-high-contrast-success-5: #eaf6ec;
|
||||||
|
--wb-color-high-contrast-success-10: #d8eedd;
|
||||||
|
--wb-color-high-contrast-success-20: #a9dab4;
|
||||||
|
--wb-color-high-contrast-success-30: #7ec88e;
|
||||||
|
--wb-color-high-contrast-success-40: #3fa654;
|
||||||
|
--wb-color-high-contrast-success-50: #228738;
|
||||||
|
--wb-color-high-contrast-success-60: #267337;
|
||||||
|
--wb-color-high-contrast-success-70: #285d33;
|
||||||
|
--wb-color-high-contrast-success-80: #1f4727;
|
||||||
|
--wb-color-high-contrast-success-90: #122b18;
|
||||||
|
--wb-color-high-contrast-success-95: #0e2012;
|
||||||
|
--wb-color-high-contrast-information-5: #e7f4fe;
|
||||||
|
--wb-color-high-contrast-information-10: #d3ebfd;
|
||||||
|
--wb-color-high-contrast-information-20: #9ed2fa;
|
||||||
|
--wb-color-high-contrast-information-30: #5fb5f7;
|
||||||
|
--wb-color-high-contrast-information-40: #2098f3;
|
||||||
|
--wb-color-high-contrast-information-50: #0b78cb;
|
||||||
|
--wb-color-high-contrast-information-60: #096ab3;
|
||||||
|
--wb-color-high-contrast-information-70: #085691;
|
||||||
|
--wb-color-high-contrast-information-80: #053961;
|
||||||
|
--wb-color-high-contrast-information-90: #03253f;
|
||||||
|
--wb-color-high-contrast-information-95: #021a2c;
|
||||||
|
--wb-color-high-contrast-alpha-black100: #000000;
|
||||||
|
--wb-color-high-contrast-alpha-black75: #000000bf;
|
||||||
|
--wb-color-high-contrast-alpha-black50: #00000080;
|
||||||
|
--wb-color-high-contrast-alpha-black25: #00000040;
|
||||||
|
--wb-color-high-contrast-alpha-black10: #0000001a;
|
||||||
|
--wb-color-high-contrast-alpha-black0: #00000000;
|
||||||
|
--wb-color-high-contrast-alpha-white100: #ffffff;
|
||||||
|
--wb-color-high-contrast-alpha-white75: #ffffffbf;
|
||||||
|
--wb-color-high-contrast-alpha-white50: #ffffff80;
|
||||||
|
--wb-color-high-contrast-alpha-white25: #ffffff40;
|
||||||
|
--wb-color-high-contrast-alpha-white10: #ffffff1a;
|
||||||
|
--wb-color-high-contrast-alpha-white0: #ffffff00;
|
||||||
|
--wb-color-high-contrast-graphic-10: #e5ecf9;
|
||||||
|
--wb-color-high-contrast-graphic-30: #98acc5;
|
||||||
|
--wb-color-high-contrast-graphic-50: #61758f;
|
||||||
|
--wb-color-high-contrast-graphic-70: #39506c;
|
||||||
|
--wb-color-high-contrast-graphic-90: #223a58;
|
||||||
|
--wb-typo-font-type: Pretendard GOV;
|
||||||
|
--wb-typo-font-weight-regular: Regular;
|
||||||
|
--wb-typo-font-weight-bold: Bold;
|
||||||
|
--wb-typo-letter-spacing-0: 0rem;
|
||||||
|
--wb-typo-letter-spacing-1: 0.1rem;
|
||||||
|
--wb-number-0: 0rem;
|
||||||
|
--wb-number-1: 0.1rem;
|
||||||
|
--wb-number-2: 0.2rem;
|
||||||
|
--wb-number-3: 0.4rem;
|
||||||
|
--wb-number-4: 0.6rem;
|
||||||
|
--wb-number-5: 0.8rem;
|
||||||
|
--wb-number-6: 1rem;
|
||||||
|
--wb-number-7: 1.2rem;
|
||||||
|
--wb-number-8: 1.6rem;
|
||||||
|
--wb-number-9: 2rem;
|
||||||
|
--wb-number-10: 2.4rem;
|
||||||
|
--wb-number-11: 2.8rem;
|
||||||
|
--wb-number-12: 3.2rem;
|
||||||
|
--wb-number-13: 3.6rem;
|
||||||
|
--wb-number-14: 4rem;
|
||||||
|
--wb-number-15: 4.4rem;
|
||||||
|
--wb-number-16: 4.8rem;
|
||||||
|
--wb-number-17: 5.6rem;
|
||||||
|
--wb-number-18: 6.4rem;
|
||||||
|
--wb-number-19: 7.2rem;
|
||||||
|
--wb-number-20: 8rem;
|
||||||
|
--wb-number-21: 9.6rem;
|
||||||
|
--wb-number-max: 100rem;
|
||||||
|
|
||||||
|
/* MODE-LIGHT */
|
||||||
|
--wb-light-color-surface-gray-subtler: var(--wb-color-light-gray-5);
|
||||||
|
--wb-light-color-surface-gray-subtle: var(--wb-color-light-gray-10);
|
||||||
|
--wb-light-color-surface-disabled: var(--wb-color-light-gray-20);
|
||||||
|
--wb-light-color-surface-primary-subtler: var(--wb-color-light-primary-5);
|
||||||
|
--wb-light-color-surface-secondary-subtler: var(--wb-color-light-secondary-5);
|
||||||
|
--wb-light-color-surface-danger-subtler: var(--wb-color-light-danger-5);
|
||||||
|
--wb-light-color-surface-warning-subtler: var(--wb-color-light-warning-5);
|
||||||
|
--wb-light-color-surface-success-subtler: var(--wb-color-light-success-5);
|
||||||
|
--wb-light-color-surface-information-subtler: var(--wb-color-light-information-5);
|
||||||
|
--wb-light-color-surface-point-subtler: var(--wb-color-light-point-5);
|
||||||
|
--wb-light-color-surface-white: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-surface-inverse: var(--wb-color-light-gray-90);
|
||||||
|
--wb-light-color-surface-white-static: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-surface-inverse-static: var(--wb-color-light-gray-90);
|
||||||
|
--wb-light-color-surface-white-subtle: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-surface-white-subtler: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-border-gray-light: var(--wb-color-light-gray-20);
|
||||||
|
--wb-light-color-border-gray: var(--wb-color-light-gray-30);
|
||||||
|
--wb-light-color-border-secondary-light: var(--wb-color-light-secondary-10);
|
||||||
|
--wb-light-color-border-danger-light: var(--wb-color-light-danger-10);
|
||||||
|
--wb-light-color-border-danger: var(--wb-color-light-danger-50);
|
||||||
|
--wb-light-color-border-warning-light: var(--wb-color-light-warning-10);
|
||||||
|
--wb-light-color-border-warning: var(--wb-color-light-warning-50);
|
||||||
|
--wb-light-color-border-success-light: var(--wb-color-light-success-10);
|
||||||
|
--wb-light-color-border-success: var(--wb-color-light-success-50);
|
||||||
|
--wb-light-color-border-information-light: var(--wb-color-light-information-10);
|
||||||
|
--wb-light-color-border-information: var(--wb-color-light-information-50);
|
||||||
|
--wb-light-color-border-gray-dark: var(--wb-color-light-gray-60);
|
||||||
|
--wb-light-color-border-primary: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-border-disabled: var(--wb-color-light-gray-30);
|
||||||
|
--wb-light-color-border-gray-darker: var(--wb-color-light-gray-90);
|
||||||
|
--wb-light-color-border-secondary: var(--wb-color-light-secondary-70);
|
||||||
|
--wb-light-color-border-inverse: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-border-transparency: var(--wb-color-light-alpha-black0);
|
||||||
|
--wb-light-color-border-primary-light: var(--wb-color-light-primary-10);
|
||||||
|
--wb-light-color-border-point: var(--wb-color-light-point-50);
|
||||||
|
--wb-light-color-border-point-light: var(--wb-color-light-point-10);
|
||||||
|
--wb-light-color-divider-gray-light: var(--wb-color-light-gray-20);
|
||||||
|
--wb-light-color-divider-gray: var(--wb-color-light-gray-40);
|
||||||
|
--wb-light-color-divider-gray-dark: var(--wb-color-light-gray-50);
|
||||||
|
--wb-light-color-divider-primary: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-divider-secondary-light: var(--wb-color-light-secondary-10);
|
||||||
|
--wb-light-color-divider-secondary: var(--wb-color-light-secondary-70);
|
||||||
|
--wb-light-color-divider-error: var(--wb-color-light-danger-50);
|
||||||
|
--wb-light-color-divider-primary-light: var(--wb-color-light-primary-10);
|
||||||
|
--wb-light-color-divider-inverse: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-divider-gray-darker: var(--wb-color-light-gray-90);
|
||||||
|
--wb-light-color-divider-point: var(--wb-color-light-point-50);
|
||||||
|
--wb-light-color-text-bolder: var(--wb-color-light-gray-95);
|
||||||
|
--wb-light-color-text-subtle: var(--wb-color-light-gray-70);
|
||||||
|
--wb-light-color-text-disabled: var(--wb-color-light-gray-40);
|
||||||
|
--wb-light-color-text-disabled-on: var(--wb-color-light-gray-50);
|
||||||
|
--wb-light-color-text-primary: var(--wb-color-light-primary-60);
|
||||||
|
--wb-light-color-text-secondary: var(--wb-color-light-secondary-80);
|
||||||
|
--wb-light-color-text-danger: var(--wb-color-light-danger-60);
|
||||||
|
--wb-light-color-text-warning: var(--wb-color-light-warning-60);
|
||||||
|
--wb-light-color-text-success: var(--wb-color-light-success-60);
|
||||||
|
--wb-light-color-text-information: var(--wb-color-light-information-60);
|
||||||
|
--wb-light-color-text-basic: var(--wb-color-light-gray-90);
|
||||||
|
--wb-light-color-text-point: var(--wb-color-light-point-60);
|
||||||
|
--wb-light-color-text-bolder-inverse: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-text-basic-inverse: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-text-subtle-inverse: var(--wb-color-light-gray-30);
|
||||||
|
--wb-light-color-text-inverse-static: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-text-static: var(--wb-color-light-gray-90);
|
||||||
|
--wb-light-color-icon-gray: var(--wb-color-light-gray-80);
|
||||||
|
--wb-light-color-icon-gray-fill: var(--wb-color-light-gray-20);
|
||||||
|
--wb-light-color-icon-inverse: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-icon-primary: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-icon-secondary: var(--wb-color-light-secondary-80);
|
||||||
|
--wb-light-color-icon-point: var(--wb-color-light-point-50);
|
||||||
|
--wb-light-color-icon-danger: var(--wb-color-light-danger-50);
|
||||||
|
--wb-light-color-icon-warning: var(--wb-color-light-warning-50);
|
||||||
|
--wb-light-color-icon-success: var(--wb-color-light-success-50);
|
||||||
|
--wb-light-color-icon-information: var(--wb-color-light-information-50);
|
||||||
|
--wb-light-color-icon-gray-light: var(--wb-color-light-gray-70);
|
||||||
|
--wb-light-color-icon-disabled: var(--wb-color-light-gray-40);
|
||||||
|
--wb-light-color-icon-disabled-on: var(--wb-color-light-gray-50);
|
||||||
|
--wb-light-color-icon-inverse-static: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-icon-primary-static: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-icon-secondary-static: var(--wb-color-light-secondary-80);
|
||||||
|
--wb-light-color-icon-point-static: var(--wb-color-light-point-50);
|
||||||
|
--wb-light-color-icon-danger-static: var(--wb-color-light-danger-50);
|
||||||
|
--wb-light-color-icon-warning-static: var(--wb-color-light-warning-50);
|
||||||
|
--wb-light-color-icon-success-static: var(--wb-color-light-success-50);
|
||||||
|
--wb-light-color-icon-information-static: var(--wb-color-light-information-50);
|
||||||
|
--wb-light-color-icon-gray-static: var(--wb-color-light-gray-80);
|
||||||
|
--wb-light-color-link-default: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-link-hover: var(--wb-color-light-primary-60);
|
||||||
|
--wb-light-color-link-pressed: var(--wb-color-light-primary-70);
|
||||||
|
--wb-light-color-link-visited: #5917b8;
|
||||||
|
--wb-light-color-button-primary-fill: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-button-primary-fill-hover: var(--wb-color-light-primary-60);
|
||||||
|
--wb-light-color-button-primary-fill-pressed: var(--wb-color-light-primary-70);
|
||||||
|
--wb-light-color-button-secondary-fill: var(--wb-color-light-primary-5);
|
||||||
|
--wb-light-color-button-secondary-fill-hover: var(--wb-color-light-primary-10);
|
||||||
|
--wb-light-color-button-secondary-fill-pressed: var(--wb-color-light-primary-20);
|
||||||
|
--wb-light-color-button-secondary-border: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-button-tertiary-fill: var(--wb-color-light-alpha-white0);
|
||||||
|
--wb-light-color-button-tertiary-fill-hover: var(--wb-color-light-gray-5);
|
||||||
|
--wb-light-color-button-tertiary-fill-pressed: var(--wb-color-light-gray-10);
|
||||||
|
--wb-light-color-button-tertiary-border: var(--wb-color-light-gray-60);
|
||||||
|
--wb-light-color-button-disabled-fill: var(--wb-color-light-gray-20);
|
||||||
|
--wb-light-color-button-text-fill-hover: var(--wb-color-light-secondary-5);
|
||||||
|
--wb-light-color-button-text-fill-pressed: var(--wb-color-light-secondary-10);
|
||||||
|
--wb-light-color-button-text-fill: var(--wb-color-light-alpha-white0);
|
||||||
|
--wb-light-color-button-text-border: var(--wb-color-light-alpha-black0);
|
||||||
|
--wb-light-color-button-disabled-border: var(--wb-color-light-gray-30);
|
||||||
|
--wb-light-color-background-white: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-background-inverse: var(--wb-color-light-gray-90);
|
||||||
|
--wb-light-color-background-gray-subtler: var(--wb-color-light-gray-5);
|
||||||
|
--wb-light-color-background-gray-subtle: var(--wb-color-light-gray-10);
|
||||||
|
--wb-light-color-background-dim: var(--wb-color-light-alpha-black75);
|
||||||
|
--wb-light-color-element-disabled-light: var(--wb-color-light-gray-20);
|
||||||
|
--wb-light-color-element-disabled-dark: var(--wb-color-light-gray-40);
|
||||||
|
--wb-light-color-element-gray-lighter: var(--wb-color-light-gray-5);
|
||||||
|
--wb-light-color-element-gray-light: var(--wb-color-light-gray-10);
|
||||||
|
--wb-light-color-element-gray: var(--wb-color-light-gray-50);
|
||||||
|
--wb-light-color-element-primary-lighter: var(--wb-color-light-primary-5);
|
||||||
|
--wb-light-color-element-primary-light: var(--wb-color-light-primary-10);
|
||||||
|
--wb-light-color-element-primary: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-element-secondary-lighter: var(--wb-color-light-secondary-5);
|
||||||
|
--wb-light-color-element-secondary-light: var(--wb-color-light-secondary-10);
|
||||||
|
--wb-light-color-element-secondary: var(--wb-color-light-secondary-70);
|
||||||
|
--wb-light-color-element-point-lighter: var(--wb-color-light-point-5);
|
||||||
|
--wb-light-color-element-point-light: var(--wb-color-light-point-10);
|
||||||
|
--wb-light-color-element-point: var(--wb-color-light-point-50);
|
||||||
|
--wb-light-color-element-danger-lighter: var(--wb-color-light-danger-5);
|
||||||
|
--wb-light-color-element-danger: var(--wb-color-light-danger-50);
|
||||||
|
--wb-light-color-element-warning-lighter: var(--wb-color-light-warning-5);
|
||||||
|
--wb-light-color-element-warning: var(--wb-color-light-warning-30);
|
||||||
|
--wb-light-color-element-success-lighter: var(--wb-color-light-success-5);
|
||||||
|
--wb-light-color-element-success: var(--wb-color-light-success-50);
|
||||||
|
--wb-light-color-element-information-lighter: var(--wb-color-light-information-5);
|
||||||
|
--wb-light-color-element-information: var(--wb-color-light-information-50);
|
||||||
|
--wb-light-color-element-inverse: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-element-gray-dark: var(--wb-color-light-gray-60);
|
||||||
|
--wb-light-color-element-inverse-static: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-action-white: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-action-primary: var(--wb-color-light-alpha-white0);
|
||||||
|
--wb-light-color-action-primary-hover: var(--wb-color-light-primary-5);
|
||||||
|
--wb-light-color-action-primary-pressed: var(--wb-color-light-primary-10);
|
||||||
|
--wb-light-color-action-secondary: var(--wb-color-light-alpha-white0);
|
||||||
|
--wb-light-color-action-secondary-hover: var(--wb-color-light-secondary-5);
|
||||||
|
--wb-light-color-action-secondary-pressed: var(--wb-color-light-secondary-10);
|
||||||
|
--wb-light-color-action-secondary-selected: var(--wb-color-light-secondary-5);
|
||||||
|
--wb-light-color-action-secondary-on: var(--wb-color-light-alpha-white0);
|
||||||
|
--wb-light-color-action-secondary-on-hover: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-action-secondary-on-pressed: var(--wb-color-light-secondary-10);
|
||||||
|
--wb-light-color-action-secondary-on-selected: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-action-secondary-active: var(--wb-color-light-secondary-70);
|
||||||
|
--wb-light-color-action-primary-active: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-action-disabled: var(--wb-color-light-gray-20);
|
||||||
|
--wb-light-color-action-primary-selected: var(--wb-color-light-primary-5);
|
||||||
|
--wb-light-color-input-border: var(--wb-color-light-gray-60);
|
||||||
|
--wb-light-color-input-border-disabled: var(--wb-color-light-gray-30);
|
||||||
|
--wb-light-color-input-border-active: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-input-border-error: var(--wb-color-light-danger-50);
|
||||||
|
--wb-light-color-input-surface: var(--wb-color-light-gray-0);
|
||||||
|
--wb-light-color-input-surface-disabled: var(--wb-color-light-gray-20);
|
||||||
|
--wb-light-color-graphic-blue-subtler: var(--wb-color-light-graphic-10);
|
||||||
|
--wb-light-color-graphic-blue-subtle: var(--wb-color-light-graphic-30);
|
||||||
|
--wb-light-color-graphic-blue: var(--wb-color-light-graphic-50);
|
||||||
|
--wb-light-color-graphic-blue-dark: var(--wb-color-light-graphic-70);
|
||||||
|
--wb-light-color-graphic-blue-darker: var(--wb-color-light-graphic-90);
|
||||||
|
--wb-light-color-graphic-red-subtler: var(--wb-color-light-point-5);
|
||||||
|
--wb-light-color-graphic-red-subtle: var(--wb-color-light-point-10);
|
||||||
|
--wb-light-color-graphic-red: var(--wb-color-high-contrast-point-20);
|
||||||
|
--wb-light-color-graphic-red-dark: var(--wb-color-high-contrast-point-40);
|
||||||
|
--wb-light-color-graphic-red-darker: var(--wb-color-high-contrast-point-70);
|
||||||
|
--wb-light-color-graphic-brand: var(--wb-color-light-primary-50);
|
||||||
|
--wb-light-color-alpha-base100: var(--wb-color-light-alpha-white100);
|
||||||
|
--wb-light-color-alpha-base50: var(--wb-color-light-alpha-white50);
|
||||||
|
--wb-light-color-alpha-base25: var(--wb-color-high-contrast-alpha-white25);
|
||||||
|
--wb-light-color-alpha-base0: var(--wb-color-light-alpha-white0);
|
||||||
|
--wb-light-color-alpha-inverse100: var(--wb-color-light-alpha-black100);
|
||||||
|
--wb-light-color-alpha-inverse50: var(--wb-color-light-alpha-black50);
|
||||||
|
--wb-light-color-alpha-inverse25: var(--wb-color-light-alpha-black25);
|
||||||
|
--wb-light-color-alpha-inverse0: var(--wb-color-light-alpha-black0);
|
||||||
|
--wb-light-color-alpha-base75: var(--wb-color-light-alpha-white75);
|
||||||
|
--wb-light-color-alpha-inverse75: var(--wb-color-light-alpha-black75);
|
||||||
|
--wb-light-color-alpha-inverse10: var(--wb-color-light-alpha-black10);
|
||||||
|
--wb-light-color-alpha-base10: var(--wb-color-high-contrast-alpha-white10);
|
||||||
|
--wb-light-color-alpha-shadow1: #0000000d;
|
||||||
|
--wb-light-color-alpha-shadow2: #00000014;
|
||||||
|
--wb-light-color-alpha-shadow3: #0000001f;
|
||||||
|
--wb-light-border-width-variable-regular: 0.1rem;
|
||||||
|
--wb-light-border-width-variable-medium: 0.2rem;
|
||||||
|
--wb-light-border-width-static-regular: 0.1rem;
|
||||||
|
--wb-light-border-width-static-medium: 0.2rem;
|
||||||
|
|
||||||
|
/* MODE-HIGH-CONTRAST */
|
||||||
|
--wb-high-contrast-color-surface-gray-subtler: var(--wb-color-high-contrast-gray-95);
|
||||||
|
--wb-high-contrast-color-surface-gray-subtle: var(--wb-color-high-contrast-gray-90);
|
||||||
|
--wb-high-contrast-color-surface-disabled: var(--wb-color-high-contrast-gray-70);
|
||||||
|
--wb-high-contrast-color-surface-primary-subtler: var(--wb-color-high-contrast-primary-95);
|
||||||
|
--wb-high-contrast-color-surface-secondary-subtler: var(--wb-color-high-contrast-secondary-95);
|
||||||
|
--wb-high-contrast-color-surface-danger-subtler: var(--wb-color-high-contrast-danger-95);
|
||||||
|
--wb-high-contrast-color-surface-warning-subtler: var(--wb-color-high-contrast-warning-95);
|
||||||
|
--wb-high-contrast-color-surface-success-subtler: var(--wb-color-high-contrast-success-95);
|
||||||
|
--wb-high-contrast-color-surface-information-subtler: var(--wb-color-high-contrast-information-95);
|
||||||
|
--wb-high-contrast-color-surface-point-subtler: var(--wb-color-high-contrast-point-95);
|
||||||
|
--wb-high-contrast-color-surface-white: var(--wb-color-high-contrast-gray-100);
|
||||||
|
--wb-high-contrast-color-surface-inverse: var(--wb-color-high-contrast-gray-10);
|
||||||
|
--wb-high-contrast-color-surface-white-static: var(--wb-color-high-contrast-gray-0);
|
||||||
|
--wb-high-contrast-color-surface-inverse-static: var(--wb-color-high-contrast-gray-90);
|
||||||
|
--wb-high-contrast-color-surface-white-subtle: var(--wb-color-high-contrast-gray-95);
|
||||||
|
--wb-high-contrast-color-surface-white-subtler: var(--wb-color-high-contrast-gray-90);
|
||||||
|
--wb-high-contrast-color-border-gray-light: var(--wb-color-high-contrast-gray-80);
|
||||||
|
--wb-high-contrast-color-border-gray: var(--wb-color-high-contrast-gray-70);
|
||||||
|
--wb-high-contrast-color-border-secondary-light: var(--wb-color-high-contrast-secondary-90);
|
||||||
|
--wb-high-contrast-color-border-danger-light: var(--wb-color-high-contrast-danger-90);
|
||||||
|
--wb-high-contrast-color-border-danger: var(--wb-color-high-contrast-danger-50);
|
||||||
|
--wb-high-contrast-color-border-warning-light: var(--wb-color-high-contrast-warning-90);
|
||||||
|
--wb-high-contrast-color-border-warning: var(--wb-color-high-contrast-warning-50);
|
||||||
|
--wb-high-contrast-color-border-success-light: var(--wb-color-high-contrast-success-90);
|
||||||
|
--wb-high-contrast-color-border-success: var(--wb-color-high-contrast-success-50);
|
||||||
|
--wb-high-contrast-color-border-information-light: var(--wb-color-high-contrast-information-90);
|
||||||
|
--wb-high-contrast-color-border-information: var(--wb-color-high-contrast-information-50);
|
||||||
|
--wb-high-contrast-color-border-gray-dark: var(--wb-color-high-contrast-gray-40);
|
||||||
|
--wb-high-contrast-color-border-primary: var(--wb-color-high-contrast-primary-50);
|
||||||
|
--wb-high-contrast-color-border-disabled: var(--wb-color-high-contrast-gray-70);
|
||||||
|
--wb-high-contrast-color-border-gray-darker: var(--wb-color-high-contrast-gray-10);
|
||||||
|
--wb-high-contrast-color-border-secondary: var(--wb-color-high-contrast-secondary-60);
|
||||||
|
--wb-high-contrast-color-border-inverse: var(--wb-color-high-contrast-gray-100);
|
||||||
|
--wb-high-contrast-color-border-transparency: var(--wb-color-high-contrast-alpha-white25);
|
||||||
|
--wb-high-contrast-color-border-primary-light: var(--wb-color-high-contrast-primary-90);
|
||||||
|
--wb-high-contrast-color-border-point: var(--wb-color-high-contrast-point-50);
|
||||||
|
--wb-high-contrast-color-border-point-light: var(--wb-color-high-contrast-point-90);
|
||||||
|
--wb-high-contrast-color-divider-gray-light: var(--wb-color-high-contrast-gray-80);
|
||||||
|
--wb-high-contrast-color-divider-gray: var(--wb-color-high-contrast-gray-70);
|
||||||
|
--wb-high-contrast-color-divider-gray-dark: var(--wb-color-high-contrast-gray-50);
|
||||||
|
--wb-high-contrast-color-divider-primary: var(--wb-color-high-contrast-primary-50);
|
||||||
|
--wb-high-contrast-color-divider-secondary-light: var(--wb-color-high-contrast-secondary-90);
|
||||||
|
--wb-high-contrast-color-divider-secondary: var(--wb-color-high-contrast-secondary-60);
|
||||||
|
--wb-high-contrast-color-divider-error: var(--wb-color-high-contrast-danger-50);
|
||||||
|
--wb-high-contrast-color-divider-primary-light: var(--wb-color-high-contrast-primary-90);
|
||||||
|
--wb-high-contrast-color-divider-inverse: var(--wb-color-high-contrast-gray-100);
|
||||||
|
--wb-high-contrast-color-divider-gray-darker: var(--wb-color-high-contrast-gray-10);
|
||||||
|
--wb-high-contrast-color-divider-point: var(--wb-color-high-contrast-point-50);
|
||||||
|
--wb-high-contrast-color-text-bolder: var(--wb-color-high-contrast-gray-10);
|
||||||
|
--wb-high-contrast-color-text-subtle: var(--wb-color-high-contrast-gray-20);
|
||||||
|
--wb-high-contrast-color-text-disabled: var(--wb-color-high-contrast-gray-60);
|
||||||
|
--wb-high-contrast-color-text-disabled-on: var(--wb-color-high-contrast-gray-50);
|
||||||
|
--wb-high-contrast-color-text-primary: var(--wb-color-high-contrast-primary-20);
|
||||||
|
--wb-high-contrast-color-text-secondary: var(--wb-color-high-contrast-secondary-20);
|
||||||
|
--wb-high-contrast-color-text-danger: var(--wb-color-high-contrast-danger-20);
|
||||||
|
--wb-high-contrast-color-text-warning: var(--wb-color-high-contrast-warning-20);
|
||||||
|
--wb-high-contrast-color-text-success: var(--wb-color-high-contrast-success-20);
|
||||||
|
--wb-high-contrast-color-text-information: var(--wb-color-high-contrast-information-20);
|
||||||
|
--wb-high-contrast-color-text-basic: var(--wb-color-high-contrast-gray-5);
|
||||||
|
--wb-high-contrast-color-text-point: var(--wb-color-high-contrast-point-20);
|
||||||
|
--wb-high-contrast-color-text-bolder-inverse: var(--wb-color-high-contrast-gray-95);
|
||||||
|
--wb-high-contrast-color-text-basic-inverse: var(--wb-color-high-contrast-gray-90);
|
||||||
|
--wb-high-contrast-color-text-subtle-inverse: var(--wb-color-high-contrast-gray-70);
|
||||||
|
--wb-high-contrast-color-text-inverse-static: var(--wb-color-high-contrast-gray-0);
|
||||||
|
--wb-high-contrast-color-text-static: var(--wb-color-high-contrast-gray-90);
|
||||||
|
--wb-high-contrast-color-icon-gray: var(--wb-color-high-contrast-gray-5);
|
||||||
|
--wb-high-contrast-color-icon-gray-fill: var(--wb-color-high-contrast-gray-70);
|
||||||
|
--wb-high-contrast-color-icon-inverse: var(--wb-color-high-contrast-gray-90);
|
||||||
|
--wb-high-contrast-color-icon-primary: var(--wb-color-high-contrast-primary-20);
|
||||||
|
--wb-high-contrast-color-icon-secondary: var(--wb-color-high-contrast-secondary-20);
|
||||||
|
--wb-high-contrast-color-icon-point: var(--wb-color-high-contrast-point-20);
|
||||||
|
--wb-high-contrast-color-icon-danger: var(--wb-color-high-contrast-danger-20);
|
||||||
|
--wb-high-contrast-color-icon-warning: var(--wb-color-high-contrast-warning-20);
|
||||||
|
--wb-high-contrast-color-icon-success: var(--wb-color-high-contrast-success-20);
|
||||||
|
--wb-high-contrast-color-icon-information: var(--wb-color-high-contrast-information-20);
|
||||||
|
--wb-high-contrast-color-icon-gray-light: var(--wb-color-high-contrast-gray-20);
|
||||||
|
--wb-high-contrast-color-icon-disabled: var(--wb-color-high-contrast-gray-60);
|
||||||
|
--wb-high-contrast-color-icon-disabled-on: var(--wb-color-high-contrast-gray-50);
|
||||||
|
--wb-high-contrast-color-icon-inverse-static: var(--wb-color-high-contrast-gray-0);
|
||||||
|
--wb-high-contrast-color-icon-primary-static: var(--wb-color-high-contrast-primary-50);
|
||||||
|
--wb-high-contrast-color-icon-secondary-static: var(--wb-color-high-contrast-secondary-80);
|
||||||
|
--wb-high-contrast-color-icon-point-static: var(--wb-color-high-contrast-point-50);
|
||||||
|
--wb-high-contrast-color-icon-danger-static: var(--wb-color-high-contrast-danger-50);
|
||||||
|
--wb-high-contrast-color-icon-warning-static: var(--wb-color-high-contrast-warning-50);
|
||||||
|
--wb-high-contrast-color-icon-success-static: var(--wb-color-high-contrast-success-50);
|
||||||
|
--wb-high-contrast-color-icon-information-static: var(--wb-color-high-contrast-information-50);
|
||||||
|
--wb-high-contrast-color-icon-gray-static: var(--wb-color-high-contrast-gray-80);
|
||||||
|
--wb-high-contrast-color-link-default: var(--wb-color-high-contrast-primary-30);
|
||||||
|
--wb-high-contrast-color-link-hover: var(--wb-color-high-contrast-primary-20);
|
||||||
|
--wb-high-contrast-color-link-pressed: var(--wb-color-high-contrast-primary-10);
|
||||||
|
--wb-high-contrast-color-link-visited: #c49ff9;
|
||||||
|
--wb-high-contrast-color-button-primary-fill: var(--wb-color-high-contrast-primary-50);
|
||||||
|
--wb-high-contrast-color-button-primary-fill-hover: var(--wb-color-high-contrast-primary-60);
|
||||||
|
--wb-high-contrast-color-button-primary-fill-pressed: var(--wb-color-high-contrast-primary-70);
|
||||||
|
--wb-high-contrast-color-button-secondary-fill: var(--wb-color-high-contrast-primary-95);
|
||||||
|
--wb-high-contrast-color-button-secondary-fill-hover: var(--wb-color-high-contrast-primary-90);
|
||||||
|
--wb-high-contrast-color-button-secondary-fill-pressed: var(--wb-color-high-contrast-primary-80);
|
||||||
|
--wb-high-contrast-color-button-secondary-border: var(--wb-color-high-contrast-primary-50);
|
||||||
|
--wb-high-contrast-color-button-tertiary-fill: var(--wb-color-high-contrast-alpha-black0);
|
||||||
|
--wb-high-contrast-color-button-tertiary-fill-hover: var(--wb-color-high-contrast-gray-95);
|
||||||
|
--wb-high-contrast-color-button-tertiary-fill-pressed: var(--wb-color-high-contrast-gray-80);
|
||||||
|
--wb-high-contrast-color-button-tertiary-border: var(--wb-color-high-contrast-gray-40);
|
||||||
|
--wb-high-contrast-color-button-disabled-fill: var(--wb-color-high-contrast-gray-80);
|
||||||
|
--wb-high-contrast-color-button-text-fill-hover: var(--wb-color-high-contrast-secondary-95);
|
||||||
|
--wb-high-contrast-color-button-text-fill-pressed: var(--wb-color-high-contrast-secondary-90);
|
||||||
|
--wb-high-contrast-color-button-text-fill: var(--wb-color-high-contrast-alpha-black0);
|
||||||
|
--wb-high-contrast-color-button-text-border: var(--wb-color-high-contrast-alpha-white50);
|
||||||
|
--wb-high-contrast-color-button-disabled-border: var(--wb-color-high-contrast-gray-70);
|
||||||
|
--wb-high-contrast-color-background-white: var(--wb-color-high-contrast-gray-100);
|
||||||
|
--wb-high-contrast-color-background-inverse: var(--wb-color-high-contrast-gray-10);
|
||||||
|
--wb-high-contrast-color-background-gray-subtler: var(--wb-color-high-contrast-gray-95);
|
||||||
|
--wb-high-contrast-color-background-gray-subtle: var(--wb-color-high-contrast-gray-90);
|
||||||
|
--wb-high-contrast-color-background-dim: var(--wb-color-high-contrast-alpha-black75);
|
||||||
|
--wb-high-contrast-color-element-disabled-light: var(--wb-color-high-contrast-gray-80);
|
||||||
|
--wb-high-contrast-color-element-disabled-dark: var(--wb-color-high-contrast-gray-60);
|
||||||
|
--wb-high-contrast-color-element-gray-lighter: var(--wb-color-high-contrast-gray-95);
|
||||||
|
--wb-high-contrast-color-element-gray-light: var(--wb-color-high-contrast-gray-90);
|
||||||
|
--wb-high-contrast-color-element-gray: var(--wb-color-high-contrast-gray-50);
|
||||||
|
--wb-high-contrast-color-element-primary-lighter: var(--wb-color-high-contrast-primary-95);
|
||||||
|
--wb-high-contrast-color-element-primary-light: var(--wb-color-high-contrast-primary-90);
|
||||||
|
--wb-high-contrast-color-element-primary: var(--wb-color-high-contrast-primary-50);
|
||||||
|
--wb-high-contrast-color-element-secondary-lighter: var(--wb-color-high-contrast-secondary-95);
|
||||||
|
--wb-high-contrast-color-element-secondary-light: var(--wb-color-high-contrast-secondary-90);
|
||||||
|
--wb-high-contrast-color-element-secondary: var(--wb-color-high-contrast-secondary-60);
|
||||||
|
--wb-high-contrast-color-element-point-lighter: var(--wb-color-high-contrast-point-95);
|
||||||
|
--wb-high-contrast-color-element-point-light: var(--wb-color-high-contrast-point-90);
|
||||||
|
--wb-high-contrast-color-element-point: var(--wb-color-high-contrast-point-50);
|
||||||
|
--wb-high-contrast-color-element-danger-lighter: var(--wb-color-high-contrast-danger-95);
|
||||||
|
--wb-high-contrast-color-element-danger: var(--wb-color-high-contrast-danger-50);
|
||||||
|
--wb-high-contrast-color-element-warning-lighter: var(--wb-color-high-contrast-warning-95);
|
||||||
|
--wb-high-contrast-color-element-warning: var(--wb-color-high-contrast-warning-30);
|
||||||
|
--wb-high-contrast-color-element-success-lighter: var(--wb-color-high-contrast-success-95);
|
||||||
|
--wb-high-contrast-color-element-success: var(--wb-color-high-contrast-success-50);
|
||||||
|
--wb-high-contrast-color-element-information-lighter: var(--wb-color-high-contrast-information-95);
|
||||||
|
--wb-high-contrast-color-element-information: var(--wb-color-high-contrast-information-50);
|
||||||
|
--wb-high-contrast-color-element-inverse: var(--wb-color-high-contrast-gray-95);
|
||||||
|
--wb-high-contrast-color-element-gray-dark: var(--wb-color-high-contrast-gray-40);
|
||||||
|
--wb-high-contrast-color-element-inverse-static: var(--wb-color-high-contrast-gray-0);
|
||||||
|
--wb-high-contrast-color-action-white: var(--wb-color-light-gray-100);
|
||||||
|
--wb-high-contrast-color-action-primary: var(--wb-color-high-contrast-alpha-black0);
|
||||||
|
--wb-high-contrast-color-action-primary-hover: var(--wb-color-high-contrast-primary-95);
|
||||||
|
--wb-high-contrast-color-action-primary-pressed: var(--wb-color-high-contrast-primary-90);
|
||||||
|
--wb-high-contrast-color-action-secondary: var(--wb-color-light-alpha-black0);
|
||||||
|
--wb-high-contrast-color-action-secondary-hover: var(--wb-color-high-contrast-secondary-95);
|
||||||
|
--wb-high-contrast-color-action-secondary-pressed: var(--wb-color-high-contrast-secondary-90);
|
||||||
|
--wb-high-contrast-color-action-secondary-selected: var(--wb-color-high-contrast-secondary-95);
|
||||||
|
--wb-high-contrast-color-action-secondary-on: var(--wb-color-high-contrast-alpha-black0);
|
||||||
|
--wb-high-contrast-color-action-secondary-on-hover: var(--wb-color-high-contrast-gray-100);
|
||||||
|
--wb-high-contrast-color-action-secondary-on-pressed: var(--wb-color-high-contrast-secondary-90);
|
||||||
|
--wb-high-contrast-color-action-secondary-on-selected: var(--wb-color-high-contrast-gray-95);
|
||||||
|
--wb-high-contrast-color-action-secondary-active: var(--wb-color-high-contrast-secondary-60);
|
||||||
|
--wb-high-contrast-color-action-primary-active: var(--wb-color-high-contrast-primary-50);
|
||||||
|
--wb-high-contrast-color-action-disabled: var(--wb-color-high-contrast-gray-80);
|
||||||
|
--wb-high-contrast-color-action-primary-selected: var(--wb-color-high-contrast-primary-95);
|
||||||
|
--wb-high-contrast-color-input-border: var(--wb-color-high-contrast-gray-40);
|
||||||
|
--wb-high-contrast-color-input-border-disabled: var(--wb-color-high-contrast-gray-70);
|
||||||
|
--wb-high-contrast-color-input-border-active: var(--wb-color-high-contrast-primary-50);
|
||||||
|
--wb-high-contrast-color-input-border-error: var(--wb-color-high-contrast-danger-50);
|
||||||
|
--wb-high-contrast-color-input-surface: var(--wb-color-high-contrast-gray-90);
|
||||||
|
--wb-high-contrast-color-input-surface-disabled: var(--wb-color-high-contrast-gray-95);
|
||||||
|
--wb-high-contrast-color-graphic-blue-subtler: var(--wb-color-high-contrast-graphic-10);
|
||||||
|
--wb-high-contrast-color-graphic-blue-subtle: var(--wb-color-high-contrast-graphic-30);
|
||||||
|
--wb-high-contrast-color-graphic-blue: var(--wb-color-high-contrast-graphic-50);
|
||||||
|
--wb-high-contrast-color-graphic-blue-dark: var(--wb-color-high-contrast-graphic-70);
|
||||||
|
--wb-high-contrast-color-graphic-blue-darker: var(--wb-color-high-contrast-graphic-90);
|
||||||
|
--wb-high-contrast-color-graphic-red-subtler: var(--wb-color-high-contrast-point-5);
|
||||||
|
--wb-high-contrast-color-graphic-red-subtle: var(--wb-color-high-contrast-point-10);
|
||||||
|
--wb-high-contrast-color-graphic-red: var(--wb-color-high-contrast-point-20);
|
||||||
|
--wb-high-contrast-color-graphic-red-dark: var(--wb-color-high-contrast-point-40);
|
||||||
|
--wb-high-contrast-color-graphic-red-darker: var(--wb-color-high-contrast-point-70);
|
||||||
|
--wb-high-contrast-color-graphic-brand: var(--wb-color-high-contrast-primary-50);
|
||||||
|
--wb-high-contrast-color-alpha-base100: var(--wb-color-high-contrast-alpha-black100);
|
||||||
|
--wb-high-contrast-color-alpha-base50: var(--wb-color-high-contrast-alpha-black50);
|
||||||
|
--wb-high-contrast-color-alpha-base25: var(--wb-color-high-contrast-alpha-black25);
|
||||||
|
--wb-high-contrast-color-alpha-base0: var(--wb-color-light-alpha-black0);
|
||||||
|
--wb-high-contrast-color-alpha-inverse100: var(--wb-color-high-contrast-alpha-white100);
|
||||||
|
--wb-high-contrast-color-alpha-inverse50: var(--wb-color-high-contrast-alpha-white50);
|
||||||
|
--wb-high-contrast-color-alpha-inverse25: var(--wb-color-high-contrast-alpha-white25);
|
||||||
|
--wb-high-contrast-color-alpha-inverse0: var(--wb-color-high-contrast-alpha-white0);
|
||||||
|
--wb-high-contrast-color-alpha-base75: var(--wb-color-high-contrast-alpha-black75);
|
||||||
|
--wb-high-contrast-color-alpha-inverse75: var(--wb-color-high-contrast-alpha-white75);
|
||||||
|
--wb-high-contrast-color-alpha-inverse10: var(--wb-color-high-contrast-alpha-black25);
|
||||||
|
--wb-high-contrast-color-alpha-base10: var(--wb-color-high-contrast-alpha-black10);
|
||||||
|
--wb-high-contrast-color-alpha-shadow1: #0000001f;
|
||||||
|
--wb-high-contrast-color-alpha-shadow2: #00000033;
|
||||||
|
--wb-high-contrast-color-alpha-shadow3: #00000066;
|
||||||
|
--wb-high-contrast-border-width-variable-regular: 0.2rem;
|
||||||
|
--wb-high-contrast-border-width-variable-medium: 0.3rem;
|
||||||
|
--wb-high-contrast-border-width-static-regular: 0.1rem;
|
||||||
|
--wb-high-contrast-border-width-static-medium: 0.2rem;
|
||||||
|
|
||||||
|
/* RESPONSIVE-PC */
|
||||||
|
--wb-pc-font-size-display-large: 6rem;
|
||||||
|
--wb-pc-font-size-display-medium: 4.4rem;
|
||||||
|
--wb-pc-font-size-display-small: 3.6rem;
|
||||||
|
--wb-pc-font-size-body-large: 1.9rem;
|
||||||
|
--wb-pc-font-size-body-medium: 1.7rem;
|
||||||
|
--wb-pc-font-size-body-small: 1.5rem;
|
||||||
|
--wb-pc-font-size-body-xsmall: 1.3rem;
|
||||||
|
--wb-pc-font-size-label-large: 1.9rem;
|
||||||
|
--wb-pc-font-size-label-medium: 1.7rem;
|
||||||
|
--wb-pc-font-size-label-small: 1.5rem;
|
||||||
|
--wb-pc-font-size-label-xsmall: 1.3rem;
|
||||||
|
--wb-pc-font-size-heading-large: 3.2rem;
|
||||||
|
--wb-pc-font-size-heading-medium: 2.4rem;
|
||||||
|
--wb-pc-font-size-heading-small: 1.9rem;
|
||||||
|
--wb-pc-font-size-heading-xsmall: 1.7rem;
|
||||||
|
--wb-pc-font-size-heading-xxsmall: 1.5rem;
|
||||||
|
--wb-pc-font-size-heading-xlarge: 4rem;
|
||||||
|
--wb-pc-font-size-navigation-title-medium: 2.4rem;
|
||||||
|
--wb-pc-font-size-navigation-title-small: 1.9rem;
|
||||||
|
--wb-pc-font-size-navigation-depth-medium-bold: 1.7rem;
|
||||||
|
--wb-pc-font-size-navigation-depth-medium: 1.7rem;
|
||||||
|
--wb-pc-font-size-navigation-depth-small-bold: 1.5rem;
|
||||||
|
--wb-pc-font-size-navigation-depth-small: 1.5rem;
|
||||||
|
--wb-pc-gap-layout-header-breadcrumb: var(--wb-number-10);
|
||||||
|
--wb-pc-gap-layout-left-contents: var(--wb-number-18);
|
||||||
|
--wb-pc-gap-layout-contents-right: var(--wb-number-14);
|
||||||
|
--wb-pc-gap-layout-h1-h2: var(--wb-number-16);
|
||||||
|
--wb-pc-gap-layout-h2-h2: var(--wb-number-20);
|
||||||
|
--wb-pc-gap-layout-h2-h3: var(--wb-number-14);
|
||||||
|
--wb-pc-gap-layout-h3-h3: var(--wb-number-18);
|
||||||
|
--wb-pc-gap-layout-h3-h4: var(--wb-number-10);
|
||||||
|
--wb-pc-gap-layout-h4-h4: var(--wb-number-14);
|
||||||
|
--wb-pc-gap-layout-h4-h5: var(--wb-number-8);
|
||||||
|
--wb-pc-gap-layout-h5-h5: var(--wb-number-12);
|
||||||
|
--wb-pc-gap-layout-title-body-small: var(--wb-number-8);
|
||||||
|
--wb-pc-gap-layout-title-body-medium: var(--wb-number-9);
|
||||||
|
--wb-pc-gap-layout-title-body-large: var(--wb-number-10);
|
||||||
|
--wb-pc-gap-layout-breadcrumb-h1: var(--wb-number-14);
|
||||||
|
--wb-pc-gap-layout-contents-footer: var(--wb-number-18);
|
||||||
|
--wb-pc-gap-layout-text-text-large: var(--wb-number-9);
|
||||||
|
--wb-pc-gap-layout-text-text-medium: var(--wb-number-8);
|
||||||
|
--wb-pc-gap-layout-text-text-small: var(--wb-number-7);
|
||||||
|
--wb-pc-gap-layout-image-text-small: var(--wb-number-9);
|
||||||
|
--wb-pc-gap-layout-image-text-medium: var(--wb-number-10);
|
||||||
|
--wb-pc-gap-layout-image-text-large: var(--wb-number-12);
|
||||||
|
--wb-pc-padding-card-large: var(--wb-number-14);
|
||||||
|
--wb-pc-padding-card-medium: var(--wb-number-12);
|
||||||
|
--wb-pc-padding-card-small: var(--wb-number-10);
|
||||||
|
--wb-pc-padding-card-xsmall: var(--wb-number-8);
|
||||||
|
|
||||||
|
/* RESPONSIVE-MOBILE */
|
||||||
|
--wb-mobile-font-size-display-large: 4.4rem;
|
||||||
|
--wb-mobile-font-size-display-medium: 3.2rem;
|
||||||
|
--wb-mobile-font-size-display-small: 2.8rem;
|
||||||
|
--wb-mobile-font-size-body-large: 1.9rem;
|
||||||
|
--wb-mobile-font-size-body-medium: 1.7rem;
|
||||||
|
--wb-mobile-font-size-body-small: 1.5rem;
|
||||||
|
--wb-mobile-font-size-body-xsmall: 1.3rem;
|
||||||
|
--wb-mobile-font-size-label-large: 1.9rem;
|
||||||
|
--wb-mobile-font-size-label-medium: 1.7rem;
|
||||||
|
--wb-mobile-font-size-label-small: 1.5rem;
|
||||||
|
--wb-mobile-font-size-label-xsmall: 1.3rem;
|
||||||
|
--wb-mobile-font-size-heading-large: 2.4rem;
|
||||||
|
--wb-mobile-font-size-heading-medium: 2.2rem;
|
||||||
|
--wb-mobile-font-size-heading-small: 1.9rem;
|
||||||
|
--wb-mobile-font-size-heading-xsmall: 1.7rem;
|
||||||
|
--wb-mobile-font-size-heading-xxsmall: 1.5rem;
|
||||||
|
--wb-mobile-font-size-heading-xlarge: 2.8rem;
|
||||||
|
--wb-mobile-font-size-navigation-title-medium: 2.2rem;
|
||||||
|
--wb-mobile-font-size-navigation-title-small: 1.9rem;
|
||||||
|
--wb-mobile-font-size-navigation-depth-medium-bold: 1.7rem;
|
||||||
|
--wb-mobile-font-size-navigation-depth-medium: 1.7rem;
|
||||||
|
--wb-mobile-font-size-navigation-depth-small-bold: 1.5rem;
|
||||||
|
--wb-mobile-font-size-navigation-depth-small: 1.5rem;
|
||||||
|
--wb-mobile-gap-layout-header-breadcrumb: var(--wb-number-8);
|
||||||
|
--wb-mobile-gap-layout-left-contents: 0rem;
|
||||||
|
--wb-mobile-gap-layout-contents-right: 0rem;
|
||||||
|
--wb-mobile-gap-layout-h1-h2: var(--wb-number-12);
|
||||||
|
--wb-mobile-gap-layout-h2-h2: var(--wb-number-14);
|
||||||
|
--wb-mobile-gap-layout-h2-h3: var(--wb-number-10);
|
||||||
|
--wb-mobile-gap-layout-h3-h3: var(--wb-number-12);
|
||||||
|
--wb-mobile-gap-layout-h3-h4: var(--wb-number-8);
|
||||||
|
--wb-mobile-gap-layout-h4-h4: var(--wb-number-10);
|
||||||
|
--wb-mobile-gap-layout-h4-h5: var(--wb-number-7);
|
||||||
|
--wb-mobile-gap-layout-h5-h5: var(--wb-number-8);
|
||||||
|
--wb-mobile-gap-layout-title-body-small: var(--wb-number-5);
|
||||||
|
--wb-mobile-gap-layout-title-body-medium: var(--wb-number-7);
|
||||||
|
--wb-mobile-gap-layout-title-body-large: var(--wb-number-9);
|
||||||
|
--wb-mobile-gap-layout-breadcrumb-h1: var(--wb-number-12);
|
||||||
|
--wb-mobile-gap-layout-contents-footer: var(--wb-number-14);
|
||||||
|
--wb-mobile-gap-layout-text-text-large: var(--wb-number-8);
|
||||||
|
--wb-mobile-gap-layout-text-text-medium: var(--wb-number-7);
|
||||||
|
--wb-mobile-gap-layout-text-text-small: var(--wb-number-6);
|
||||||
|
--wb-mobile-gap-layout-image-text-small: var(--wb-number-8);
|
||||||
|
--wb-mobile-gap-layout-image-text-medium: var(--wb-number-9);
|
||||||
|
--wb-mobile-gap-layout-image-text-large: var(--wb-number-10);
|
||||||
|
--wb-mobile-padding-card-large: var(--wb-number-10);
|
||||||
|
--wb-mobile-padding-card-medium: var(--wb-number-10);
|
||||||
|
--wb-mobile-padding-card-small: var(--wb-number-9);
|
||||||
|
--wb-mobile-padding-card-xsmall: var(--wb-number-7);
|
||||||
|
|
||||||
|
/* SEMANTIC */
|
||||||
|
--wb-gap-1: var(--wb-number-2);
|
||||||
|
--wb-gap-2: var(--wb-number-3);
|
||||||
|
--wb-gap-3: var(--wb-number-5);
|
||||||
|
--wb-gap-4: var(--wb-number-7);
|
||||||
|
--wb-gap-5: var(--wb-number-8);
|
||||||
|
--wb-gap-6: var(--wb-number-9);
|
||||||
|
--wb-gap-7: var(--wb-number-10);
|
||||||
|
--wb-gap-8: var(--wb-number-12);
|
||||||
|
--wb-gap-9: var(--wb-number-14);
|
||||||
|
--wb-gap-10: var(--wb-number-16);
|
||||||
|
--wb-gap-11: var(--wb-number-18);
|
||||||
|
--wb-gap-12: var(--wb-number-20);
|
||||||
|
--wb-padding-1: var(--wb-number-2);
|
||||||
|
--wb-padding-2: var(--wb-number-3);
|
||||||
|
--wb-padding-3: var(--wb-number-5);
|
||||||
|
--wb-padding-4: var(--wb-number-6);
|
||||||
|
--wb-padding-5: var(--wb-number-7);
|
||||||
|
--wb-padding-6: var(--wb-number-8);
|
||||||
|
--wb-padding-7: var(--wb-number-9);
|
||||||
|
--wb-padding-8: var(--wb-number-10);
|
||||||
|
--wb-padding-9: var(--wb-number-12);
|
||||||
|
--wb-padding-10: var(--wb-number-14);
|
||||||
|
--wb-size-height-1: var(--wb-number-5);
|
||||||
|
--wb-size-height-2: var(--wb-number-8);
|
||||||
|
--wb-size-height-3: var(--wb-number-9);
|
||||||
|
--wb-size-height-4: var(--wb-number-10);
|
||||||
|
--wb-size-height-5: var(--wb-number-12);
|
||||||
|
--wb-size-height-6: var(--wb-number-14);
|
||||||
|
--wb-size-height-7: var(--wb-number-16);
|
||||||
|
--wb-size-height-8: var(--wb-number-17);
|
||||||
|
--wb-size-height-9: var(--wb-number-18);
|
||||||
|
--wb-size-height-10: var(--wb-number-19);
|
||||||
|
--wb-size-height-11: var(--wb-number-20);
|
||||||
|
--wb-radius-xsmall1: var(--wb-number-2);
|
||||||
|
--wb-radius-xsmall2: var(--wb-number-2);
|
||||||
|
--wb-radius-xsmall3: var(--wb-number-2);
|
||||||
|
--wb-radius-small1: var(--wb-number-3);
|
||||||
|
--wb-radius-small2: var(--wb-number-3);
|
||||||
|
--wb-radius-small3: var(--wb-number-3);
|
||||||
|
--wb-radius-medium1: var(--wb-number-4);
|
||||||
|
--wb-radius-medium2: var(--wb-number-4);
|
||||||
|
--wb-radius-medium3: var(--wb-number-5);
|
||||||
|
--wb-radius-medium4: var(--wb-number-5);
|
||||||
|
--wb-radius-large1: var(--wb-number-6);
|
||||||
|
--wb-radius-large2: var(--wb-number-6);
|
||||||
|
--wb-radius-xlarge1: var(--wb-number-7);
|
||||||
|
--wb-radius-xlarge2: var(--wb-number-7);
|
||||||
|
--wb-radius-max: var(--wb-number-max);
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
//공통
|
||||||
|
|
||||||
|
@import "path";
|
||||||
|
@import "wb_tokens";
|
||||||
|
@import "include";
|
||||||
|
|
||||||
|
@import "root";
|
||||||
|
@import "icon";
|
||||||
|
|
||||||
|
@import "dropdown";
|
||||||
|
@import "menu";
|
||||||
|
|
||||||
|
@import "reset";
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
@import "../group_variables";
|
||||||
|
|
||||||
|
@mixin size-medium { // 767까지
|
||||||
|
@media (max-width: ($breakpoint-medium - 1px)) {
|
||||||
|
@content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@mixin size-medium-more { // 768이상
|
||||||
|
@media (min-width: calc($breakpoint-medium)) {
|
||||||
|
@content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin size-medium-to-large { // 768 ~ 1023
|
||||||
|
@media (min-width: calc($breakpoint-medium)) and (max-width: ($breakpoint-large - 1px)) {
|
||||||
|
@content
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//tablet size 이하
|
||||||
|
@mixin size-large-less { // 1023까지
|
||||||
|
@media (max-width: ($breakpoint-large - 1px)) {
|
||||||
|
@content
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//tablet size 이상
|
||||||
|
@mixin size-large-more { // 1024이상
|
||||||
|
@media (min-width: calc($breakpoint-large)) {
|
||||||
|
@content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//소형 데스크톱
|
||||||
|
@mixin size-large-to-xlarge { // 1024 ~ 1279
|
||||||
|
@media (min-width: calc($breakpoint-large)) and (max-width: calc($breakpoint-xlarge - 1px)) {
|
||||||
|
@content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin size-xlarge { // 1280 이상
|
||||||
|
@media (min-width: $breakpoint-xlarge) {
|
||||||
|
@content;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
@import 'mixin';
|
||||||
|
// Grid 설정 변수
|
||||||
|
$prefix: "grid"; // 변수 프리픽스
|
||||||
|
$grid-columns: 12; // 기본 컬럼 수
|
||||||
|
$grid-gutter-width: 1rem; // 기본 컬럼 간격
|
||||||
|
$grid-breakpoints: ( // 반응형 브레이크포인트
|
||||||
|
xs: 1200px,
|
||||||
|
);
|
||||||
|
$gutters: (sm: 0.5rem, md: 1rem, lg: 2rem); // Gutter 유틸리티
|
||||||
|
|
||||||
|
// Grid 클래스 활성화 여부
|
||||||
|
$enable-grid-classes: true !default; // Grid 클래스를 생성할지 여부
|
||||||
|
$enable-cssgrid: true !default; // CSS Grid 지원 활성화 여부
|
||||||
|
|
||||||
|
// Breakpoint Helper Mixin
|
||||||
|
@mixin media-breakpoint-up($breakpoint, $breakpoints) {
|
||||||
|
$value: map-get($breakpoints, $breakpoint);
|
||||||
|
|
||||||
|
@if $value != null {
|
||||||
|
@media (min-width: $value) {
|
||||||
|
@content;
|
||||||
|
}
|
||||||
|
} @else {
|
||||||
|
@error "Error: Breakpoint '#{$breakpoint}' not found in map.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Row Mixin
|
||||||
|
@mixin make-row($gutter: $grid-gutter-width) {
|
||||||
|
--#{$prefix}-gutter-x: #{$gutter};
|
||||||
|
--#{$prefix}-gutter-y: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-left: calc(-0.5 * var(--#{$prefix}-gutter-x));
|
||||||
|
margin-right: calc(-0.5 * var(--#{$prefix}-gutter-x));
|
||||||
|
margin-top: calc(-1 * var(--#{$prefix}-gutter-y));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Column Ready Mixin
|
||||||
|
@mixin make-col-ready() {
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-shrink: 0;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
padding-left: calc(var(--#{$prefix}-gutter-x) / 2);
|
||||||
|
padding-right: calc(var(--#{$prefix}-gutter-x) / 2);
|
||||||
|
margin-top: var(--#{$prefix}-gutter-y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flexbox Column Mixin
|
||||||
|
@mixin make-col($size: null, $columns: $grid-columns) {
|
||||||
|
@if $size == null {
|
||||||
|
flex: 1 1 0;
|
||||||
|
max-width: 100%;
|
||||||
|
} @else if type-of($size) == 'number' and type-of($columns) == 'number' and $columns > 0 {
|
||||||
|
flex: 0 0 percentage($size / $columns);
|
||||||
|
max-width: percentage($size / $columns);
|
||||||
|
} @else {
|
||||||
|
@error "Error: Invalid $size or $columns value. Received: Size=#{$size}, Columns=#{$columns}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CSS Grid Mixin
|
||||||
|
@mixin make-cssgrid($columns: $grid-columns) {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat($columns, 1fr);
|
||||||
|
gap: var(--#{$prefix}-gutter-x) var(--#{$prefix}-gutter-y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate Columns for Flexbox and Grid
|
||||||
|
@mixin make-grid-columns($columns: $grid-columns, $breakpoints: $grid-breakpoints) {
|
||||||
|
@each $breakpoint, $value in $breakpoints {
|
||||||
|
$infix: if($breakpoint == "xs", "", "-#{$breakpoint}");
|
||||||
|
|
||||||
|
@include media-breakpoint-up($breakpoint, $breakpoints) {
|
||||||
|
// Flexbox Columns
|
||||||
|
@for $i from 1 through $columns {
|
||||||
|
.col#{$infix}-#{$i} {
|
||||||
|
@include make-col($i, $columns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CSS Grid Columns
|
||||||
|
@for $i from 1 through $columns {
|
||||||
|
.g-col#{$infix}-#{$i} {
|
||||||
|
grid-column: span $i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Gutter Utilities
|
||||||
|
@each $key, $gutter in $gutters {
|
||||||
|
.g#{$infix}-#{$key} {
|
||||||
|
--#{$prefix}-gutter-x: #{$gutter};
|
||||||
|
--#{$prefix}-gutter-y: #{$gutter};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Row Styles
|
||||||
|
.row {
|
||||||
|
@include make-row();
|
||||||
|
|
||||||
|
> * {
|
||||||
|
@include make-col-ready();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate All Grid Classes
|
||||||
|
@if $enable-grid-classes {
|
||||||
|
@include make-grid-columns();
|
||||||
|
}
|
||||||
|
|
||||||
|
// CSS Grid Container
|
||||||
|
@if $enable-cssgrid {
|
||||||
|
.grid {
|
||||||
|
@include make-cssgrid($grid-columns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Base Styles
|
||||||
|
.filter {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 2rem; // 각 row 간의 간격 설정
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
|
||||||
|
// Common Input Styles
|
||||||
|
.sec-input {
|
||||||
|
@include flex(row, center, start, center);
|
||||||
|
gap: 1.25rem;
|
||||||
|
.input-label{
|
||||||
|
@include flex(row, center, start, center);
|
||||||
|
font-size: var(--wb-pc-font-size-body-xsmall);
|
||||||
|
color: var(--wb-color-light-gray-70);
|
||||||
|
font-weight: var(--wb-typo-font-weight-bold);
|
||||||
|
text-align: left;
|
||||||
|
&.w-lg{
|
||||||
|
flex: 100px 0 0;
|
||||||
|
}
|
||||||
|
&.w-m{
|
||||||
|
flex: 70px 0 0;
|
||||||
|
}
|
||||||
|
&.w-auto{
|
||||||
|
flex: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.input-group {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: .75rem;
|
||||||
|
height:100%;
|
||||||
|
flex: 1;
|
||||||
|
.input{
|
||||||
|
width:100%;
|
||||||
|
height:100%;
|
||||||
|
input{
|
||||||
|
font-size: var(--wb-pc-font-size-body-small);
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
|
span{
|
||||||
|
@include flex(row, center, start, center);
|
||||||
|
height:100%;
|
||||||
|
font-size: var(--wb-pc-font-size-body-small);
|
||||||
|
color: var(--wb-color-light-gray-70);
|
||||||
|
border-right: none;
|
||||||
|
border-left: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Button Group Styles
|
||||||
|
.btn-wrap {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
gap: 0.5rem;
|
||||||
|
height:100%;
|
||||||
|
button {
|
||||||
|
flex-shrink: 0; // 버튼 크기 고정
|
||||||
|
flex:1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.k-list-md .k-list-item, .k-list-md .k-list-optionlabel{
|
||||||
|
font-size: var(--wb-pc-font-size-body-small);
|
||||||
|
}
|
||||||
|
|
||||||
|
table{
|
||||||
|
th,td{
|
||||||
|
font-size: 1.25rem !important
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
//svg img
|
||||||
|
@mixin svg-icon($size: var(--wb-icon--size-large), $mode: light, $effect: null) {
|
||||||
|
display: inline-flex;
|
||||||
|
@include square($size);
|
||||||
|
background-color: var(--wb-#{$mode}-color-text-basic);
|
||||||
|
@if ($effect == 'pure') { //mask 효과 없이 디자인된 svg 그대로 사용
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
forced-color-adjust: none;
|
||||||
|
// @media (forced-colors: active) {
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
//svg icon setting
|
||||||
|
@mixin icon-set ($name, $effect: null) {
|
||||||
|
-webkit-mask-repeat: no-repeat;
|
||||||
|
-webkit-mask-position: center center;
|
||||||
|
-webkit-mask-size: contain;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center center;
|
||||||
|
mask-size: contain;
|
||||||
|
-webkit-mask-image: url(#{$url}/dist/images/#{$name}.svg);
|
||||||
|
mask-image: url(#{$url}/dist/images/#{$name}.svg);
|
||||||
|
@if ($effect == 'pure') { //mask 효과 없이 디자인된 svg 그대로 사용
|
||||||
|
-webkit-mask-image: none;
|
||||||
|
mask-image: none;
|
||||||
|
background-image: url(#{$url}/dist/images/#{$name}.svg);
|
||||||
|
background-color: transparent !important;
|
||||||
|
background-size: contain;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
-webkit-mask: none;
|
||||||
|
mask: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
@mixin resetLayout {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
box-sizing: border-box;
|
||||||
|
@content;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin flex($direction, $wrap: nowrap, $justify: flex-start, $align: stretch) {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: $direction;
|
||||||
|
flex-wrap: $wrap;
|
||||||
|
justify-content: $justify;
|
||||||
|
align-items: $align;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin grid($columns, $rows: auto, $flow: row) {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: $columns;
|
||||||
|
grid-template-rows: $rows;
|
||||||
|
grid-auto-flow: $flow;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin transition {
|
||||||
|
transition: all ease 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin border-radius($radius: 0.75rem) {
|
||||||
|
border-radius: $radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin transform($trans, $num) {
|
||||||
|
transform: #{$trans}(#{$num});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spacing Utilities
|
||||||
|
@mixin spacing-utilities {
|
||||||
|
@each $direction in (t, r, b, l) {
|
||||||
|
$i: 2; // 초기 값
|
||||||
|
@while $i <= 100 {
|
||||||
|
.m#{$direction}-#{$i} {
|
||||||
|
margin-#{$direction}: #{$i / 16}rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p#{$direction}-#{$i} {
|
||||||
|
padding-#{$direction}: #{$i / 16}rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
$i: $i + 2; // 루프 증가
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin flex-utilities {
|
||||||
|
.flex {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
&-row {
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-col {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-wrap {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-nowrap {
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-1 {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-auto {
|
||||||
|
flex: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-initial {
|
||||||
|
flex: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-none {
|
||||||
|
flex: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Justify Content Utilities
|
||||||
|
@each $value, $cssValue in (start: flex-start, end: flex-end, center: center, between: space-between, around: space-around, evenly: space-evenly) {
|
||||||
|
.justify-#{$value} {
|
||||||
|
justify-content: #{$cssValue};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Align Items Utilities
|
||||||
|
@each $value in (start, end, center, baseline, stretch) {
|
||||||
|
.items-#{$value} {
|
||||||
|
align-items: #{$value};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Align Self Utilities
|
||||||
|
@each $value in (auto, start, end, center, stretch) {
|
||||||
|
.self-#{$value} {
|
||||||
|
align-self: #{$value};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Grid Utilities
|
||||||
|
@mixin grid-utilities {
|
||||||
|
.grid {
|
||||||
|
display: grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Grid Columns
|
||||||
|
@for $i from 1 through 12 {
|
||||||
|
.grid-cols-#{$i} {
|
||||||
|
grid-template-columns: repeat(#{$i}, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Grid Rows
|
||||||
|
@for $i from 1 through 6 {
|
||||||
|
.grid-rows-#{$i} {
|
||||||
|
grid-template-rows: repeat(#{$i}, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-flow-row {
|
||||||
|
grid-auto-flow: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-flow-col {
|
||||||
|
grid-auto-flow: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-flow-row-dense {
|
||||||
|
grid-auto-flow: row dense;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-flow-col-dense {
|
||||||
|
grid-auto-flow: column dense;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
//focus color
|
||||||
|
//추후삭제
|
||||||
|
@mixin focus($offset: -.4rem, $color: var(--wb-light-color-border-primary), $alpha: .8) {
|
||||||
|
box-shadow: var(--wb-box-shadow-outline-inset);
|
||||||
|
outline-offset: $offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
//flex 확대 축소
|
||||||
|
@mixin flex-size($shrink, $grow) {
|
||||||
|
flex-shrink: $shrink;
|
||||||
|
flex-grow: $grow;
|
||||||
|
}
|
||||||
|
|
||||||
|
//position
|
||||||
|
@mixin position($p: absolute, $t: null, $b: null, $l: null, $r: null) {
|
||||||
|
position: $p;
|
||||||
|
top: $t;
|
||||||
|
bottom: $b;
|
||||||
|
left: $l;
|
||||||
|
right: $r;
|
||||||
|
}
|
||||||
|
|
||||||
|
//square rectangle
|
||||||
|
@mixin square($w, $h: $w) {
|
||||||
|
width: $w;
|
||||||
|
height: $h;
|
||||||
|
}
|
||||||
|
|
||||||
|
//pseudo element wb
|
||||||
|
@mixin pseudo($c: null) {
|
||||||
|
@if $c != null {
|
||||||
|
content: "" + $c + "";
|
||||||
|
} @else {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// //flex layout
|
||||||
|
// @mixin flex-layout($d: flex, $ai: flex-start, $jc: flex-start, $fd: row) {
|
||||||
|
// display: $d;
|
||||||
|
// align-items: $ai;
|
||||||
|
// justify-content: $jc;
|
||||||
|
// flex-direction: $fd;
|
||||||
|
// }
|
||||||
|
|
||||||
|
//group contents
|
||||||
|
@mixin group-wrap() {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: stretch;
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
@mixin group() {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
position: relative;
|
||||||
|
width: 1%;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//flex item equal width
|
||||||
|
@mixin equal-width() {
|
||||||
|
flex: 1 1 0px;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//position 중앙 정렬
|
||||||
|
@mixin position-center($type: both) {
|
||||||
|
//좌우중앙
|
||||||
|
@if ($type == 'x') {
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%)
|
||||||
|
}
|
||||||
|
//상하중앙
|
||||||
|
@else if ($type == 'y') {
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
//상하좌우중앙
|
||||||
|
@else if ($type == 'both') {
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateX(-50%) translateY(-50%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//transform 기준점 중앙 정렬
|
||||||
|
@mixin transform-origin($x: 50%, $y: 50%) {
|
||||||
|
transform-origin: $x $y;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// **** text attr **** //
|
||||||
|
//text ellipsis
|
||||||
|
@mixin ellipsis($line) {
|
||||||
|
display: -webkit-box;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: $line;
|
||||||
|
}
|
||||||
|
|
||||||
|
//sr-only
|
||||||
|
@mixin sr-only {
|
||||||
|
position: absolute !important;
|
||||||
|
width: 1px !important;
|
||||||
|
height: 1px !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
margin: -1px !important;
|
||||||
|
overflow: hidden !important;
|
||||||
|
clip: rect(0, 0, 0, 0) !important;
|
||||||
|
white-space: nowrap !important;
|
||||||
|
border: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
//reset text : popover/tooltip
|
||||||
|
@mixin reset-text {
|
||||||
|
font-size: var(--wb-pc-font-size-body-medium);
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: var(--wb-font-weight-regular);
|
||||||
|
line-height: var(--wb-line-height-base);
|
||||||
|
text-align: left;
|
||||||
|
text-decoration: none;
|
||||||
|
text-shadow: none;
|
||||||
|
text-transform: none;
|
||||||
|
letter-spacing: normal;
|
||||||
|
//word-break: normal;
|
||||||
|
white-space: normal;
|
||||||
|
word-spacing: normal;
|
||||||
|
line-break: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
//css animation visibility
|
||||||
|
@mixin visibility($v) {
|
||||||
|
@if ($v == hidden) {
|
||||||
|
visibility: hidden;
|
||||||
|
z-index: -1;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
@else if ($v == visible) {
|
||||||
|
visibility: visible;
|
||||||
|
z-index: auto;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// **** scroll **** //
|
||||||
|
@mixin scrollbar-mode($mode: light) {
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
background-color: var(--wb-#{$mode}-color-element-secondary-light);
|
||||||
|
border-radius: .8rem;
|
||||||
|
}
|
||||||
|
&::-webkit-scrollbar-track {
|
||||||
|
background-color: var(--wb-#{$mode}-color-element-secondary-lighter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@mixin scrollbar($mode: light) {
|
||||||
|
$mode-wb: $mode;
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 0.8rem;
|
||||||
|
}
|
||||||
|
@include scrollbar-mode(#{$mode-wb});
|
||||||
|
}
|
||||||
|
|
||||||
|
//text underline
|
||||||
|
@mixin underline($offset: var(--wb-font-underline-offset)) {
|
||||||
|
text-decoration: underline;
|
||||||
|
text-underline-offset: $offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
//color mode wb
|
||||||
|
@mixin color-mode($mode: light) {
|
||||||
|
[data-wb-mode="#{$mode}"] {
|
||||||
|
@content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//사이즈별 variable
|
||||||
|
@mixin btn-size($unit) {
|
||||||
|
//unit value: xsmall small medium larger xlarge
|
||||||
|
gap: var(--wb-button--gap-#{$unit});
|
||||||
|
height: var(--wb-button--size-height-#{$unit});
|
||||||
|
padding: var(--wb-button--padding-y-#{$unit}) var(--wb-button--padding-x-#{$unit});
|
||||||
|
border-radius: var(--wb-button--radius-#{$unit});
|
||||||
|
font-size: var(--wb-button--pc-font-size-#{$unit});
|
||||||
|
font-weight: var(--wb-button--font-weight-#{$unit});
|
||||||
|
& {
|
||||||
|
.svg-icon {
|
||||||
|
@include square(var(--wb-icon--size-#{$unit}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//고대비모드인경우 border-width가 두꺼워짐
|
||||||
|
@mixin border-size-mode ($mode: light, $size: regular) {
|
||||||
|
border-width: var(--wb-#{$mode}-border-width-variable-#{$size});
|
||||||
|
}
|
||||||
@@ -0,0 +1,586 @@
|
|||||||
|
//사이즈 정의
|
||||||
|
@mixin button-size-variable() {
|
||||||
|
//변수 배열 설정
|
||||||
|
$button-size: (
|
||||||
|
xsmall: (
|
||||||
|
size-height: var(--wb-size-height-5),
|
||||||
|
padding-x: var(--wb-padding-4),
|
||||||
|
padding-y: 0,
|
||||||
|
gap: var(--wb-gap-1),
|
||||||
|
radius: var(--wb-radius-small3),
|
||||||
|
pc-font-size: var(--wb-pc-font-size-label-small),
|
||||||
|
mobile-font-size: var(--wb-mobile-font-size-label-small),
|
||||||
|
font-weight: var(--wb-font-weight-regular),
|
||||||
|
),
|
||||||
|
small: (
|
||||||
|
size-height: var(--wb-size-height-6),
|
||||||
|
padding-x: var(--wb-padding-5),
|
||||||
|
padding-y: 0,
|
||||||
|
gap: var(--wb-gap-1),
|
||||||
|
radius: var(--wb-radius-medium1),
|
||||||
|
pc-font-size: var(--wb-pc-font-size-label-small),
|
||||||
|
mobile-font-size: var(--wb-mobile-font-size-label-small),
|
||||||
|
font-weight: var(--wb-font-weight-regular),
|
||||||
|
),
|
||||||
|
medium: (
|
||||||
|
size-height: var(--wb-size-height-7),
|
||||||
|
padding-x: var(--wb-padding-6),
|
||||||
|
padding-y: 0,
|
||||||
|
gap: var(--wb-gap-2),
|
||||||
|
radius: var(--wb-radius-medium2),
|
||||||
|
pc-font-size: var(--wb-pc-font-size-label-medium),
|
||||||
|
mobile-font-size: var(--wb-mobile-font-size-label-medium),
|
||||||
|
font-weight: var(--wb-font-weight-regular),
|
||||||
|
),
|
||||||
|
large: (
|
||||||
|
size-height: var(--wb-size-height-8),
|
||||||
|
padding-x: var(--wb-padding-7),
|
||||||
|
padding-y: 0,
|
||||||
|
gap: var(--wb-gap-2),
|
||||||
|
radius: var(--wb-radius-medium3),
|
||||||
|
pc-font-size: var(--wb-pc-font-size-label-large),
|
||||||
|
mobile-font-size: var(--wb-mobile-font-size-label-large),
|
||||||
|
font-weight: var(--wb-font-weight-regular),
|
||||||
|
),
|
||||||
|
xlarge: (
|
||||||
|
size-height: var(--wb-size-height-9),
|
||||||
|
padding-x: var(--wb-padding-8),
|
||||||
|
padding-y: 0,
|
||||||
|
gap: var(--wb-gap-2),
|
||||||
|
radius: var(--wb-radius-medium4),
|
||||||
|
pc-font-size: var(--wb-pc-font-size-label-large),
|
||||||
|
mobile-font-size: var(--wb-mobile-font-size-label-large),
|
||||||
|
font-weight: var(--wb-font-weight-regular),
|
||||||
|
),
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
//css variable 생성
|
||||||
|
@each $size, $types in $button-size {
|
||||||
|
@each $type, $value in $types {
|
||||||
|
//css variable 생성
|
||||||
|
--wb-button--#{$type}-#{$size}: #{$value};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//class 정의
|
||||||
|
& {
|
||||||
|
@include btn-size(large);
|
||||||
|
& {
|
||||||
|
@each $size, $types in $button-size {
|
||||||
|
&.#{$size} {
|
||||||
|
@include btn-size(#{$size});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//컬러 정의
|
||||||
|
@mixin button-color-variable($mode) {
|
||||||
|
//변수 배열 정의
|
||||||
|
$button-color-variable: (
|
||||||
|
primary: (
|
||||||
|
fill: var(--wb-#{$mode}-color-button-primary-fill),
|
||||||
|
fill-hover: var(--wb-#{$mode}-color-button-primary-fill-hover),
|
||||||
|
fill-pressed: var(--wb-#{$mode}-color-button-primary-fill-pressed),
|
||||||
|
fill-disabled: var(--wb-#{$mode}-color-button-disabled-fill),
|
||||||
|
border: var(--wb-#{$mode}-color-button-primary-fill),
|
||||||
|
border-disabled: var(--wb-#{$mode}-color-button-disabled-border),
|
||||||
|
text: var(--wb-#{$mode}-color-text-inverse-static),
|
||||||
|
text-disabled: var(--wb-#{$mode}-color-text-disabled-on),
|
||||||
|
),
|
||||||
|
secondary: (
|
||||||
|
fill: var(--wb-#{$mode}-color-button-secondary-fill),
|
||||||
|
fill-hover: var(--wb-#{$mode}-color-button-secondary-fill-hover),
|
||||||
|
fill-pressed: var(--wb-#{$mode}-color-button-secondary-fill-pressed),
|
||||||
|
fill-disabled: var(--wb-#{$mode}-color-button-disabled-fill),
|
||||||
|
border: var(--wb-#{$mode}-color-button-secondary-border),
|
||||||
|
border-disabled: var(--wb-#{$mode}-color-button-disabled-border),
|
||||||
|
text: var(--wb-#{$mode}-color-text-primary),
|
||||||
|
text-disabled: var(--wb-#{$mode}-color-text-disabled-on),
|
||||||
|
),
|
||||||
|
tertiary: (
|
||||||
|
fill: var(--wb-#{$mode}-color-button-tertiary-fill),
|
||||||
|
fill-hover: var(--wb-#{$mode}-color-button-tertiary-fill-hover),
|
||||||
|
fill-pressed: var(--wb-#{$mode}-color-button-tertiary-fill-pressed),
|
||||||
|
fill-disabled: var(--wb-#{$mode}-color-button-disabled-fill),
|
||||||
|
border: var(--wb-#{$mode}-color-button-tertiary-border),
|
||||||
|
border-disabled: var(--wb-#{$mode}-color-button-disabled-border),
|
||||||
|
text: var(--wb-#{$mode}-color-text-basic),
|
||||||
|
text-disabled: var(--wb-#{$mode}-color-text-disabled-on),
|
||||||
|
),
|
||||||
|
text: (
|
||||||
|
fill: var(--wb-#{$mode}-color-button-text-fill),
|
||||||
|
fill-hover: var(--wb-#{$mode}-color-button-text-fill-hover),
|
||||||
|
fill-pressed: var(--wb-#{$mode}-color-button-text-fill-pressed),
|
||||||
|
fill-disabled: var(--wb-#{$mode}-color-button-text-fill),
|
||||||
|
border: var(--wb-#{$mode}-color-button-text-border),
|
||||||
|
border-disabled: var(--wb-#{$mode}-color-border-transparency),
|
||||||
|
text: var(--wb-#{$mode}-color-text-basic),
|
||||||
|
text-disabled: var(--wb-#{$mode}-color-text-disabled),
|
||||||
|
),
|
||||||
|
link: (
|
||||||
|
fill: var(--wb-#{$mode}-color-button-text-fill),
|
||||||
|
fill-hover: var(--wb-#{$mode}-color-button-text-fill),
|
||||||
|
fill-pressed: var(--wb-#{$mode}-color-button-text-fill),
|
||||||
|
fill-disabled: var(--wb-#{$mode}-color-button-text-fill),
|
||||||
|
border: var(--wb-#{$mode}-color-button-text-border),
|
||||||
|
border-disabled: var(--wb-#{$mode}-color-border-transparency),
|
||||||
|
text: var(--wb-#{$mode}-color-link-default),
|
||||||
|
text-disabled: var(--wb-#{$mode}-color-text-disabled),
|
||||||
|
),
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
//css variable 생성
|
||||||
|
@each $color, $types in $button-color-variable {
|
||||||
|
@each $type, $value in $types {
|
||||||
|
--wb-button--color-#{$color}-#{$type}: #{$value};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//class 생성
|
||||||
|
& {
|
||||||
|
@include btn-color(primary);
|
||||||
|
|
||||||
|
& {
|
||||||
|
//컬러 별 class
|
||||||
|
@each $color, $types in $button-color-variable {
|
||||||
|
&.#{$color} {
|
||||||
|
@include btn-color(#{$color});
|
||||||
|
&:not(.icon) {
|
||||||
|
.svg-icon {
|
||||||
|
@include btn-color-icon(#{$color});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
@include btn-color-hover(#{$color});
|
||||||
|
}
|
||||||
|
&:active,
|
||||||
|
&:focus {
|
||||||
|
@include btn-color-pressed(#{$color});
|
||||||
|
}
|
||||||
|
|
||||||
|
&[disabled],
|
||||||
|
&.disabled {
|
||||||
|
@include btn-color-disabled(#{$color});
|
||||||
|
&:not(.icon) {
|
||||||
|
.svg-icon {
|
||||||
|
background-color: var(--wb-button--color-#{$color}-text-disabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
@include btn-color-disabled(#{$color});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* icon 버튼 사이즈 */
|
||||||
|
$button-icon-size: (
|
||||||
|
xsmall: var(--wb-size-height-2),
|
||||||
|
small: var(--wb-size-height-3),
|
||||||
|
medium: var(--wb-size-height-4),
|
||||||
|
large: var(--wb-size-height-5),
|
||||||
|
xlarge: var(--wb-size-height-6),
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
//text버튼은 높이와 좌우 padding값이 달라 재정의 함
|
||||||
|
@mixin btn-text-variable() {
|
||||||
|
//text버튼은 높이와 좌우 padding값이 달라 재정의 함
|
||||||
|
--wb-button--size-height-xsmall: var(--wb-size-height-3);
|
||||||
|
--wb-button--padding-x-xsmall: var(--wb-padding-1);
|
||||||
|
--wb-button--padding-y-xsmall: var(--wb-number-0);
|
||||||
|
--wb-button--size-height-small: var(--wb-size-height-4);
|
||||||
|
--wb-button--padding-x-small: var(--wb-padding-1);
|
||||||
|
--wb-button--padding-y-small: var(--wb-number-0);
|
||||||
|
--wb-button--size-height-medium: var(--wb-size-height-5);
|
||||||
|
--wb-button--padding-x-medium: var(--wb-padding-1);
|
||||||
|
--wb-button--padding-y-medium: var(--wb-number-2);
|
||||||
|
--wb-button--size-height-large: var(--wb-size-height-6);
|
||||||
|
--wb-button--padding-x-large: var(--wb-padding-1);
|
||||||
|
--wb-button--padding-y-large: 0.5rem;
|
||||||
|
--wb-button--size-height-xlarge: var(--wb-size-height-7);
|
||||||
|
--wb-button--padding-x-xlarge: var(--wb-padding-1);
|
||||||
|
--wb-button--padding-y-xlarge: 0.9rem;
|
||||||
|
}
|
||||||
|
//link버튼은 font size와 좌우 padding값이 달라 재정의 함
|
||||||
|
@mixin btn-link-variable() {
|
||||||
|
--wb-button--pc-font-size-xsmall: var(--wb-pc-font-size-label-small);
|
||||||
|
--wb-button--mobile-font-size-xsmall: var(--wb-mobile-font-size-label-small);
|
||||||
|
--wb-button--padding-x-xsmall: var(--wb-padding-1);
|
||||||
|
--wb-button--pc-font-size-small: var(--wb-pc-font-size-label-small);
|
||||||
|
--wb-button--mobile-font-size-small: var(--wb-mobile-font-size-label-small);
|
||||||
|
--wb-button--padding-x-small: var(--wb-padding-1);
|
||||||
|
--wb-button--pc-font-size-medium: var(--wb-pc-font-size-label-medium);
|
||||||
|
--wb-button--mobile-font-size-medium: var(--wb-mobile-font-size-label-medium);
|
||||||
|
--wb-button--padding-x-medium: var(--wb-padding-1);
|
||||||
|
--wb-button--pc-font-size-large: var(--wb-pc-font-size-label-large);
|
||||||
|
--wb-button--mobile-font-size-large: var(--wb-mobile-font-size-label-large);
|
||||||
|
--wb-button--padding-x-large: var(--wb-padding-1);
|
||||||
|
--wb-button--pc-font-size-xlarge: var(--wb-pc-font-size-label-large);
|
||||||
|
--wb-button--mobile-font-size-xlarge: var(--wb-mobile-font-size-label-large);
|
||||||
|
--wb-button--padding-x-xlarge: var(--wb-padding-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//컬러별 variable
|
||||||
|
@mixin btn-color($color) {
|
||||||
|
background-color: var(--wb-button--color-#{$color}-fill);
|
||||||
|
border-color: var(--wb-button--color-#{$color}-border);
|
||||||
|
color: var(--wb-button--color-#{$color}-text);
|
||||||
|
}
|
||||||
|
@mixin btn-color-hover($color) {
|
||||||
|
background-color: var(--wb-button--color-#{$color}-fill-hover);
|
||||||
|
}
|
||||||
|
@mixin btn-color-pressed($color) {
|
||||||
|
background-color: var(--wb-button--color-#{$color}-fill-pressed);
|
||||||
|
}
|
||||||
|
@mixin btn-color-disabled($color) {
|
||||||
|
background-color: var(--wb-button--color-#{$color}-fill-disabled);
|
||||||
|
border-color: var(--wb-button--color-#{$color}-border-disabled);
|
||||||
|
color: var(--wb-button--color-#{$color}-text-disabled);
|
||||||
|
}
|
||||||
|
@mixin btn-color-icon($color) {
|
||||||
|
background-color: var(--wb-button--color-#{$color}-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
//모드 설정
|
||||||
|
$mode-setting: light;
|
||||||
|
.wb-btn {
|
||||||
|
@include button-size-variable();
|
||||||
|
}
|
||||||
|
.wb-btn {
|
||||||
|
@include button-color-variable(#{$mode-setting});
|
||||||
|
|
||||||
|
& {
|
||||||
|
//기본버튼: primary large
|
||||||
|
// @include flex-layout($d: inline-flex, $ai: center, $jc: center);
|
||||||
|
width: auto;
|
||||||
|
border-style: solid;
|
||||||
|
cursor: pointer;
|
||||||
|
white-space: nowrap;
|
||||||
|
transition: var(--wb-transition-base);
|
||||||
|
@include border-size-mode(#{$mode-setting});
|
||||||
|
}
|
||||||
|
|
||||||
|
.svg-icon {
|
||||||
|
@include btn-color-icon(primary);
|
||||||
|
transition: var(--wb-transition-base);
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
@include btn-color-hover(primary);
|
||||||
|
}
|
||||||
|
// &:active,
|
||||||
|
// &:focus {
|
||||||
|
// @include btn-color-pressed(primary);
|
||||||
|
// }
|
||||||
|
&[disabled],
|
||||||
|
&.disabled {
|
||||||
|
@include btn-color-disabled(primary);
|
||||||
|
cursor: default;
|
||||||
|
&:hover {
|
||||||
|
@include btn-color-disabled(primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.text { //높이를 가짐
|
||||||
|
@include btn-text-variable();
|
||||||
|
|
||||||
|
//large 사이즈 기준 기본 세팅수정
|
||||||
|
display: inline-block;
|
||||||
|
height: auto !important;
|
||||||
|
padding: var(--wb-button--padding-y-large) var(--wb-button--padding-x-large);
|
||||||
|
text-align: left;
|
||||||
|
white-space: normal;
|
||||||
|
&.xsmall {
|
||||||
|
min-height: var(--wb-button--size-height-xsmall);
|
||||||
|
padding: var(--wb-button--padding-y-xsmall) var(--wb-button--padding-x-xsmall);
|
||||||
|
.svg-icon {
|
||||||
|
margin-bottom: -0.3rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.small {
|
||||||
|
padding: var(--wb-button--padding-y-small) var(--wb-button--padding-x-small);
|
||||||
|
.svg-icon {
|
||||||
|
margin-bottom: -0.3rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.medium {
|
||||||
|
padding: var(--wb-button--padding-y-medium) var(--wb-button--padding-x-medium);
|
||||||
|
.svg-icon {
|
||||||
|
margin-bottom: -0.4rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.large {
|
||||||
|
padding: var(--wb-button--padding-y-large) var(--wb-button--padding-x-large);
|
||||||
|
.svg-icon {
|
||||||
|
margin-bottom: -0.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.xlarge {
|
||||||
|
padding: var(--wb-button--padding-y-xlarge) var(--wb-button--padding-x-xlarge);
|
||||||
|
.svg-icon {
|
||||||
|
margin-bottom: -0.6rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.h-auto {
|
||||||
|
height: auto;
|
||||||
|
padding: var(--wb-padding-1) !important;
|
||||||
|
}
|
||||||
|
.svg-icon {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: -0.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.link { //링크인 경우 (텍스트 버튼과 비슷해보이지만 높이값 없음)
|
||||||
|
@include btn-link-variable();
|
||||||
|
//large 사이즈 기준 기본 세팅수정
|
||||||
|
display: inline-block;
|
||||||
|
height: auto !important;
|
||||||
|
padding: 0 var(--wb-button--padding-x-large);
|
||||||
|
font-size: var(--wb-button--pc-font-size-large);
|
||||||
|
text-align: left;
|
||||||
|
white-space: normal;
|
||||||
|
@include size-medium {
|
||||||
|
font-size: var(--wb-button--mobile-font-size-large);
|
||||||
|
}
|
||||||
|
&.xsmall {
|
||||||
|
padding: 0 var(--wb-button--padding-x-xsmall);
|
||||||
|
font-size: var(--wb-button--pc-font-size-xsmall);
|
||||||
|
@include size-medium {
|
||||||
|
font-size: var(--wb-button--mobile-font-size-xsmall);
|
||||||
|
}
|
||||||
|
.svg-icon {
|
||||||
|
margin-bottom: -0.3rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.small {
|
||||||
|
padding: 0 var(--wb-button--padding-x-small);
|
||||||
|
font-size: var(--wb-button--pc-font-size-small);
|
||||||
|
@include size-medium {
|
||||||
|
font-size: var(--wb-button--mobile-font-size-small);
|
||||||
|
}
|
||||||
|
.svg-icon {
|
||||||
|
margin-bottom: -0.3rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.medium {
|
||||||
|
padding: 0 var(--wb-button--padding-x-medium);
|
||||||
|
font-size: var(--wb-button--pc-font-size-medium);
|
||||||
|
@include size-medium {
|
||||||
|
font-size: var(--wb-button--mobile-font-size-medium);
|
||||||
|
}
|
||||||
|
.svg-icon {
|
||||||
|
margin-bottom: -0.4rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.large {
|
||||||
|
padding: 0 var(--wb-button--padding-x-large);
|
||||||
|
font-size: var(--wb-button--pc-font-size-large);
|
||||||
|
@include size-medium {
|
||||||
|
font-size: var(--wb-button--mobile-font-size-large);
|
||||||
|
}
|
||||||
|
.svg-icon {
|
||||||
|
margin-bottom: -0.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.xlarge {
|
||||||
|
padding: 0 var(--wb-button--padding-x-xlarge);
|
||||||
|
font-size: var(--wb-button--pc-font-size-xlarge);
|
||||||
|
@include size-medium {
|
||||||
|
font-size: var(--wb-button--mobile-font-size-xlarge);
|
||||||
|
}
|
||||||
|
.svg-icon {
|
||||||
|
margin-bottom: -0.6rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.basic {
|
||||||
|
$color: var(--wb-#{$mode-setting}-color-text-basic);
|
||||||
|
color: $color;
|
||||||
|
@include underline();
|
||||||
|
text-decoration-color: var(--wb-#{$mode-setting}-color-border-transparency);
|
||||||
|
.svg-icon {
|
||||||
|
background-color: $color;
|
||||||
|
}
|
||||||
|
&:hover,
|
||||||
|
&:active,
|
||||||
|
&:focus {
|
||||||
|
text-decoration-color: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
$color: var(--wb-#{$mode-setting}-color-link-hover);
|
||||||
|
color: $color;
|
||||||
|
.svg-icon {
|
||||||
|
background-color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:active,
|
||||||
|
&:focus {
|
||||||
|
$color: var(--wb-#{$mode-setting}-color-link-pressed);
|
||||||
|
color: $color;
|
||||||
|
.svg-icon {
|
||||||
|
background-color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:visited {
|
||||||
|
$color: var(--wb-#{$mode-setting}-color-link-visited);
|
||||||
|
color: $color;
|
||||||
|
text-decoration: none;
|
||||||
|
.svg-icon {
|
||||||
|
background-color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.svg-icon {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: -0.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* icon 버튼 (텍스트 없음) */
|
||||||
|
&.icon {
|
||||||
|
@each $size, $value in $button-icon-size {
|
||||||
|
--wb-button--icon-size-#{$size}: #{$value};
|
||||||
|
}
|
||||||
|
|
||||||
|
//기본 세팅
|
||||||
|
@include square(var(--wb-button--icon-size-medium));
|
||||||
|
padding: 0 !important;
|
||||||
|
background-color: transparent;
|
||||||
|
border-color: var(--wb-#{$mode-setting}-color-border-transparency);
|
||||||
|
color: inherit;
|
||||||
|
border: 0;
|
||||||
|
&:hover,
|
||||||
|
&:active {
|
||||||
|
background-color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
& {
|
||||||
|
@each $size, $value in $button-icon-size {
|
||||||
|
&.#{$size} {
|
||||||
|
@include square(var(--wb-button--icon-size-#{$size}));
|
||||||
|
//icon size
|
||||||
|
.svg-icon {
|
||||||
|
@include square(100%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.svg-icon {
|
||||||
|
background-color: var(--wb-#{$mode-setting}-color-text-basic);
|
||||||
|
}
|
||||||
|
&.pure {
|
||||||
|
.svg-icon {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//새로고침, 토글 등 보더 아이콘 버튼 형태
|
||||||
|
&.border {
|
||||||
|
background-color: var(--wb-#{$mode-setting}-color-background-white);
|
||||||
|
border: 0.1rem solid var(--wb-#{$mode-setting}-color-border-gray);
|
||||||
|
border-radius: var(--wb-radius-max);
|
||||||
|
|
||||||
|
//icon size 1.6rem
|
||||||
|
&.large {
|
||||||
|
.svg-icon {
|
||||||
|
@include square(var(--wb-icon--size-xsmall));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.xlarge {
|
||||||
|
.svg-icon {
|
||||||
|
@include square(var(--wb-icon--size-xlarge));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&[disabled],
|
||||||
|
&.disabled {
|
||||||
|
background-color: var(--wb-#{$mode-setting}-color-button-disabled-fill);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//고대비모드
|
||||||
|
@include color-mode($mode: high-contrast) {
|
||||||
|
//모드 설정
|
||||||
|
$mode-setting: high-contrast;
|
||||||
|
.wb-btn {
|
||||||
|
@include border-size-mode(#{$mode-setting});
|
||||||
|
@include button-color-variable(#{$mode-setting});
|
||||||
|
|
||||||
|
|
||||||
|
&.text {
|
||||||
|
//class명 검토
|
||||||
|
&.ico-filter {
|
||||||
|
.num {
|
||||||
|
color: var(--wb-#{$mode-setting}-color-text-basic-inverse);
|
||||||
|
background-color: var(--wb-#{$mode-setting}-color-element-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.link {
|
||||||
|
&.basic {
|
||||||
|
$color: var(--wb-#{$mode-setting}-color-text-basic);
|
||||||
|
color: $color;
|
||||||
|
&:not(.icon) {
|
||||||
|
.svg-icon {
|
||||||
|
background-color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
$color: var(--wb-#{$mode-setting}-color-link-hover);
|
||||||
|
color: $color;
|
||||||
|
&:not(.icon) {
|
||||||
|
.svg-icon {
|
||||||
|
background-color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:active,
|
||||||
|
&:focus {
|
||||||
|
$color: var(--wb-#{$mode-setting}-color-link-pressed);
|
||||||
|
color: $color;
|
||||||
|
&:not(.icon) {
|
||||||
|
.svg-icon {
|
||||||
|
background-color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:visited {
|
||||||
|
$color: var(--wb-#{$mode-setting}-color-link-visited);
|
||||||
|
color: $color;
|
||||||
|
&:not(.icon) {
|
||||||
|
.svg-icon {
|
||||||
|
background-color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/* icon 버튼 (텍스트 없음) */
|
||||||
|
&.icon {
|
||||||
|
background-color: transparent;
|
||||||
|
border-color: var(--wb-#{$mode-setting}-color-border-transparency);
|
||||||
|
|
||||||
|
.svg-icon {
|
||||||
|
background-color: var(--wb-#{$mode-setting}-color-text-basic);
|
||||||
|
}
|
||||||
|
//새로고침, 토글 등 보더 아이콘 버튼 형태
|
||||||
|
&.border {
|
||||||
|
background-color: var(--wb-#{$mode-setting}-color-background-white);
|
||||||
|
border-color: var(--wb-#{$mode-setting}-color-border-gray);
|
||||||
|
|
||||||
|
&[disabled],
|
||||||
|
&.disabled {
|
||||||
|
background-color: var(--wb-#{$mode-setting}-color-button-disabled-fill);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
//only component
|
||||||
|
|
||||||
|
//공통
|
||||||
|
@import "../common/include";
|
||||||
|
|
||||||
|
//component
|
||||||
|
@import "button";
|
||||||
|
// @import "tab";
|
||||||
|
// @import "table";
|
||||||
|
// @import "text_list";
|
||||||
|
// @import "modal";
|
||||||
|
// @import "help_panel";
|
||||||
|
// @import "accordion";
|
||||||
|
// @import "spinner";
|
||||||
|
// @import "contextual_help";
|
||||||
|
// @import "tooltip";
|
||||||
|
// @import "file_upload";
|
||||||
|
// @import "coach_mark";
|
||||||
|
// @import "disclosure";
|
||||||
|
// @import "skip_link";
|
||||||
|
// @import "masthead";
|
||||||
|
// @import "header";
|
||||||
|
// @import "main_menu";
|
||||||
|
// @import "footer";
|
||||||
|
// @import "identifier";
|
||||||
|
// @import "side_navigation";
|
||||||
|
// @import "structured_list";
|
||||||
|
// @import "critical_alerts";
|
||||||
|
// @import "in_page_navigation";
|
||||||
|
// @import "carousel";
|
||||||
|
// @import "pagination";
|
||||||
|
// @import "breadcrumb";
|
||||||
|
// @import "step_indicator";
|
||||||
|
// @import "badge";
|
||||||
|
// @import "tag";
|
||||||
|
// @import "form_layout";
|
||||||
|
// @import "input";
|
||||||
|
// @import "select";
|
||||||
|
// @import "form_check";
|
||||||
|
// @import "form_chip";
|
||||||
|
// @import "switch";
|
||||||
|
// @import "calendar";
|
||||||
|
// @import "resize";
|
||||||
|
// @import "language_switcher";
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
//component with common setting file
|
||||||
|
|
||||||
|
//common
|
||||||
|
@import "../common/common";
|
||||||
|
|
||||||
|
//component
|
||||||
|
@import "component";
|
||||||
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
@use '@progress/kendo-theme-bootstrap/scss/all.scss' as *;
|
||||||
|
@use 'tokens' as *;
|
||||||
|
|
||||||
|
.m-login .wrap-container-group-158{
|
||||||
|
left: 8px;
|
||||||
|
position: absolute;
|
||||||
|
top: 253px;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,474 @@
|
|||||||
|
@use '@progress/kendo-theme-bootstrap/scss/all.scss' as *;
|
||||||
|
@use 'tokens' as *;
|
||||||
|
|
||||||
|
.m-login{
|
||||||
|
background-color: #ffffff;
|
||||||
|
background-image: none;
|
||||||
|
height: 800px;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
width: 360px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .frame-164{
|
||||||
|
align-items: flex-start;
|
||||||
|
background-color: #f3f9ff;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
left: 7px;
|
||||||
|
overflow: hidden;
|
||||||
|
padding-bottom: 29px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 39px;
|
||||||
|
padding-top: 29px;
|
||||||
|
position: absolute;
|
||||||
|
row-gap: 10px;
|
||||||
|
top: 586px;
|
||||||
|
width: 345px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-169{
|
||||||
|
height: 146.17px;
|
||||||
|
position: relative;
|
||||||
|
width: 320px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .frame-163{
|
||||||
|
align-items: flex-start;
|
||||||
|
background-color: #ffffff;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
left: 0px;
|
||||||
|
overflow: hidden;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-right: 20px;
|
||||||
|
padding-top: 15px;
|
||||||
|
position: absolute;
|
||||||
|
row-gap: 10px;
|
||||||
|
top: 101.4px;
|
||||||
|
width: 320px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-168-2{
|
||||||
|
height: 14.77px;
|
||||||
|
position: relative;
|
||||||
|
width: 275.25px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .vector-2{
|
||||||
|
left: 270px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0.6px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-167-2{
|
||||||
|
height: 14.77px;
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
width: 242px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .가스계소화설비-안전관리-메뉴얼-및-경고문{
|
||||||
|
color: #000000;
|
||||||
|
font-family: NanumSquare;
|
||||||
|
font-size: font-size-12;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
left: 24px;
|
||||||
|
line-height: normal;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-166-2{
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0.64px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .frame-162{
|
||||||
|
align-items: flex-start;
|
||||||
|
background-color: #ffffff;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
left: 0px;
|
||||||
|
overflow: hidden;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-right: 20px;
|
||||||
|
padding-top: 15px;
|
||||||
|
position: absolute;
|
||||||
|
row-gap: 10px;
|
||||||
|
top: 50.7px;
|
||||||
|
width: 320px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-168-1{
|
||||||
|
height: 14.77px;
|
||||||
|
position: relative;
|
||||||
|
width: 275.25px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .vector-1{
|
||||||
|
left: 270px;
|
||||||
|
position: absolute;
|
||||||
|
top: 1.3px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-167-1{
|
||||||
|
height: 14.77px;
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
width: 244px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .제-1-회-위험물-안전관리-우수사례-경진대회{
|
||||||
|
color: #000000;
|
||||||
|
font-family: NanumSquare;
|
||||||
|
font-size: font-size-12;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
left: 24px;
|
||||||
|
line-height: normal;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-166-1{
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0.64px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .frame-161{
|
||||||
|
align-items: flex-start;
|
||||||
|
background-color: #ffffff;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
left: 0px;
|
||||||
|
overflow: hidden;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-right: 20px;
|
||||||
|
padding-top: 15px;
|
||||||
|
position: absolute;
|
||||||
|
row-gap: 10px;
|
||||||
|
top: 0px;
|
||||||
|
width: 320px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-168{
|
||||||
|
height: 14.77px;
|
||||||
|
position: relative;
|
||||||
|
width: 275.25px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-167{
|
||||||
|
flex-shrink: 0;
|
||||||
|
height: 14.77px;
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
width: 275.25px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .vector{
|
||||||
|
left: 270px;
|
||||||
|
position: absolute;
|
||||||
|
top: 1px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .겨울철-화재안전대책-공동주택-정책홍보{
|
||||||
|
color: #000000;
|
||||||
|
font-family: NanumSquare;
|
||||||
|
font-size: font-size-12;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
left: 24px;
|
||||||
|
line-height: normal;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
top: 0px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-166{
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0.64px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .소방안전지도{
|
||||||
|
color: #000000;
|
||||||
|
font-family: NanumSquare;
|
||||||
|
font-size: 18px;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 800;
|
||||||
|
left: 130px;
|
||||||
|
line-height: normal;
|
||||||
|
position: absolute;
|
||||||
|
top: 201px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .mask-group-1{
|
||||||
|
flex-shrink: 0;
|
||||||
|
height: 180px;
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
width: 360px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-158{
|
||||||
|
height: 300.8px;
|
||||||
|
left: 8px;
|
||||||
|
position: absolute;
|
||||||
|
top: 253px;
|
||||||
|
width: 343.33px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .frame-165{
|
||||||
|
align-items: center;
|
||||||
|
background-color: #ffffff;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-color: #d3d3d3;
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
border-left-color: #d3d3d3;
|
||||||
|
border-left-style: solid;
|
||||||
|
border-left-width: 1px;
|
||||||
|
border-right-color: #d3d3d3;
|
||||||
|
border-right-style: solid;
|
||||||
|
border-right-width: 1px;
|
||||||
|
border-top-color: #d3d3d3;
|
||||||
|
border-top-left-radius: 0px;
|
||||||
|
border-top-right-radius: 0px;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-width: 1px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
left: 0px;
|
||||||
|
overflow: hidden;
|
||||||
|
padding-bottom: 39px;
|
||||||
|
padding-left: 31px;
|
||||||
|
padding-right: 31px;
|
||||||
|
padding-top: 39px;
|
||||||
|
position: absolute;
|
||||||
|
row-gap: 10px;
|
||||||
|
top: 66px;
|
||||||
|
width: 343px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .frame-158{
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
row-gap: 34.8px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-165{
|
||||||
|
background-color: #002e64;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: 6px;
|
||||||
|
border-bottom-right-radius: 6px;
|
||||||
|
border-top-left-radius: 6px;
|
||||||
|
border-top-right-radius: 6px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
height: 50px;
|
||||||
|
position: relative;
|
||||||
|
width: 280px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .로그인{
|
||||||
|
color: #ffffff;
|
||||||
|
font-family: NanumSquare;
|
||||||
|
font-size: font-size-12;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 800;
|
||||||
|
left: 124px;
|
||||||
|
line-height: normal;
|
||||||
|
position: absolute;
|
||||||
|
top: 18px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-164{
|
||||||
|
height: 72px;
|
||||||
|
position: relative;
|
||||||
|
width: 280px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-163{
|
||||||
|
height: 30px;
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 42px;
|
||||||
|
width: 280px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .rectangle-22{
|
||||||
|
border-bottom-color: #d0d0d0;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
border-bottom-width: 0.6px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
height: 30px;
|
||||||
|
left: 64.9px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
width: 215.1px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .비밀번호{
|
||||||
|
color: #1a1a1a;
|
||||||
|
font-family: NanumSquare;
|
||||||
|
font-size: 12px;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
left: 0px;
|
||||||
|
line-height: normal;
|
||||||
|
position: absolute;
|
||||||
|
top: 9px;
|
||||||
|
width: 46.67px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .group-162{
|
||||||
|
height: 30px;
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
width: 280px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .rectangle-21{
|
||||||
|
border-bottom-color: #d0d0d0;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
border-bottom-width: 0.6px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
height: 30px;
|
||||||
|
left: 64.9px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
width: 215.1px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .아이디{
|
||||||
|
color: #1a1a1a;
|
||||||
|
font-family: NanumSquare;
|
||||||
|
font-size: 12px;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
left: 0px;
|
||||||
|
line-height: normal;
|
||||||
|
position: absolute;
|
||||||
|
top: 9px;
|
||||||
|
width: 35px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .frame-166{
|
||||||
|
align-items: flex-start;
|
||||||
|
display: flex;
|
||||||
|
left: 0px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .frame-157{
|
||||||
|
align-items: center;
|
||||||
|
border-bottom-left-radius: 25px;
|
||||||
|
border-bottom-right-radius: 25px;
|
||||||
|
border-top-left-radius: 25px;
|
||||||
|
border-top-right-radius: 25px;
|
||||||
|
column-gap: 10px;
|
||||||
|
display: flex;
|
||||||
|
height: 66px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 114px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .모바일공무원증-로그인{
|
||||||
|
color: $tb-figma-gray-color-02;
|
||||||
|
font-family: NanumSquare;
|
||||||
|
font-size: 12px;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: normal;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .frame-156{
|
||||||
|
align-items: center;
|
||||||
|
border-bottom-left-radius: 25px;
|
||||||
|
border-bottom-right-radius: 25px;
|
||||||
|
border-top-left-radius: 25px;
|
||||||
|
border-top-right-radius: 25px;
|
||||||
|
column-gap: 10px;
|
||||||
|
display: flex;
|
||||||
|
height: 66px;
|
||||||
|
justify-content: center;
|
||||||
|
width: 115px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .gpki-인중서-로그인{
|
||||||
|
color: $tb-figma-gray-color-02;
|
||||||
|
font-family: NanumSquare;
|
||||||
|
font-size: 12px;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: normal;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .frame-155{
|
||||||
|
align-items: center;
|
||||||
|
background-color: #005dca;
|
||||||
|
background-image: none;
|
||||||
|
border-bottom-left-radius: 0px;
|
||||||
|
border-bottom-right-radius: 0px;
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-top-right-radius: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
column-gap: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding-bottom: 26px;
|
||||||
|
padding-top: 26px;
|
||||||
|
width: 114.33px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.m-login .아이디-로그인{
|
||||||
|
color: #ffffff;
|
||||||
|
font-family: NanumSquare;
|
||||||
|
font-size: 12px;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: normal;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
@use 'common-styles-overrides' as *;
|
||||||
|
@use 'login' as *;
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
@import 'tokens';
|
||||||
|
@import 'overrides';
|
||||||
|
@import 'page';
|
||||||
|
@import './componants/output';
|
||||||
|
After Width: | Height: | Size: 8.7 MiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |