류윤주 류윤주 03-26
250326 류윤주 1차 커밋
@b3a1d452bd3ec9671360be99dcc2f8fa332e51a2
 
client/resources/css/admin.css (deleted)
--- client/resources/css/admin.css
@@ -1,274 +0,0 @@
-/* layout */
-.admin-wrap {
-    display: grid;
-    grid-template-columns: 215px minmax(1020px, 1fr);
-    grid-template-rows: 66px minmax(527px, auto);
-    grid-template-areas:
-        "header header "
-        "nav  main  ";
-    height: 100%;
-    /* min-height: 100vh; */
-}
-
-.admin-wrap header {
-    background-color: var(--gray-dark);
-    grid-area: header;
-}
-
-.admin-wrap header * {
-    color: var(--white);
-}
-
-.admin-wrap header .logo {
-    font-size: 2.4rem;
-    font-weight: bold;
-}
-
-
-.admin-wrap header nav .admin-main-menu li {
-    font-size: 1.2rem;
-    padding: .5rem 2rem;
-}
-
-.admin-wrap header nav .admin-main-menu li.main-active{
-    background-color: #292929;
-    border-radius: 5rem;
-}
-
-.admin-wrap .admin-sub-menu {
-    height: 100%;
-    background-color: var(--secondary);
-    box-shadow: 5px 0 5px var(--light);
-    grid-area: nav;
-}
-
-
-
-
-.side-menu {
-    border-top: 0.5px solid var(--gray);
-    height: calc(100% - 122px);
-    overflow-y: auto;
-}
-
-.side-menu li.sub-active {
-    background-color: var(--blue);
-}
-
-.side-menu li.sub-active a,
-.side-menu li.sub-active span {
-    color: var(--white);
-}
-
-.side-menu li a,
-.side-menu li span {
-    display: block;
-    width: 100%;
-    font-size: 1.2rem;
-    position: relative;
-    padding-left: 1.5rem;
-}
-
-.side-menu li a::after,
-.side-menu li span::after {
-    content: "";
-    position: absolute;
-    width: 5px;
-    height: 5px;
-    border-radius: 5px;
-    top: 50%;
-    left: 0;
-    transform: translateY(-50%);
-    background-color: var(--gray-dark);
-}
-
-.side-menu li.sub-active a::after,
-.side-menu li.sub-active span::after {
-    background-color: var(--white);
-}
-
-
-.admin-wrap .main-warp {
-    grid-area: main;
-}
-
-.admin-wrap .main-warp>div.router-wrap {
-    height: 100%;
-    padding: 5rem 2rem;
-}
-
-
-/* admin pagination */
-.admin-pagination .pagination-button-type a.active {
-	background-color: var(--blue);
-	color: white;
-	cursor: default !important;
-}
-
-
-
-/* admin style */
-.admin-style details{
-    border-top: 2px solid var(--gray-dark);
-    border-bottom: 1px solid var(--gray-dark);
-}
-
-.admin-style summary{
-    padding: 1rem;
-    background-color: var(--light);
-    font-size: 1.8rem;
-    color: var(--blue);
-}
-
-.admin-style .summary-style {
-    font-size: 1.6rem;
-    position: relative;
-}
-
-.admin-style .summary-style::before{
-    content: "";
-    position: absolute;
-    top: 50%;
-    left: 0;
-    width: 5px;
-    height: 5px;
-    border-radius: 5px;
-    background-color: var(--blue);
-}
-
-.summary-style::before{
-    transform: translateY(-50%);
-}
-
-
-.admin-info{
-    background-color: var(--gray-dark);
-    border-radius: 1rem;
-    box-shadow: 0 0 5px var(--gray);
-}
-
-.admin-name{
-    font-size: 1.8rem;
-    font-weight: 800;
-    color: var(--light);
-}
-.admin-btn{
-    color: var(--light);   
-     position: relative;
-     font-size: 1.2rem;
-}
-.admin-btn:first-child::after{
-    content: "";
-    width: 1px;
-    height: 10px;
-    position: absolute;
-    top: 50%;
-    right: 0;
-    transform: translateY(-50%);
-    background-color: var(--light);
-}
-
-
-.full-page{
-    width: 100%;
-    height: calc(100% - 66px);
-}
-
-.tree-zone{
-    background-color: var(--light);
-    border-radius: 1rem;
-}
-.tree{
-    width: 100%;
-    /* height: calc(100% - 56px); */
-    height: calc(100% - 115px);
-}
-.btn-zone{
-    border-top: 1px solid var(--dark);
-}
-
-
-.admin-style .detail-table {
-    border-top: 2px solid var(--gray-dark);
-    border-bottom: 1px solid var(--gray-dark);
-    table-layout: fixed;
-    width: 100%;
-}
-
-.admin-style .detail-title {
-    background-color: var(--light);
-    border-bottom: 1px solid var(--gray-dark);
-}
-
-.admin-style .detail-title td {
-    padding: 2rem 1.5rem;
-}
-
-.admin-style .detail-table th{
-    background-color: var(--light);
-}
-
-.admin-style .detail-table-title {
-    font-size: 1.8rem;
-}
-
-/* 약관 상세보기 */
-.title-zone{
-    background-color: var(--light);
-}
-
-.title-zone p{
-    font-size: 2rem;
-    color: var(--blue);
-    font-weight: 700;
-}
-
-.viewer{
-    border-top: 1px solid var(--dark);
-    border-bottom: 1px solid var(--dark);
-}
-
-
-/* 팝업 */
-.popup-container{
-    background: #fff; 
-    border-radius: 5px;
-    overflow: hidden;
-}
-
-.popup-container .img-link{
-    display: block;
-    width: 100%;
-    height: 100%;
-}
-
-.iframe-container{
-  position: relative;
-  width: 100%;
-  height: 0;
-  padding-top: calc(9/16 * 100%);
-}
-
-.iframe-container iframe{
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-}
-
-/* 영상게시판 */
-.video-zone,
-.gall-zone{
-    width: 70%;
-    margin: 0 auto;
-    margin-bottom: 3rem;
-}
-.gall-zone{
-    width: 100%;
-}
-
-.sticy{
-    position: sticky;
-    top: 0;
-}
 
client/resources/css/common.css (deleted)
--- client/resources/css/common.css
@@ -1,406 +0,0 @@
-@charset "utf-8";
-
-
-/* 마진 - 왼쪽 */
-.ml0 { margin-left: 0rem; }
-.ml5 { margin-left: 0.5rem; }
-.ml10 { margin-left: 1rem; }
-.ml15 { margin-left: 1.5rem; }
-.ml20 { margin-left: 2rem; }
-.ml25 { margin-left: 2.5rem; }
-.ml30 { margin-left: 3rem; }
-.ml35 { margin-left: 3.5rem; }
-.ml40 { margin-left: 4rem; }
-.ml45 { margin-left: 4.5rem; }
-.ml50 { margin-left: 5rem; }
-.ml55 { margin-left: 5.5rem; }
-.ml60 { margin-left: 6rem; }
-.ml65 { margin-left: 6.5rem; }
-.ml70 { margin-left: 7rem; }
-.ml75 { margin-left: 7.5rem; }
-.ml80 { margin-left: 8rem; }
-.ml85 { margin-left: 8.5rem; }
-.ml90 { margin-left: 9rem; }
-.ml95 { margin-left: 9.5rem; }
-.ml100 { margin-left: 10rem; }
-/* 마진 - 오른쪽 */
-.mr0 { margin-right: 0rem; }
-.mr5 { margin-right: 0.5rem; }
-.mr10 { margin-right: 1rem; }
-.mr15 { margin-right: 1.5rem; }
-.mr20 { margin-right: 2rem; }
-.mr25 { margin-right: 2.5rem; }
-.mr30 { margin-right: 3rem; }
-.mr35 { margin-right: 3.5rem; }
-.mr40 { margin-right: 4rem; }
-.mr45 { margin-right: 4.5rem; }
-.mr50 { margin-right: 5rem; }
-.mr55 { margin-right: 5.5rem; }
-.mr60 { margin-right: 6rem; }
-.mr65 { margin-right: 6.5rem; }
-.mr70 { margin-right: 7rem; }
-.mr75 { margin-right: 7.5rem; }
-.mr80 { margin-right: 8rem; }
-.mr85 { margin-right: 8.5rem; }
-.mr90 { margin-right: 9rem; }
-.mr95 { margin-right: 9.5rem; }
-.mr100 { margin-right: 10rem; }
-/* 마진 - 위쪽 */
-.mt0 { margin-top: 0rem; }
-.mt5 { margin-top: 0.5rem; }
-.mt10 { margin-top: 1rem; }
-.mt15 { margin-top: 1.5rem; }
-.mt20 { margin-top: 2rem; }
-.mt25 { margin-top: 2.5rem; }
-.mt30 { margin-top: 3rem; }
-.mt35 { margin-top: 3.5rem; }
-.mt40 { margin-top: 4rem; }
-.mt45 { margin-top: 4.5rem; }
-.mt50 { margin-top: 5rem; }
-.mt55 { margin-top: 5.5rem; }
-.mt60 { margin-top: 6rem; }
-.mt65 { margin-top: 6.5rem; }
-.mt70 { margin-top: 7rem; }
-.mt75 { margin-top: 7.5rem; }
-.mt80 { margin-top: 8rem; }
-.mt85 { margin-top: 8.5rem; }
-.mt90 { margin-top: 9rem; }
-.mt95 { margin-top: 9.5rem; }
-.mt100 { margin-top: 10rem; }
-/* 마진 - 아래쪽 */
-.mb0 { margin-bottom: 0rem; }
-.mb5 { margin-bottom: 0.5rem; }
-.mb10 { margin-bottom: 1rem; }
-.mb15 { margin-bottom: 1.5rem; }
-.mb20 { margin-bottom: 2rem; }
-.mb25 { margin-bottom: 2.5rem; }
-.mb30 { margin-bottom: 3rem; }
-.mb35 { margin-bottom: 3.5rem; }
-.mb40 { margin-bottom: 4rem; }
-.mb45 { margin-bottom: 4.5rem; }
-.mb50 { margin-bottom: 5rem; }
-.mb55 { margin-bottom: 5.5rem; }
-.mb60 { margin-bottom: 6rem; }
-.mb65 { margin-bottom: 6.5rem; }
-.mb70 { margin-bottom: 7rem; }
-.mb75 { margin-bottom: 7.5rem; }
-.mb80 { margin-bottom: 8rem; }
-.mb85 { margin-bottom: 8.5rem; }
-.mb90 { margin-bottom: 9rem; }
-.mb95 { margin-bottom: 9.5rem; }
-.mb100 { margin-bottom: 10rem; }
-/* 패딩 - 전체 */
-.pd0 { padding: 0rem; }
-.pd5 { padding: 0.5rem; }
-.pd10 { padding: 1rem; }
-.pd15 { padding: 1.5rem; }
-.pd20 { padding: 2rem; }
-.pd25 { padding: 2.5rem; }
-.pd30 { padding: 3rem; }
-.pd35 { padding: 3.5rem; }
-.pd40 { padding: 4rem; }
-.pd45 { padding: 4.5rem; }
-.pd50 { padding: 5rem; }
-.pd55 { padding: 5.5rem; }
-.pd60 { padding: 6rem; }
-.pd65 { padding: 6.5rem; }
-.pd70 { padding: 7rem; }
-.pd75 { padding: 7.5rem; }
-.pd80 { padding: 8rem; }
-.pd85 { padding: 8.5rem; }
-.pd90 { padding: 9rem; }
-.pd95 { padding: 9.5rem; }
-.pd100 { padding: 10rem; }
-
-/* 패딩 - 왼쪽 */
-.pl0 { padding-left: 0rem; }
-.pl5 { padding-left: 0.5rem; }
-.pl10 { padding-left: 1rem; }
-.pl15 { padding-left: 1.5rem; }
-.pl20 { padding-left: 2rem; }
-.pl25 { padding-left: 2.5rem; }
-.pl30 { padding-left: 3rem; }
-.pl35 { padding-left: 3.5rem; }
-.pl40 { padding-left: 4rem; }
-.pl45 { padding-left: 4.5rem; }
-.pl50 { padding-left: 5rem; }
-.pl55 { padding-left: 5.5rem; }
-.pl60 { padding-left: 6rem; }
-.pl65 { padding-left: 6.5rem; }
-.pl70 { padding-left: 7rem; }
-.pl75 { padding-left: 7.5rem; }
-.pl80 { padding-left: 8rem; }
-.pl85 { padding-left: 8.5rem; }
-.pl90 { padding-left: 9rem; }
-.pl95 { padding-left: 9.5rem; }
-.pl100 { padding-left: 10rem; }
-/* 패딩 - 오른쪽 */
-.pr0 { padding-right: 0rem; }
-.pr5 { padding-right: 0.5rem; }
-.pr10 { padding-right: 1rem; }
-.pr15 { padding-right: 1.5rem; }
-.pr20 { padding-right: 2rem; }
-.pr25 { padding-right: 2.5rem; }
-.pr30 { padding-right: 3rem; }
-.pr35 { padding-right: 3.5rem; }
-.pr40 { padding-right: 4rem; }
-.pr45 { padding-right: 4.5rem; }
-.pr50 { padding-right: 5rem; }
-.pr55 { padding-right: 5.5rem; }
-.pr60 { padding-right: 6rem; }
-.pr65 { padding-right: 6.5rem; }
-.pr70 { padding-right: 7rem; }
-.pr75 { padding-right: 7.5rem; }
-.pr80 { padding-right: 8rem; }
-.pr85 { padding-right: 8.5rem; }
-.pr90 { padding-right: 9rem; }
-.pr95 { padding-right: 9.5rem; }
-.pr100 { padding-right: 10rem; }
-/* 패딩 - 위쪽 */
-.pt0 { padding-top: 0rem; }
-.pt5 { padding-top: 0.5rem; }
-.pt10 { padding-top: 1rem; }
-.pt15 { padding-top: 1.5rem; }
-.pt20 { padding-top: 2rem; }
-.pt25 { padding-top: 2.5rem; }
-.pt30 { padding-top: 3rem; }
-.pt35 { padding-top: 3.5rem; }
-.pt40 { padding-top: 4rem; }
-.pt45 { padding-top: 4.5rem; }
-.pt50 { padding-top: 5rem; }
-.pt55 { padding-top: 5.5rem; }
-.pt60 { padding-top: 6rem; }
-.pt65 { padding-top: 6.5rem; }
-.pt70 { padding-top: 7rem; }
-.pt75 { padding-top: 7.5rem; }
-.pt80 { padding-top: 8rem; }
-.pt85 { padding-top: 8.5rem; }
-.pt90 { padding-top: 9rem; }
-.pt95 { padding-top: 9.5rem; }
-.pt100 { padding-top: 10rem; }
-/* 패딩 - 아래쪽 */
-.pb0 { padding-bottom: 0rem; }
-.pb5 { padding-bottom: 0.5rem; }
-.pb10 { padding-bottom: 1rem; }
-.pb15 { padding-bottom: 1.5rem; }
-.pb20 { padding-bottom: 2rem; }
-.pb25 { padding-bottom: 2.5rem; }
-.pb30 { padding-bottom: 3rem; }
-.pb35 { padding-bottom: 3.5rem; }
-.pb40 { padding-bottom: 4rem; }
-.pb45 { padding-bottom: 4.5rem; }
-.pb50 { padding-bottom: 5rem; }
-.pb55 { padding-bottom: 5.5rem; }
-.pb60 { padding-bottom: 6rem; }
-.pb65 { padding-bottom: 6.5rem; }
-.pb70 { padding-bottom: 7rem; }
-.pb75 { padding-bottom: 7.5rem; }
-.pb80 { padding-bottom: 8rem; }
-.pb85 { padding-bottom: 8.5rem; }
-.pb90 { padding-bottom: 9rem; }
-.pb95 { padding-bottom: 9.5rem; }
-.pb100 { padding-bottom: 10rem; }
-
-:root {
-    --krds-white: #fff;
-    --krds-black: #000;
-    --krds-primary: #246BEB;
-    --krds-secondary: #003675;
-    --krds-point: #E71825;
-    --krds-danger: #EB003B;
-    --krds-warning: #FFB724;
-    --krds-success: #008A1E;
-    --krds-information: #2768FF;
-    --krds-primary-5: #EFF5FF;
-    --krds-primary-10: #D3E1FB;
-    --krds-primary-20: #A7C4F7;
-    --krds-primary-30: #7CA6F3;
-    --krds-primary-40: #5089EF;
-    --krds-primary-60: #1D56BC;
-    --krds-primary-70: #16408D;
-    --krds-primary-80: #0E2B5E;
-    --krds-primary-90: #07152F;
-    --krds-secondary-5: #EDF1F5;
-    --krds-secondary-10: #CDD7E4;
-    --krds-secondary-20: #B4C4D6;
-    --krds-secondary-30: #99B0CB;
-    --krds-secondary-40: #2A5C96;
-    --krds-secondary-60: #002B5E;
-    --krds-secondary-70: #002046;
-    --krds-secondary-80: #00162F;
-    --krds-secondary-90: #000B17;
-    --krds-point-5: #FDF2F3;
-    --krds-point-10: #FAD1D3;
-    --krds-point-20: #F5A3A8;
-    --krds-point-30: #F1747C;
-    --krds-point-40: #EC4651;
-    --krds-point-60: #B9131E;
-    --krds-point-70: #8B0E16;
-    --krds-point-80: #5C0A0F;
-    --krds-point-90: #2E0507;
-    --krds-gray-5: #F8F8F8;
-    --krds-gray-10: #F0F0F0;
-    --krds-gray-20: #E4E4E4;
-    --krds-gray-30: #D8D8D8;
-    --krds-gray-40: #C6C6C6;
-    --krds-gray-50: #8E8E8E;
-    --krds-gray-60: #717171;
-    --krds-gray-70: #555555;
-    --krds-gray-80: #2D2D2D;
-    --krds-gray-90: #1D1D1D;
-    --krds-fz-display-sm: 4rem;
-    --krds-fz-display-md: 5rem;
-    --krds-fz-display-lg: 6.6rem;
-    --krds-fz-heading-sm: 3.2rem;
-}
-
-/* 너비 */
-.w1400{
-    width: 1400px;
-    margin: 0 auto;
-}
-
-
-/* background-color */
-.pink{
-    /* background-color: var(--sky-pink); */
-    color: var(--pink);
-}
-
-.green{
-    /* background-color: var(--sky-green); */
-    color: var(--green);
-}
-
-.orange{
-    /* background-color: var(--sky-orange); */
-    color: var(--orange);
-}
-
-.red{
-    color: var(--red);
-}
-
-.dark-gray{
-    color: var(--gray-dark);
-}
-
-.gray{
-    color: var(--gray);
-}
-
-.blue{
-    color: var(--blue);
-}
-
-.white{
-    color: var(--white);
-}
-
-
-/* text 정렬 */
-.text-lf {
-    text-align: left;
-}
-
-.text-ct {
-    text-align: center;
-}
-
-.text-rg {
-    text-align: right;
-}
-
-
-/* 폰트 */
-.fw-bold{
-    font-weight: 700;
-}
-
-.point-font{
-    font-family: "yungju";
-}
-.point-font2{
-    font-family: "GmarketSans-M";
-}
-
-
-/* 기타 공용 */
-.cursor {
-    cursor: pointer;
-}
-
-.border-none{
-    border: none;
-}
-
-.border{
-    border: 1px solid var(--dark);
-    border-radius: 0.5rem;
-}
-
-.border-top{
-    border-top: 1px solid var(--sky-green);
-}
-.border-b{
-    border-bottom: 1px solid var(--dark);
-}
-
-.border-r{
-    border-right: 1px solid var(--sky-green);
-}
-
-.shortcuts{
-    font-size: 1.4rem;
-    font-weight: normal;
-    color: var(--green);
-}
-
-.chart-wrap{
-    width: 100%;
-    height: 363px;
-    border-radius: 10px;
-}
-
-.overflow-y{
-    overflow-y: auto;
-}
-
-.block{
-    display: block;
-}
-
-.inline{
-    display: inline;
-}
-.inline-block{
-    display: inline-block;
-}
-
-.red-text{
-    color: var(--red);
-}
-
-.err-border{
-    border: 2px solid var(--red);
-}
-
-.radius{
-    border-radius: 1rem;
-}
-
-.file-item{
-    height: 4rem;
-    line-height: 4rem;
-}
-
-.background{
-    background-color: var(--sky-green);
-}
-
-.ellipsis {
-    width: 100%;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    overflow: hidden;
-  }
 
client/resources/css/component.css (deleted)
--- client/resources/css/component.css
@@ -1,762 +0,0 @@
-@charset "utf-8";
-
-/* box */
-
-
-.row {
-    padding-top: 5px;
-    padding-bottom: 5px;
-}
-
-.box {
-    background-color: var(--white);
-    height: 100%;
-    padding: 2rem;
-    border-radius: 10px;
-    border: 0.1rem solid var(--krds-gray-40);
-
-}
-
-.page-title {
-    font-size: 3rem;
-    font-weight: bold;
-    color: var(--green);
-}
-
-.admin-page-title {
-    font-size:1.8rem;
-    font-weight: bold;
-    color: var(--blue);
-}
-
-.admin-sec-title {
-    font-size: 1.8rem;
-    font-weight: bold;
-    color: var(--blue);
-}
-
-.box-title {
-    font-size: 1.3rem;
-
-}
-
-.box-inner-title {
-    font-size: 1.8rem;
-    font-weight: bold;
-    padding-bottom: 1rem;
-    border-bottom: 1px solid var(--dark);
-}
-
-.box-content {
-    font-size: 2rem;
-    color: var(--blue);
-    font-family: "GmarketSans-B";
-}
-
-.chart-title {
-    font-size: 1.4rem;
-    font-weight: bold;
-}
-
-.content-box {
-    height: calc(100% - 48px);
-    /* background-color: aliceblue; */
-}
-
-.detail-bold {
-    font-size: 1.6rem;
-    font-weight: 700;
-}
-
-.detail-text {
-    font-size: 1.6rem;
-    font-weight: 400;
-}
-
-.date-text {
-    font-size: 1.4rem;
-    font-weight: 400;
-}
-
-/* btn */
-.small-btn {
-    width: 120px;
-    padding: 0.7rem 1rem;
-    border-radius: 0.5rem;
-    font-size: 1.5rem;
-}
-
-.large-btn {
-    width: 100%;
-    padding: 0.5rem 0;
-    border-radius: 0.5rem;
-}
-
-.icon-btn {
-    padding: 0.5rem;
-    border-radius: 50%;
-}
-
-.close-btn {
-    font-size: 1.6rem;
-    font-weight: 900;
-}
-
-.logout-btn {
-    padding: 0.5rem 1rem;
-    color: var(--dark);
-    position: relative;
-    font-size: 1.6rem;
-}
-
-.logout-btn::before {
-    content: "";
-    width: 1px;
-    height: 10px;
-    position: absolute;
-    top: 50%;
-    left: 0;
-    transform: translateY(-50%);
-    background-color: #aaa;
-}
-
-.close-btn {
-    color: #d6def6;
-}
-
-.comment-btn {
-    width: 100%;
-    height: 6.5rem;
-    max-height: 6.5rem
-}
-
-.blue-btn,
-.blue-border-btn:hover {
-    background-color: var(--blue);
-    color: var(--white);
-    transition: all 0.3s ease-in-out;
-}
-
-.red-btn,
-.red-border-btn:hover {
-    background-color: var(--red);
-    color: var(--white);
-    transition: all 0.3s ease-in-out;
-}
-
-.green-btn,
-.green-border-btn:hover {
-    background-color: var(--green);
-    color: var(--white);
-    transition: all 0.3s ease-in-out;
-}
-
-.orange-btn,
-.orange-border-btn:hover {
-    background-color: var(--orange);
-    color: var(--white);
-    transition: all 0.3s ease-in-out;
-}
-
-.darkg-btn,
-.darkg-border-btn:hover {
-    background-color: var(--gray-dark);
-    color: var(--white);
-    transition: all 0.3s ease-in-out;
-}
-
-.gray-btn,
-.gray-border-btn:hover {
-    background-color: #eee;
-    color: #333;
-    transition: all 0.3s ease-in-out;
-}
-
-
-.blue-border-btn {
-    border: 1px solid var(--blue);
-    color: var(--blue);
-    background-color: var(--white);
-}
-
-.red-border-btn {
-    border: 1px solid var(--red);
-    color: var(--red);
-    background-color: var(--white);
-}
-
-.green-border-btn {
-    border: 1px solid var(--green);
-    color: var(--green);
-    background-color: var(--white);
-}
-
-.orange-border-btn {
-    border: 1px solid var(--orange);
-    color: var(--orange);
-    background-color: var(--white);
-}
-
-.darkg-border-btn {
-    border: 1px solid var(--gray-dark);
-    color: var(--gray-dark);
-    background-color: var(--white);
-}
-
-.gray-border-btn {
-    border: 1px solid #aaa;
-    color: #aaa;
-    background-color: var(--white);
-}
-
-.white-border-btn {
-    border: 1px solid var(--white);
-    color: var(--white);
-    background-color: transparent;
-}
-
-.tp-btn {
-    background-color: transparent;
-    width: 15px;
-    height: 15px;
-    margin-left: 10px;
-}
-
-button:disabled {
-    background-color: #eee;
-    color: #333;
-}
-
-.del-icon-btn {
-    width: 25px;
-    height: 25px;
-    padding: 5px;
-    background-color: var(--red);
-    color: var(--white);
-    border-radius: 50%;
-}
-
-.set-icon-btn {
-    width: 25px;
-    height: 25px;
-    padding: 5px;
-    background-color: var(--darkG);
-    color: var(--white);
-    border-radius: 50%;
-}
-
-
-
-/* 모달 */
-.modal-wrapper {
-    background-color: rgba(0, 0, 0, 0.5);
-    position: fixed;
-    width: 100%;
-    height: 100%;
-    top: 0;
-    left: 0;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    z-index: 11000;
-}
-
-.modal-container {
-    background: #fff;
-    min-width: 500px;
-    width: 35%;
-    /* height: 80%; */
-    border-radius: 5px;
-    display: grid;
-    grid-template-rows: auto 1fr auto;
-    padding: 20px;
-    box-sizing: border-box;
-    max-height: 95%;
-    min-height: 500px;
-}
-
-.modal-title {
-    width: 100%;
-    border-bottom: 1px solid #d4cccc;
-    padding: 10px 0;
-}
-
-.modal-subtitle {
-    font-size: 1.3rem;
-    font-weight: 600;
-}
-
-.modal-content-monthly {
-    width: 100%;
-    padding: 20px 0;
-    overflow-y: auto;
-}
-
-.large-modal {
-    width: 90%;
-}
-
-.medium-modal {
-  width: 60%;
-}
-
-.small-modal {
-    min-width: 200px;
-    min-height: 200px;
-    max-width: 450px;
-    height: auto;
-    max-height: 50%;
-}
-
-.list-modal {
-    width: 80%;
-    height: 80%;
-}
-
-.alert-write {
-    font-size: 1.6rem;
-    line-height: 180%;
-}
-
-
-.modal-content-monthly::-webkit-scrollbar {
-    width: 10px;
-}
-
-.modal-content-monthly::-webkit-scrollbar-thumb {
-    background-color: #6b6b6b;
-    border-radius: 10px;
-    background-clip: padding-box;
-    border: 2px solid transparent;
-}
-
-.modal-content-monthly::-webkit-scrollbar-track {
-    background-color: #eee;
-    border-radius: 10px;
-    box-shadow: inset 0px 0px 5px white;
-}
-
-.modal-end {
-    width: 100%;
-    padding: 15px 0;
-}
-
-.alert-modal .modal-end button,
-.small-modal .modal-end button {
-    margin-left: 0;
-}
-
-.full-input,
-.full-select {
-    width: 100%;
-}
-
-.half-input,
-.half-select {
-    width: 50%;
-}
-
-
-/* table */
-.list-table .admin-list.list-table {
-    border-top: 1px solid var(--light);
-    border-bottom: 1px solid var(--light);
-}
-
-.admin-wrap .list-table thead th {
-    background-color: var(--teal);
-    padding: 10px 0;
-    font-family: "yungju";
-    font-size: 1.2rem;
-}
-
-.list-table tbody tr,
-.admin-list.list-table tbody tr,
-.form-table2 tr {
-    border-top: 1px solid var(--light);
-}
-
-.admin-wrap .list-table tbody td,
-.admin-list.list-table tbody td {
-    font-size: 1.2rem;
-}
-
-.list-table tbody tr:nth-child(even) {
-    background-color: var(--sky-green);
-
-}
-
-.admin-wrap .admin-list.list-table thead th {
-    background-color: var(--light);
-    font-family: "Pretendard-B";
-    font-size: 1.2rem;
-}
-
-.admin-list.list-table tbody tr:nth-child(even) {
-    background-color: var(--background-white);
-
-}
-
-.admin-style .form-table,
-.content-navigate {
-    border-top: 1px solid var(--gray-dark);
-    border-bottom: 1px solid var(--gray-dark);
-}
-
-.form-table {
-    border-top: 1px solid var(--green);
-    border-bottom: 1px solid var(--green);
-}
-
-.form-table2 {
-    border: 1px solid var(--light);
-}
-
-.form-table th,
-.form-table td,
-.form-table2 th,
-.form-table2 td {
-    padding: 1rem;
-    position: relative;
-}
-
-.form-table2 th {
-    background-color: var(--teal);
-    border-right: 1px solid var(--light);
-}
-
-.form-table-adm th {
-    background-color: var(--light);
-    border-right: 1px solid var(--white);
-}
-
-.admin-style .form-table2 th {
-    background-color: var(--light);
-    border-right: 1px solid var(--light);
-}
-
-.form-table-style .form-table {
-    border-top: none;
-    border-bottom: none;
-}
-
-.detail-table {
-    border-top: 2px solid var(--green);
-    border-bottom: 1px solid var(--green);
-}
-
-.cmmn-table tr td:nth-of-type(2) {
-    text-align: left;
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    word-break: break-all;
-}
-
-.cmmn-table2 tr td:nth-of-type(2),
-.cmmn-table2 tr td:nth-of-type(3) {
-    text-align: left;
-}
-.admin-list.faq-table tbody tr:nth-child(even),
-.list-table.faq-table tbody tr:nth-child(even) {
-    background-color: var(--white);
-}
-
-.admin-list.faq-table tbody tr.answer,
-.list-table.faq-table tbody tr.answer {
-    background-color: var(--sky-green);
-}
-
-
-.admin-detail {
-    border-top: 2px solid var(--light);
-    border-bottom: 1px solid var(--light);
-}
-
-.detail-table .detail-title{
-    background-color: var(--white);
-    border-bottom: 1px solid var(--green);
-}
-
-
-.admin-detail .detail-title {
-    background-color: var(--light);
-    border-bottom: 1px solid var(--blue);
-}
-
-.detail-title td {
-    padding: 2rem 1.5rem;
-}
-
-.detail-table-title {
-    font-size: 1.8rem;
-}
-
-.complex-table th {
-    border: 1px solid var(--white);
-}
-
-.content-navigate tr {
-    border-top: 1px solid var(--gray-dark);
-}
-
-.content-navigate tr td:nth-of-type(1) {
-    border-right: 1px solid var(--light);
-}
-
-
-
-/* 파일찾기 및 필수 */
-
-.form-table input[type="file"] {
-    position: absolute;
-    width: 0;
-    height: 0;
-    padding: 0;
-    overflow: hidden;
-    border: 0;
-}
-
-.filebox {
-    height: 4rem;
-}
-
-.filebox .upload-name {
-    display: inline-block;
-    padding: 0.7rem 1rem;
-    vertical-align: middle;
-    border: 1px solid #dddddd;
-    color: #999999;
-}
-
-.form-table label {
-    display: inline-block;
-}
-
-.essential {
-    font-size: 1.3rem;
-}
-
-.essential span {
-    color: var(--red);
-}
-
-.form-table th span,
-.form-table-style .form-table label.form-title,
-.form-table label.form-title {
-    position: relative;
-}
-
-.form-table th span::after,
-.form-table-style .form-table label.form-title::after,
-.form-table label.form-title::after {
-    content: "*";
-    color: var(--red);
-    position: absolute;
-    top: 0;
-    right: 0;
-    transform: translate(100%, -50%);
-}
-
-
-
-
-/* 서치 */
-.search-bar {
-    position: relative;
-}
-
-.search-input{
-    border-radius: 1rem 0 1rem 0;
-}
-
-.search-input
-
-.search-input::placeholder {
-    font-family: "yungju";
-}
-
-.search-button {
-    position: absolute;
-    top: 50%;
-    right: 1rem;
-    transform: translateY(-50%);
-}
-
-.search-icon {
-    color: var(--light);
-}
-
-.condition-input {
-    /* border-left: 1px solid var(--dark); */
-}
-
-/*PAGINATION*/
-
-.pagination-button-type {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    font-size: 1.3rem;
-}
-
-.pagination-button-type a {
-    display: block;
-    text-align: center;
-    cursor: pointer;
-    border: 1px solid var(--dark);
-    padding: 0 7px;
-    border-radius: 0.5rem;
-}
-
-/* 정우추가 */
-.pagination-button-type a.prev:after {
-    content: "\003C";
-    font-weight: 900;
-
-}
-
-.pagination-button-type a.next:after {
-    content: "\003E";
-    font-weight: 900;
-}
-
-.pagination-button-type a.first-page:after {
-    content: "\003C\003C";
-    font-weight: 900;
-
-}
-
-.pagination-button-type a.end-page:after {
-    content: "\003E\003E";
-    font-weight: 900;
-
-}
-
-.pagination-button-type a.active {
-    background-color: var(--green);
-    color: white;
-    cursor: default !important;
-}
-
-
-
-/* 페이지 템플릿 */
-.gall-img {
-    width: 100%;
-    height: 200px
-}
-
-.gall-img>img {
-    width: 100%;
-    height: 100%;
-    object-fit: cover;
-}
-
-/* 댓글 */
-.comment-zone {
-    background-color: var(--skyblue);
-    border-radius: 1rem;
-}
-
-.comment-zone2 {
-  background-color: var(--background-white);
-  border-radius: 1rem;
-}
-
-.comment-wrap {
-  padding: 16px;
-  background-color: var(--white);
-}
-
-
-
-.comment-item:not(:first-child) {
-  border-top: 1px solid #ddd;
-}
-
-.parents-nodes {
-    padding-left: 8px;
-}
-
-.children-nodes {
-    padding-left: 8px;
-}
-
-.comment-user,
-.comment-text {
-    font-size: 1.3rem;
-}
-
-.comment-date {
-    color: var(--gray);
-    font-size: 1.2;
-}
-
-.reply-zone {
-    position: relative;
-    margin-bottom: 10px;
-}
-
-.reply-input {
-    border-radius: 50px;
-}
-
-.reply-btn {
-    position: absolute;
-    border-radius: 50px;
-    top: 50%;
-    right: 6px;
-    transform: translateY(-50%);
-}
-
-/* 팝업 */
-.popup-wrap {
-    height: 100vh;
-}
-
-.popup-container {
-    width: 100%;
-    height: calc(100vh - 50px);
-}
-
-/* 트리 */
-.p-tree {
-    padding: 0.5rem 1rem;
-}
-
-.node-name {
-    width: 100%;
-    font-size: 1.2rem;
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    word-break: break-all;
-}
-
-.selected {
-    border: 1px solid var(--blue);
-    border-radius: 0.3rem;
-}
-
-.ghost {
-    height: 15px;
-    color: transparent;
-    border: 1px dashed var(--blue);
-}
-
-.ghost * {
-    display: none;
-}
-
-/* 파일 목록 */
-.file-wrap p {
-  display: block;
-  width: calc(100% - 15px);
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  overflow: hidden;
-}
-.file-wrap button.del-btn {
-  width: 15px;
-}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/css/grid.css (deleted)
--- client/resources/css/grid.css
@@ -1,256 +0,0 @@
-@charset "utf-8";
-
-.container {
-    width: 100%;
-    padding-right: 15px;
-    padding-left: 15px;
-    margin-right: auto;
-    margin-left: auto;
-}
-
-@media (min-width: 576px) {
-    .container {
-        max-width: 540px;
-    }
-}
-
-@media (min-width: 768px) {
-    .container {
-        max-width: 720px;
-    }
-}
-
-@media (min-width: 992px) {
-    .container {
-        max-width: 960px;
-    }
-}
-
-@media (min-width: 1200px) {
-    .container {
-        max-width: 1140px;
-    }
-}
-
-
-.flex {
-    display: flex;
-    flex-wrap: wrap;
-}
-
-.flex-column {
-    display: flex;
-    flex-direction: column;
-}
-
-.no-gutters {
-    margin-right: 0;
-    margin-left: 0;
-}
-
-
-.no-gutters>.gd,
-.no-gutters>[class*="gd-"] {
-    padding-right: 0;
-    padding-left: 0;
-}
-
-.gd-1,
-.gd-2,
-.gd-3,
-.gd-4,
-.gd-5,
-.gd-6,
-.gd-7,
-.gd-8,
-.gd-9,
-.gd-10,
-.gd-11,
-.gd-12,
-.gd,
-.gd-auto,
-.gd-sm-1,
-.gd-sm-2,
-.gd-sm-3,
-.gd-sm-4,
-.gd-sm-5,
-.gd-sm-6,
-.gd-sm-7,
-.gd-sm-8,
-.gd-sm-9,
-.gd-sm-10,
-.gd-sm-11,
-.gd-sm-12,
-.gd-sm,
-.gd-sm-auto,
-.gd-md-1,
-.gd-md-2,
-.gd-md-3,
-.gd-md-4,
-.gd-md-5,
-.gd-md-6,
-.gd-md-7,
-.gd-md-8,
-.gd-md-9,
-.gd-md-10,
-.gd-md-11,
-.gd-md-12,
-.gd-md,
-.gd-md-auto,
-.gd-lg-1,
-.gd-lg-2,
-.gd-lg-3,
-.gd-lg-4,
-.gd-lg-5,
-.gd-lg-6,
-.gd-lg-7,
-.gd-lg-8,
-.gd-lg-9,
-.gd-lg-10,
-.gd-lg-11,
-.gd-lg-12,
-.gd-lg,
-.gd-lg-auto,
-.gd-xl-1,
-.gd-xl-2,
-.gd-xl-3,
-.gd-xl-4,
-.gd-xl-5,
-.gd-xl-6,
-.gd-xl-7,
-.gd-xl-8,
-.gd-xl-9,
-.gd-xl-10,
-.gd-xl-11,
-.gd-xl-12,
-.gd-xl,
-.gd-xl-auto {
-    position: relative;
-    width: 100%;
-    min-height: 1px;
-    padding-right: 10px;
-    padding-left: 10px;
-}
-
-
-.gd {
-    -ms-flex-preferred-size: 0;
-    flex-basis: 0;
-    -ms-flex-positive: 1;
-    flex-grow: 1;
-    max-width: 100%;
-}
-
-.gd-auto {
-    -ms-flex: 0 0 auto;
-    flex: 0 0 auto;
-    width: auto;
-    max-width: none;
-}
-
-.gd-1 {
-    -ms-flex: 0 0 8.333333%;
-    flex: 0 0 8.333333%;
-    max-width: 8.333333%;
-}
-
-.gd-2 {
-    -ms-flex: 0 0 16.666667%;
-    flex: 0 0 16.666667%;
-    max-width: 16.666667%;
-}
-
-.gd-3 {
-    -ms-flex: 0 0 25%;
-    flex: 0 0 25%;
-    max-width: 25%;
-}
-
-.gd-4 {
-    -ms-flex: 0 0 33.333333%;
-    flex: 0 0 33.333333%;
-    max-width: 33.333333%;
-}
-
-.gd-5 {
-    -ms-flex: 0 0 41.666667%;
-    flex: 0 0 41.666667%;
-    max-width: 41.666667%;
-}
-
-.gd-6 {
-    -ms-flex: 0 0 50%;
-    flex: 0 0 50%;
-    max-width: 50%;
-}
-
-.gd-7 {
-    -ms-flex: 0 0 58.333333%;
-    flex: 0 0 58.333333%;
-    max-width: 58.333333%;
-}
-
-.gd-8 {
-    -ms-flex: 0 0 66.666667%;
-    flex: 0 0 66.666667%;
-    max-width: 66.666667%;
-}
-
-.gd-9 {
-    -ms-flex: 0 0 75%;
-    flex: 0 0 75%;
-    max-width: 75%;
-}
-
-.gd-10 {
-    -ms-flex: 0 0 83.333333%;
-    flex: 0 0 83.333333%;
-    max-width: 83.333333%;
-}
-
-.gd-11 {
-    -ms-flex: 0 0 91.666667%;
-    flex: 0 0 91.666667%;
-    max-width: 91.666667%;
-}
-
-.gd-12 {
-    -ms-flex: 0 0 100%;
-    flex: 0 0 100%;
-    max-width: 100%;
-}
-
-
-
-.justify-start {
-    justify-content: flex-start;
-}
-
-.justify-center {
-    justify-content: center;
-}
-
-.justify-end {
-    justify-content: flex-end;
-}
-
-.justify-between {
-    justify-content: space-between;
-}
-
-.justify-around {
-    justify-content: space-around;
-}
-
-.align-start {
-    align-items: flex-start;
-}
-
-
-.align-center {
-    align-items: center;
-}
-
-.align-end {
-    align-items: flex-end;
-}
 
client/resources/css/header.css (deleted)
--- client/resources/css/header.css
@@ -1,157 +0,0 @@
-@charset "utf-8";
-.logo {
-    width: 150px;
-}
-.user-wrap {
-    display: flex;
-    flex-direction: column;
-    min-height: 100vh;
-    font-size: 1.7rem;
-}
-
-.user-wrap header {
-    width: 100%;
-    background-color: #fff;
-    border-bottom: 1px solid #C6C6C6;
-    position: relative;
-    z-index: 2;
-    margin-bottom: 3rem;
-}
-
-.user-wrap header.company-header {
-    width: 100%;
-    background-color: rgba(0, 0, 0, 0.5);
-    position: absolute;
-    z-index: 2;
-    border-bottom: 1px solid #aaa;
-}
-.header-wrap{width: 1400px; margin: 0 auto;}
-.company-sub-menu {
-    background-color: rgba(0, 0, 0, 0.5)
-}
-
-.company-sub-menu li>a,
-.company-sub-menu li>p {
-    border: 1px solid #fff;
-    color: #fff;
-}
-
-.msub-menu {
-    display: none;
-}
-
-.msub-menu li>a,
-.msub-menu li>p {
-    display: block;
-    width: 100%;
-    border: 0;
-    padding: 1rem;
-    font-size: 1.6rem;
-    text-align: left;
-}
-
-.msub-menu.show,
-.sub-menu.show {
-    display: block;
-}
-
-.msub-menu.show {
-    border-bottom: 1px solid #eee;
-}
-.main-menu{
-    &:hover{
-        &::before{
-            content: '';
-            position: absolute;
-            display: block;
-            top: 88px;
-            left: 0;
-            width: 100%;
-            height: 150px;
-            background: #fff;
-            z-index: 1;
-        }
-    }
-    
-}
-.main-menu>li>a,
-.main-menu>li>p {
-    display: block;
-    font-size: 1.8rem;
-    font-weight: 700;
-}
-.main-menu > li {
-    position: relative; 
-    min-width: 160px;
-    &:hover {
-        &::after {
-            position: absolute;
-            bottom: calc(var(--krds-spacer-4) * -1);
-            left: 50%;
-            bottom: 0;
-            content: "";
-            transition: width 0.4s ease-in-out, height 0.4s ease-in-out; 
-            width: 0;
-            height: 0.4rem;
-            background-color: var(--green);
-            transform: translateX(-50%);
-        }
-    }
-
-    &:hover::after {
-        width: 100%; 
-    }
-}
-header.company-header .main-menu>li>a,
-header.company-header .main-menu>li>p {
-    color: var(--white);
-}
-
-
-
-.main-menu>li:hover>a,
-.main-menu>li:hover>p,
-.user-wrap header.company-header .main-menu>li:hover>a,
-.user-wrap header.company-header .main-menu>li:hover>p {
-    color: var(--green);
-}
-
-.pc-menu{
-
-}
-
-.sub-menu {
-    width: 100%;
-    height: 150px;
-    position: absolute;
-    background-color: #fff;
-    min-width: 160px;
-    z-index: 1;
-    display: none;
-    padding: 0 !important;
-    left: 0;
-    bottom: -1px;
-    transform: translateY(100%);
-}
-
-.sub-menu-inner{
-    display: block;
-    width: 100%;
-}
-
-.sub-menu li>a,
-.sub-menu li>p {
-    display: block;
-    width: 100%;
-    border-radius: 0 10px 0 10px;
-    padding: 1.3rem 0;
-    font-size: 1.6rem;
-    text-align: center;
-    font-weight: 700;
-    &:hover{
-        color: var(--green);
-    }
-}
-
-
-
 
client/resources/css/header_column.css (deleted)
--- client/resources/css/header_column.css
@@ -1,221 +0,0 @@
-@charset "utf-8";
-.logo {
-    width: 150px;
-    height: 80px;
-}
-.user-wrap {
-    display: flex;
-    justify-content: space-between;
-    min-height: 100vh;
-    font-size: 1.7rem;
-}
-
-.user-wrap header {
-    width: 30rem;
-    padding: 2rem 0 0 2rem;
-    background-color: #fff;
-    border-right: 1px solid #C6C6C6;
-    position: fixed;
-    top: 0;
-    bottom: 0;
-    z-index: 200;
-    .header{
-        display: block;
-    }
-}
-.main-menu{display: block;
-    &::before{
-        
-    }
-    &:hover{
-    }
-    > li{padding: 2rem 0; height: 6rem;}
-}
-
-.main-menu>li>a,
-.main-menu>li>p {
-    display: block;
-    font-size: 1.8rem;
-    font-family: "yungju";
-    text-align: left;
-}
-
-header.company-header .main-menu>li>a,
-header.company-header .main-menu>li>p {
-    color: var(--white);
-}
-
-.main-menu>li.active>a,
-.main-menu>li.active>p {
-    border-bottom: 2px solid var(--green);
-    color: var(--green);
-}
-
-.main-menu>li:hover>a,
-.main-menu>li:hover>p,
-.user-wrap header.company-header .main-menu>li:hover>a,
-.user-wrap header.company-header .main-menu>li:hover>p {
-    color: var(--green);
-
-}
-
-.sub-menu {
-    position: absolute;
-    background-color: #fff;
-    min-width: 160px;
-    height: 100%;
-    z-index: 1;
-    display: none;
-    left: 30rem;
-    top: 0;
-    padding-top: 11rem;
-}
-
-.sub-menu-inner{
-    li{
-        /* max-width: 25%; */
-        padding-left: 10px;
-    }
-}
-
-.sub-menu li>a,
-.sub-menu li>p {
-    display: block;
-    width: 100%;
-    border-radius: 0 10px 0 10px;
-    padding: 1rem;
-    font-size: 1.6rem;
-    text-align: left;
-    font-weight: 600;
-    &:hover{
-        color: var(--green);
-    }
-}
-
-
-.company-sub-menu {
-    background-color: rgba(0, 0, 0, 0.5)
-}
-
-.company-sub-menu li>a,
-.company-sub-menu li>p {
-    border: 1px solid #fff;
-    color: #fff;
-}
-
-.msub-menu {
-    display: none;
-}
-
-.msub-menu li>a,
-.msub-menu li>p {
-    display: block;
-    width: 100%;
-    border: 0;
-    padding: 1rem;
-    font-size: 1.6rem;
-    text-align: left;
-}
-
-.msub-menu.show,
-.sub-menu.show {
-    display: block;
-}
-
-.msub-menu.show {
-    border-bottom: 1px solid #eee;
-}
-.sub-sub-menu{
-    padding: 0;
-}
-.sub-sub-menu>li{
-    padding: 0;
-    p{
-        padding: 1rem 0 1rem 2rem;
-        font-weight: 500;
-    }
-}
-.sub-sub-menu>li>a {
-    display: block;
-    width: 100%;
-    font-size: 1.6rem;
-    text-align: center;
-}
-
-.sub-menu>li>a:hover,
-.sub-sub-menu>li>a:hover {
-    background-color: var(--sky-green);
-}
-
-/* 
-.user-wrap nav ul.main-menu li{
-    position: relative;
-}
-.user-wrap ul.main-menu > li{
-    padding: 2rem 3.5rem;
-}
-.user-wrap ul.main-menu > li > a,
-.user-wrap ul.main-menu > li > p{
-    display: block;
-    font-size: 1.8rem;
-    font-family: "yungju";
-
-}
-
-.user-wrap ul.main-menu > li > p.active {
-   border-bottom: 3px solid var(--green);
-   color: var(--green);
-}
-
-
-.user-wrap nav ul.sub-menu {
-    overflow: hidden;
-    position: absolute;
-    width: 100%;
-    background-color: #fff;
-    z-index: 4;
-    bottom: -2px;
-    left: 0;
-    transform: translateY(100%);
-    transition: max-height 1.8s ease-in-out, opacity 0.5s ease-in-out;
-}
-
-.user-wrap nav ul.sub-menu li a {
-    display: block;
-    text-align: center;
-    font-size: 1.6rem;
-    padding: 5px 0;
-}
-
-.navbg {
-    overflow: hidden;
-    background-color: #fff;
-    border-bottom: 1px solid var(--sky-green);
-    box-shadow: 0 5px 10px var(--light);
-    position: absolute;
-    bottom: 0;
-    left: 0;
-    transform: translateY(100%);
-    width: 100%;
-    z-index: 3;
-    transition: height 0.6s ease-in-out;
-} */
-
-/* 메인 */
-
-.user-wrap .main-warp {
-    flex-grow: 1;
-    margin-left: 16rem;
-    margin-top: 3rem;
-}
-.user-info-wrap{margin-right: 2rem;}
-
-.page {
-    width: 100%;
-    height: 100vh;
-}
-
-.content-page {
-    width: 100%;
-    height: calc(100% - 66px);
-}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/css/layout.css (deleted)
--- client/resources/css/layout.css
@@ -1,105 +0,0 @@
-@charset "utf-8";
-
-.main-warp{
-    margin-bottom: 3rem;
-}
-.user-wrap header {
-    width: 100%;
-    background-color: var(--sky-green);
-    position: relative;
-    z-index: 2;
-}
-
-.user-wrap header.company-header {
-    width: 100%;
-    background-color: rgba(0, 0, 0, 0.5);
-    position: absolute;
-    z-index: 2;
-    border-bottom: 1px solid #aaa;
-}
-
-.mobile-menu {
-    display: none;
-    position: relative;
-    /* top: 50px;
-    left: 50px; */
-    z-index: 1;
-    -webkit-user-select: none;
-    user-select: none;
-}
-
-.mobile-menu input[type="checkbox"] {
-    display: block;
-    width: 32px;
-    height: 32px;
-    position: absolute;
-    top: -7px;
-    left: -5px;
-    cursor: pointer;
-    opacity: 0;
-    z-index: 2;
-    -webkit-touch-callout: none;
-}
-
-.mobile-menu span {
-    display: block;
-    width: 32px;
-    height: 4px;
-    margin-bottom: 5px;
-    position: relative;
-    background: #fff;
-    border-radius: 3px;
-    z-index: 1;
-    transform-origin: 4px 0px;
-    transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0),
-        background 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0),
-        opacity 0.55s ease;
-}
-
-.mobile-menue span:first-child {
-    transform-origin: 0% 0%;
-}
-
-.mobile-menu span:nth-last-child(2) {
-    transform-origin: 0% 100%;
-}
-
-.mobile-menu input:checked~span {
-    opacity: 1;
-    transform: rotate(45deg) translate(-2px, -1px);
-    background: #000;
-}
-
-.mobile-menu input:checked~span:nth-last-child(3) {
-    opacity: 0;
-    transform: rotate(0deg) scale(0.2, 0.2);
-}
-
-.mobile-menu input:checked~span:nth-last-child(2) {
-    transform: rotate(-45deg) translate(0, -1px);
-}
-
-.mobile-menu .main-menu {
-    position: absolute;
-    overflow: hidden;
-    width: 0;
-    height: 100vh;
-    background-color: #fff;
-    right: -1rem;
-    top: -2rem;
-    padding-top: 125px;
-    -webkit-font-smoothing: antialiased;
-    transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0);
-}
-
-.user-wrap header.company-header .mobile-menu .main-menu {
-    background-color: #000;
-}
-
-.user-wrap header.company-header .mobile-menu input:checked~span {
-    background-color: var(--white);
-}
-
-.mobile-menu input:checked~ul.main-menu {
-    width: 300px;
-}
 
client/resources/css/reset.css (deleted)
--- client/resources/css/reset.css
@@ -1,266 +0,0 @@
-@charset "utf-8";
-
-:root {
-    --table-blue: #0055ec;
-    --blue: #5089ef;
-    --skyblue: #eaf4ff;
-    --indigo: #6610f2;
-    --purple: #6f42c1;
-    --pink: #e00024;
-    --sky-pink: #fff8f9;
-    --red: #dc3545;
-    --orange: #fd7e14;
-    --sky-orange: #fff0e4;
-    --yellow: #ffc107;
-    --green: #009944;
-    --teal: #d7e9df;
-    --cyan: #17a2b8;
-    --white: #fff;
-    --background-white: #f8f8f8;
-    --gray: #6c757d;
-    --gray-dark: #454545;
-    --primary: #007bff;
-    --secondary: #eceef2;
-    --success: #28a745;
-    --info: #17a2b8;
-    --deep-green: #388d6e;
-    --sky-green: #eef5e9;
-    --warning: #ffc107;
-    --danger: #dc3545;
-    --dark: #bdbdbd;
-    --light: #eeeeee;
-}
-
-/* 폰트 정의 */
-
-@font-face {
-    font-family: "yungju";
-    src: url(../font/YEONGJUPunggiGinseng.ttf);
-}
-
-@font-face {
-    font-family: "Pretendard-B";
-    src: url(../font/Pretendard-Bold.ttf);
-}
-
-@font-face {
-    font-family: "Pretendard-R";
-    src: url(../font/Pretendard-Regular.ttf);
-}
-
-@font-face {
-    font-family: "Pretendard-M";
-    src: url(../font/Pretendard-Medium.ttf);
-}
-
-@font-face {
-    font-family: "Pretendard-L";
-    src: url(../font/Pretendard-Light.ttf);
-}
-
-@font-face {
-    font-family: "GmarketSans-B";
-    src: url(../font/GmarketSansTTFBold.ttf);
-}
-
-@font-face {
-    font-family: "GmarketSans-M";
-    src: url(../font/GmarketSansTTFMedium.ttf);
-}
-
-@font-face {
-    font-family: "GmarketSans-L";
-    src: url(../font/GmarketSansTTFLight.ttf);
-}
-
-/* box-sizing 규칙을 명시합니다. */
-*,
-*::before,
-*::after {
-    box-sizing: border-box;
-    margin: 0;
-    padding: 0;
-}
-
-/* 폰트 크기의 팽창을 방지합니다. */
-html {
-    -moz-text-size-adjust: none;
-    -webkit-text-size-adjust: none;
-    text-size-adjust: none;
-    -ms-user-select: none;
-    -moz-user-select: -moz-none;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    user-select: none;
-    width: 100%;
-    height: 100%;
-    font-size: 10px;
-    font-family: 'Pretendard-R';
-}
-
-/* 기본 여백을 제거하여 작성된 CSS를 더 잘 제어할 수 있습니다. */
-body,
-h1,
-h2,
-h3,
-h4,
-p,
-figure,
-blockquote,
-dl,
-dd {
-    margin-block-end: 0;
-}
-
-/* list를 role값으로 갖는 ul, ol 요소의 기본 목록 스타일을 제거합니다. */
-ul,
-ol,
-li {
-    list-style: none;
-}
-
-/* 핵심 body의 기본값을 설정합니다. */
-body,#root {
-    height: 100%;
-    line-height: 1.5;
-    background-color: var(--white);
-}
-
-/* 제목 요소와 상호작용하는 요소에 대해 line-height를 더 짧게 설정합니다. */
-h1,
-h2,
-h3,
-h4,
-button,
-input,
-label {
-    line-height: 1.1;
-}
-
-/* 제목에 대한 text-wrap을 balance로 설정합니다. */
-h1,
-h2,
-h3,
-h4 {
-    text-wrap: balance;
-}
-
-/* 클래스가 없는 기본 a 태그 요소는 기본 스타일을 가져옵니다. */
-a {
-    text-decoration: none;
-    color: #333;
-}
-
-/* 이미지 관련 작업을 더 쉽게 합니다. */
-img,
-picture {
-    max-width: 100%;
-    display: block;
-}
-
-/* input 및 button 항목들이 글꼴을 상속하도록 합니다. */
-input,
-button,
-textarea,
-select {
-    font: inherit;
-    font-size: 1.6rem;
-}
-
-.admin-wrap{
-    input, 
-    button,
-    textarea,
-    select {
-        font: inherit;
-        font-size: 1.2rem;
-    }
-    svg {
-        vertical-align: middle;
-        width: 15px;
-        height: 15px;
-    }
-}
-
-input[type="text"],
-input[type="date"],
-input[type="number"],
-input[type="password"],
-button,
-select{
-    /* height: 4rem; */
-}
-
-input:focus,
-select:focus,
-textarea:focus {
-    outline: none;
-}
-
-input::placeholder,
-textarea::placeholder {
-    color: var(--light);
-}
-
-button {
-    background: inherit;
-    border: none;
-    box-shadow: none;
-    border-radius: 0;
-    padding: 0;
-    /* overflow:visible;  */
-    cursor: pointer;
-}
-
-/* 행 속성이 없는 textarea가 너무 작지 않도록 합니다. */
-textarea:not([rows]) {
-    width: 100%;
-    min-height: 29rem;
-}
-
-/* 고정된 모든 항목에는 여분의 스크롤 여백이 있어야 합니다. */
-:target {
-    scroll-margin-block: 5ex;
-}
-
-table {
-    width: 100%;
-    border-collapse: collapse;
-    table-layout: fixed;
-    word-break:break-all;
-}
-
-table th,
-table td {
-    font-size: 1.6rem;    
-    padding: 10px 5px;
-}
-
-select,
-input,
-textarea {
-    padding: 0.5rem 1rem;
-    border: 1px solid #ddd;
-    border-radius: 5px;
-}
-
-svg {
-    vertical-align: middle;
-}
-
-
-/* 스크롤바 디자인 */
-::-webkit-scrollbar {
-    width: 8px;
-    height: 8px;
-}
-
-::-webkit-scrollbar-thumb {
-    background-color: #ededed;
-    border-radius: 10px;
-}
-
-::-webkit-scrollbar-track {
-    background-color: #fff;
-    border-radius: 10px;
-}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/css/responsive.css (deleted)
--- client/resources/css/responsive.css
@@ -1,352 +0,0 @@
-@media all and (min-width:1025px) and (max-width:1280px) {}
-
-/* 테블릿 세로 (해상도 768px ~ 1023px)*/
-@media all and (min-width:768px) and (max-width:1024px) {
-    html {
-        font-size: 8px;
-    }
-
-    .user-wrap header {
-        padding: 1rem;
-    }
-
-    .main-warp>div {
-        padding: 1rem;
-    }
-
-    .main-warp .co-main-page {
-        padding: 0;
-    }
-
-    .w1400 {
-        width: 100%;
-    }
-
-    .company-header .logo,
-    .user-wrap header .logo {
-        width: 135px;
-    }
-
-    .big-logo img {
-        width: 80%;
-        ;
-    }
-
-    .pc-menu {
-        display: none;
-    }
-
-    .mobile-menu {
-        display: block;
-    }
-
-    .user-division {
-        max-height: 50%;
-    }
-
-    .user-division>li[class*="gd-"] {
-        -ms-flex: 100%;
-        flex: 100%;
-        max-width: 100%;
-        padding: 0;
-        margin-bottom: 3rem;
-    }
-
-    .division-item::after {
-        display: none;
-    }
-
-    .gall-template .gall-content .gall-item[class*="gd-3"] {
-        -ms-flex: 0 0 33.333333%;
-        flex: 0 0 33.333333%;
-        max-width: 33.333333%;
-    }
-
-}
-
-
-/* 모바일, 테블릿 세로 */
-@media all and (max-width:767px) {
-    html {
-        font-size: 8px;
-    }
-
-    .user-wrap header {
-        padding: 1rem;
-    }
-
-    .main-warp>div {
-        padding: 1rem;
-    }
-
-    .main-warp .co-main-page,
-    .main-warp .popup-wrap  {
-        padding: 0;
-    }
-
-    .w1400 {
-        width: 100%;
-    }
-
-    .company-header .logo,
-    .user-wrap header .logo {
-        width: 135px;
-    }
-
-    .big-logo img {
-        width: 80%;
-        ;
-    }
-
-    .pc-menu {
-        display: none;
-    }
-
-    .mobile-menu {
-        display: block;
-    }
-
-    .intro-page {
-        padding: 0 1rem;
-    }
-
-    .user-wrap .main-warp .flex [class*="gd-"] {
-        margin-left: 0;
-        margin-right: 0;
-    }
-
-    .user-wrap .main-warp .flex [class*="gd-"],
-    .user-division>[class*="gd-"],
-    .community-zone>[class*="gd-"],
-    .tab-nav>ul>[class*="gd-"] {
-        -ms-flex: 100%;
-        flex: 100%;
-        max-width: 100%;
-        padding: 0;
-        margin-bottom: 1rem;
-    }
-
-    .user-division>li:nth-child(1)>.division-item::after,
-    .user-division>li:nth-child(2)>.division-item::after,
-    .user-division>li>.division-item>img {
-        display: none;
-    }
-
-    .quick-menu {
-        top: auto;
-        bottom: 10%;
-        display: none;
-    }
-
-    .modal-container,
-    .medium-modal {
-        min-width: 100%;
-        width: 100%;
-    }
-
-    .login-wrap {
-        width: 100%;
-    }
-
-    .statistics-table-wrap{
-        overflow-x: auto;
-    }
-    .statistics-table-wrap .statistics-table{
-        width: 120%;
-    }
-    /* 페이지 */
-    .user-wrap .main-warp table.list-table colgroup,
-    .user-wrap .main-warp table.list-table thead tr th,
-    .user-wrap .main-warp table.form-table2 colgroup,
-    .detail-table colgroup {
-        display: none;
-    }
-
-    .user-wrap .main-warp table.form-table2.statistics-table colgroup{
-        display: table-cell;
-    }
-
-    .editor5 table {
-        display: block;
-    }
-
-    .detail-table>tr>th,
-    .detail-table>tr>td,
-    .user-wrap .main-warp table.form-table2 tr th,
-    .user-wrap .main-warp table.form-table2 tr td {
-        display: block;
-    }
-    .user-wrap .main-warp table.form-table2.statistics-table tr th,
-    .user-wrap .main-warp table.form-table2.statistics-table tr td{
-        display: table-cell;
-    }
-
-    .user-wrap .main-warp table.list-table tbody tr td {
-        display: block;
-        text-align: left;
-        position: relative;
-        padding-left: 35%;
-    }
-
-
-    .company-invest table.list-table tbody tr td:before,
-    .company-review table.list-table tbody tr td:before,
-    .company-review table.list-table tbody tr td:before,
-    table.list-table tbody tr td:before,
-    table.consulting-table tbody tr td:before,
-    table.info-table tbody tr td:before,
-    table.review-table tbody tr td:before,
-    table.online-consulting-table tbody tr td:before {
-        display: block;
-        position: absolute;
-        left: 0;
-        top: 0;
-        width: 30%;
-        padding: 10px 0;
-        /* background: var(--green); */
-        text-align: right;
-        color: var(--green);
-    }
-
-    table.review-table tbody tr td.data-none {
-        padding-left: 0;
-        text-align: center;
-    }
-
-    /* 게시판 템플릿 */
-    table.list-table tbody tr td:nth-child(1):before {
-        content: 'No';
-    }
-
-    table.list-table tbody tr td:nth-child(2):before {
-        content: '제목';
-    }
-
-    table.list-table tbody tr td:nth-child(3):before {
-        content: '작성자';
-    }
-
-    table.list-table tbody tr td:nth-child(4):before {
-        content: '작성일';
-    }
-
-    table.list-table tbody tr td:nth-child(5):before {
-        content: '조회수';
-    }
-
-    /* 온라인 상담 */
-    table.online-consulting-table tbody tr td:nth-child(1):before {
-        content: 'No';
-    }
-
-    table.online-consulting-table tbody tr td:nth-child(2):before {
-        content: '기업명';
-    }
-
-    table.online-consulting-table tbody tr td:nth-child(3):before {
-        content: '등록일';
-    }
-
-    table.online-consulting-table tbody tr td:nth-child(4):before {
-        content: '담당자';
-    }
-
-    table.online-consulting-table tbody tr td:nth-child(5):before {
-        content: '진행상태';
-    }
-
-    table.online-consulting-table tbody tr td:nth-child(6):before {
-        content: '조치일자';
-    }
-
-    /* 기업관리 - 상담 */
-
-    table.consulting-table tbody tr td:nth-child(1):before {
-        content: 'No';
-    }
-
-    table.consulting-table tbody tr td:nth-child(2):before {
-        content: '제목';
-    }
-
-    table.consulting-table tbody tr td:nth-child(3):before {
-        content: '등록일';
-    }
-
-
-    /* 기업관리 - 투자상담 */
-
-    .company-invest table.list-table tbody tr td:nth-child(1):before {
-        content: 'No';
-    }
-
-    .company-invest table.list-table tbody tr td:nth-child(2):before {
-        content: '형태';
-    }
-
-    .company-invest table.list-table tbody tr td:nth-child(3):before {
-        content: '기업명';
-    }
-
-    .company-invest table.list-table tbody tr td:nth-child(4):before {
-        content: '투자상담명';
-    }
-
-    .company-invest table.list-table tbody tr td:nth-child(5):before {
-        content: '진행단계';
-    }
-
-    .company-invest table.list-table tbody tr td:nth-child(6):before {
-        content: '등록일';
-    }
-
-
-    /* 검토사항 */
-
-    table.review-table tbody tr td:nth-child(1):before {
-        content: 'No';
-    }
-
-    table.review-table tbody tr td:nth-child(2):before {
-        content: '형태';
-    }
-
-    table.review-table tbody tr td:nth-child(3):before {
-        content: '기업명';
-    }
-
-    table.review-table tbody tr td:nth-child(4):before {
-        content: '투자상담명';
-    }
-
-    table.review-table tbody tr td:nth-child(5):before {
-        content: '진행단계';
-    }
-
-    table.review-table tbody tr td:nth-child(6):before {
-        content: '등록일';
-    }
-
-    /* 기업관리 */
-
-    table.info-table tbody tr td:nth-child(1):before {
-        content: 'No';
-    }
-
-    table.info-table tbody tr td:nth-child(2):before {
-        content: '기업명';
-    }
-
-    table.info-table tbody tr td:nth-child(3):before {
-        content: '대표자';
-    }
-
-    table.info-table tbody tr td:nth-child(4):before {
-        content: '기업상태';
-    }
-
-    table.info-table tbody tr td:nth-child(5):before {
-        content: '입주의향';
-    }
-
-}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/css/style.css (deleted)
--- client/resources/css/style.css
@@ -1,252 +0,0 @@
-@charset "utf-8";
-
-/* login */
-.logo {
-    width: 150px;
-}
-
-.login-wrap {
-    width: 25%;
-    border: 1px solid var(--light);
-    border-radius: 1.5rem;
-}
-
-.login-title {
-    font-size: 48px;
-    font-weight: 900;
-    color: var(--gray-dark);
-}
-
-.login-title.user-login {
-    color: var(--green);
-}
-
-input.login-input {
-    border: none;
-    border-bottom: 1px solid var(--gray);
-    border-radius: 0;
-}
-
-.login-label {
-    color: var(--gray-dark);
-    font-size: 1.6rem;
-}
-
-.find-zone p {
-    font-size: 1.6rem;
-    color: var(--gray);
-    position: relative;
-}
-
-.find-zone p:nth-of-type(1)::after {
-    content: "";
-    position: absolute;
-    width: 1px;
-    height: 1.5rem;
-    border-right: 1px solid var(--gray);
-    right: 0;
-    top: 50%;
-    transform: translate(100%, -50%);
-}
-
-.find-tab{
-    font-size: 2rem;
-    border: 1px solid var(--dark);
-    border-radius: 1rem;
-}
-
-.tab-active{
-    background-color: var(--teal);
-    color: var(--green);
-}
-
-
-/* intro */
-.intro-page {
-    width: 100%;
-    height: calc(100vh);
-    background-image: url(../img/intro_background.png);
-    background-position: right bottom;
-    background-repeat: no-repeat;
-    background-size: auto;
-    padding: 215px 0;
-}
-
-.big-logo img {
-    margin: 0 auto;
-}
-
-.user-division {
-    height: calc(100% - 200px);
-    max-height: 300px;
-}
-
-.user-division>li>.division-item {
-    border-radius: 25px;
-    box-shadow: 0 0 10px var(--light);
-    position: relative;
-}
-
-.user-division>li>.division-item::after {
-    content: '';
-    position: absolute;
-    background-size: auto;
-    background-repeat: no-repeat;
-    bottom: 0;
-    transform: translateY(20%);
-    width: 192px;
-    height: 161px;
-}
-
-.user-division>li:nth-child(1)>.division-item::after {
-    background-image: url(../img/mascot_left.png);
-    right: 0;
-}
-
-.user-division>li:nth-child(2)>.division-item::after {
-    background-image: url(../img/mascot_left.png);
-    left: 0;
-    transform: translateY(20%) scaleX(-1);
-}
-
-.user-division>li>.division-item>img {
-    position: absolute;
-    bottom: 0;
-
-}
-
-.user-division>li:nth-child(1)>.division-item>img {
-    left: 30px;
-}
-
-.user-division>li:nth-child(2)>.division-item>img {
-    right: 30px;
-}
-
-.user-division>li>.division-item>p {
-    font-family: "yungju";
-    font-size: 4.7rem;
-}
-
-/* 공무원 공통 */
-details{
-    border-top: 3px solid var(--green);
-    border-bottom: 2px solid var(--green);
-}
-
-summary{
-    padding: 1rem;
-    background-color: var(--teal);
-    font-size: 1.8rem;
-    color: var(--green);
-
-}
-
-summary::-webkit-details-marker,
-summary::marker {
-    display: none;
-    content: "";
-}
-
-/* 공무원 메인 */
-.tab-nav>ul>li:first-child{
-    padding-left: 0;
-}
-.tab-nav>ul>li:last-child{
-    padding-right: 0;
-}
-.tab-nav>ul>li>p {
-    font-size: 1.8rem;
-    background-color: var(--light);
-    color: var(--white);
-    border-radius: 1rem;
-    text-align: center;
-}
-
-.tab-nav>ul>li.activeTab>p {
-    background-color: var(--green);
-}
-
-.select-label {
-    font-size: 1.6rem;
-}
-
-.item-list>li,
-.summary-style {
-    font-size: 1.6rem;
-    position: relative;
-}
-
-.item-list>li::before,
-.summary-style::before{
-    content: "";
-    position: absolute;
-    top: 50%;
-    left: 0;
-    width: 5px;
-    height: 5px;
-    border-radius: 5px;
-    background-color: var(--green);
-}
-
-.summary-style::before{
-    transform: translateY(-50%);
-}
-
-.user-name {
-    font-size: 1.6rem;
-    padding: 0 1rem;
-    color: var(--dark);
-}
-/* 검색페이지 */
-.content-warp p{
-    width: 100%;
-    display: -webkit-box;
-    word-wrap: break-word;
-    -webkit-line-clamp: 3;
-    -webkit-box-orient: vertical;
-    text-overflow: ellipsis;
-    overflow: hidden;
-}
-
-/* 기업전용 메인  */
-.background-img{
-    width: 100%;
-    height: 100%;
-    object-position: top center;
-}
-.call{
-    font-size: 2rem;
-    font-weight: bold;
-}
-
-
-/* 에디터 이미지 */
-.detail-table img{
-    display: inline;
-}
-
-/* user페이지 퀵메뉴 */
-.quick-menu{
-    position: fixed;
-    top: 20%;
-    right: 0;
-    padding: 2rem;
-    border-radius: 1rem 0 0 1rem;
-    background-color: var(--sky-orange);
-}
-
-/* 검토사항 */
-.review-table tbody tr td:nth-child(3),
-.review-table tbody tr td:nth-child(4){
-    text-align: left;
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    word-break: break-all;
-}
-
-
-
-
-
 
client/resources/font/GmarketSansTTFBold.ttf (Binary) (deleted)
--- client/resources/font/GmarketSansTTFBold.ttf
Binary file is not shown
 
client/resources/font/GmarketSansTTFLight.ttf (Binary) (deleted)
--- client/resources/font/GmarketSansTTFLight.ttf
Binary file is not shown
 
client/resources/font/GmarketSansTTFMedium.ttf (Binary) (deleted)
--- client/resources/font/GmarketSansTTFMedium.ttf
Binary file is not shown
 
client/resources/font/Pretendard-Black.ttf (Binary) (deleted)
--- client/resources/font/Pretendard-Black.ttf
Binary file is not shown
 
client/resources/font/Pretendard-Bold.ttf (Binary) (deleted)
--- client/resources/font/Pretendard-Bold.ttf
Binary file is not shown
 
client/resources/font/Pretendard-ExtraBold.ttf (Binary) (deleted)
--- client/resources/font/Pretendard-ExtraBold.ttf
Binary file is not shown
 
client/resources/font/Pretendard-ExtraLight.ttf (Binary) (deleted)
--- client/resources/font/Pretendard-ExtraLight.ttf
Binary file is not shown
 
client/resources/font/Pretendard-Light.ttf (Binary) (deleted)
--- client/resources/font/Pretendard-Light.ttf
Binary file is not shown
 
client/resources/font/Pretendard-Medium.ttf (Binary) (deleted)
--- client/resources/font/Pretendard-Medium.ttf
Binary file is not shown
 
client/resources/font/Pretendard-Regular.ttf (Binary) (deleted)
--- client/resources/font/Pretendard-Regular.ttf
Binary file is not shown
 
client/resources/font/Pretendard-SemiBold.ttf (Binary) (deleted)
--- client/resources/font/Pretendard-SemiBold.ttf
Binary file is not shown
 
client/resources/font/Pretendard-Thin.ttf (Binary) (deleted)
--- client/resources/font/Pretendard-Thin.ttf
Binary file is not shown
 
client/resources/font/YEONGJUPunggiGinseng.ttf (Binary) (deleted)
--- client/resources/font/YEONGJUPunggiGinseng.ttf
Binary file is not shown
 
client/resources/fonts/PretendardGOV-Bold.subset.woff (Binary) (added)
+++ client/resources/fonts/PretendardGOV-Bold.subset.woff
Binary file is not shown
 
client/resources/fonts/PretendardGOV-Bold.subset.woff2 (Binary) (added)
+++ client/resources/fonts/PretendardGOV-Bold.subset.woff2
Binary file is not shown
 
client/resources/fonts/PretendardGOV-Medium.subset.woff (Binary) (added)
+++ client/resources/fonts/PretendardGOV-Medium.subset.woff
Binary file is not shown
 
client/resources/fonts/PretendardGOV-Medium.subset.woff2 (Binary) (added)
+++ client/resources/fonts/PretendardGOV-Medium.subset.woff2
Binary file is not shown
 
client/resources/fonts/PretendardGOV-Regular.subset.woff (Binary) (added)
+++ client/resources/fonts/PretendardGOV-Regular.subset.woff
Binary file is not shown
 
client/resources/fonts/PretendardGOV-Regular.subset.woff2 (Binary) (added)
+++ client/resources/fonts/PretendardGOV-Regular.subset.woff2
Binary file is not shown
 
client/resources/img/component/common/ico-prev_24.svg (added)
+++ client/resources/img/component/common/ico-prev_24.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M7.92188 16.5996L3.12187 11.9996L7.92187 7.39961" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+<line y1="-0.8" x2="18" y2="-0.8" transform="matrix(1 -8.74243e-08 -8.74243e-08 -1 4 11.1992)" stroke="#2D2D2D" stroke-width="1.6"/>
+</svg>
 
client/resources/img/component/common/ico_arr1_20_right.svg (added)
+++ client/resources/img/component/common/ico_arr1_20_right.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M13.1523 13.6L16.9523 9.99998L13.1523 6.39998" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<line x1="17" y1="9.99687" x2="2" y2="9.99687" stroke="#2D2D2D" stroke-width="1.4"/>
+</svg>
 
client/resources/img/component/common/ico_arr_16_down.svg (added)
+++ client/resources/img/component/common/ico_arr_16_down.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.25 6.125L8 10.25L11.75 6.125" stroke="#2D2D2D" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_arr_16_right_gray70.svg (added)
+++ client/resources/img/component/common/ico_arr_16_right_gray70.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M6 11.5L10.125 7.75L6 4" stroke="#555555" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_arr_20_down_blue.svg (added)
+++ client/resources/img/component/common/ico_arr_20_down_blue.svg
@@ -0,0 +1,3 @@
+<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.25 6.875L10.5 13.75L16.75 6.875" stroke="#1D56BC" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_arr_20_down_white.svg (added)
+++ client/resources/img/component/common/ico_arr_20_down_white.svg
@@ -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="M5 7.5L10 13L15 7.5" stroke="white" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_arr_20_right.svg (added)
+++ client/resources/img/component/common/ico_arr_20_right.svg
@@ -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="M7.5 15L13 10L7.5 5" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_arr_20_right_disabled.svg (added)
+++ client/resources/img/component/common/ico_arr_20_right_disabled.svg
@@ -0,0 +1,5 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="live area">
+<path id="Vector 1" d="M5.5 13L11 8L5.5 3" stroke="#8E8E8E" stroke-width="1.4" stroke-linecap="round"/>
+</g>
+</svg>
 
client/resources/img/component/common/ico_arr_accordion.svg (added)
+++ client/resources/img/component/common/ico_arr_accordion.svg
@@ -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="M3.75 6.875L10 13.75L16.25 6.875" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_arr_func_20.svg (added)
+++ client/resources/img/component/common/ico_arr_func_20.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="0.5" y="19.5" width="19" height="19" rx="9.5" transform="rotate(-90 0.5 19.5)" stroke="black"/>
+<path d="M8.05078 14L12.4508 10L8.05078 6" stroke="#2D2D2D" stroke-width="1.12" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_bread_arr.svg (added)
+++ client/resources/img/component/common/ico_bread_arr.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M6 11.5L10.125 7.75L6 4" stroke="#C6C6C6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_bread_dot.svg (added)
+++ client/resources/img/component/common/ico_bread_dot.svg
@@ -0,0 +1,5 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="2.49902" y="7.10156" width="1.8" height="1.8" rx="0.9" fill="#2D2D2D"/>
+<rect x="7.09863" y="7.10156" width="1.8" height="1.8" rx="0.9" fill="#2D2D2D"/>
+<rect x="11.6992" y="7.10156" width="1.8" height="1.8" rx="0.9" fill="#2D2D2D"/>
+</svg>
 
client/resources/img/component/common/ico_bread_home.svg (added)
+++ client/resources/img/component/common/ico_bread_home.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6 11L12 6L18 11V17C18 17.5523 17.5523 18 17 18H13.5V15C13.5 14.4477 13.0523 14 12.5 14H11.5C10.9477 14 10.5 14.4477 10.5 15V18H7C6.44772 18 6 17.5523 6 17V11Z" fill="#8E8E8E"/>
+</svg>
 
client/resources/img/component/common/ico_cal_dropdown.svg (added)
+++ client/resources/img/component/common/ico_cal_dropdown.svg
@@ -0,0 +1,3 @@
+<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.75 6.125L8.5 10.25L12.25 6.125" stroke="#1D1D1D" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_cal_move.svg (added)
+++ client/resources/img/component/common/ico_cal_move.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.23133 8.8294C3.64288 8.43303 3.64288 7.56697 4.23133 7.1706L10.4413 2.9877C11.1056 2.54029 12 3.01624 12 3.81709L12 12.1829C12 12.9838 11.1056 13.4597 10.4413 13.0123L4.23133 8.8294Z" fill="#1D1D1D"/>
+</svg>
 
client/resources/img/component/common/ico_calendar.svg (added)
+++ client/resources/img/component/common/ico_calendar.svg
@@ -0,0 +1,12 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M2.8 8.8H21.2V20C21.2 20.6627 20.6627 21.2 20 21.2H4C3.33726 21.2 2.8 20.6627 2.8 20V8.8Z" stroke="#2D2D2D" stroke-width="1.6"/>
+<rect x="6.6001" y="14" width="2" height="2" rx="1" fill="#2D2D2D"/>
+<rect x="11" y="14" width="2" height="2" rx="1" fill="#2D2D2D"/>
+<rect x="15.3999" y="14" width="2" height="2" rx="1" fill="#2D2D2D"/>
+<rect x="7.4" y="2.4" width="0.8" height="1.7" rx="0.4" stroke="#2D2D2D" stroke-width="0.8"/>
+<rect x="15.8004" y="2.4" width="0.8" height="1.7" rx="0.4" stroke="#2D2D2D" stroke-width="0.8"/>
+<mask id="path-7-inside-1_2116_2179" fill="white">
+<path d="M2 5.59375C2 4.48918 2.89543 3.59375 4 3.59375H20C21.1046 3.59375 22 4.48918 22 5.59375V9.59375H2V5.59375Z"/>
+</mask>
+<path d="M0.4 5.59375C0.4 3.60552 2.01177 1.99375 4 1.99375H20C21.9882 1.99375 23.6 3.60552 23.6 5.59375L20.4 5.59375C20.4 5.37284 20.2209 5.19375 20 5.19375H4C3.77909 5.19375 3.6 5.37284 3.6 5.59375L0.4 5.59375ZM22 9.59375H2H22ZM0.4 9.59375V5.59375C0.4 3.60552 2.01177 1.99375 4 1.99375L4 5.19375C3.77909 5.19375 3.6 5.37284 3.6 5.59375V9.59375H0.4ZM20 1.99375C21.9882 1.99375 23.6 3.60552 23.6 5.59375V9.59375H20.4V5.59375C20.4 5.37284 20.2209 5.19375 20 5.19375V1.99375Z" fill="#2D2D2D" mask="url(#path-7-inside-1_2116_2179)"/>
+</svg>
 
client/resources/img/component/common/ico_call.svg (added)
+++ client/resources/img/component/common/ico_call.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M13.5475 10.3855C13.5325 10.37 12.3269 9.4423 12.3269 9.4423C12.0375 9.16673 11.6531 9.01333 11.2536 9.01398C10.854 9.01463 10.4701 9.1693 10.1816 9.4458L9.22999 10.2503C8.45018 9.92801 7.74176 9.45477 7.14547 8.85774C6.54918 8.26072 6.07679 7.5517 5.75546 6.77145L6.55685 5.81972C6.83276 5.5312 6.98696 5.1475 6.98742 4.74828C6.98789 4.34905 6.83459 3.96499 6.55936 3.67583C6.55936 3.67583 5.63275 2.47214 5.61672 2.45661C5.33112 2.16851 4.94355 2.0045 4.53792 2.00009C4.13229 1.99568 3.74124 2.15124 3.44946 2.43307L2.87396 2.93398C-0.993255 7.04595 8.98457 17.0291 13.0917 13.1024L13.5485 12.5765C13.8379 12.2854 14.0002 11.8915 14 11.481C13.9998 11.0706 13.8371 10.6764 13.5475 10.3855Z" stroke="#555555"/>
+</svg>
 
client/resources/img/component/common/ico_check_8.svg (added)
+++ client/resources/img/component/common/ico_check_8.svg
@@ -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="M3 6L5.72368 8.625L9.375 3" stroke="white" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_check_chip.svg (added)
+++ client/resources/img/component/common/ico_check_chip.svg
@@ -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="M4.66772 9.9999L9.50983 14.6666L16.0011 4.66656" stroke="#8E8E8E" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_check_chip_checked.svg (added)
+++ client/resources/img/component/common/ico_check_chip_checked.svg
@@ -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="M4.66772 9.9999L9.50983 14.6666L16.0011 4.66656" stroke="#246BEB" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_check_chip_disabled.svg (added)
+++ client/resources/img/component/common/ico_check_chip_disabled.svg
@@ -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="M4.66772 9.9999L9.50983 14.6666L16.0011 4.66656" stroke="#717171" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_check_primary_checked.svg (added)
+++ client/resources/img/component/common/ico_check_primary_checked.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4 8L7.63158 11.5L12.5 4" stroke="white" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_check_primary_disabled.svg (added)
+++ client/resources/img/component/common/ico_check_primary_disabled.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4 8L7.63158 11.5L12.5 4" stroke="#C6C6C6" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_check_secondary.svg (added)
+++ client/resources/img/component/common/ico_check_secondary.svg
@@ -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="M4.66772 9.9999L9.50983 14.6666L16.0011 4.66656" stroke="#8E8E8E" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_check_secondary_checked.svg (added)
+++ client/resources/img/component/common/ico_check_secondary_checked.svg
@@ -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="M4.66772 9.9999L9.50983 14.6666L16.0011 4.66656" stroke="#002B5E" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_check_secondary_disabled.svg (added)
+++ client/resources/img/component/common/ico_check_secondary_disabled.svg
@@ -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="M4.66772 9.9999L9.50983 14.6666L16.0011 4.66656" stroke="#C6C6C6" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_chip_del.svg (added)
+++ client/resources/img/component/common/ico_chip_del.svg
@@ -0,0 +1,4 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.11108 4.11093L11.8893 11.8891" stroke="#2D2D2D" stroke-width="1.2" stroke-linecap="round"/>
+<path d="M11.8894 4.11093L4.11123 11.8891" stroke="#2D2D2D" stroke-width="1.2" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_chip_del_disabled.svg (added)
+++ client/resources/img/component/common/ico_chip_del_disabled.svg
@@ -0,0 +1,4 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.11133 4.11093L11.8895 11.8891" stroke="#717171" stroke-width="1.2" stroke-linecap="round"/>
+<path d="M11.8896 4.11093L4.11147 11.8891" stroke="#717171" stroke-width="1.2" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_close_24.svg (added)
+++ client/resources/img/component/common/ico_close_24.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.57617 4.5752L19.4254 19.4244" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+<path d="M19.4258 4.5752L4.57654 19.4244" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_close_modal.svg (added)
+++ client/resources/img/component/common/ico_close_modal.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M3.98975 3.98956L16.0106 16.0104" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<path d="M16.0103 3.98956L3.98944 16.0104" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_comment_16.svg (added)
+++ client/resources/img/component/common/ico_comment_16.svg
@@ -0,0 +1,6 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M2.5 8C2.5 4.96243 4.96243 2.5 8 2.5C11.0376 2.5 13.5 4.96243 13.5 8V13.5H8C4.96243 13.5 2.5 11.0376 2.5 8Z" stroke="#2D2D2D"/>
+<rect x="4.25" y="7.6875" width="1.5" height="1.5" rx="0.75" fill="#2D2D2D"/>
+<rect x="7.25" y="7.6875" width="1.5" height="1.5" rx="0.75" fill="#2D2D2D"/>
+<rect x="10.25" y="7.6875" width="1.5" height="1.5" rx="0.75" fill="#2D2D2D"/>
+</svg>
 
client/resources/img/component/common/ico_del1_20.svg (added)
+++ client/resources/img/component/common/ico_del1_20.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M3.99023 3.99219L16.011 16.013" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<path d="M16.0098 3.99219L3.98895 16.013" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_del_20.svg (added)
+++ client/resources/img/component/common/ico_del_20.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M6.81836 6.81799L13.1823 13.182" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<path d="M13.1816 6.81812L6.81768 13.1821" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_email_20.svg (added)
+++ client/resources/img/component/common/ico_email_20.svg
@@ -0,0 +1,7 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<mask id="path-1-inside-1_3717_104988" fill="white">
+<rect x="2" y="3.5" width="16" height="13" rx="1"/>
+</mask>
+<rect x="2" y="3.5" width="16" height="13" rx="1" stroke="#2D2D2D" stroke-width="2.8" mask="url(#path-1-inside-1_3717_104988)"/>
+<path d="M2.7 4.5C2.7 4.33431 2.83431 4.2 3 4.2H17C17.1657 4.2 17.3 4.33431 17.3 4.5V5.52403C17.3 5.61437 17.2593 5.6999 17.1892 5.75686L10.1892 11.4444C10.079 11.5339 9.92104 11.5339 9.81082 11.4444L2.81082 5.75686C2.74071 5.6999 2.7 5.61437 2.7 5.52403V4.5Z" stroke="#2D2D2D" stroke-width="1.4"/>
+</svg>
 
client/resources/img/component/common/ico_faq.svg (added)
+++ client/resources/img/component/common/ico_faq.svg
@@ -0,0 +1,6 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M2.5 8C2.5 4.96243 4.96243 2.5 8 2.5C11.0376 2.5 13.5 4.96243 13.5 8V13.5H8C4.96243 13.5 2.5 11.0376 2.5 8Z" stroke="#555555"/>
+<rect x="4.25" y="7.6875" width="1.5" height="1.5" rx="0.75" fill="#555555"/>
+<rect x="7.25" y="7.6875" width="1.5" height="1.5" rx="0.75" fill="#555555"/>
+<rect x="10.25" y="7.6875" width="1.5" height="1.5" rx="0.75" fill="#555555"/>
+</svg>
 
client/resources/img/component/common/ico_file_20.svg (added)
+++ client/resources/img/component/common/ico_file_20.svg
@@ -0,0 +1,3 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.937 8.01157L10.7006 11.2479V2.15771H9.30065V11.2479L6.06429 8.01157L5.07434 9.00152L9.50567 13.4328L10.0006 13.9278L10.4956 13.4328L14.9269 9.00151L13.937 8.01157ZM1.80078 13.5V16.5C1.80078 16.8866 2.11418 17.2 2.50078 17.2H17.5008C17.8874 17.2 18.2008 16.8866 18.2008 16.5V13.5H16.8008V15.8H3.20078V13.5H1.80078Z" fill="#2D2D2D"/>
+</svg>
 
client/resources/img/component/common/ico_file_down.svg (added)
+++ client/resources/img/component/common/ico_file_down.svg
@@ -0,0 +1,3 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.937 8.01157L10.7006 11.2479V2.15771H9.30065V11.2479L6.06429 8.01157L5.07434 9.00152L9.50567 13.4328L10.0006 13.9278L10.4956 13.4328L14.9269 9.00151L13.937 8.01157ZM1.80078 13.5V16.5C1.80078 16.8866 2.11418 17.2 2.50078 17.2H17.5008C17.8874 17.2 18.2008 16.8866 18.2008 16.5V13.5H16.8008V15.8H3.20078V13.5H1.80078Z" fill="#2D2D2D"/>
+</svg>
 
client/resources/img/component/common/ico_filter_20.svg (added)
+++ client/resources/img/component/common/ico_filter_20.svg
@@ -0,0 +1,8 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5 3L5 17" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<path d="M10 3L10 17" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<path d="M15 3L15 17" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<rect x="3.50078" y="7.7" width="3" height="3" rx="1.5" fill="white" stroke="#2D2D2D" stroke-width="1.4"/>
+<rect x="8.50078" y="10.7" width="3" height="3" rx="1.5" fill="white" stroke="#2D2D2D" stroke-width="1.4"/>
+<rect x="13.5008" y="5.7" width="3" height="3" rx="1.5" fill="white" stroke="#2D2D2D" stroke-width="1.4"/>
+</svg>
 
client/resources/img/component/common/ico_foldable.svg (added)
+++ client/resources/img/component/common/ico_foldable.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5.59961 4L5.59961 16" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<path d="M15.5 5L10 10L15.5 15" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_go_20.svg (added)
+++ client/resources/img/component/common/ico_go_20.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10 3H5C3.89543 3 3 3.89543 3 5V15C3 16.1046 3.89543 17 5 17H15C16.1046 17 17 16.1046 17 15V10" stroke="#2D2D2D" stroke-width="1.4"/>
+<path d="M16.9999 3L7.5293 12.4706M16.9999 3H12.4705M16.9999 3V7.52941" stroke="#2D2D2D" stroke-width="1.4"/>
+</svg>
 
client/resources/img/component/common/ico_help_24.svg (added)
+++ client/resources/img/component/common/ico_help_24.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C6.47715 2 2 6.47715 2 12C2 13.5113 2.33527 14.9443 2.93548 16.2287L2.06724 20.3995C1.99384 20.7521 2.30605 21.0643 2.65865 20.9909L6.31701 20.2293C7.93082 21.3459 9.88902 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2Z" fill="#246BEB"/>
+<path d="M10.8352 14.793V14.6545C10.8388 14.0117 10.8991 13.5004 11.0163 13.1204C11.1371 12.7404 11.3075 12.435 11.5277 12.2042C11.7479 11.9698 12.016 11.755 12.332 11.5597C12.5487 11.4247 12.7422 11.2773 12.9126 11.1175C13.0866 10.9542 13.2234 10.7731 13.3228 10.5742C13.4222 10.3718 13.4719 10.1463 13.4719 9.89773C13.4719 9.61719 13.4062 9.37393 13.2749 9.16797C13.1435 8.962 12.9659 8.8022 12.7422 8.68857C12.522 8.57493 12.2752 8.51811 12.0018 8.51811C11.7496 8.51811 11.5099 8.57315 11.2827 8.68324C11.0589 8.78977 10.8725 8.95312 10.7234 9.1733C10.5778 9.38991 10.4961 9.66513 10.4783 9.99893H8.58203C8.59979 9.32422 8.76314 8.75959 9.07209 8.30504C9.38459 7.8505 9.79652 7.50959 10.3079 7.28232C10.8228 7.05504 11.391 6.94141 12.0124 6.94141C12.6907 6.94141 13.2873 7.06037 13.8022 7.2983C14.3207 7.53622 14.7237 7.87536 15.0114 8.3157C15.3026 8.75249 15.4482 9.27095 15.4482 9.87109C15.4482 10.2759 15.3825 10.6381 15.2511 10.9577C15.1232 11.2773 14.9403 11.5614 14.7024 11.81C14.4645 12.0586 14.1822 12.2805 13.8555 12.4759C13.5678 12.6534 13.3317 12.8381 13.147 13.0298C12.9659 13.2216 12.831 13.4471 12.7422 13.7063C12.657 13.962 12.6126 14.2781 12.609 14.6545V14.793H10.8352ZM11.7621 18.1168C11.4425 18.1168 11.1673 18.0032 10.9364 17.7759C10.7056 17.5487 10.5902 17.2717 10.5902 16.945C10.5902 16.6254 10.7056 16.3519 10.9364 16.1246C11.1673 15.8974 11.4425 15.7837 11.7621 15.7837C12.0781 15.7837 12.3516 15.8974 12.5824 16.1246C12.8168 16.3519 12.9339 16.6254 12.9339 16.945C12.9339 17.1616 12.8789 17.3587 12.7688 17.5362C12.6623 17.7138 12.5202 17.8558 12.3427 17.9624C12.1687 18.0653 11.9751 18.1168 11.7621 18.1168Z" fill="white"/>
+</svg>
 
client/resources/img/component/common/ico_hint_20.svg (added)
+++ client/resources/img/component/common/ico_hint_20.svg
@@ -0,0 +1,5 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="0.7" y="-0.7" width="14.6" height="14.6" rx="7.3" transform="matrix(1 0 0 -1 2 16.6)" fill="white" stroke="#555555" stroke-width="1.4"/>
+<rect x="9.10156" y="5.85156" width="1.8" height="5.5" fill="#555555"/>
+<rect x="9.10156" y="12.3516" width="1.8" height="1.8" fill="#555555"/>
+</svg>
 
client/resources/img/component/common/ico_hint_error.svg (added)
+++ client/resources/img/component/common/ico_hint_error.svg
@@ -0,0 +1,5 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="16.6667" height="16.6667" rx="8.33333" transform="matrix(1 0 0 -1 1.66699 18.3334)" fill="#EB003B"/>
+<rect x="9.16699" y="5.83337" width="1.66667" height="5" fill="white"/>
+<rect x="9.16699" y="12.5" width="1.66667" height="1.66667" fill="white"/>
+</svg>
 
client/resources/img/component/common/ico_info.svg (added)
+++ client/resources/img/component/common/ico_info.svg
@@ -0,0 +1,5 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="0.7" y="-0.7" width="14.6" height="14.6" rx="7.3" transform="matrix(1 0 0 -1 0 14.6)" fill="white" stroke="#2D2D2D" stroke-width="1.4"/>
+<rect x="7.1001" y="3.8501" width="1.8" height="5.5" fill="#2D2D2D"/>
+<rect x="7.1001" y="10.3501" width="1.8" height="1.8" fill="#2D2D2D"/>
+</svg>
 
client/resources/img/component/common/ico_invalid_error_20.svg (added)
+++ client/resources/img/component/common/ico_invalid_error_20.svg
@@ -0,0 +1,9 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon20/system-Danger">
+<g id="live area">
+<rect id="Rectangle 414" width="16.6667" height="16.6667" rx="8.33333" transform="matrix(1 0 0 -1 1.66699 18.332)" fill="#EB003B"/>
+<rect id="Rectangle 411" x="9.16699" y="5.83203" width="1.66667" height="5" fill="white"/>
+<rect id="Rectangle 412" x="9.16699" y="12.5" width="1.66667" height="1.66667" fill="white"/>
+</g>
+</g>
+</svg>
 
client/resources/img/component/common/ico_invalid_ok_20.svg (added)
+++ client/resources/img/component/common/ico_invalid_ok_20.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="16" height="16" rx="8" transform="matrix(1 0 0 -1 2 18)" fill="#1D56BC"/>
+<path d="M6.5 9.73333L9.91796 13L13.5 7" stroke="#EFF5FF" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_like_20.svg (added)
+++ client/resources/img/component/common/ico_like_20.svg
@@ -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="M9.38686 4.91609L10.0001 6.02984L10.6133 4.91609C10.9265 4.34709 11.3834 3.87172 11.9373 3.53764C12.4852 3.20715 13.1091 3.02639 13.7471 3.0128C14.7796 3.06338 15.7521 3.51984 16.4543 4.28547C17.1613 5.05635 17.5366 6.07796 17.4973 7.1272L17.4968 7.14032V7.15345C17.4968 8.13614 17.0978 9.21536 16.4244 10.3225C15.7554 11.4224 14.849 12.495 13.9148 13.4502C12.0849 15.321 10.2131 16.6761 10.0001 16.8284C9.77844 16.6692 7.91107 15.3161 6.08535 13.4496C5.15108 12.4945 4.24473 11.4221 3.57569 10.3223C2.90227 9.21526 2.50337 8.13613 2.50337 7.15345V7.14032L2.50288 7.1272C2.46349 6.07796 2.83886 5.05636 3.54588 4.28547C4.24807 3.51984 5.22055 3.06338 6.253 3.0128C6.89108 3.02639 7.51494 3.20715 8.06287 3.53764C8.61675 3.87172 9.07358 4.34709 9.38686 4.91609Z" stroke="#2D2D2D" stroke-width="1.4"/>
+</svg>
 
client/resources/img/component/common/ico_login_20.svg (added)
+++ client/resources/img/component/common/ico_login_20.svg
@@ -0,0 +1,8 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<mask id="path-1-inside-1_2390_7881" fill="white">
+<path d="M10 2H17C17.5523 2 18 2.44772 18 3V17C18 17.5523 17.5523 18 17 18H10V2Z"/>
+</mask>
+<path d="M10 0.6H17C18.3255 0.6 19.4 1.67452 19.4 3L16.6 3.4H10V0.6ZM19.4 17C19.4 18.3255 18.3255 19.4 17 19.4H10V16.6H16.6L19.4 17ZM10 18V2V18ZM17 0.6C18.3255 0.6 19.4 1.67452 19.4 3V17C19.4 18.3255 18.3255 19.4 17 19.4L16.6 16.6V3.4L17 0.6Z" fill="#2D2D2D" mask="url(#path-1-inside-1_2390_7881)"/>
+<path d="M2 10H14" stroke="#2D2D2D" stroke-width="1.4"/>
+<path d="M10.5 6.5L14 10L10.5 13.5" stroke="#2D2D2D" stroke-width="1.2"/>
+</svg>
 
client/resources/img/component/common/ico_logout_16.svg (added)
+++ client/resources/img/component/common/ico_logout_16.svg
@@ -0,0 +1,12 @@
+<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="live area">
+<g id="Rectangle 2419">
+<mask id="path-1-inside-1_3426_196668" fill="white">
+<path d="M6 12H1C0.447715 12 0 11.5523 0 11L0 1C0 0.447715 0.447715 0 1 0H6L6 12Z"/>
+</mask>
+<path d="M6 13H1C-0.104569 13 -1 12.1046 -1 11H1H6V13ZM-1 1C-1 -0.104569 -0.104569 -1 1 -1H6V1H1H-1ZM6 0L6 12L6 0ZM1 13C-0.104569 13 -1 12.1046 -1 11L-1 1C-1 -0.104569 -0.104569 -1 1 -1V1L1 11V13Z" fill="#2D2D2D" mask="url(#path-1-inside-1_3426_196668)"/>
+</g>
+<line id="Line 3" x1="3" y1="6" x2="11" y2="6" stroke="#2D2D2D"/>
+<path id="Vector 3" d="M8.5 3.5L11 6L8.5 8.5" stroke="#2D2D2D" stroke-width="0.95"/>
+</g>
+</svg>
 
client/resources/img/component/common/ico_page_arr_left.svg (added)
+++ client/resources/img/component/common/ico_page_arr_left.svg
@@ -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="M12.5 5L7 10L12.5 15" stroke="#555555" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_page_arr_right.svg (added)
+++ client/resources/img/component/common/ico_page_arr_right.svg
@@ -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="M7.5 15L13 10L7.5 5" stroke="#555555" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_page_dot.svg (added)
+++ client/resources/img/component/common/ico_page_dot.svg
@@ -0,0 +1,6 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="40" height="40" rx="6" fill="white"/>
+<rect x="12.6992" y="18.8999" width="2.2" height="2.2" rx="1.1" fill="#2D2D2D"/>
+<rect x="18.8984" y="18.8999" width="2.2" height="2.2" rx="1.1" fill="#2D2D2D"/>
+<rect x="25.0996" y="18.8999" width="2.2" height="2.2" rx="1.1" fill="#2D2D2D"/>
+</svg>
 
client/resources/img/component/common/ico_plus_24.svg (added)
+++ client/resources/img/component/common/ico_plus_24.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12 4.5L12 19.5" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+<path d="M19.5 12L4.5 12" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_print_20.svg (added)
+++ client/resources/img/component/common/ico_print_20.svg
@@ -0,0 +1,5 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M2.7 8C2.7 7.28203 3.28203 6.7 4 6.7H16C16.718 6.7 17.3 7.28203 17.3 8V15.3H2.7V8Z" stroke="#2D2D2D" stroke-width="1.4"/>
+<rect x="5.7" y="11.7" width="8.6" height="5.6" fill="white" stroke="#2D2D2D" stroke-width="1.4"/>
+<rect x="5.7" y="2.7" width="8.6" height="4" fill="white" stroke="#2D2D2D" stroke-width="1.4"/>
+</svg>
 
client/resources/img/component/common/ico_pw_visible.svg (added)
+++ client/resources/img/component/common/ico_pw_visible.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M18.1332 16.72C18.4957 16.5246 18.8389 16.3177 19.1604 16.1034C20.0753 15.4936 20.8363 14.8099 21.3776 14.1324C21.8973 13.4822 22.2992 12.7312 22.2992 12.0002C22.2992 11.2692 21.8973 10.5182 21.3776 9.86796C20.8363 9.19053 20.0753 8.50678 19.1604 7.89701C17.3317 6.67814 14.8048 5.7002 11.9992 5.7002C10.51 5.7002 9.09928 5.97574 7.82984 6.4166L9.10789 7.69465C10.0156 7.44676 10.9887 7.3002 11.9992 7.3002C14.4403 7.3002 16.6635 8.15559 18.273 9.22838C19.0773 9.76444 19.7076 10.3411 20.1277 10.8668C20.5695 11.4197 20.6992 11.8146 20.6992 12.0002C20.6992 12.1858 20.5695 12.5807 20.1277 13.1336C19.7076 13.6593 19.0773 14.2359 18.273 14.772C17.8672 15.0425 17.4224 15.2991 16.945 15.5317L18.1332 16.72ZM15.8537 14.4405C16.3243 13.742 16.5992 12.9054 16.5992 12.0002C16.5992 9.50663 14.5126 7.53353 11.9992 7.53353C11.1251 7.53353 10.3027 7.77218 9.6016 8.18837L10.7888 9.37553C11.1571 9.22023 11.566 9.13353 11.9992 9.13353C13.6832 9.13353 14.9992 10.4437 14.9992 12.0002C14.9992 12.4544 14.8872 12.8876 14.6866 13.2734L15.8537 14.4405ZM13.2097 14.6249L14.3968 15.812C13.6958 16.2282 12.8733 16.4669 11.9992 16.4669C9.48588 16.4669 7.39922 14.4938 7.39922 12.0002C7.39922 11.095 7.67418 10.2584 8.14471 9.5599L9.31181 10.727C9.11127 11.1128 8.99922 11.546 8.99922 12.0002C8.99922 13.5567 10.3152 14.8669 11.9992 14.8669C12.4324 14.8669 12.8413 14.7802 13.2097 14.6249ZM7.05346 8.46865C6.576 8.70126 6.13119 8.95791 5.72539 9.22838C4.92111 9.76444 4.29084 10.3411 3.87074 10.8668C3.42893 11.4197 3.29922 11.8146 3.29922 12.0002C3.29922 12.1858 3.42893 12.5807 3.87074 13.1336C4.29084 13.6593 4.92111 14.2359 5.72539 14.772C7.33497 15.8448 9.5581 16.7002 11.9992 16.7002C13.0097 16.7002 13.9828 16.5536 14.8905 16.3057L16.1686 17.5838C14.8992 18.0247 13.4885 18.3002 11.9992 18.3002C9.19363 18.3002 6.66676 17.3223 4.83802 16.1034C3.92314 15.4936 3.16216 14.8099 2.62082 14.1324C2.10117 13.4822 1.69922 12.7312 1.69922 12.0002C1.69922 11.2692 2.10117 10.5182 2.62082 9.86796C3.16216 9.19053 3.92314 8.50678 4.83802 7.89701C5.15958 7.68268 5.50274 7.4758 5.86519 7.28038L7.05346 8.46865Z" fill="#2D2D2D"/>
+<path d="M4 4L20 20" stroke="#2D2D2D" stroke-width="1.6"/>
+</svg>
 
client/resources/img/component/common/ico_refresh_16.svg (added)
+++ client/resources/img/component/common/ico_refresh_16.svg
@@ -0,0 +1,4 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M13.9997 8.89981C13.563 11.7865 11.0581 13.9997 8.03354 13.9997C4.7013 13.9997 2 11.3134 2 7.99984C2 4.68622 4.7013 2 8.03354 2C10.5076 2 12.634 3.48087 13.565 5.5999" stroke="#2D2D2D" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M14.0081 2.31641V6.10578H10.2188" stroke="#2D2D2D" stroke-linejoin="round"/>
+</svg>
 
client/resources/img/component/common/ico_sch1_20.svg (added)
+++ client/resources/img/component/common/ico_sch1_20.svg
@@ -0,0 +1,6 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="2.7" y="2.7" width="12.6" height="12.6" rx="6.3" stroke="#2D2D2D" stroke-width="1.4"/>
+<path d="M13.459 13.4583L16.9945 16.9938" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="square"/>
+<path d="M9 6V12" stroke="#2D2D2D" stroke-width="1.4"/>
+<path d="M6 9H12" stroke="#2D2D2D" stroke-width="1.4"/>
+</svg>
 
client/resources/img/component/common/ico_sch_20_wh.svg (added)
+++ client/resources/img/component/common/ico_sch_20_wh.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="2.5" y="2.5" width="13" height="13" rx="6.5" stroke="white"/>
+<rect x="13.707" y="13" width="6" height="1" transform="rotate(45 13.707 13)" fill="white"/>
+</svg>
 
client/resources/img/component/common/ico_sch_40.svg (added)
+++ client/resources/img/component/common/ico_sch_40.svg
@@ -0,0 +1,4 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="5" y="5" width="25" height="25" rx="12.5" stroke="#2D2D2D" stroke-width="2"/>
+<rect x="27.4141" y="26" width="11.4325" height="2" transform="rotate(45 27.4141 26)" fill="#2D2D2D"/>
+</svg>
 
client/resources/img/component/common/ico_scrap_20.svg (added)
+++ client/resources/img/component/common/ico_scrap_20.svg
@@ -0,0 +1,6 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<mask id="path-1-inside-1_3717_101136" fill="white">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2C3.44772 2 3 2.44772 3 3V8.39442V17.0462C3 17.8616 3.92341 18.3342 4.58483 17.8574L10 13.9531L15.4152 17.8574C16.0766 18.3342 17 17.8616 17 17.0462V8.39442V3C17 2.44772 16.5523 2 16 2H4Z"/>
+</mask>
+<path d="M4.58483 17.8574L3.76607 16.7217L3.76607 16.7218L4.58483 17.8574ZM10 13.9531L10.8188 12.8175L10 12.2272L9.18124 12.8175L10 13.9531ZM15.4152 17.8574L16.2339 16.7218L16.2339 16.7217L15.4152 17.8574ZM4.4 3C4.4 3.22091 4.22091 3.4 4 3.4V0.6C2.67452 0.6 1.6 1.67452 1.6 3H4.4ZM1.6 3V8.39442H4.4V3H1.6ZM4.4 17.0462V8.39442H1.6V17.0462H4.4ZM3.76607 16.7218C4.03064 16.531 4.4 16.7201 4.4 17.0462H1.6C1.6 19.0032 3.81619 20.1375 5.40359 18.993L3.76607 16.7218ZM9.18124 12.8175L3.76607 16.7217L5.40359 18.993L10.8188 15.0887L9.18124 12.8175ZM9.18124 15.0887L14.5964 18.993L16.2339 16.7217L10.8188 12.8175L9.18124 15.0887ZM14.5964 18.993C16.1838 20.1375 18.4 19.0031 18.4 17.0462H15.6C15.6 16.7201 15.9694 16.531 16.2339 16.7218L14.5964 18.993ZM18.4 17.0462V8.39442H15.6V17.0462H18.4ZM18.4 8.39442V3H15.6V8.39442H18.4ZM16 3.4C15.7791 3.4 15.6 3.22091 15.6 3H18.4C18.4 1.67452 17.3255 0.6 16 0.6V3.4ZM16 0.6H4V3.4H16V0.6Z" fill="#2D2D2D" mask="url(#path-1-inside-1_3717_101136)"/>
+</svg>
 
client/resources/img/component/common/ico_select.svg (added)
+++ client/resources/img/component/common/ico_select.svg
@@ -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="M5 7.5L10 13L15 7.5" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_select_20.svg (added)
+++ client/resources/img/component/common/ico_select_20.svg
@@ -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="M5 7.5L10 13L15 7.5" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_select_lg.svg (added)
+++ client/resources/img/component/common/ico_select_lg.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5.75 8.875L12 15.75L18.25 8.875" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_setting_20.svg (added)
+++ client/resources/img/component/common/ico_setting_20.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12.6327 9.99935C12.6327 11.4537 11.4537 12.6327 9.99935 12.6327C8.54495 12.6327 7.36602 11.4537 7.36602 9.99935C7.36602 8.54495 8.54495 7.36602 9.99935 7.36602C11.4537 7.36602 12.6327 8.54495 12.6327 9.99935Z" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M13.2825 15.521L13.2826 15.5211C13.2826 15.5211 13.2826 15.5211 13.2826 15.5211C13.5594 15.7694 13.9821 15.7579 14.245 15.495L15.495 14.245C15.7526 13.9874 15.7695 13.5752 15.5339 13.2973L14.8826 12.529L15.2721 11.5885L16.4262 11.2882C16.7346 11.2079 16.9499 10.9295 16.9499 10.6108L16.95 9.37504C16.95 9.05487 16.7328 8.7755 16.4225 8.69659L15.2765 8.40517L14.8879 7.46675L15.5345 6.70197C15.7695 6.42404 15.7523 6.01239 15.495 5.75503L14.245 4.50503C13.9866 4.24666 13.573 4.23047 13.2952 4.46785L12.536 5.11671L11.5621 4.71623L11.2616 3.57215C11.1808 3.26449 10.9027 3.05 10.5846 3.05H9.36312C9.04514 3.05 8.7671 3.26433 8.68617 3.57185L8.3789 4.73946L7.4504 5.13086L6.71521 4.47696C6.43821 4.23058 6.01716 4.24289 5.75503 4.50503L4.50503 5.75503C4.25138 6.00867 4.23052 6.413 4.45671 6.6914L5.10389 7.48797L4.7209 8.4296L3.59091 8.69332C3.27411 8.76725 3.05 9.04969 3.05 9.375V10.625C3.05 10.9406 3.26119 11.2172 3.56565 11.3003L4.73791 11.6203L5.13051 12.5517L4.47748 13.2842C4.23059 13.5611 4.24267 13.9826 4.50503 14.245L5.75503 15.495C6.00895 15.7489 6.41384 15.7695 6.69221 15.5426L7.4886 14.8936L8.40576 15.2709L8.69631 16.4214C8.77481 16.7322 9.05442 16.95 9.375 16.95H10.625C10.9454 16.95 11.2249 16.7325 11.3036 16.4219L11.5952 15.2706L12.5448 14.8773C12.6387 14.9564 12.7435 15.0466 12.8487 15.1381C12.9656 15.2399 13.0743 15.3358 13.1539 15.4064L13.2483 15.4905L13.274 15.5134L13.2806 15.5193L13.2822 15.5207L13.2825 15.521Z" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
 
client/resources/img/component/common/ico_share_20.svg (added)
+++ client/resources/img/component/common/ico_share_20.svg
@@ -0,0 +1,7 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M7.40186 11.0449L12.598 14.0449" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<path d="M12.5981 5.95508L7.40199 8.95508" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<rect x="2.69902" y="7.7" width="4.6" height="4.6" rx="2.3" stroke="#2D2D2D" stroke-width="1.4"/>
+<rect x="12.7" y="2.7" width="4.6" height="4.6" rx="2.3" stroke="#2D2D2D" stroke-width="1.4"/>
+<rect x="12.7" y="12.7" width="4.6" height="4.6" rx="2.3" stroke="#2D2D2D" stroke-width="1.4"/>
+</svg>
 
client/resources/img/component/common/ico_step_active.svg (added)
+++ client/resources/img/component/common/ico_step_active.svg
@@ -0,0 +1,6 @@
+<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="12" height="12" rx="6" fill="#246BEB"/>
+<rect x="2.25" y="5.25" width="1.5" height="1.5" rx="0.75" fill="white"/>
+<rect x="5.25" y="5.25" width="1.5" height="1.5" rx="0.75" fill="white"/>
+<rect x="8.25" y="5.25" width="1.5" height="1.5" rx="0.75" fill="white"/>
+</svg>
 
client/resources/img/component/common/ico_swiper_more.svg (added)
+++ client/resources/img/component/common/ico_swiper_more.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12 4.5L12 19.5" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+<path d="M19.5 12L4.5 12" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_swiper_next.svg (added)
+++ client/resources/img/component/common/ico_swiper_next.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M9.5625 18.25L16.4375 12L9.5625 5.75" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_swiper_next_gray.svg (added)
+++ client/resources/img/component/common/ico_swiper_next_gray.svg
@@ -0,0 +1,3 @@
+<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10.0625 18.25L16.9375 12L10.0625 5.75" stroke="#8E8E8E" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_swiper_next_wh.svg (added)
+++ client/resources/img/component/common/ico_swiper_next_wh.svg
@@ -0,0 +1,3 @@
+<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10.0625 18.25L16.9375 12L10.0625 5.75" stroke="white" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_swiper_play.svg (added)
+++ client/resources/img/component/common/ico_swiper_play.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M17.7463 12.1973L9.40349 18.6862C9.23927 18.8139 9 18.6969 9 18.4888L9 5.51116C9 5.30312 9.23927 5.1861 9.40349 5.31382L17.7463 11.8027C17.875 11.9028 17.875 12.0972 17.7463 12.1973Z" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_swiper_prev.svg (added)
+++ client/resources/img/component/common/ico_swiper_prev.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15.4375 5.75L8.5625 12L15.4375 18.25" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_swiper_prev_gray.svg (added)
+++ client/resources/img/component/common/ico_swiper_prev_gray.svg
@@ -0,0 +1,3 @@
+<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15.9375 5.75L9.0625 12L15.9375 18.25" stroke="#8E8E8E" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_swiper_prev_wh.svg (added)
+++ client/resources/img/component/common/ico_swiper_prev_wh.svg
@@ -0,0 +1,3 @@
+<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15.9375 5.75L9.0625 12L15.9375 18.25" stroke="white" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_swiper_stop.svg (added)
+++ client/resources/img/component/common/ico_swiper_stop.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M7 6L7 18" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+<path d="M17 6V18" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/component/common/ico_tool_arr.svg (added)
+++ client/resources/img/component/common/ico_tool_arr.svg
@@ -0,0 +1,14 @@
+<svg width="22" height="12" viewBox="0 0 22 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="arrow">
+<g id="Vector">
+<mask id="path-1-inside-1_3048_93184" fill="white">
+<path d="M0 3.64699e-06L11 12L22 0L0 3.64699e-06Z"/>
+</mask>
+<path d="M0 3.64699e-06L11 12L22 0L0 3.64699e-06Z" fill="white"/>
+<path d="M11 12L10.2628 12.6757C10.4523 12.8824 10.7197 13 11 13C11.2803 13 11.5477 12.8824 11.7372 12.6757L11 12ZM0 3.64699e-06L-1.65772e-07 -0.999996L-2.27324 -0.999996L-0.737154 0.675728L0 3.64699e-06ZM22 0L22.7372 0.675725L24.2732 -1L22 -1V0ZM11.7372 11.3243L0.737154 -0.675721L-0.737154 0.675728L10.2628 12.6757L11.7372 11.3243ZM21.2628 -0.675725L10.2628 11.3243L11.7372 12.6757L22.7372 0.675725L21.2628 -0.675725ZM1.65772e-07 1L22 1V-1L-1.65772e-07 -0.999996L1.65772e-07 1Z" fill="#C6C6C6" mask="url(#path-1-inside-1_3048_93184)"/>
+</g>
+<rect id="white" x="1" width="20" height="1" fill="white"/>
+<path id="gray" d="M21.7266 0H20.5625L19.7266 1H21.7266V0Z" fill="#C6C6C6"/>
+<path id="gray_2" d="M0.273438 0H1.4375L2.27344 1H0.273438V0Z" fill="#C6C6C6"/>
+</g>
+</svg>
 
client/resources/img/component/common/ico_tooltip_20.svg (added)
+++ client/resources/img/component/common/ico_tooltip_20.svg
@@ -0,0 +1,9 @@
+<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon20">
+<rect id="Rectangle 414" width="16" height="16" rx="8" transform="matrix(1 0 0 -1 2.5 18)" fill="#2D2D2D"/>
+<rect id="Rectangle 412" x="9.66797" y="9.16602" width="1.66667" height="5" fill="white"/>
+<rect id="Rectangle 415" x="8.83203" y="9.16602" width="1.66667" height="0.833333" fill="white"/>
+<rect id="Rectangle 416" x="8.83203" y="13.334" width="3.33333" height="0.833333" fill="white"/>
+<circle id="Ellipse 453" cx="10.2917" cy="6.87565" r="1.04167" fill="white"/>
+</g>
+</svg>
 
client/resources/img/component/common/ico_upload_20_wh.svg (added)
+++ client/resources/img/component/common/ico_upload_20_wh.svg
@@ -0,0 +1,3 @@
+<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.56388 8.08422L9.80023 4.84787L9.80023 13.9381H11.2002V4.84787L14.4366 8.08422L15.4265 7.09427L10.9952 2.66294L10.5002 2.16797L10.0053 2.66294L5.57393 7.09427L6.56388 8.08422ZM2.30078 13.5001V16.5001C2.30078 16.8867 2.61418 17.2001 3.00078 17.2001H18.0008C18.3874 17.2001 18.7008 16.8867 18.7008 16.5001V13.5001H17.3008V15.8001H3.70078V13.5001H2.30078Z" fill="white"/>
+</svg>
 
client/resources/img/component/common/ico_urgent_badge_danger.svg (added)
+++ client/resources/img/component/common/ico_urgent_badge_danger.svg
@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12.0001 2.84448V5.64136M5.31421 6.95547L3 4.84448M18.6859 6.95547L21 4.84448" stroke="white" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M3.99236 21.1556H20.0083C20.6156 21.1556 20.9193 21.1556 21.122 21.0289C21.2995 20.9179 21.4288 20.7442 21.4841 20.5423C21.5472 20.3117 21.4599 20.0209 21.2854 19.4391L20.6362 17.2751C20.5428 16.9637 20.4961 16.808 20.4076 16.6898C20.3108 16.5603 20.1784 16.4618 20.0266 16.4063C19.888 16.3556 19.7254 16.3556 19.4003 16.3556H4.60032C4.27523 16.3556 4.11268 16.3556 3.97401 16.4063C3.82222 16.4618 3.68985 16.5603 3.59303 16.6898C3.50459 16.808 3.45788 16.9637 3.36447 17.2751L2.71526 19.4391C2.54073 20.0209 2.45347 20.3117 2.51659 20.5423C2.57186 20.7442 2.70111 20.9179 2.87863 21.0289C3.08131 21.1556 3.385 21.1556 3.99236 21.1556Z" fill="white"/>
+<path d="M18.8137 12.6682C19.0062 13.3098 18.5266 13.9556 17.8568 13.9556C16.34 13.9556 13.8435 13.9556 11.9999 13.9556C10.1563 13.9556 7.65985 13.9556 6.14308 13.9556C5.47322 13.9556 4.99365 13.3098 5.18613 12.6682L6.38613 8.66822C6.51303 8.24523 6.90235 7.95557 7.34396 7.95557H16.6559C17.0975 7.95557 17.4868 8.24523 17.6137 8.66822L18.8137 12.6682Z" fill="white"/>
+</svg>
 
client/resources/img/component/common/ico_urgent_badge_info.svg (added)
+++ client/resources/img/component/common/ico_urgent_badge_info.svg
@@ -0,0 +1,7 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="0.8" y="-0.8" width="18.4" height="18.4" rx="9.2" transform="matrix(1 0 0 -1 2 20.4)" fill="white" stroke="white" stroke-width="1.6"/>
+<rect x="11.3008" y="10.4297" width="1.8" height="5.6" fill="#16408D"/>
+<rect x="10.1992" y="10.4297" width="2" height="1.2" fill="#16408D"/>
+<rect x="10" y="15.5938" width="4" height="1.2" fill="#16408D"/>
+<circle cx="11.8992" cy="8.23906" r="1.2" fill="#16408D"/>
+</svg>
 
client/resources/img/component/common/ico_urgent_badge_ok.svg (added)
+++ client/resources/img/component/common/ico_urgent_badge_ok.svg
@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10.6547 4.48297C11.2526 3.44734 12.7474 3.44734 13.3453 4.48297L20.9884 17.7211C21.5863 18.7567 20.8389 20.0513 19.643 20.0513H4.35696C3.16111 20.0513 2.41371 18.7567 3.01163 17.7211L10.6547 4.48297Z" fill="white" stroke="white" stroke-width="1.6"/>
+<rect x="11" y="8.52344" width="2" height="5.6" fill="#005713"/>
+<rect x="11" y="15.8203" width="2" height="2" fill="#005713"/>
+</svg>
 
client/resources/img/pattern/content/balloon-bottom.png (Binary) (added)
+++ client/resources/img/pattern/content/balloon-bottom.png
Binary file is not shown
 
client/resources/img/pattern/content/btm_ban_ico_flag.svg (added)
+++ client/resources/img/pattern/content/btm_ban_ico_flag.svg
@@ -0,0 +1,17 @@
+<svg width="72" height="24" viewBox="0 0 72 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_2475_11366)">
+<path d="M23.486 12C23.486 18.6283 18.2276 24 11.7441 24C5.26055 24 0 18.6283 0 12C0 5.37175 5.25621 0 11.7441 0C18.2319 0 23.486 5.37396 23.486 12Z" fill="white"/>
+<path d="M17.2498 11.1628C15.3828 9.86645 12.9932 10.3939 11.7377 12.344C10.6925 13.9728 9.11174 14.1767 8.50242 14.1767C6.50531 14.1767 5.14139 12.7407 4.7359 11.2559C4.73156 11.2404 4.72722 11.2271 4.72505 11.2138C4.72072 11.1983 4.71855 11.1806 4.71204 11.1628C4.55158 10.5423 4.51255 10.2476 4.51255 9.58944C4.51255 6.04152 8.07741 2.08805 13.2079 2.08805C18.3383 2.08805 21.4716 6.1767 22.2501 8.45038C22.2349 8.40828 22.2219 8.3706 22.2089 8.33071C20.717 3.88307 16.5906 0.6875 11.7333 0.6875C5.62494 0.6875 0.667969 5.749 0.667969 11.9983C0.667969 17.5828 4.60796 22.3606 10.0767 22.3606C14.4352 22.3606 17.3647 19.8653 18.7069 16.4194C19.4442 14.5357 18.9238 12.3241 17.2498 11.1606" fill="#003964"/>
+<path d="M22.3145 8.67156C21.6662 6.45328 18.6391 2.08984 13.2051 2.08984C8.07462 2.08984 4.50977 6.04331 4.50977 9.59123C4.50977 10.2494 4.55097 10.5441 4.70926 11.1646C4.64204 10.8921 4.60734 10.6217 4.60734 10.358C4.60734 6.66159 8.22858 4.09982 11.9517 4.09982C16.9933 4.09982 21.0785 8.27489 21.0785 13.425C21.0785 17.4605 18.8039 20.9574 15.5036 22.635C19.7623 21.0616 22.8024 16.8932 22.8024 12.0001C22.8024 10.8411 22.6506 9.81948 22.3167 8.67156" fill="#ED1A3B"/>
+<path d="M36.1227 15.1376V16.1061H28.0859V15.1376H31.5563V13.3577H28.7345V8.3125H29.804V9.61016H34.4008V8.3125H35.4779V13.3577H32.6448V15.1376H36.1265H36.1227ZM34.397 12.4083V10.5595H29.8002V12.4083H34.397Z" fill="#575756"/>
+<path d="M41.2758 12.8103H40.1873V9.16993H36.9824V8.18998H41.2758V12.8103ZM37.5589 16.5807V13.3538H38.6474V15.6084H44.7234V16.5769H37.5589V16.5807ZM43.4604 7.93352H44.5489V13.5835H43.4604V10.9997H42.0305V10.0389H43.4604V7.92969V7.93352Z" fill="#575756"/>
+<path d="M54.0094 12.2651V13.2067H45.9727V12.2651H49.443V11.4918H46.6212V8.03906H47.6908V8.86206H52.2875V8.03906H53.3647V11.4918H50.5315V12.2651H54.0094ZM53.3609 13.9264V16.7743H52.2724V14.8565H46.4088V13.9264H53.3571H53.3609ZM52.2837 9.7731H47.687V10.5731H52.2837V9.7731Z" fill="#575756"/>
+<path d="M55.0935 9.44952V8.48106H60.3085V9.44952H58.1125L60.5436 15.2182L59.5841 15.6354L57.7218 11.1223L55.871 15.7043L54.8887 15.2871L57.3312 9.44952H55.0973H55.0935ZM61.5828 7.9375H62.6713V16.7608H61.5828V7.9375Z" fill="#575756"/>
+<path d="M63.9609 13.506H71.9977V14.4745H68.5198V16.7482H67.4313V14.4745H63.9609V13.506ZM65.6752 9.19196H70.272V8.07422H71.3492V12.3194H64.6057V8.07422H65.6752V9.19196ZM70.272 10.1413H65.6752V11.3586H70.272V10.1413Z" fill="#575756"/>
+</g>
+<defs>
+<clipPath id="clip0_2475_11366">
+<rect width="72" height="24" fill="white"/>
+</clipPath>
+</defs>
+</svg>
 
client/resources/img/pattern/content/ico_arr_expand.svg (added)
+++ client/resources/img/pattern/content/ico_arr_expand.svg
@@ -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="M5 7.5L10 13L15 7.5" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/pattern/content/ico_check_rd_20.svg (added)
+++ client/resources/img/pattern/content/ico_check_rd_20.svg
@@ -0,0 +1,8 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon24">
+<g id="live area">
+<rect id="Rectangle 414" width="20" height="20" rx="10" transform="matrix(1 0 0 -1 2 21.9999)" fill="#008A1E"/>
+<path id="Vector 1" d="M7.99585 11.8066L11.0021 14.9999L15.6604 8.49994" stroke="white" stroke-width="1.6" stroke-linecap="round"/>
+</g>
+</g>
+</svg>
 
client/resources/img/pattern/content/ico_conts_expand.svg (added)
+++ client/resources/img/pattern/content/ico_conts_expand.svg
@@ -0,0 +1,4 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M2.5 8L13.5 8" stroke="#003675" stroke-width="1.4" stroke-linecap="round"/>
+<path d="M8 2.5L8 13.5" stroke="#003675" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/pattern/content/ico_helper_info.svg (added)
+++ client/resources/img/pattern/content/ico_helper_info.svg
@@ -0,0 +1,7 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="16" height="16" rx="8" transform="matrix(1 0 0 -1 2 18)" fill="#003675"/>
+<rect x="9.16797" y="9.16602" width="1.66667" height="5" fill="white"/>
+<rect x="8.33203" y="9.16602" width="1.66667" height="0.833333" fill="white"/>
+<rect x="8.33203" y="13.334" width="3.33333" height="0.833333" fill="white"/>
+<circle cx="9.79167" cy="6.87565" r="1.04167" fill="white"/>
+</svg>
 
client/resources/img/pattern/content/ico_helper_info_trans.svg (added)
+++ client/resources/img/pattern/content/ico_helper_info_trans.svg
@@ -0,0 +1,5 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="0.5" y="-0.5" width="11" height="11" rx="5.5" transform="matrix(1 0 0 -1 2 13)" stroke="#2D2D2D"/>
+<rect x="7.39844" y="5.02539" width="1.2" height="4" fill="#2D2D2D"/>
+<rect x="7.39844" y="9.77539" width="1.2" height="1.2" fill="#2D2D2D"/>
+</svg>
 
client/resources/img/pattern/content/ico_login_certify_go.svg (added)
+++ client/resources/img/pattern/content/ico_login_certify_go.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.0781 16.5996L20.8781 11.9996L16.0781 7.39961" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+<line x1="20" y1="11.9992" x2="2" y2="11.9992" stroke="#2D2D2D" stroke-width="1.6"/>
+</svg>
 
client/resources/img/pattern/content/ico_login_certify_type_01.svg (added)
+++ client/resources/img/pattern/content/ico_login_certify_type_01.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5.88889 2.8H26.1111C27.8171 2.8 29.2 4.18294 29.2 5.88889V26.1111C29.2 27.8171 27.8171 29.2 26.1111 29.2H5.88889C4.18294 29.2 2.8 27.8171 2.8 26.1111V5.88889C2.8 4.18294 4.18294 2.8 5.88889 2.8Z" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M16 16C17.6569 16 19 14.6569 19 13C19 11.3431 17.6569 10 16 10C14.3431 10 13 11.3431 13 13C13 14.6569 14.3431 16 16 16Z" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M10 22C10.281 20.8711 11.0319 19.8562 12.1254 19.1272C13.2189 18.3982 14.5877 18 16 18C17.4123 18 18.7811 18.3982 19.8746 19.1272C20.9681 19.8562 21.719 20.8711 22 22" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
 
client/resources/img/pattern/content/ico_login_certify_type_02.svg (added)
+++ client/resources/img/pattern/content/ico_login_certify_type_02.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M24.172 5.94751C20.8351 5.94751 17.8996 4.3867 15.9964 2C14.0932 4.3867 11.1577 5.94751 7.82079 5.94751C6.46953 5.94751 5.1828 5.67804 4 5.2196V14.7034C4 27.0289 16 30 16 30C16 30 28 27.0499 28 14.7034V5.2196C26.8136 5.67804 25.5305 5.94751 24.1792 5.94751H24.172Z" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M10.0938 15.2718L14.3691 19.921L22.3296 12.0781" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
 
client/resources/img/pattern/content/ico_login_certify_type_03.svg (added)
+++ client/resources/img/pattern/content/ico_login_certify_type_03.svg
@@ -0,0 +1,7 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12.3621 8.36977C12.3621 5.88003 10.3437 3.86171 7.85388 3.86174C5.36408 3.86177 3.3457 5.88013 3.3457 8.36987C3.3457 10.8596 5.36408 12.8779 7.85388 12.8779C10.3437 12.8778 12.3621 10.8595 12.3621 8.36977Z" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M28.651 8.37836C28.651 5.88859 26.6327 3.87028 24.1429 3.87034C21.6531 3.87041 19.6348 5.88882 19.6348 8.37859C19.6348 10.8684 21.6531 12.8867 24.1429 12.8866C26.6327 12.8865 28.651 10.8681 28.651 8.37836Z" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M12.364 23.6276C12.364 21.1378 10.3456 19.1195 7.85583 19.1196C5.36604 19.1196 3.34766 21.1379 3.34766 23.6277C3.34766 26.1174 5.36604 28.1357 7.85583 28.1357C10.3456 28.1357 12.364 26.1173 12.364 23.6276Z" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M8.41133 7.5791H19.7047C19.6582 7.83864 19.634 8.10588 19.634 8.37878C19.634 8.65191 19.6583 8.91936 19.7048 9.1791H8.41133C7.9695 9.1791 7.61133 8.82093 7.61133 8.3791C7.61133 7.93727 7.9695 7.5791 8.41133 7.5791ZM21.5717 12.0828C21.1306 11.7761 20.7469 11.3926 20.4399 10.9518L10.9963 20.3952C11.3846 20.7729 11.7051 21.22 11.9377 21.7165L21.5717 12.0828ZM12.2904 22.8264C12.337 23.0862 12.3613 23.3537 12.3613 23.6268C12.3613 23.8997 12.337 24.1669 12.2906 24.4264H24.144C24.5859 24.4264 24.944 24.0683 24.944 23.6264C24.944 23.1846 24.5859 22.8264 24.144 22.8264H12.2904Z" fill="#2D2D2D"/>
+<path d="M24.147 28.1383C26.6368 28.1383 28.6551 26.12 28.655 23.6302C28.655 21.1404 26.6366 19.1221 24.1468 19.1221C21.657 19.1221 19.6387 21.1404 19.6388 23.6302C19.6389 26.12 21.6573 28.1383 24.147 28.1383Z" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
 
client/resources/img/pattern/content/ico_login_certify_type_04.svg (added)
+++ client/resources/img/pattern/content/ico_login_certify_type_04.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12 23.6436V26.1111C12 28.2589 13.5143 30 15.3824 30L26.6176 30C28.4857 30 30 28.2589 30 26.1111L30 5.88889C30 3.74111 28.4857 2 26.6176 2L15.3824 2C13.5143 2 12 3.74111 12 5.88889V8.56671" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M20.3086 16L2.0009 16" stroke="#2D2D2D" stroke-width="1.71429" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M18.1543 12.3105L21.8466 16.0029L18.1543 19.6952" stroke="#2D2D2D" stroke-width="1.71429" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
 
client/resources/img/pattern/content/ico_login_certify_type_05.svg (added)
+++ client/resources/img/pattern/content/ico_login_certify_type_05.svg
@@ -0,0 +1,6 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="2" y="6.4541" width="28" height="19.0909" rx="4" stroke="#2D2D2D" stroke-width="1.6"/>
+<path d="M8.7255 16.7567C9.22757 16.7567 9.63459 16.3496 9.63459 15.8476C9.63459 15.3455 9.22757 14.9385 8.7255 14.9385C8.22342 14.9385 7.81641 15.3455 7.81641 15.8476C7.81641 16.3496 8.22342 16.7567 8.7255 16.7567Z" stroke="#2D2D2D" stroke-width="1.71429" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M14.788 16.7567C15.2901 16.7567 15.6971 16.3496 15.6971 15.8476C15.6971 15.3455 15.2901 14.9385 14.788 14.9385C14.2859 14.9385 13.8789 15.3455 13.8789 15.8476C13.8789 16.3496 14.2859 16.7567 14.788 16.7567Z" stroke="#2D2D2D" stroke-width="1.71429" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M24.1819 18.1211H19.9395" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
 
client/resources/img/pattern/content/ico_login_certify_type_06.svg (added)
+++ client/resources/img/pattern/content/ico_login_certify_type_06.svg
@@ -0,0 +1,12 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_2216_42742)">
+<path d="M11.998 12.9961C14.7595 12.9961 16.998 10.7575 16.998 7.99609C16.998 5.23467 14.7595 2.99609 11.998 2.99609C9.23663 2.99609 6.99805 5.23467 6.99805 7.99609C6.99805 10.7575 9.23663 12.9961 11.998 12.9961Z" stroke="#2D2D2D" stroke-width="1.73333" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M12 26.9984H3V25.9142C3.01592 24.3896 3.41795 22.8942 4.16854 21.5672C4.91914 20.2403 5.9938 19.1253 7.29214 18.3263C8.5905 17.5273 10.0702 17.0705 11.593 16.9984C11.7287 16.9919 11.8644 16.9886 12 16.9883C12.1356 16.9886 12.2713 16.9919 12.4071 16.9984C13.9298 17.0705 15.4095 17.5273 16.7079 18.3263C17.4545 18.7858 18.1271 19.3497 18.7067 19.9984" stroke="#2D2D2D" stroke-width="1.73333" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M28.9998 17.9922L20.7598 28.9922L15.2598 24.8722" stroke="#2D2D2D" stroke-width="1.73333" stroke-linecap="round" stroke-linejoin="round"/>
+</g>
+<defs>
+<clipPath id="clip0_2216_42742">
+<rect width="28" height="28" fill="white" transform="translate(2 2)"/>
+</clipPath>
+</defs>
+</svg>
 
client/resources/img/pattern/content/ico_outline.svg (added)
+++ client/resources/img/pattern/content/ico_outline.svg
@@ -0,0 +1,6 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15 5H6C5.44772 5 5 5.44772 5 6V13C5 13.5523 5.44772 14 6 14H19" stroke="#2D2D2D" stroke-width="2" stroke-linecap="round"/>
+<path d="M15 18H6C5.44772 18 5 18.4477 5 19V26C5 26.5523 5.44772 27 6 27H19" stroke="#2D2D2D" stroke-width="2" stroke-linecap="round"/>
+<path d="M18.5 8.12405L21.7332 11.8741L26.625 5.625" stroke="#1D56BC" stroke-width="2" stroke-linecap="round"/>
+<path d="M18.5 20.6241L21.7332 24.3741L26.625 18.125" stroke="#1D56BC" stroke-width="2" stroke-linecap="round"/>
+</svg>
 
client/resources/img/pattern/content/ico_outline_chk.svg (added)
+++ client/resources/img/pattern/content/ico_outline_chk.svg
@@ -0,0 +1,4 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M15.1793 4.46631C15.7048 5.53194 16 6.73149 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C9.37294 0 10.6651 0.34585 11.7941 0.95518L11.0843 1.93806C10.1585 1.46612 9.11034 1.2 8 1.2C4.24446 1.2 1.2 4.24446 1.2 8C1.2 11.7555 4.24446 14.8 8 14.8C11.7555 14.8 14.8 11.7555 14.8 8C14.8 7.15383 14.6454 6.34376 14.363 5.59648L15.1793 4.46631Z" fill="#2D2D2D"/>
+<path d="M4.5 7.73333L7.5 11L14 2" stroke="#1D56BC" stroke-width="1.2" stroke-linecap="round"/>
+</svg>
 
client/resources/img/pattern/content/ico_smile_20.svg (added)
+++ client/resources/img/pattern/content/ico_smile_20.svg
@@ -0,0 +1,10 @@
+<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon20">
+<g id="Group 34611">
+<circle id="Ellipse 475" cx="10.5" cy="10" r="7" fill="white" fill-opacity="0.5" stroke="#1D56BC" stroke-width="1.4" stroke-linecap="round"/>
+<path id="Vector" d="M8.21875 12.0955C8.51631 12.3992 8.87148 12.6404 9.26346 12.8051C9.65544 12.9698 10.0763 13.0547 10.5015 13.0547C10.9267 13.0547 11.3476 12.9698 11.7396 12.8051C12.1316 12.6404 12.4867 12.3992 12.7843 12.0955" stroke="#1D56BC" stroke-width="1.4" stroke-linecap="round"/>
+<circle id="Ellipse 476" cx="8.16645" cy="8.44184" r="0.777778" fill="#1D56BC"/>
+<circle id="Ellipse 477" cx="12.8325" cy="8.44184" r="0.777778" fill="#1D56BC"/>
+</g>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_blue_ico1.svg (added)
+++ client/resources/img/pattern/content/main_menu_blue_ico1.svg
@@ -0,0 +1,6 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="duotone / trophy">
+<path id="tone" opacity="0.15" d="M11.667 6.66699H28.3337V20.0003C28.3337 24.6027 24.6027 28.3337 20.0003 28.3337C15.398 28.3337 11.667 24.6027 11.667 20.0003V6.66699Z" fill="#246BEB"/>
+<path id="shape" d="M13.3333 35.0003H26.6667M20 35.0003V28.3337M20 28.3337C15.3976 28.3337 11.6667 24.6027 11.6667 20.0003V6.66699H28.3333V20.0003C28.3333 24.6027 24.6024 28.3337 20 28.3337ZM28.3333 10.0003H30.8333C33.1345 10.0003 35 11.8658 35 14.167C35 16.4682 33.1345 18.3337 30.8333 18.3337H28.3333M11.6667 18.3337H9.16667C6.86548 18.3337 5 16.4682 5 14.167C5 11.8658 6.86548 10.0003 9.16667 10.0003H11.6667" stroke="#246BEB" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_blue_ico2.svg (added)
+++ client/resources/img/pattern/content/main_menu_blue_ico2.svg
@@ -0,0 +1,6 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="duotone / edit-4">
+<path id="tone" opacity="0.15" d="M13.333 26.6667H19.9997L29.9997 16.6667L23.333 10L13.333 20V26.6667Z" fill="#246BEB"/>
+<path id="shape" d="M23.3337 10L13.3337 20V26.6667H20.0003L30.0003 16.6667M23.3337 10L28.3337 5L35.0003 11.6667L30.0003 16.6667M23.3337 10L30.0003 16.6667M16.667 6.66667L6.66699 6.66666L6.66699 33.3333L33.3337 33.3333V23.3333" stroke="#246BEB" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_blue_ico3.svg (added)
+++ client/resources/img/pattern/content/main_menu_blue_ico3.svg
@@ -0,0 +1,6 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="duotone / document-check">
+<path id="tone" opacity="0.15" d="M8.33301 35H31.6663V15H24.9997C23.1587 15 21.6663 13.5076 21.6663 11.6667V5H8.33301V35Z" fill="#246BEB"/>
+<path id="shape" d="M24.9997 20L17.9997 26.6667L14.9997 23.8095M21.6663 5H8.33301V35H31.6663V15M21.6663 5H23.333L31.6663 13.3333V15M21.6663 5V11.6667C21.6663 13.3333 23.333 15 24.9997 15H31.6663" stroke="#246BEB" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_blue_ico4.svg (added)
+++ client/resources/img/pattern/content/main_menu_blue_ico4.svg
@@ -0,0 +1,9 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="duotone / headphones">
+<g id="tone" opacity="0.15">
+<path d="M5 23.333H10C11.8409 23.333 13.3333 24.8254 13.3333 26.6663V31.6663C13.3333 33.5073 11.8409 34.9997 10 34.9997H5V23.333Z" fill="#246BEB"/>
+<path d="M35 34.9997H30C28.159 34.9997 26.6667 33.5073 26.6667 31.6663V26.6663C26.6667 24.8254 28.159 23.333 30 23.333H35V34.9997Z" fill="#246BEB"/>
+</g>
+<path id="shape" d="M5 23.3333H10C11.8409 23.3333 13.3333 24.8257 13.3333 26.6667V31.6667C13.3333 33.5076 11.8409 35 10 35H5V23.3333ZM5 23.3333V20C5 11.7157 11.7157 5 20 5C28.2843 5 35 11.7157 35 20V23.3333M35 23.3333H30C28.1591 23.3333 26.6667 24.8257 26.6667 26.6667V31.6667C26.6667 33.5076 28.1591 35 30 35H35V23.3333Z" stroke="#246BEB" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_ico1.svg (added)
+++ client/resources/img/pattern/content/main_menu_ico1.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="calendar_today_FILL0_wght400_GRAD0_opsz40">
+<path id="Vector" d="M6.2222 29.3337C5.6222 29.3337 5.10183 29.1133 4.6611 28.6726C4.22037 28.2318 4 27.7115 4 27.1115V7.11143C4 6.51143 4.22037 5.99106 4.6611 5.55033C5.10183 5.10957 5.6222 4.88919 6.2222 4.88919H8.1111V2.66699H10.4444V4.88919H21.5556V2.66699H23.8889V4.88919H25.7778C26.3778 4.88919 26.8982 5.10957 27.3389 5.55033C27.7796 5.99106 28 6.51143 28 7.11143V27.1115C28 27.7115 27.7796 28.2318 27.3389 28.6726C26.8982 29.1133 26.3778 29.3337 25.7778 29.3337H6.2222ZM6.2222 27.1115H25.7778V13.1114H6.2222V27.1115ZM6.2222 10.8892H25.7778V7.11143H6.2222V10.8892Z" fill="#2D2D2D"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_ico2.svg (added)
+++ client/resources/img/pattern/content/main_menu_ico2.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="create_new_folder_FILL0_wght400_GRAD0_opsz40">
+<path id="Vector" d="M18.4438 21.333H20.666V18.4441H23.5549V16.2219H20.666V13.333H18.4438V16.2219H15.5549V18.4441H18.4438V21.333ZM4.88822 26.6663C4.28822 26.6663 3.76785 26.4423 3.32712 25.9941C2.88638 25.546 2.66602 25.0293 2.66602 24.4441V7.55521C2.66602 6.97003 2.88638 6.45337 3.32712 6.00524C3.76785 5.55709 4.28822 5.33301 4.88822 5.33301H13.7993L16.0216 7.55521H27.1105C27.6957 7.55521 28.2123 7.77929 28.6604 8.22744C29.1086 8.67557 29.3327 9.19224 29.3327 9.77744V24.4441C29.3327 25.0293 29.1086 25.546 28.6604 25.9941C28.2123 26.4423 27.6957 26.6663 27.1105 26.6663H4.88822ZM4.88822 24.4441H27.1105V9.77744H15.0993L12.8771 7.55521H4.88822V24.4441Z" fill="#2D2D2D"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_ico3.svg (added)
+++ client/resources/img/pattern/content/main_menu_ico3.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="map_FILL0_wght400_GRAD0_opsz40">
+<path id="Vector" d="M20.2667 28L11.7555 25L5.7111 27.3778C5.3111 27.5704 4.92592 27.5463 4.55557 27.3056C4.18519 27.0648 4 26.7185 4 26.2667V7.64443C4 7.35554 4.08333 7.09999 4.25 6.87777C4.41667 6.65554 4.63703 6.48888 4.9111 6.37777L11.7555 4L20.2667 6.97777L26.2889 4.6C26.6889 4.42222 27.0741 4.45 27.4444 4.68333C27.8148 4.91667 28 5.25926 28 5.7111V24.4889C28 24.7481 27.9167 24.9741 27.75 25.1667C27.5833 25.3593 27.3704 25.5037 27.1111 25.6L20.2667 28ZM19.0667 25.2445V8.8222L12.9333 6.73333V23.1556L19.0667 25.2445ZM21.2889 25.2445L25.7778 23.7556V7.1111L21.2889 8.8222V25.2445ZM6.2222 24.8667L10.7111 23.1556V6.73333L6.2222 8.2222V24.8667Z" fill="#2D2D2D"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_ico4.svg (added)
+++ client/resources/img/pattern/content/main_menu_ico4.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="badge_FILL0_wght400_GRAD0_opsz40">
+<path id="Vector" d="M4.88822 29.3337C4.28822 29.3337 3.76785 29.1133 3.32712 28.6726C2.88638 28.2318 2.66602 27.7115 2.66602 27.1115V11.5559C2.66602 10.9559 2.88638 10.4355 3.32712 9.99476C3.76785 9.55403 4.28822 9.33366 4.88822 9.33366H12.666V4.88919C12.666 4.28919 12.8864 3.76883 13.3272 3.32809C13.7679 2.88736 14.2913 2.66699 14.8974 2.66699H17.1013C17.7074 2.66699 18.2308 2.88736 18.6716 3.32809C19.1123 3.76883 19.3327 4.28919 19.3327 4.88919V9.33366H27.1105C27.7105 9.33366 28.2309 9.55403 28.6716 9.99476C29.1123 10.4355 29.3327 10.9559 29.3327 11.5559V27.1115C29.3327 27.7115 29.1123 28.2318 28.6716 28.6726C28.2309 29.1133 27.7105 29.3337 27.1105 29.3337H4.88822ZM4.88822 27.1115H27.1105V11.5559H19.3327V12.2226C19.3327 12.8818 19.1123 13.417 18.6716 13.8281C18.2308 14.2392 17.7074 14.4448 17.1013 14.4448H14.8974C14.2913 14.4448 13.7679 14.2392 13.3272 13.8281C12.8864 13.417 12.666 12.8818 12.666 12.2226V11.5559H4.88822V27.1115ZM7.82158 23.8448H15.7993V23.3337C15.7993 22.9411 15.6975 22.5874 15.4938 22.2726C15.2901 21.9577 15.0216 21.7337 14.6882 21.6003C14.066 21.3707 13.5456 21.2133 13.1271 21.1281C12.7086 21.0429 12.2882 21.0003 11.866 21.0003C11.4142 21.0003 10.9531 21.0503 10.4827 21.1503C10.0123 21.2503 9.50304 21.4003 8.95488 21.6003C8.60675 21.7337 8.33083 21.9577 8.12712 22.2726C7.92343 22.5874 7.82158 22.9411 7.82158 23.3337V23.8448ZM18.8438 21.6892H24.3993V19.9114H18.8438V21.6892ZM11.866 19.9114C12.3845 19.9114 12.8253 19.7299 13.1882 19.367C13.5512 19.004 13.7327 18.5633 13.7327 18.0448C13.7327 17.5262 13.5512 17.0855 13.1882 16.7226C12.8253 16.3596 12.3845 16.1781 11.866 16.1781C11.3475 16.1781 10.9068 16.3596 10.5438 16.7226C10.1808 17.0855 9.99935 17.5262 9.99935 18.0448C9.99935 18.5633 10.1808 19.004 10.5438 19.367C10.9068 19.7299 11.3475 19.9114 11.866 19.9114ZM18.8438 17.8448H24.3993V16.067H18.8438V17.8448ZM14.8882 12.2226H17.1104V4.88919H14.8882V12.2226Z" fill="#2D2D2D"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_ico5.svg (added)
+++ client/resources/img/pattern/content/main_menu_ico5.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="analytics_FILL0_wght400_GRAD0_opsz40">
+<path id="Vector" d="M9.42223 22.7333H11.6444V15.9556H9.42223V22.7333ZM20.3556 22.7333H22.5778V8.95553H20.3556V22.7333ZM14.8889 22.7333H17.1111V18.7778H14.8889V22.7333ZM14.8889 15.9556H17.1111V13.7333H14.8889V15.9556ZM6.2222 28C5.6222 28 5.10183 27.7796 4.6611 27.3389C4.22037 26.8982 4 26.3778 4 25.7778V6.2222C4 5.6222 4.22037 5.10183 4.6611 4.6611C5.10183 4.22037 5.6222 4 6.2222 4H25.7778C26.3778 4 26.8982 4.22037 27.3389 4.6611C27.7796 5.10183 28 5.6222 28 6.2222V25.7778C28 26.3778 27.7796 26.8982 27.3389 27.3389C26.8982 27.7796 26.3778 28 25.7778 28H6.2222ZM6.2222 25.7778H25.7778V6.2222H6.2222V25.7778Z" fill="#2D2D2D"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_ico6.svg (added)
+++ client/resources/img/pattern/content/main_menu_ico6.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="location_away_FILL0_wght400_GRAD0_opsz40">
+<path id="Vector" d="M2.66602 28V12L13.3327 4L21.0549 9.8C20.5735 9.82222 20.1031 9.89816 19.6438 10.0278C19.1845 10.1574 18.7549 10.3333 18.3549 10.5556L13.3327 6.77777L4.88822 13.1111V25.7778H11.1105V28H2.66602ZM13.3327 28V25.4667C13.3327 25 13.4493 24.5611 13.6827 24.15C13.916 23.7389 14.2327 23.4111 14.6327 23.1667C15.6549 22.5667 16.7271 22.1111 17.8493 21.8C18.9716 21.4889 20.1327 21.3333 21.3327 21.3333C22.5327 21.3333 23.6938 21.4889 24.816 21.8C25.9382 22.1111 27.0105 22.5667 28.0327 23.1667C28.4327 23.4111 28.7493 23.7389 28.9827 24.15C29.216 24.5611 29.3327 25 29.3327 25.4667V28H13.3327ZM15.6215 25.7778H27.0438V25.1333C26.1623 24.6296 25.2421 24.2407 24.2832 23.9667C23.3243 23.6926 22.3408 23.5555 21.3327 23.5555C20.3246 23.5555 19.3411 23.6963 18.3821 23.9778C17.4232 24.2593 16.503 24.6519 15.6215 25.1556V25.7778ZM21.3327 20C20.2216 20 19.2771 19.6111 18.4993 18.8333C17.7216 18.0556 17.3327 17.1111 17.3327 16C17.3327 14.8889 17.7216 13.9444 18.4993 13.1667C19.2771 12.3889 20.2216 12 21.3327 12C22.4438 12 23.3882 12.3889 24.166 13.1667C24.9438 13.9444 25.3327 14.8889 25.3327 16C25.3327 17.1111 24.9438 18.0556 24.166 18.8333C23.3882 19.6111 22.4438 20 21.3327 20ZM21.3327 17.7778C21.8364 17.7778 22.2586 17.6074 22.5993 17.2667C22.9401 16.9259 23.1105 16.5037 23.1105 16C23.1105 15.4963 22.9401 15.0741 22.5993 14.7333C22.2586 14.3926 21.8364 14.2222 21.3327 14.2222C20.829 14.2222 20.4067 14.3926 20.066 14.7333C19.7253 15.0741 19.5549 15.4963 19.5549 16C19.5549 16.5037 19.7253 16.9259 20.066 17.2667C20.4067 17.6074 20.829 17.7778 21.3327 17.7778Z" fill="#2D2D2D"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_ico7.svg (added)
+++ client/resources/img/pattern/content/main_menu_ico7.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="bookmarks_FILL0_wght400_GRAD0_opsz40">
+<path id="Vector" d="M4 30.6663V7.99964C4 7.39964 4.22037 6.87927 4.6611 6.43854C5.10183 5.99781 5.6222 5.77744 6.2222 5.77744H21.3334C21.9334 5.77744 22.4574 5.99781 22.9056 6.43854C23.3537 6.87927 23.5778 7.39964 23.5778 7.99964V30.6663L13.7778 26.5108L4 30.6663ZM6.2222 27.2886L13.7778 24.0441L21.3334 27.2886V7.99964H6.2222V27.2886ZM25.7778 27.333V3.55521H7.84443V1.33301H25.7778C26.3778 1.33301 26.8982 1.55337 27.3389 1.99411C27.7796 2.43484 28 2.95521 28 3.55521V27.333H25.7778Z" fill="#2D2D2D"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/main_menu_ico8.svg (added)
+++ client/resources/img/pattern/content/main_menu_ico8.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="ecg_heart_FILL0_wght400_GRAD0_opsz40">
+<path id="Vector" d="M15.9993 28C15.5993 28 15.216 27.9278 14.8493 27.7833C14.4827 27.6389 14.1549 27.4222 13.866 27.1333L4.93268 18.1667C4.1549 17.3889 3.58268 16.5 3.21602 15.5C2.84935 14.5 2.66602 13.4556 2.66602 12.3667C2.66602 10.0778 3.41046 8.11111 4.89935 6.46667C6.38824 4.82222 8.24379 4 10.466 4C11.5327 4 12.5382 4.21111 13.4827 4.63333C14.4271 5.05556 15.266 5.64444 15.9993 6.4C16.7105 5.64444 17.5382 5.05556 18.4827 4.63333C19.4271 4.21111 20.4327 4 21.4993 4C23.7216 4 25.5827 4.82222 27.0827 6.46667C28.5827 8.11111 29.3327 10.0667 29.3327 12.3333C29.3327 13.4222 29.1438 14.4667 28.766 15.4667C28.3882 16.4667 27.8216 17.3556 27.066 18.1333L18.0993 27.1333C17.8105 27.4222 17.4882 27.6389 17.1327 27.7833C16.7771 27.9278 16.3993 28 15.9993 28ZM17.3391 10.8889C17.5274 10.8889 17.6994 10.937 17.8549 11.0333C18.0105 11.1296 18.1438 11.2518 18.2549 11.4L20.5882 14.8889H26.6134C26.7828 14.4751 26.9099 14.0553 26.9946 13.6294C27.0792 13.2034 27.1216 12.7714 27.1216 12.3333C27.1068 10.6815 26.5664 9.25371 25.5006 8.05C24.4347 6.84629 23.1023 6.24443 21.5035 6.24443C20.7526 6.24443 20.0308 6.39629 19.3382 6.7C18.6456 7.00369 18.0438 7.43331 17.5327 7.98887L16.6327 8.95553C16.5512 9.04442 16.4586 9.11665 16.3549 9.1722C16.2512 9.22776 16.1327 9.25553 15.9993 9.25553C15.866 9.25553 15.7428 9.22861 15.6296 9.17477C15.5165 9.12092 15.4175 9.04785 15.3327 8.95553L14.4327 7.98887C13.9175 7.43605 13.3165 7.0034 12.6296 6.69093C11.9428 6.37845 11.2216 6.2222 10.466 6.2222C8.87237 6.2222 7.54433 6.82732 6.48188 8.03757C5.41944 9.24781 4.88822 10.6797 4.88822 12.3333C4.88822 12.7736 4.92896 13.2077 5.01045 13.6357C5.09194 14.0638 5.21527 14.4815 5.38045 14.8889H11.9993C12.1857 14.8889 12.3626 14.9342 12.5303 15.0247C12.698 15.1152 12.8284 15.2329 12.9216 15.3778L14.3327 17.5111L16.266 11.6667C16.3413 11.4444 16.4778 11.2593 16.6755 11.1111C16.8732 10.963 17.0944 10.8889 17.3391 10.8889ZM17.666 14.4889L15.7105 20.3333C15.6368 20.5556 15.4986 20.7407 15.2959 20.8889C15.0933 21.037 14.8722 21.1111 14.6327 21.1111C14.4401 21.1111 14.266 21.063 14.1104 20.9667C13.9549 20.8704 13.829 20.7482 13.7327 20.6L11.3993 17.1111H7.02155L15.4549 25.5445C15.5438 25.6334 15.6293 25.6945 15.7116 25.7278C15.7938 25.7611 15.8897 25.7778 15.9993 25.7778C16.109 25.7778 16.2049 25.7611 16.2871 25.7278C16.3694 25.6945 16.4549 25.6334 16.5438 25.5445L24.9438 17.1111H19.9993C19.8067 17.1111 19.6327 17.063 19.4771 16.9667C19.3216 16.8704 19.1845 16.7482 19.066 16.6L17.666 14.4889Z" fill="#2D2D2D"/>
+</g>
+</svg>
 
client/resources/img/pattern/content/top_ban_ico_flag.svg (added)
+++ client/resources/img/pattern/content/top_ban_ico_flag.svg
@@ -0,0 +1,45 @@
+<svg width="28" height="20" viewBox="0 0 28 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="&#237;&#131;&#156;&#234;&#183;&#185;&#234;&#184;&#176;_medium" filter="url(#filter0_d_3131_171598)">
+<g clip-path="url(#clip0_3131_171598)">
+<path id="Vector" d="M2 2H26V18H2V2Z" fill="white"/>
+<g id="Group">
+<path id="Vector_2" d="M10.6719 7.78125C11.2603 6.89857 12.1754 6.28581 13.2156 6.07777C14.2559 5.86973 15.3362 6.08345 16.2189 6.67192C17.1016 7.26039 17.7144 8.1754 17.9224 9.21566C18.1304 10.2559 17.9167 11.3362 17.3282 12.2189L10.6719 7.78125Z" fill="#D0303C"/>
+<path id="Vector_3" d="M10.672 7.78122C10.0835 8.6639 9.86977 9.7442 10.0778 10.7845C10.2858 11.8247 10.8986 12.7397 11.7813 13.3282C12.664 13.9167 13.7443 14.1304 14.7846 13.9224C15.8248 13.7143 16.7398 13.1016 17.3283 12.2189C17.6225 11.7775 17.7294 11.2374 17.6254 10.7173C17.5214 10.1971 17.215 9.73962 16.7736 9.44539C16.3323 9.15115 15.7921 9.04429 15.272 9.14831C14.7519 9.25233 14.2944 9.55871 14.0001 10.0001L10.672 7.78122Z" fill="#134A9D"/>
+<path id="Vector_4" d="M14.0001 10.0001C14.6128 9.08102 14.3645 7.83928 13.4454 7.22657C12.5264 6.61385 11.2846 6.86218 10.6719 7.78123C10.0592 8.70028 10.3075 9.94202 11.2266 10.5547C12.1456 11.1674 13.3874 10.9191 14.0001 10.0001Z" fill="#D0303C"/>
+</g>
+<g id="Vector_5">
+<path d="M5.67977 6.85945L7.89858 3.53125L8.45328 3.90105L6.23447 7.22925L5.67977 6.85945ZM6.51182 7.41415L8.73063 4.08595L9.28533 4.45575L7.06652 7.78395L6.51182 7.41415ZM7.34387 7.96885L9.56268 4.64065L10.1174 5.01045L7.89858 8.33865L7.34387 7.96885Z" fill="black"/>
+<path d="M21.3038 14.6714L22.3207 13.1461L21.766 12.7763L20.7491 14.3016L21.3038 14.6714Z" fill="black"/>
+<path d="M20.4718 14.1167L21.4887 12.5914L20.934 12.2216L19.9171 13.7469L20.4718 14.1167Z" fill="black"/>
+<path d="M19.7322 14.0242L20.2869 14.394L19.2699 15.9196L18.7152 15.5498L19.7322 14.0242Z" fill="black"/>
+<path d="M19.6397 13.562L20.6566 12.0367L20.1019 11.6669L19.085 13.1922L19.6397 13.562Z" fill="black"/>
+<path d="M18.9001 13.4695L19.4548 13.8393L18.4378 15.3649L17.8831 14.9951L18.9001 13.4695Z" fill="black"/>
+<path d="M20.5642 14.5789L21.1189 14.9487L20.1019 16.4743L19.5472 16.1045L20.5642 14.5789Z" fill="black"/>
+<path d="M19.4547 6.1663L18.4377 4.64082L17.883 5.01062L18.9 6.5361L19.4547 6.1663Z" fill="black"/>
+<path d="M19.0849 6.81345L20.1018 8.33882L20.6565 7.96902L19.6396 6.44365L19.0849 6.81345Z" fill="black"/>
+<path d="M20.9339 7.78412L18.7151 4.45592L19.2698 4.08612L21.4886 7.41432L20.9339 7.78412Z" fill="black"/>
+<path d="M21.7659 7.22942L20.749 5.70402L21.3037 5.33422L22.3206 6.85962L21.7659 7.22942Z" fill="black"/>
+<path d="M21.1188 5.05687L20.5641 5.42667L19.5471 3.90122L20.1018 3.53142L21.1188 5.05687Z" fill="black"/>
+<path d="M5.67969 13.1462L7.89849 16.4744L8.45319 16.1046L6.23439 12.7764L5.67969 13.1462Z" fill="black"/>
+<path d="M7.7136 14.3943L8.73054 15.9197L9.28524 15.5499L8.2683 14.0245L7.7136 14.3943Z" fill="black"/>
+<path d="M7.5287 14.117L8.0834 13.7472L7.06644 12.2217L6.51174 12.5915L7.5287 14.117Z" fill="black"/>
+<path d="M7.34379 12.0368L9.56259 15.365L10.1173 14.9952L7.89849 11.667L7.34379 12.0368Z" fill="black"/>
+</g>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_3131_171598" x="0" y="0" width="28" height="20" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset/>
+<feGaussianBlur stdDeviation="1"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_3131_171598"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_3131_171598" result="shape"/>
+</filter>
+<clipPath id="clip0_3131_171598">
+<rect x="2" y="2" width="24" height="16" rx="1" fill="white"/>
+</clipPath>
+</defs>
+</svg>
 
client/resources/img/pattern/content/top_ban_nuri_ico1.svg (added)
+++ client/resources/img/pattern/content/top_ban_nuri_ico1.svg
@@ -0,0 +1,12 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_1601_44937)">
+<path d="M20 10C20 15.5235 15.5221 20 10.0009 20C4.47973 20 0 15.5235 0 10C0 4.47645 4.47604 0 10.0009 0C15.5258 0 20 4.4783 20 10Z" fill="white"/>
+<path d="M14.6894 9.30367C13.0995 8.22334 11.0646 8.66286 9.9955 10.288C9.10546 11.6453 7.75932 11.8152 7.24044 11.8152C5.53976 11.8152 4.37828 10.6185 4.03298 9.38124C4.02929 9.36831 4.02559 9.35723 4.02375 9.34615C4.02005 9.33322 4.01821 9.31845 4.01267 9.30367C3.87602 8.78659 3.84278 8.54098 3.84278 7.9925C3.84278 5.0359 6.87852 1.74135 11.2475 1.74135C15.6164 1.74135 18.2847 5.14855 18.9476 7.04329C18.9347 7.0082 18.9236 6.9768 18.9125 6.94356C17.6421 3.23719 14.1281 0.574219 9.9918 0.574219C4.79006 0.574219 0.568848 4.79213 0.568848 9.99989C0.568848 14.6536 3.92403 18.6352 8.58104 18.6352C12.2926 18.6352 14.7873 16.5558 15.9303 13.6841C16.5581 12.1144 16.115 10.2714 14.6894 9.30183" fill="#003964"/>
+<path d="M19.0029 7.22695C18.4507 5.37838 15.873 1.74219 11.2455 1.74219C6.87655 1.74219 3.84082 5.03674 3.84082 7.99334C3.84082 8.54182 3.8759 8.78743 4.0107 9.30451C3.95346 9.07737 3.92392 8.85207 3.92392 8.63231C3.92392 5.55198 7.00766 3.41716 10.1782 3.41716C14.4714 3.41716 17.9503 6.89639 17.9503 11.1882C17.9503 14.5511 16.0133 17.4652 13.2028 18.8631C16.8295 17.552 19.4183 14.0783 19.4183 10.0007C19.4183 9.03489 19.2891 8.18355 19.0047 7.22695" fill="#ED1A3B"/>
+</g>
+<defs>
+<clipPath id="clip0_1601_44937">
+<rect width="20" height="20" fill="white"/>
+</clipPath>
+</defs>
+</svg>
 
client/resources/img/pattern/content/top_ban_nuri_ico2.svg (added)
+++ client/resources/img/pattern/content/top_ban_nuri_ico2.svg
@@ -0,0 +1,6 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="10" cy="10" r="10" fill="white"/>
+<path d="M5.5 7.5H14.5V14C14.5 14.8284 13.8284 15.5 13 15.5H7C6.17157 15.5 5.5 14.8284 5.5 14V7.5Z" fill="#2D2D2D" stroke="#2D2D2D"/>
+<rect x="9.8125" y="10.1875" width="0.375" height="1.125" stroke="white" stroke-width="0.375"/>
+<path d="M7 7C7 5.61929 8.11929 4.5 9.5 4.5H10.5C11.8807 4.5 13 5.61929 13 7V7.5H7V7Z" stroke="#2D2D2D"/>
+</svg>
 
client/resources/img/pattern/content/top_ban_toggle_arr.svg (added)
+++ client/resources/img/pattern/content/top_ban_toggle_arr.svg
@@ -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="M5 7.5L10 13L15 7.5" stroke="#99B0CB" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/pattern/layout/foot_ico_plus.svg (added)
+++ client/resources/img/pattern/layout/foot_ico_plus.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4.5 10.0001L15.5 10.0001" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+<path d="M10 4.50006L10 15.5001" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/pattern/layout/foot_ico_sns_blog.svg (added)
+++ client/resources/img/pattern/layout/foot_ico_sns_blog.svg
@@ -0,0 +1,12 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="img-naver blog">
+<rect x="0.500977" y="0.5" width="39.0008" height="39" rx="19.5" fill="white"/>
+<rect x="0.500977" y="0.5" width="39.0008" height="39" rx="19.5" stroke="#E4E4E4"/>
+<g id="Union">
+<path d="M14.3661 18.642C13.9861 18.642 13.6781 18.9409 13.6781 19.3097C13.6781 19.6784 13.9861 19.9787 14.3661 19.9787C14.7462 19.9787 15.0542 19.6798 15.0542 19.3097C15.0542 18.9395 14.7462 18.642 14.3661 18.642Z" fill="black"/>
+<path d="M21.1689 18.5721C20.7592 18.5721 20.4271 18.8943 20.4271 19.2918C20.4271 19.6894 20.7592 20.0116 21.1689 20.0116C21.5786 20.0116 21.9106 19.6894 21.9106 19.2918C21.9106 18.8943 21.5786 18.5721 21.1689 18.5721Z" fill="black"/>
+<path d="M24.9991 19.2918C24.9991 18.9039 25.324 18.5886 25.7238 18.5886C26.1237 18.5886 26.4486 18.9039 26.4486 19.2918C26.4486 19.6798 26.1237 19.9951 25.7238 19.9951C25.324 19.9951 24.9991 19.6798 24.9991 19.2918Z" fill="black"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.6779 12H27.3275C28.8053 12 30.0034 13.1625 30.0034 14.5965V23.0331C30.0034 24.467 28.8053 25.6296 27.3275 25.6296H22.2003L20.4399 29.6532C20.4399 29.6532 20.3198 30.0014 20.026 30.0014C19.7335 30.0014 19.612 29.6532 19.612 29.6532L17.8516 25.6296H12.6779C11.2 25.6296 10.002 24.467 10.002 23.0331V14.5965C10.002 13.1625 11.2 12 12.6779 12ZM14.6332 21.0439C14.6332 21.0439 16.2763 21 16.2848 19.4577H16.2834C16.2834 19.4577 16.5052 17.655 14.7335 17.4946C14.7335 17.4946 13.9197 17.4864 13.6386 17.9525V16.1209C13.6386 16.1209 12.5168 16.1347 12.4419 16.1237V16.1209C12.4363 16.1223 12.4419 16.1237 12.4419 16.1237V20.9136H13.6386V20.6353C13.6386 20.6353 13.9974 21.0439 14.6332 21.0439ZM18.3913 20.9219V17.6427C18.3913 17.6427 18.5255 16.0401 16.655 15.966V17.1107C16.655 17.1107 17.2201 17.2341 17.2201 17.6756V20.9219H18.3913ZM19.2037 19.2932C19.2037 20.2611 20.0825 21.0466 21.1675 21.0466C22.2526 21.0466 23.1314 20.2611 23.1314 19.2932C23.1314 18.3254 22.2526 17.5398 21.1675 17.5398C20.0825 17.5398 19.2037 18.3254 19.2037 19.2932ZM25.8567 22.7123C27.6016 22.7123 27.5846 21.0466 27.5846 21.0466V17.5864H26.3964V17.9374C26.0079 17.4302 25.3764 17.496 25.3764 17.496C23.7756 17.6097 23.7417 19.041 23.7417 19.041V19.5647C23.7417 20.9452 25.1997 21.0466 25.1997 21.0466C26.2283 21.0466 26.371 20.6024 26.371 20.6024C26.3795 21.6992 25.6462 21.6334 25.6462 21.6334H25.3255V22.7123H25.8567Z" fill="black"/>
+</g>
+</g>
+</svg>
 
client/resources/img/pattern/layout/foot_ico_sns_facebook.svg (added)
+++ client/resources/img/pattern/layout/foot_ico_sns_facebook.svg
@@ -0,0 +1,7 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="img-facebook">
+<circle id="Ellipse 2" cx="20" cy="20" r="20" fill="white"/>
+<circle id="Ellipse 3" cx="20" cy="20" r="10" fill="white"/>
+<path id="Initiator" d="M29.9996 20.0367C29.9996 14.4936 25.5225 10 19.9998 10C14.4771 10 10 14.4936 10 20.0367C10 24.7436 13.2287 28.6932 17.5842 29.778V23.104H15.5223V20.0367H17.5842V18.7151C17.5842 15.299 19.1246 13.7156 22.4662 13.7156C23.0997 13.7156 24.1929 13.8405 24.6401 13.9649V16.7451C24.4041 16.7202 23.9941 16.7078 23.4849 16.7078C21.8454 16.7078 21.2118 17.3312 21.2118 18.952V20.0367H24.4781L23.9169 23.104H21.2118V30C26.1633 29.3998 30 25.1683 30 20.0367H29.9996Z" fill="black"/>
+</g>
+</svg>
 
client/resources/img/pattern/layout/foot_ico_sns_instagram.svg (added)
+++ client/resources/img/pattern/layout/foot_ico_sns_instagram.svg
@@ -0,0 +1,11 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="img-instagram" clip-path="url(#clip0_1601_43482)">
+<circle id="Ellipse 3" cx="20" cy="20" r="20" fill="white"/>
+<path id="Vector" d="M15.8585 10.0699C14.7945 10.1201 14.0679 10.2899 13.4327 10.5395C12.7752 10.7957 12.218 11.1395 11.6636 11.6959C11.1092 12.2523 10.7678 12.8099 10.5134 13.4683C10.2672 14.105 10.1004 14.8322 10.0534 15.8968C10.0064 16.9614 9.99602 17.3036 10.0012 20.0192C10.0064 22.7348 10.0184 23.0752 10.07 24.142C10.1208 25.2058 10.29 25.9322 10.5396 26.5676C10.7962 27.225 11.1396 27.782 11.6962 28.3366C12.2528 28.8912 12.81 29.2318 13.4701 29.4866C14.1061 29.7324 14.8335 29.9 15.8979 29.9466C16.9623 29.9932 17.3049 30.004 20.0197 29.9988C22.7345 29.9936 23.0763 29.9816 24.143 29.931C25.2096 29.8804 25.9322 29.71 26.5678 29.4616C27.2252 29.2044 27.7826 28.8616 28.3368 28.3048C28.891 27.748 29.2322 27.19 29.4864 26.5312C29.7328 25.8952 29.9002 25.1678 29.9464 24.1042C29.993 23.0368 30.004 22.696 29.9988 19.9808C29.9936 17.2656 29.9814 16.9252 29.9308 15.8588C29.8802 14.7924 29.7108 14.0682 29.4614 13.4323C29.2044 12.7749 28.8614 12.2183 28.305 11.6633C27.7486 11.1083 27.1902 10.7673 26.5316 10.5137C25.8952 10.2675 25.1682 10.0997 24.1038 10.0537C23.0393 10.0077 22.6967 9.99594 19.9809 10.0011C17.2651 10.0063 16.9251 10.0179 15.8585 10.0699ZM15.9753 28.1476C15.0003 28.1052 14.4709 27.9432 14.1181 27.8076C13.6509 27.6276 13.318 27.41 12.9664 27.0618C12.6148 26.7136 12.3988 26.3796 12.2164 25.9134C12.0794 25.5606 11.9144 25.0318 11.8688 24.0568C11.8192 23.003 11.8088 22.6866 11.803 20.0168C11.7972 17.347 11.8074 17.031 11.8536 15.9768C11.8952 15.0026 12.0582 14.4726 12.1936 14.12C12.3736 13.6522 12.5904 13.3199 12.9394 12.9685C13.2884 12.6171 13.6215 12.4007 14.0881 12.2183C14.4405 12.0807 14.9693 11.9171 15.9439 11.8707C16.9985 11.8207 17.3145 11.8107 19.9839 11.8049C22.6533 11.7991 22.9701 11.8091 24.0252 11.8555C24.9994 11.8979 25.5296 12.0593 25.8818 12.1955C26.3492 12.3755 26.6818 12.5917 27.0332 12.9413C27.3846 13.2909 27.6012 13.6228 27.7836 14.0904C27.9214 14.4418 28.085 14.9704 28.131 15.9456C28.1812 17.0002 28.1926 17.3164 28.1974 19.9856C28.2022 22.6548 28.1928 22.9718 28.1466 24.0256C28.104 25.0006 27.9424 25.5302 27.8066 25.8834C27.6266 26.3504 27.4096 26.6834 27.0604 27.0346C26.7112 27.3858 26.3786 27.6022 25.9118 27.7846C25.5598 27.922 25.0304 28.086 24.0566 28.1324C23.0019 28.182 22.6859 28.1924 20.0155 28.1982C17.3451 28.204 17.0301 28.1932 15.9755 28.1476M24.1276 14.6554C24.128 14.8927 24.1987 15.1246 24.3309 15.3217C24.4631 15.5189 24.6508 15.6724 24.8703 15.7628C25.0897 15.8533 25.3311 15.8766 25.5638 15.8299C25.7965 15.7832 26.0101 15.6685 26.1777 15.5003C26.3452 15.3322 26.4591 15.1181 26.505 14.8853C26.5508 14.6524 26.5266 14.4111 26.4354 14.192C26.3441 13.9729 26.1899 13.7858 25.9923 13.6543C25.7947 13.5228 25.5625 13.4529 25.3252 13.4533C25.007 13.454 24.7021 13.581 24.4775 13.8064C24.2529 14.0318 24.127 14.3372 24.1276 14.6554ZM14.8655 20.01C14.8711 22.846 17.1743 25.1398 20.0097 25.1344C22.8451 25.129 25.1406 22.826 25.1352 19.99C25.1298 17.154 22.8259 14.8596 19.9901 14.8652C17.1543 14.8708 14.8601 17.1744 14.8655 20.01ZM16.6667 20.0064C16.6654 19.3471 16.8596 18.7022 17.2248 18.1533C17.59 17.6044 18.1098 17.1761 18.7184 16.9226C19.327 16.6691 19.9971 16.6018 20.644 16.7291C21.2908 16.8565 21.8854 17.1728 22.3525 17.638C22.8196 18.1033 23.1383 18.6966 23.2682 19.343C23.3981 19.9894 23.3334 20.6597 23.0823 21.2693C22.8312 21.8789 22.405 22.4004 21.8576 22.7677C21.3101 23.1351 20.666 23.3319 20.0067 23.3332C19.5689 23.3341 19.1353 23.2488 18.7305 23.0821C18.3257 22.9154 17.9577 22.6706 17.6476 22.3616C17.3374 22.0527 17.0911 21.6857 16.9228 21.2816C16.7545 20.8775 16.6675 20.4441 16.6667 20.0064Z" fill="black"/>
+</g>
+<defs>
+<clipPath id="clip0_1601_43482">
+<rect width="40" height="40" fill="white"/>
+</clipPath>
+</defs>
+</svg>
 
client/resources/img/pattern/layout/foot_ico_sns_twitter.svg (added)
+++ client/resources/img/pattern/layout/foot_ico_sns_twitter.svg
@@ -0,0 +1,11 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="img-X" clip-path="url(#clip0_1601_43489)">
+<circle id="Ellipse 1" cx="20" cy="20" r="20" fill="white"/>
+<path id="Vector" d="M22.3076 18.4686L29.3808 10H27.7046L21.563 17.3532L16.6577 10H11L18.4178 21.1193L11 30H12.6762L19.1619 22.2348L24.3423 30H30L22.3072 18.4686H22.3076ZM20.0118 21.2173L19.2602 20.1101L13.2802 11.2997H15.8547L20.6807 18.4099L21.4323 19.5172L27.7054 28.7594H25.1309L20.0118 21.2177V21.2173Z" fill="black"/>
+</g>
+<defs>
+<clipPath id="clip0_1601_43489">
+<rect width="40" height="40" fill="white"/>
+</clipPath>
+</defs>
+</svg>
 
client/resources/img/pattern/layout/foot_ico_sns_youtube.svg (added)
+++ client/resources/img/pattern/layout/foot_ico_sns_youtube.svg
@@ -0,0 +1,12 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="img-youtube" clip-path="url(#clip0_1601_43485)">
+<circle id="Ellipse 2" cx="20" cy="20" r="20" fill="white"/>
+<path id="Vector" d="M29.5818 15.3419C29.3523 14.4202 28.6739 13.6944 27.8136 13.4476C26.2545 13 20 13 20 13C20 13 13.7455 13 12.1864 13.4476C11.3261 13.6944 10.6477 14.4202 10.4182 15.3419C10 17.0137 10 20.5 10 20.5C10 20.5 10 23.9863 10.4182 25.6581C10.6477 26.5798 11.3261 27.3056 12.1864 27.5524C13.7466 28 20 28 20 28C20 28 26.2545 28 27.8136 27.5524C28.6739 27.3056 29.3523 26.5798 29.5818 25.6581C30 23.9875 30 20.5 30 20.5C30 20.5 30 17.0137 29.5818 15.3419Z" fill="black"/>
+<path id="Vector_2" d="M18 23L23 20.5L18 18V23Z" fill="white"/>
+</g>
+<defs>
+<clipPath id="clip0_1601_43485">
+<rect width="40" height="40" fill="white"/>
+</clipPath>
+</defs>
+</svg>
 
client/resources/img/pattern/layout/head_gnb_ico_arr.svg (added)
+++ client/resources/img/pattern/layout/head_gnb_ico_arr.svg
@@ -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="M5 7.5L10 13L15 7.5" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/pattern/layout/head_gnb_ico_arr_on.svg (added)
+++ client/resources/img/pattern/layout/head_gnb_ico_arr_on.svg
@@ -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="M5 7.5L10 13L15 7.5" stroke="#003675" stroke-width="1.4" stroke-linecap="round"/>
+</svg>
 
client/resources/img/pattern/layout/head_ico_navi_all.svg (added)
+++ client/resources/img/pattern/layout/head_ico_navi_all.svg
@@ -0,0 +1,5 @@
+<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M2.5 4.5H18.5" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M2.5 10.5H18.5" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M2.5 16.5H18.5" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
 
client/resources/img/pattern/layout/head_ico_navi_join.svg (added)
+++ client/resources/img/pattern/layout/head_ico_navi_join.svg
@@ -0,0 +1,6 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="8" cy="6" r="2.3" stroke="#2D2D2D" stroke-width="1.4"/>
+<path d="M1.7 14.618C1.7 14.0044 1.93725 13.505 2.34125 13.2434C3.33829 12.5978 5.22125 11.7 8 11.7C10.7787 11.7 12.6617 12.5978 13.6588 13.2434C14.0628 13.505 14.3 14.0044 14.3 14.618V16.3H1.7V14.618Z" stroke="#2D2D2D" stroke-width="1.4"/>
+<path d="M16 5V11" stroke="#2D2D2D" stroke-width="1.4"/>
+<path d="M13 8H19" stroke="#2D2D2D" stroke-width="1.4"/>
+</svg>
 
client/resources/img/pattern/layout/head_ico_navi_login.svg (added)
+++ client/resources/img/pattern/layout/head_ico_navi_login.svg
@@ -0,0 +1,8 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<mask id="path-1-inside-1_2390_7881" fill="white">
+<path d="M10 2H17C17.5523 2 18 2.44772 18 3V17C18 17.5523 17.5523 18 17 18H10V2Z"/>
+</mask>
+<path d="M10 0.6H17C18.3255 0.6 19.4 1.67452 19.4 3L16.6 3.4H10V0.6ZM19.4 17C19.4 18.3255 18.3255 19.4 17 19.4H10V16.6H16.6L19.4 17ZM10 18V2V18ZM17 0.6C18.3255 0.6 19.4 1.67452 19.4 3V17C19.4 18.3255 18.3255 19.4 17 19.4L16.6 16.6V3.4L17 0.6Z" fill="#2D2D2D" mask="url(#path-1-inside-1_2390_7881)"/>
+<path d="M2 10H14" stroke="#2D2D2D" stroke-width="1.4"/>
+<path d="M10.5 6.5L14 10L10.5 13.5" stroke="#2D2D2D" stroke-width="1.2"/>
+</svg>
 
client/resources/img/pattern/layout/head_ico_navi_my.svg (added)
+++ client/resources/img/pattern/layout/head_ico_navi_my.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="10" cy="5.5" r="2.8" stroke="#2D2D2D" stroke-width="1.4"/>
+<path d="M2.7 15C2.7 14.3969 2.93015 13.8966 3.32853 13.6209C4.43564 12.8549 6.65594 11.7 10 11.7C13.3441 11.7 15.5644 12.8549 16.6715 13.6209C17.0698 13.8966 17.3 14.3969 17.3 15V17.3H2.7V15Z" stroke="#2D2D2D" stroke-width="1.4"/>
+</svg>
 
client/resources/img/pattern/layout/head_ico_navi_sch.svg (added)
+++ client/resources/img/pattern/layout/head_ico_navi_sch.svg
@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="2.7" y="2.7" width="12.6" height="12.6" rx="6.3" stroke="#2D2D2D" stroke-width="1.4"/>
+<path d="M13.459 13.458L16.9945 16.9935" stroke="#2D2D2D" stroke-width="1.4" stroke-linecap="square"/>
+</svg>
 
client/resources/img/pattern/layout/head_ico_nuri.svg (added)
+++ client/resources/img/pattern/layout/head_ico_nuri.svg
@@ -0,0 +1,17 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="10" cy="10" r="10" fill="white"/>
+<g clip-path="url(#clip0_2989_89585)">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4.64062 8.32624C4.64062 8.80624 5.03563 9.20124 5.51562 9.20124H14.5156C14.9956 9.20124 15.3906 8.80624 15.3906 8.32624V6.66624C15.3906 6.33124 15.1556 5.98124 14.8406 5.85624L10.3406 4.05625C10.1506 3.98125 9.88061 3.98125 9.69061 4.05625L5.19061 5.85624C4.87561 5.98124 4.64062 6.32624 4.64062 6.66624V8.32624ZM8.89062 6.82617C8.89062 7.44617 9.39563 7.95117 10.0156 7.95117C10.6356 7.95117 11.1406 7.44617 11.1406 6.82617C11.1406 6.20617 10.6356 5.70117 10.0156 5.70117C9.39563 5.70117 8.89062 6.20617 8.89062 6.82617ZM9.64062 6.82617C9.64062 6.62117 9.81063 6.45117 10.0156 6.45117C10.2206 6.45117 10.3906 6.62117 10.3906 6.82617C10.3906 7.03117 10.2206 7.20117 10.0156 7.20117C9.81063 7.20117 9.64062 7.03117 9.64062 6.82617Z" fill="#292D32"/>
+<path d="M15 14.7031H5C4.795 14.7031 4.625 14.5331 4.625 14.3281V12.8281C4.625 12.3481 5.02 11.9531 5.5 11.9531H14.5C14.98 11.9531 15.375 12.3481 15.375 12.8281V14.3281C15.375 14.5331 15.205 14.7031 15 14.7031Z" fill="#292D32"/>
+<path d="M6.125 12.7031C5.85167 12.7031 5.625 12.5331 5.625 12.3281V8.82812C5.625 8.62313 5.85167 8.45312 6.125 8.45312C6.39833 8.45312 6.625 8.62313 6.625 8.82812V12.3281C6.625 12.5331 6.39833 12.7031 6.125 12.7031Z" fill="#292D32"/>
+<path d="M8.125 12.7031C7.85167 12.7031 7.625 12.5331 7.625 12.3281V8.82812C7.625 8.62313 7.85167 8.45312 8.125 8.45312C8.39833 8.45312 8.625 8.62313 8.625 8.82812V12.3281C8.625 12.5331 8.39833 12.7031 8.125 12.7031Z" fill="#292D32"/>
+<path d="M10.125 12.7031C9.85167 12.7031 9.625 12.5331 9.625 12.3281V8.82812C9.625 8.62313 9.85167 8.45312 10.125 8.45312C10.3983 8.45312 10.625 8.62313 10.625 8.82812V12.3281C10.625 12.5331 10.3983 12.7031 10.125 12.7031Z" fill="#292D32"/>
+<path d="M12.125 12.7031C11.8517 12.7031 11.625 12.5331 11.625 12.3281V8.82812C11.625 8.62313 11.8517 8.45312 12.125 8.45312C12.3983 8.45312 12.625 8.62313 12.625 8.82812V12.3281C12.625 12.5331 12.3983 12.7031 12.125 12.7031Z" fill="#292D32"/>
+<path d="M14.125 12.7031C13.8517 12.7031 13.625 12.5331 13.625 12.3281V8.82812C13.625 8.62313 13.8517 8.45312 14.125 8.45312C14.3983 8.45312 14.625 8.62313 14.625 8.82812V12.3281C14.625 12.5331 14.3983 12.7031 14.125 12.7031Z" fill="#292D32"/>
+</g>
+<defs>
+<clipPath id="clip0_2989_89585">
+<rect width="12" height="12" fill="white" transform="translate(4 4)"/>
+</clipPath>
+</defs>
+</svg>
 
client/resources/img/pattern/layout/head_logo.svg (added)
+++ client/resources/img/pattern/layout/head_logo.svg
@@ -0,0 +1,29 @@
+<svg width="199" height="48" viewBox="0 0 199 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="&#235;&#140;&#128;&#237;&#149;&#156;&#235;&#175;&#188;&#234;&#181;&#173;&#236;&#160;&#149;&#235;&#182;&#128;" clip-path="url(#clip0_2067_10322)">
+<path id="Vector" d="M48.2745 23.925C48.2745 37.14 37.4695 47.85 24.1373 47.85C10.805 47.85 0 37.14 0 23.925C0 10.71 10.805 0 24.1373 0C37.4695 0 48.2745 10.71 48.2745 23.925Z" fill="white"/>
+<path id="Vector_2" d="M35.4872 22.2601C31.6434 19.6726 26.7251 20.7301 24.1449 24.6151C21.996 27.8701 18.7424 28.2751 17.4864 28.2751C13.3702 28.2751 10.5705 25.4101 9.73065 22.4476C9.73065 22.4476 9.71552 22.3876 9.70795 22.3651C9.70039 22.3351 9.69282 22.2976 9.68525 22.2676C9.35989 21.0301 9.27666 20.4376 9.27666 19.1251C9.27666 12.0376 16.6162 4.1476 27.1715 4.1476C37.7268 4.1476 44.1811 12.3076 45.7776 16.8451C45.7474 16.7626 45.7171 16.6801 45.6944 16.6051C42.6148 7.7251 34.1252 1.3501 24.1298 1.3501C11.5542 1.3501 1.35449 11.4526 1.35449 23.9251C1.35449 35.0701 9.46582 44.6101 20.7173 44.6101C29.6912 44.6101 35.7217 39.6226 38.4835 32.7526C40.0044 28.9951 38.9299 24.5776 35.4872 22.2601Z" fill="#003964"/>
+<path id="Vector_3" d="M45.9065 17.2801C44.5748 12.8551 38.3399 4.14014 27.1566 4.14014C16.5937 4.14014 9.26172 12.0301 9.26172 19.1176C9.26172 20.4301 9.34495 21.0226 9.67031 22.2601C9.53411 21.7201 9.46602 21.1801 9.46602 20.6476C9.46602 13.2676 16.9191 8.16014 24.5764 8.16014C34.9501 8.16014 43.3565 16.4926 43.3565 26.7751C43.3565 34.8301 38.6804 41.8126 31.8857 45.1651C40.6477 42.0226 46.9053 33.7051 46.9053 23.9326C46.9053 21.6226 46.595 19.5826 45.9065 17.2876" fill="#ED1A3B"/>
+<path id="Vector_4" d="M62.3033 16.5748H69.0451V14.0923H59.4658V32.1748H69.325V29.7148H62.3033V16.5748Z" fill="#58595B"/>
+<path id="Vector_5" d="M76.732 21.9898H73.6903V12.6973H71.042V35.1598H73.6903V24.3973H76.732V35.2873H79.4409V12.6973H76.732V21.9898Z" fill="#58595B"/>
+<path id="Vector_6" d="M86.8641 27.9673H84.0342V34.8298H102.406V32.3773H86.8641V27.9673Z" fill="#58595B"/>
+<path id="Vector_7" d="M101.914 12.6973H99.0762V27.1573H101.914V21.3073H105.182V18.8548H101.914V12.6973Z" fill="#58595B"/>
+<path id="Vector_8" d="M96.7762 14.3927H91.3889V12.2402H88.3698V14.3927H83.0127V16.8002H96.7762V14.3927Z" fill="#58595B"/>
+<path id="Vector_9" d="M91.9411 17.7523C91.298 17.4898 90.617 17.3623 89.883 17.3623C89.1491 17.3623 88.4605 17.4973 87.8249 17.7523C87.1818 18.0148 86.6294 18.3673 86.1527 18.8023C85.676 19.2373 85.2977 19.7548 85.0177 20.3473C84.7378 20.9398 84.6016 21.5698 84.6016 22.2448C84.6016 22.9198 84.7378 23.5423 85.0177 24.1198C85.2977 24.6973 85.676 25.2073 86.1527 25.6648C86.6294 26.0998 87.1893 26.4523 87.8249 26.6998C88.4605 26.9548 89.1491 27.0823 89.883 27.0823C90.617 27.0823 91.298 26.9548 91.9411 26.6998C92.5767 26.4448 93.1442 26.0998 93.6436 25.6648C94.1051 25.2073 94.4759 24.6973 94.7483 24.1198C95.0283 23.5423 95.172 22.9198 95.172 22.2448C95.172 21.5698 95.0283 20.9398 94.7483 20.3473C94.4683 19.7548 94.0976 19.2373 93.6436 18.8023C93.1518 18.3598 92.5843 18.0148 91.9411 17.7523ZM91.699 23.9848C91.2072 24.4648 90.6094 24.7048 89.9133 24.7048C89.2172 24.7048 88.6194 24.4648 88.1276 23.9848C87.6357 23.5048 87.386 22.9198 87.386 22.2223C87.386 21.5248 87.6357 20.9398 88.1276 20.4373C88.6194 19.9348 89.2172 19.6873 89.9133 19.6873C90.6094 19.6873 91.2072 19.9348 91.699 20.4373C92.1908 20.9398 92.4405 21.5323 92.4405 22.2223C92.4405 22.9123 92.1908 23.4973 91.699 23.9848Z" fill="#58595B"/>
+<path id="Vector_10" d="M119.877 13.4849H108.148V24.9599H119.877V13.4849ZM117.092 22.5524H110.963V15.9149H117.092V22.5524Z" fill="#58595B"/>
+<path id="Vector_11" d="M127.285 12.6973H124.447V27.1573H127.285V12.6973Z" fill="#58595B"/>
+<path id="Vector_12" d="M111.622 27.2852H108.814V34.8302H127.489V32.3477H111.622V27.2852Z" fill="#58595B"/>
+<path id="Vector_13" d="M147.283 19.8898H150.12V13.1548H132.543V15.6373H147.283V19.8898Z" fill="#58595B"/>
+<path id="Vector_14" d="M130.855 24.1424H139.928V27.4649H132.286V29.9174H147.282V35.3399H150.12V27.4649H142.735V24.1424H151.807V21.6899H130.855V24.1424Z" fill="#58595B"/>
+<path id="Vector_15" d="M171.866 17.1823H167.621V19.5898H171.866V24.6748H174.703V12.6973H171.866V17.1823Z" fill="#58595B"/>
+<path id="Vector_16" d="M171.019 26.58C170.489 26.07 169.861 25.6725 169.142 25.38C168.416 25.0875 167.644 24.9375 166.827 24.9375C166.01 24.9375 165.26 25.0875 164.526 25.38C163.793 25.6725 163.164 26.0775 162.635 26.58C162.105 27.09 161.689 27.675 161.371 28.3425C161.053 29.01 160.895 29.7225 160.895 30.48C160.895 31.2375 161.053 31.95 161.371 32.6175C161.689 33.285 162.105 33.87 162.635 34.38C163.164 34.89 163.793 35.2875 164.526 35.58C165.253 35.8725 166.025 36.0225 166.827 36.0225C167.629 36.0225 168.416 35.8725 169.142 35.58C169.861 35.2875 170.489 34.8825 171.019 34.38C171.548 33.8775 171.972 33.285 172.282 32.6175C172.6 31.95 172.751 31.2375 172.751 30.48C172.751 29.7225 172.592 29.0025 172.282 28.3425C171.972 27.675 171.548 27.09 171.019 26.58ZM169.044 32.6475C168.423 33.2475 167.674 33.5475 166.804 33.5475C165.934 33.5475 165.223 33.2475 164.61 32.6475C163.997 32.0475 163.687 31.32 163.687 30.4575C163.687 29.595 163.997 28.89 164.61 28.2825C165.223 27.675 165.957 27.3675 166.804 27.3675C167.651 27.3675 168.416 27.6675 169.044 28.2825C169.664 28.89 169.974 29.6175 169.974 30.4575C169.974 31.2975 169.664 32.0475 169.044 32.6475Z" fill="#58595B"/>
+<path id="Vector_17" d="M165.987 24.2248L167.954 22.5973L162.181 15.5848H167.727V13.1548H154.697V15.5848H160.403L154.614 22.9798L156.665 24.5998L161.288 18.4498L165.987 24.2248Z" fill="#58595B"/>
+<path id="Vector_18" d="M177.852 26.9702V29.4452H186.894V35.2727H189.731V29.4452H198.803V26.9702H177.852Z" fill="#58595B"/>
+<path id="Vector_19" d="M197.116 13.0649H194.301V15.9224H182.324V13.0649H179.539V23.9249H197.116V13.0649ZM182.324 18.3599H194.301V21.4724H182.324V18.3599Z" fill="#58595B"/>
+<path id="Vector_20" d="M24.1376 46.5001C36.716 46.5001 46.9129 36.3929 46.9129 23.9251C46.9129 11.4573 36.716 1.3501 24.1376 1.3501C11.5591 1.3501 1.3623 11.4573 1.3623 23.9251C1.3623 36.3929 11.5591 46.5001 24.1376 46.5001Z" stroke="#00AEEF" stroke-width="0.25" stroke-miterlimit="10"/>
+</g>
+<defs>
+<clipPath id="clip0_2067_10322">
+<rect width="199" height="48" fill="white"/>
+</clipPath>
+</defs>
+</svg>
 
client/resources/img/pattern/layout/lnb_ico_prev.svg (added)
+++ client/resources/img/pattern/layout/lnb_ico_prev.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15.4375 5.75L8.5625 12L15.4375 18.25" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round"/>
+</svg>
 
client/resources/img/pattern/layout/m_head_ico_navi_menu.svg (added)
+++ client/resources/img/pattern/layout/m_head_ico_navi_menu.svg
@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M2 4.5H22" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M2 11.5H22" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M2 18.5H22" stroke="#2D2D2D" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
 
client/resources/img/pattern/layout/m_head_ico_navi_sch.svg (added)
+++ client/resources/img/pattern/layout/m_head_ico_navi_sch.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="2.8" y="2.8" width="15.4" height="15.4" rx="7.7" stroke="#2D2D2D" stroke-width="1.6"/>
+<path d="M16.25 16.25L21.75 21.75" stroke="#2D2D2D" stroke-width="1.6" stroke-linejoin="round"/>
+</svg>
 
client/resources/js/commonPlugin.js (added)
+++ client/resources/js/commonPlugin.js
@@ -0,0 +1,844 @@
+import { save } from "../../resources/api/cntnStats";
+import store from "../../views/pages/AppStore";
+
+/**
+ * 공통 처리 플러그인
+ */
+function prefixZero(number, length) {
+    var zero = '';
+    number = number.toString();
+
+    if (number.length < length) {
+        for (let i = 0; i < length - number.length; i++) {
+            zero += '0';
+        }
+    }
+    return zero + number;
+}
+/**
+ * 다운로드 이력 등록
+ */
+
+async function cntnSave(data){
+    const isLogin = store.state.loginAt; // 로그인 유무 정보 확인
+
+    axios({
+        url: "/stats/saveProc.json",
+        method: "post",
+        headers: {
+            'Content-Type': 'application/json; charset=UTF-8',
+            Authorization: isLogin
+        },
+        data: data,
+    }).then(async (response) => {       
+        return
+    }).catch(async (error) => {
+        return
+    })
+}
+
+import Vue from "vue";
+import axios from "axios";
+import {cmmnFindByCdSystem}  from "../../resources/api/codeManage";
+import COMMON_UTIL from '../../resources/js/commonUtil';
+import useStore from "vuex";
+
+export default {
+    install(Vue) {
+        
+        // 공통메세지
+        let messageList = [];
+        let alertRef = {};
+
+        Vue.config.globalProperties.$setAlertRef = function (ref) {
+            alertRef = ref;
+        }
+
+        // 공통코드 등록
+        Vue.config.globalProperties.$getCmmnMessage = async function(code) {
+            try {
+                const params = { cdId: code};
+                const res = await cmmnFindByCdSystem(params);               
+                if (res.status == 200) {                
+                    return res.data.data.code.childCdList;
+                  //  messageList = res.data.data.code.childCdList;     
+                }
+            } catch (error) {
+                alert(error.response.data.message);
+            }
+        },
+
+        // 모달 호출
+        Vue.config.globalProperties.$showAlert = async function (message) {
+             alertRef.setMessage(message);
+            const resultData = await alertRef.showModal();
+            return resultData;          
+        }
+
+          // confirm 창 호출 
+          Vue.config.globalProperties.$showConfirm = async function (message) {
+           // alertRef.setTitle(title);
+           // this.$store.commit('setModalFlag', {'open' : true, 'message' : message, 'confirm' : 'true' });
+            alertRef.setMessage(message);
+            const resultData = await alertRef.showConfirm();
+            return resultData;
+        }    
+
+        //시간 구하기 
+        Vue.config.globalProperties.$getFullTime = function (hour, minute, seconds) {
+            var date = new Date();
+            var h = date.getHours();
+            var m = date.getMinutes();
+            var s = date.getSeconds();
+            if (this.$isEmpty(hour) == false) {
+                h += hour;
+            } if (this.$isEmpty(minute) == false) {
+                m += minute;
+            } if (this.$isEmpty(seconds) == false) {
+                s += seconds;
+            }
+            return prefixZero(h, 2) + ":" + prefixZero(m, 2) + ":" + prefixZero(s, 2);
+        }     
+
+         // 공통코드 호출
+         Vue.config.globalProperties.$getCommonCode = async function (GroupCode) {
+            // const promise = new Promise((resolve, reject) => {
+            //     axios({
+            //         url: '/cmmn/code/findByCdSystem.json',
+            //         method: 'post',
+            //         headers: {
+            //             'Content-Type': 'application/json; charset=UTF-8'
+            //         },
+            //         data: JSON.stringify({ 'cdId': GroupCode })
+            //     }).then(function (response) {
+            //         resolve(response.data.data.code.childCdList)
+            //     }).catch(function (error) {
+            //         resolve('cancle')
+            //     });
+            // });
+            // return promise.then(
+            //     (data) => {
+            //         return data;
+            //     }
+            // ).catch(function (err) {
+            //     console.log(err)
+            //     return [];
+            // });
+        }
+
+        // 공통코드 값 매핑
+        Vue.config.globalProperties.$getCommonCodeValue = function (cmmnCode, code) {                 
+            for(let i = 0 ; i < cmmnCode.length; i++){             
+                if(cmmnCode[i].cdId == code){
+                    return  cmmnCode[i].cdNm;
+                }
+            }
+            return code;
+        }
+
+        // 빈값체크 
+        Vue.config.globalProperties.$isEmpty = function (data) {
+            if (data === undefined || data === null || data === "" || data.length === 0 || (data.constructor == Object && Object.keys(data).length === 0)) {
+                if ((typeof data) === "number") {
+                    return false
+                } else {
+                    return true;
+                }
+            } else {
+                return false;
+            }
+        }
+
+        /**
+         * 일시에서 연월일 추출
+         */
+        Vue.config.globalProperties.$yyyymmdd = function (data) {
+            if (data === null || data === "") {
+                return "-";
+            } else {
+            let date = data.substr(0, 10);
+                return date;
+            }
+        }
+
+        /**
+         * 일시에서 연도 추출
+         */
+        Vue.config.globalProperties.$yyyy = function (data) {
+            if (data === null || data === "") {
+                return "-";
+            } else {
+            let date = data.substr(0, 4);
+                return date;
+            }
+        }
+
+
+        /**
+         * 전화번호 출력 시 '-'을 추가하여 출력
+         */
+        Vue.config.globalProperties.$HyphenMinus = function (phoneNumber) {
+            if (!phoneNumber) return phoneNumber;
+    
+            phoneNumber = phoneNumber.replace(/[^0-9]/g, "");
+    
+            let tmp = "";
+            if (phoneNumber.length < 4) {
+            return phoneNumber;
+            } else if (phoneNumber.length < 7) {
+            tmp += phoneNumber.substr(0, 3);
+            tmp += "-";
+            tmp += phoneNumber.substr(3);
+            return tmp;
+            } else if (phoneNumber.length == 8) {
+            tmp += phoneNumber.substr(0, 4);
+            tmp += "-";
+            tmp += phoneNumber.substr(4);
+            return tmp;
+            } else if (phoneNumber.length < 10) {
+            if (phoneNumber.substr(0, 2) == "02") {
+                //02-123-5678
+                tmp += phoneNumber.substr(0, 2);
+                tmp += "-";
+                tmp += phoneNumber.substr(2, 3);
+                tmp += "-";
+                tmp += phoneNumber.substr(5);
+                return tmp;
+            }
+            } else if (phoneNumber.length < 11) {
+            if (phoneNumber.substr(0, 2) == "02") {
+                //02-1234-5678
+                tmp += phoneNumber.substr(0, 2);
+                tmp += "-";
+                tmp += phoneNumber.substr(2, 4);
+                tmp += "-";
+                tmp += phoneNumber.substr(6);
+                return tmp;
+            } else {
+                //010-123-4567
+                tmp += phoneNumber.substr(0, 3);
+                tmp += "-";
+                tmp += phoneNumber.substr(3, 3);
+                tmp += "-";
+                tmp += phoneNumber.substr(6);
+                return tmp;
+            }
+            } else {
+            //010-1234-5678
+            tmp += phoneNumber.substr(0, 3);
+            tmp += "-";
+            tmp += phoneNumber.substr(3, 4);
+            tmp += "-";
+            tmp += phoneNumber.substr(7);
+            return tmp;
+            }
+        }
+
+        /**
+         * 사업자등록번호 xxx-xx-xxxx 양식으로 출력
+         */
+        Vue.config.globalProperties.$hyphenBrno = function (brno) {
+            if (!brno) return brno;
+        
+            brno = brno.replace(/[^0-9]/g, "");
+        
+            if (brno.length !== 10) return brno;
+        
+            let formattedBrno = "";
+            formattedBrno += brno.substr(0, 3);
+            formattedBrno += "-";
+            formattedBrno += brno.substr(3, 2);
+            formattedBrno += "-";
+            formattedBrno += brno.substr(5, 5);
+        
+            return formattedBrno;
+        }
+
+        /**
+         * 오늘 년-월-일 구하기
+         */
+        Vue.config.globalProperties.$today = function () {
+        let date = new Date();
+        let today = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10);
+        return today;
+        }
+    
+        /**
+         * 일주일전 년-월-일 구하기
+         */
+        Vue.config.globalProperties.$oneWeekAgo = function () {
+            let date = new Date();
+            // 현재 날짜에서 7일을 빼줍니다.
+            let oneWeekAgoDate = new Date(date.getTime() - (6 * 24 * 60 * 60 * 1000) - (date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10);
+            return oneWeekAgoDate;
+        }
+
+        /**
+         * N달전 년-월-일 구하기
+         */
+        Vue.config.globalProperties.$nMonthAgo = function (today, nMonth) {
+            let date = new Date(today);
+            let oneMonthAgo = new Date(date.setMonth(date.getMonth() - nMonth) - (date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10);
+            return oneMonthAgo;
+        },
+
+        /**
+         * N년전 년-월-일 구하기
+         */
+        Vue.config.globalProperties.$nYearAgo = function (today, nYear) {
+            let date = new Date(today);
+            let nYearAgo = new Date(date.setFullYear(date.getFullYear() - nYear) - (date.getTimezoneOffset() * 60000)).toISOString().substring(0, 4);
+            return nYearAgo;
+        },
+
+        /* 유효성 검사  */ 
+        // 아이디 정규식(5~20자의 영문 소문자, 숫자와 특수기호(_),(-)만 사용)
+        Vue.config.globalProperties.$idCheck =  function (data) {
+            let validateId = /^(?=.*[a-z])[a-z0-9_-]{5,20}$/;
+            if (validateId.test(data) === true) return true;
+            return false;
+        }
+        
+        // 비밀번호 정규식(8~16자의 영문 대문자, 소문자, 숫자, 특수문자를 사용)
+        Vue.config.globalProperties.$pwCheck =  function (data) {
+            let validatePw = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,16}$/
+            if (validatePw.test(data) === true) return true;
+            return false;
+        }
+    
+        // 이메일 형식 검사
+        Vue.config.globalProperties.$email = function (email) {
+            const emailPattern = /^[A-Za-z0-9_\\.\\-]+@[A-Za-z0-9\\-]+\.[A-Za-z0-9\\-\\.]+$/;
+            try {
+                return emailPattern.test(email);
+            } catch (e) {
+                return false;
+            }
+        }
+        
+        // 홈페이지 형식 검사
+        Vue.config.globalProperties.$checkHomePage =  function (data) {
+            let pattern = /^(https?:\/\/)?(www\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(\/[^\s]*)?$/;
+            if (pattern.test(data) === true) return true;
+            return false;
+        }
+
+        //사용자명 정규식
+        Vue.config.globalProperties.$checkName = function (data) {
+            let validateEmail = /^[가-힣a-zA-Z]{1,20}$/;
+            if (validateEmail.test(data) === true) return true;
+            return false;
+        }
+        
+        //닉네임 정규식
+        Vue.config.globalProperties.$checkNknm = function (data) {
+            let validateEmail = /^[a-zA-Z가-힣0-9-_]{1,20}$/;
+            if (validateEmail.test(data) === true) return true;
+            return false;
+        }
+
+        // IPv4 정규식
+        Vue.config.globalProperties.$ipv4 = function (ip) {
+            let validateIPv4 = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/;
+            if (validateIPv4.test(ip) === true) return true;
+            return false;
+        }
+    
+        // 3글자 마다 콤마 찍기 (돈)
+        Vue.config.globalProperties.$comma = function (text) {
+            try {
+                return text.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
+            } catch (e) {
+                if (text === undefined || text === null || text === "" || text.length === 0) {
+                    return "0";
+                } else {
+                    return text;
+                }
+            }
+        }    
+        
+        // 사업자번호 정규식(10자리)
+        Vue.config.globalProperties.$businessNumber = function (data) {
+            let validateBusinessNumber = /^\d{10}$/;
+            if (validateBusinessNumber.test(data) === true) return true;
+            return false;
+        }
+
+        // 이메일 마스킹 처리  
+        Vue.config.globalProperties.$email_format_WithMasking = function (mail) {
+            if (mail != null && mail != '' && mail.length > 3) {            
+                return mail.replace(/(?<=.{3})./gi, '*');
+            }else{
+                return mail;
+            }
+        }
+
+          // 전화번호 마스킹 처리 
+          Vue.config.globalProperties.$number_format_WithMasking = function (number) {
+            if (number != null && number != '') {
+                let maskNumber = ''; 
+                let phone = COMMON_UTIL.getMask(number); 
+                
+                let phoneParts = phone.split('-'); 
+                
+                if (phoneParts.length === 3) { 
+                    let middlePartMasked = phoneParts[1].replace(/[0-9]/g, '*'); 
+                    maskNumber = phoneParts[0] + '-' + middlePartMasked + '-' + phoneParts[2]; 
+                } else {
+                    return phone;
+                }
+                return maskNumber;
+            } else {
+                return "";
+            }
+        }
+
+         // 첨부파일 다운로드 로직
+         Vue.config.globalProperties.$getImageDown =  async function (fileId) {          
+            try {
+                const response = await axios({
+                    url: '/file/fileDownload.json', // URL 경로 확인
+                    method: 'post',
+                    headers: {
+                        'Content-Type': 'application/json; charset=UTF-8',
+                        Authorization: this.$store.state.authorization,
+                    },
+                    data: fileId,
+                    responseType: 'blob',
+                });              
+                const url = window.URL.createObjectURL(new Blob([response.data]));
+                return  url;                
+            } catch (error) {
+                // alert('파일 다운로드 중 오류가 발생했습니다.');
+            }
+        }
+        
+        // 첨부파일 다운로드 로직
+        Vue.config.globalProperties.$imageDown =  async function (file , srcId) {          
+            try {
+                const response = await axios({
+                    url: '/file/fileDownload.json', // URL 경로 확인
+                    method: 'post',
+                    headers: {
+                        'Content-Type': 'application/json; charset=UTF-8',
+                        Authorization: this.$store.state.authorization,
+                    },
+                    data: file.fileId,
+                    responseType: 'blob',
+                });              
+                const url = window.URL.createObjectURL(new Blob([response.data]));
+                document.getElementById(srcId).src= url;                
+            } catch (error) {
+                // alert('파일 다운로드 중 오류가 발생했습니다.');
+            }
+        }
+
+        // 첨부파일 다운로드 로직(파일아이디, 파일명 )
+        Vue.config.globalProperties.$imageDownByid =  async function (fileId, srcId) {          
+                              
+            try {
+                const response = await axios({
+                    url: '/file/fileDownload.json', // URL 경로 확인
+                    method: 'post',
+                    headers: {
+                        'Content-Type': 'application/json; charset=UTF-8',
+                        Authorization: this.$store.state.authorization,
+                    },
+                    data: fileId,
+                    responseType: 'blob',
+                });              
+                const url = window.URL.createObjectURL(new Blob([response.data]));
+                document.getElementById(srcId).src= url;    
+            } catch (error) {
+                // alert('파일 다운로드 중 오류가 발생했습니다.');
+            }                
+        }
+        
+        //첨부파일 다운로드 로직
+        Vue.config.globalProperties.$downloadFile =  async function (file,auth) {        
+            
+            if(auth.fileDwnldAuthrtYn != 'Y'){
+                alert('파일다운로드 권한이 없습니다.');
+                return false;
+            }
+
+            try {
+                this.$store.commit('setLoading', true);
+                
+                if(!this.$route.path.startsWith('/kdm')) {
+                    let menuId = this.$store.state.currentMenu
+                    let bbsMngId = this.$route.meta.typeId;
+                    let bbsId= null;
+                    const roles = this.$store.state.roles.map(auth => auth.authority);
+                    if(bbsMngId === 'CONTS_0000000063') {
+                        bbsMngId = 'BBS_MNG_0000000004';
+                    }
+                    if(this.$route.query.pageId) {
+                        bbsId = this.$route.query.pageId;
+                    }
+                    let data = { 'typeId' : 'FILE', 'menuId' : menuId, 'fileMngId': file.fileMngId, 'fileId': file.fileId
+                                ,'bbsMngId' : bbsMngId, 'bbsId' : bbsId, 'mbrAuthList' : roles }
+
+                    // await save(data)
+                    await cntnSave(data)
+
+                } 
+
+                const response = await axios({
+                    url: '/file/fileDownload.json', // URL 경로 확인
+                    method: 'post',
+                    headers: {
+                        'Content-Type': 'application/json; charset=UTF-8',
+                        Authorization: this.$store.state.authorization,
+                    },
+                    data: file.fileId,
+                    responseType: 'blob',
+                });
+                const url = window.URL.createObjectURL(new Blob([response.data]));
+                const link = document.createElement('a');
+                link.href = url;
+                link.setAttribute('download', file.fileNm+'.'+file.extnNm);
+                document.body.appendChild(link);
+                link.click();
+                document.body.removeChild(link);
+                window.URL.revokeObjectURL(url);
+
+                // if(!this.$route.path.startsWith('/kdm')) {
+                //     let menuId = this.$store.state.currentMenu
+                //     let bbsMngId = this.$route.meta.typeId;
+                //     let bbsId= null;
+                //     const roles = this.$store.state.roles.map(auth => auth.authority);
+                //     if(bbsMngId === 'CONTS_0000000063') {
+                //         bbsMngId = 'BBS_MNG_0000000004';
+                //     }
+                //     if(this.$route.query.pageId) {
+                //         bbsId = this.$route.query.pageId;
+                //     }
+                //     let data = { 'typeId' : 'FILE', 'menuId' : menuId, 'fileMngId': file.fileMngId, 'fileId': file.fileId
+                //                 ,'bbsMngId' : bbsMngId, 'bbsId' : bbsId, 'mbrAuthList' : roles }
+                //     try {
+                //         // await save(data)
+                //         await save1(data)
+                //     } catch(error){
+                //         alert(error)
+                //     }
+                // } 
+
+            } catch (error) {
+                alert('파일 다운로드 중 오류가 발생했습니다.')
+            }finally{
+                this.$store.commit('setLoading', false);
+            }
+        },       
+
+         //첨부파일 다운로드 로직
+         Vue.config.globalProperties.$downloadFileById =  async function (fileid, fileMngID, fileNm,bbsId,auth) {   
+             
+            if(auth.fileDwnldAuthrtYn != 'Y'){
+                alert('파일다운로드 권한이 없습니다.');
+                return false;
+            }
+
+            try {
+                this.$store.commit('setLoading', true);
+                const response = await axios({
+                    url: '/file/fileDownload.json', // URL 경로 확인
+                    method: 'post',
+                    headers: {
+                        'Content-Type': 'application/json; charset=UTF-8',
+                        Authorization: this.$store.state.authorization,
+                    },
+                    data: fileid,
+                    responseType: 'blob',
+                });
+                const url = window.URL.createObjectURL(new Blob([response.data]));
+                const link = document.createElement('a');
+                link.href = url;
+                link.setAttribute('download', fileNm);
+                document.body.appendChild(link);
+                link.click();
+                document.body.removeChild(link);
+                window.URL.revokeObjectURL(url);
+
+                if(!this.$route.path.startsWith('/kdm')) {
+                    let menuId = this.$store.state.currentMenu
+                    // 공통관리파일
+                    let bbsMngId = 'BBS_MNG_0000000007'                   
+                    const roles = this.$store.state.roles.map(auth => auth.authority);   
+
+                    let data = { 'typeId' : 'FILE', 'menuId' : menuId, 'fileMngId': fileMngID , 'fileId': fileid
+                                ,'bbsMngId' : bbsMngId, 'bbsId' : bbsId, 'mbrAuthList' : roles }
+                    await save(data)
+                } 
+
+            } catch (error) {
+                // alert('파일 다운로드 중 오류가 발생했습니다.');
+                alert(this.$getCmmnMessage("err024"))
+            }finally{
+                this.$store.commit('setLoading', false);
+            }
+        }      
+
+         // PDF 뷰어오픈 
+         Vue.config.globalProperties.$openPdfViewr=  async function (file, object, modal) {          
+            try {
+                const response = await axios({
+                    url: '/file/fileDownload.json', // URL 경로 확인
+                    method: 'post',
+                    headers: {
+                        'Content-Type': 'application/json; charset=UTF-8',
+                        Authorization: this.$store.state.authorization,
+                    },
+                    data: file.fileId,
+                    responseType: 'blob',
+                });              
+                const url = window.URL.createObjectURL(new Blob([response.data]));
+                object = url;
+                modal = true;
+            } catch (error) {
+                // alert('파일 다운로드 중 오류가 발생했습니다.');
+            }
+        }
+
+        // PDF 뷰어오픈 
+        Vue.config.globalProperties.$openPdfViewrWindwow =  async function (fileid, pageAuth) {    
+                        
+            if(pageAuth.fileDwnldAuthrtYn != 'Y'){
+                alert('파일확인 권한이 없습니다.');
+                return false;
+            }
+
+            try {              
+                this.$store.commit('setPdfId', fileid);
+                window.open(
+                    "/cmmn/pdfView.page",
+                    '_blank'
+                    );
+            } catch (error) {
+                // alert('파일 다운로드 중 오류가 발생했습니다.');
+            }
+        }
+
+
+        //첨부파일 다운로드 로직(권한체크 제외)
+        Vue.config.globalProperties.$downloadFileByIdNoAuthCheck =  async function (fileid, fileMngID, fileNm,bbsId) {   
+             
+           
+            try {
+                this.$store.commit('setLoading', true);
+                const response = await axios({
+                    url: '/file/fileDownload.json', // URL 경로 확인
+                    method: 'post',
+                    headers: {
+                        'Content-Type': 'application/json; charset=UTF-8',
+                        Authorization: this.$store.state.authorization,
+                    },
+                    data: fileid,
+                    responseType: 'blob',
+                });
+                const url = window.URL.createObjectURL(new Blob([response.data]));
+                const link = document.createElement('a');
+                link.href = url;
+                link.setAttribute('download', fileNm);
+                document.body.appendChild(link);
+                link.click();
+                document.body.removeChild(link);
+                window.URL.revokeObjectURL(url);
+
+                if(!this.$route.path.startsWith('/kdm')) {
+                    let menuId = this.$store.state.currentMenu
+                    // 공통관리파일
+                    let bbsMngId = 'BBS_MNG_0000000007'                   
+                    const roles = this.$store.state.roles.map(auth => auth.authority);   
+
+                    let data = { 'typeId' : 'FILE', 'menuId' : menuId, 'fileMngId': fileMngID , 'fileId': fileid
+                                ,'bbsMngId' : bbsMngId, 'bbsId' : bbsId, 'mbrAuthList' : roles }
+                    await save(data)
+                } 
+
+            } catch (error) {
+                // alert('파일 다운로드 중 오류가 발생했습니다.');
+                alert(this.$getCmmnMessage("err024"))
+            }finally{
+                this.$store.commit('setLoading', false);
+            }
+        }      
+
+
+        
+
+        //첨부파일 다운로드(권한검사 X) - 회원가입
+        Vue.config.globalProperties.$downloadFileNoAuthCheck =  async function (file) {                    
+            try {
+                this.$store.commit('setLoading', true);
+                const response = await axios({
+                    url: '/file/fileDownload.json', // URL 경로 확인
+                    method: 'post',
+                    headers: {
+                        'Content-Type': 'application/json; charset=UTF-8',
+                        Authorization: this.$store.state.authorization,
+                    },
+                    data: file.fileId,
+                    responseType: 'blob',
+                });               
+                const url = window.URL.createObjectURL(new Blob([response.data]));
+                const link = document.createElement('a');
+                link.href = url;
+                link.setAttribute('download', file.fileNm+'.'+file.extnNm);
+                document.body.appendChild(link);
+                link.click();
+                document.body.removeChild(link);
+                window.URL.revokeObjectURL(url);
+
+            } catch (error) {
+                // alert('파일 다운로드 중 오류가 발생했습니다.');
+                alert(this.$getCmmnMessage("err024"))
+            }finally{
+                this.$store.commit('setLoading', false);
+            }
+        }
+        
+
+       
+        // PDF 뷰어오픈 
+        Vue.config.globalProperties.$openPdfViewrWindwowNoAuthCheck =  async function (fileid) {    
+                        
+            if(pageAuth.fileDwnldAuthrtYn != 'Y'){
+                alert('파일확인 권한이 없습니다.');
+                return false;
+            }
+
+            try {              
+                this.$store.commit('setPdfId', fileid);
+                window.open(
+                    "/cmmn/pdfView.page",
+                    '_blank'
+                    );
+            } catch (error) {
+                // alert('파일 다운로드 중 오류가 발생했습니다.');
+            }
+        }
+
+         // PDF 뷰어오픈 
+         Vue.config.globalProperties.$reportViwer =  function () {   
+            try {                           
+                window.open(
+                    "/cmmn/ReportViewer.page",
+                    '_blank'
+                    );
+            } catch (error) {
+                // alert('파일 다운로드 중 오류가 발생했습니다.');
+            }
+        }
+
+        // 메뉴 상단 베너 정보 
+        Vue.config.globalProperties.$getMenuInfo = function () {
+            return this.$store.state.menuInfo;
+        }
+
+        // PageNavigation 정보
+        Vue.config.globalProperties.$getPageNaviInfo = function () {
+            return this.$store.state.pageNaviInfo;
+        }
+
+        // PageNavigation 정보
+        Vue.config.globalProperties.$setLoading = function (bool) {
+            this.$store.commit('setLoading', bool);
+        }
+
+        // 최상단 이동 
+        Vue.config.globalProperties.$scrollToTop = function (bool) {
+            window.scrollTo({
+                top: 0,
+                behavior: 'smooth' // 부드럽게 스크롤
+              });
+        }
+
+         // 최상단 이동 
+         Vue.config.globalProperties.$replaceImagePath = function (val) {
+          
+            if(val != null){
+                return   val.replace(/\\/gi, "/").replace(/c\:/gi,"");
+            }else{
+                return   val;
+            }
+
+           
+        }
+
+        //unix -> date 변환
+        Vue.config.globalProperties.$formatUnixToDate = function (val) {
+            const date = new Date(val);
+            const year = date.getFullYear();
+            const month = String(date.getMonth() + 1).padStart(2, '0');
+            const day = String(date.getDate()).padStart(2, '0');
+            return `${year}-${month}-${day}`;
+        }
+
+        //이름 마스킹 처리
+        Vue.config.globalProperties.$name_format_WithMasking = function (name) {
+            if (name != null && name != '') {
+                if (name.length === 2) {
+                    return name.charAt(0) + '*';
+                } else if (name.length === 3) {
+                    return name.charAt(0) + '*' + name.charAt(2);
+                } else if (name.length >= 4) {
+                    return name.charAt(0) + '*'.repeat(name.length - 2) + name.charAt(name.length - 1);
+                }
+            }
+            return name;
+        }
+
+         //이름 마스킹 처리
+         Vue.config.globalProperties.$id_format_WithMasking = function (name) {
+            if (name != null && name != '') {
+                if (name.length === 2) {
+                    return name.charAt(0) + '*';
+                } else if (name.length === 3) {
+                    return name.charAt(0) + '*' + name.charAt(2);
+                } else if (name.length >= 4) {
+                    return name.charAt(0) + name.charAt(1) + '*'.repeat(name.length - 4) + name.charAt(name.length - 2) + name.charAt(name.length - 1);
+                }
+            }
+            return name;
+        }
+
+        //타이틀 변경
+        Vue.config.globalProperties.$set_title = function (newTitle) {
+            const title = document.getElementById('dynamic-title');
+            title.innerText = newTitle
+        }
+    
+
+        //토큰 저장 
+        Vue.config.globalProperties.$setToken =  function (setAuthorization, setRefresh) {             
+            this.$store.commit("setAuthorization", setAuthorization);
+            //this.$store.commit("setRefresh", setRefresh.refresh);
+           // this.$cookies.set('refresh',res.headers.refresh)
+            /** jwt토큰 복호화 **/
+            const base64String = setAuthorization.split('.')[1];
+
+            const base64 = base64String.replace(/-/g, '+').replace(/_/g, '/');    
+
+            const mbr = JSON.parse(decodeURIComponent(window.atob(base64).split('').map(function (c) {
+            return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
+            }).join('')));
+         
+            this.$store.commit("setMbrId", mbr.mbrId);
+            this.$store.commit("setMbrNm", mbr.mbrEncptFlnm);
+            this.$store.commit("setAuthrtNm", mbr.authrtNm);
+            this.$store.commit("setAuthrtTypeLvl", mbr.authrtTypeLvl);
+            this.$store.commit('setRoles', mbr.roles);
+
+            return mbr.roles;
+          }        
+
+        //파일 크기 처리
+        Vue.config.globalProperties.$formatFileSize =  function (size) {
+            if (size < 1024) return `${size} bytes`;
+            if (size < 1024 * 1024) return `${(size / 1024).toFixed(2)} KB`;
+            if (size < 1024 * 1024 * 1024) return `${(size / (1024 * 1024)).toFixed(2)} MB`;
+            return `${(size / (1024 * 1024 * 1024)).toFixed(2)} GB`;
+        }        
+    }
+}
 
client/resources/scss/admin/content.scss (added)
+++ client/resources/scss/admin/content.scss
@@ -0,0 +1,275 @@
+.content-wrap {
+    width: 100%;
+    height: calc(100% - 48px);
+    padding: 3rem;
+
+
+
+    .box-title,
+    .section-title {
+        font-size: var(--tk-fz-title-md);
+        font-weight: 700;
+        margin-bottom: 1rem;
+    }
+
+
+    .search-bar {
+        @include flex-layout(flex, center, end);
+        margin-bottom: 1rem;
+
+        .form-select {
+            width: 120px;
+        }
+
+        .form-control {
+            width: 300px;
+            margin-left: 1rem;
+        }
+
+        .btn {
+            margin-left: 1rem;
+        }
+    }
+
+    .btn-wrap {
+        @include flex-layout(flex, center, end);
+        padding: 3rem 0;
+
+        button {
+            margin-left: 1rem
+        }
+    }
+
+    .btn-wrap.list {
+        @include flex-layout(flex, center, space-between);
+        padding: 3rem 0;
+    }
+
+    .form-content {
+        padding: 3rem;
+        display: grid;
+        grid-template-columns: 1fr 1fr;
+        // grid-template-rows: 1fr 1fr;
+
+        >div {
+            @include flex-layout(flex, center, start);
+            width: 100%;
+            padding: 1rem;
+            border-bottom: 1px solid var(--tk-gray-10);
+
+            .form-title {
+                width: 180px;
+                font-weight: 700;
+
+                span {
+                    color: var(--tk-point-40);
+                    margin-right: .5rem;
+                }
+            }
+
+            .form-select {
+                width: 200px;
+            }
+
+            .form-control {
+                max-width: calc(100% - 180px);
+            }
+
+            .form-group {
+                .form-control {
+                    max-width: 100%;
+                }
+
+                span {
+                    font-size: var(--tk-fz-detail-sm);
+                }
+            }
+        }
+        >div:nth-child(1),
+        div:nth-child(2) {
+            padding-top: 0;
+        }
+        >div:last-child {
+            grid-column: 1/3;
+            padding-bottom: 0;
+            border-bottom: 0;
+        }
+
+        // 자식 div 개수가 짝수일 때 마지막 div의 스타일을 변경
+        &:has(> div:nth-child(even):last-child) {
+            > div{
+                padding-left: 3rem;
+            }
+            > div:last-child {
+                grid-column: unset;
+            }
+            > div:nth-last-child(2) {
+                border-bottom: 0;
+            }
+        }
+
+        .check-area{
+            @include flex-layout(flex, center);
+            gap: 3rem;
+        }
+
+    }
+
+    >.content-zone {
+        height: calc(100% - 70px);
+        background-color: var(--tk-white);
+        padding: 3rem;
+        @include radius(30);
+
+        >.content {
+            height: 100%;
+
+            .scroll {
+                height: 100%;
+                overflow-y: auto;
+
+                .top-zone {
+
+                    >div {
+                        margin-bottom: 5rem;
+
+                        .tbl {
+                            .table-title {
+                                @include ellipsis(1);
+                            }
+
+                        }
+                    }
+
+                }
+
+                .middle-zone {
+                    @include flex-layout(flex, flex-start, space-between);
+                    gap: 3rem;
+                    margin-bottom: 5rem;
+
+                    .first-box,
+                    .two-box,
+                    .three-box {
+                        flex: 0 0 calc(33.333% - 2rem);
+                        max-width: calc(33.333% - 2rem);
+                        padding: 2rem;
+                        border-radius: var(--tk-rd-12);
+                        text-align: center;
+                        border: 1px solid var(--tk-gray-10);
+
+
+                    }
+                }
+
+                .chart-wrap {
+                    padding: 3rem;
+                    border: 1px solid var(--tk-gray-10);
+                    @include radius(30);
+                }
+
+                .form-box {
+                    border: 1px solid var(--tk-gray-10);
+                    @include radius(30);
+
+                    .form-box-title {
+                        padding: 1rem 3rem;
+                        background-color: #fbfbfb;
+                        @include flex-layout(flex, center, start);
+                        font-size: var(--tk-fz-title-sm);
+                        border-radius: 3rem 3rem 0 0;
+
+                        >p {
+                            margin-right: 1rem;
+                            font-weight: 700;
+                        }
+
+                        >p:nth-of-type(2) {
+                            font-size: var(--tk-fz-detail-sm);
+                            background-color: var(--tk-point-5);
+                            border: 1px solid var(--tk-point-40);
+                            padding: .2rem 1rem;
+                            // border-radius: var(--tk-rd-12);
+                            @include radius(30);
+                            font-weight: 400;
+
+                            span {
+                                color: var(--tk-point-40);
+                                margin-right: .5rem;
+                            }
+                        }
+                    }
+
+
+                }
+            }
+
+            .setting-box {
+                @include flex-layout(flex, start, start);
+                width: 100%;
+                height: calc(100% - 38.5px);
+
+                .node-zone {
+                    width: 325px;
+                    height: 100%;
+                    margin-right: 5rem;
+                    background-color: #fbfbfb;
+                    border-radius: var(--tk-rd-12);
+
+                    .tree {
+                        padding: 3rem;
+                        width: 100%;
+                        height: calc(100% - 149px);
+                        overflow-y: auto;
+
+
+                    }
+                }
+
+                .setting-zone {
+                    width: calc(100% - 325px - 5rem);
+                    height: 100%;
+
+                    .form-content{
+                        padding: 0;
+                        >div{
+                            padding: 1rem;
+                        }
+                        >div:nth-child(2),
+                        div:nth-child(4),
+                        div:nth-child(6){
+                            padding-left: 3rem;
+                        }
+                        >div:last-child{
+                            align-items: flex-start;
+                        }
+                        
+                    }
+                }
+
+                .btn-zone {
+                    padding: 3rem;
+
+                    button {
+                        min-width: 126px;
+                        margin-left: 1rem;
+                        margin-bottom: 1rem;
+                    }
+
+                    button:nth-child(1) {
+                        margin-left: 0;
+                    }
+
+                    button:last-child {
+                        min-width: 100%;
+                        margin-left: 0;
+                        margin-bottom: 0;
+                    }
+                }
+            }
+        }
+
+    }
+
+
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/admin/layout.scss (added)
+++ client/resources/scss/admin/layout.scss
@@ -0,0 +1,93 @@
+.admin-wrap {
+    background-color: #eaeff4;
+    display: grid;
+    grid-template-columns: clamp(260px, 16vw, 450px) minmax(1020px, 1fr);
+    grid-template-rows: auto minmax(860px, auto);
+    grid-template-areas:
+        "sidebar header "
+        "sidebar main ";
+    height: 100%;
+    font-size: 1.8rem;
+
+
+    .admin-header {
+        grid-area: header;
+        border-bottom: 1px solid var(--tk-gray-30);
+
+        .top-menu ul {
+            @include flex-layout(flex, center, space-between);
+
+            li {
+                cursor: pointer;
+                padding: 1rem 2rem;
+            }
+
+            li.main-active {
+                border-bottom: 3px solid var(--tk-gray-70);;
+                // @include radius(25);
+                font-weight: 700;
+            }
+        }
+
+    }
+
+    .sub-menu {
+        grid-area: sidebar;
+        height: 100%;
+        background-color: #f7f9fb;
+        border-right: 1px solid var(--tk-gray-30);
+        overflow-y: auto;
+        
+        .logo{
+            padding: 5rem 3rem;
+            text-align: center;
+        }
+
+        .info-wrap {
+            padding: 0 3rem;
+
+            .info {
+                padding: 1.5rem;
+                background-color: var(--tk-gray-80);
+                color: #ffffff;
+                text-align: center;
+                border-radius: var(--tk-rd-12);
+
+                >p {
+                    margin-bottom: 1rem;
+                }
+
+                button {
+                    padding: 0 1rem;
+                    font-size: 1.4rem;
+                }
+
+                >button:nth-of-type(1) {
+                    border-right: 1px solid var(--tk-white);
+                }
+            }
+        }
+
+        ul {
+            padding: 5rem 0;
+
+            li {
+                cursor: pointer;
+                padding: 1rem 2rem;
+            }
+
+            li.sub-active {
+                background-color: var(--tk-primary);
+                color: var(--tk-white);
+                font-weight: 700;
+            }
+        }
+
+    }
+
+    .main-wrap {
+        grid-area: main;
+        width: 100%;
+        height: 100%
+    }
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/base/_colors.scss (added)
+++ client/resources/scss/common/base/_colors.scss
@@ -0,0 +1,41 @@
+@each $color, $value in $colors {
+	.text-#{$color} {
+		color: $value;
+	}
+	.bg-#{$color} {
+		background-color: $value;
+	}
+}
+
+@each $color, $value in $primary-colors {
+	.text-primary-#{$color} {
+		color: $value;
+	}
+	.bg-primary-#{$color} {
+		background-color: $value;
+	}
+}
+@each $color, $value in $secondary-colors {
+	.text-secondary-#{$color} {
+		color: $value;
+	}
+	.bg-secondary-#{$color} {
+		background-color: $value;
+	}
+}
+@each $color, $value in $point-colors {
+	.text-point-#{$color} {
+		color: $value;
+	}
+	.bg-point-#{$color} {
+		background-color: $value;
+	}
+}
+@each $color, $value in $gray-colors {
+	.text-gray-#{$color} {
+		color: $value;
+	}
+	.bg-gray-#{$color} {
+		background-color: $value;
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/base/_fonts.scss (added)
+++ client/resources/scss/common/base/_fonts.scss
@@ -0,0 +1,27 @@
+/** fonts setting **/
+/* default - Regular */
+@font-face {
+	font-family: 'Pretendard GOV';
+	font-weight: 400;
+	font-style: normal;
+	src: url('../fonts/PretendardGOV-Regular.subset.woff2') format('woff2'),
+		 url('../fonts/PretendardGOV-Regular.subset.woff') format('woff');
+}
+
+/* Medium */
+@font-face {
+	font-family: 'Pretendard GOV';
+	font-weight: 500;
+	font-style: normal;
+	src: url('../fonts/PretendardGOV-Medium.subset.woff2') format('woff2'),
+		 url('../fonts/PretendardGOV-Medium.subset.woff') format('woff');
+}
+
+/* Bold */
+@font-face {
+	font-family: 'Pretendard GOV';
+	font-weight: 700;
+	font-style: normal;
+	src: url('../fonts/PretendardGOV-Bold.subset.woff2') format('woff2'),
+		 url('../fonts/PretendardGOV-Bold.subset.woff') format('woff');
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/base/_reset.scss (added)
+++ client/resources/scss/common/base/_reset.scss
@@ -0,0 +1,274 @@
+html, body {
+	position: relative;
+	width: 100%;
+	height: 100%;
+	font-family: $font-family-base;
+	color: var(--#{$prefix}gray-90);
+	font-weight: map-get($fws, normal);
+	line-height: $line-height-base;
+	word-break: keep-all;
+	word-wrap: break-word;
+	-webkit-tap-highlight-color : transparent;
+	// scroll-behavior: smooth;
+}
+html {
+	font-size: $font-size-root;
+}
+body {
+	font-size: var(--#{$prefix}fz-body-md);
+	overflow-x: hidden;
+}
+
+#root {
+	width: 100%;
+	height: 100%;
+}
+
+*:focus {
+	@include focus();
+}
+::-moz-selection {
+	background: var(--#{$prefix}secondary);
+	color: var(--#{$prefix}white);
+}
+::selection {
+	background: $secondary;
+	color: var(--#{$prefix}white);
+}
+
+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: $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: map-get($fws, 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,
+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;
+}
+
+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;
+}
+
+//responsive mobile
+@include mobile {
+	.pc-only {
+		display: none !important;
+	}
+	.pc-only.read {
+		@include sr-only;
+	}
+	.mob-line {
+		display: block;
+		line-height: inherit;
+	}
+}
+
+@include mobileMore {
+	.mob-only {
+		display: none !important;
+	}
+	.mob-only.read {
+		@include sr-only;
+	}
+	.pc-line {
+		display: block;
+		line-height: inherit;
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/base/_root.scss (added)
+++ client/resources/scss/common/base/_root.scss
@@ -0,0 +1,110 @@
+
+
+:root {
+	//colors
+	@each $color, $value in $colors {
+		--#{$prefix}#{$color}: #{$value};
+	}
+	@each $num, $value in $primary-colors {
+		--#{$prefix}primary-#{$num}: #{$value};
+	}
+	@each $num, $value in $secondary-colors {
+		--#{$prefix}secondary-#{$num}: #{$value};
+	}
+	@each $num, $value in $point-colors {
+		--#{$prefix}point-#{$num}: #{$value};
+	}
+	@each $num, $value in $gray-colors {
+		--#{$prefix}gray-#{$num}: #{$value};
+	}
+
+
+	//fonts
+	@include fz();
+
+
+	//border radius size
+	@each $size, $value in $border-radius {
+		--#{$prefix}rd-#{$size}: #{$value};
+	}
+
+	//btn setting
+	@include btn();
+	@include btn-chip(fill, lg);
+	@include btn-chip(outline, lg);
+
+	//form controls setting
+	@include input();
+	@include radio();
+	@include chk();
+	@include select();
+	@include switch();
+	@include form-chip(radio, lg);
+	@include form-chip(checkbox, lg);
+
+	//tab setting
+	@include tabs();
+	
+
+	//@include spacer;
+	@include spacer(50);
+	@each $size, $value in $spacers {
+		--#{$prefix}spacer-#{$size}: #{$value};
+	}
+}
+
+//responsive tablet
+@include tablet {
+	:root {
+
+	}
+}
+
+//responsive mobile
+@include tabletLess {
+	//font setting
+	$font-size: (
+		sizes: (
+			display: (
+				"sm": "2.5rem",
+				"md": "3.2rem",
+				"lg": "4rem",
+			),
+			heading: (
+				"sm": "2.5rem",
+				"md": "3.2rem",
+				"lg": "4rem",
+			),
+            title: (
+                "xxlg" : "2.5rem",
+            ),
+		),
+	) !global;
+
+	/* input setting */
+	$inputs: (
+			setting: (
+					h: (
+							"xlg": "5.6rem",
+					),
+					px: (
+							"xlg": "1.6rem",
+					),
+					rd: (
+							"xlg": ".8rem",
+					),
+					fz: (
+							"xlg": "1.9rem",
+					),
+			),
+	) !global;
+
+	:root {
+		//fonts
+		@include fz();
+
+		/* input setting */
+		@include input();
+	}
+
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/base/_variables.scss (added)
+++ client/resources/scss/common/base/_variables.scss
@@ -0,0 +1,570 @@
+//colors
+$white:    #fff !default;
+$black:    #000 !default;
+$gray: #8E8E8E !default;
+$primary: #246BEB !default;
+$secondary: #003675 !default;
+$point: #E71825 !default;
+$danger: #EB003B !default;
+$warning: #FFB724 !default;
+$success: #008A1E !default;
+$information: #2768FF !default;
+$colors: (
+	"white": $white,
+	"black": $black,
+	"primary": $primary,
+	"secondary": $secondary,
+	"point": $point,
+	"danger": $danger,
+	"warning": $warning,
+	"success": $success,
+	"information": $information,
+);
+
+//primary colors
+$primary-5: #EFF5FF !default;
+$primary-10: #D3E1FB !default;
+$primary-20: #A7C4F7 !default;
+$primary-30: #7CA6F3 !default;
+$primary-40: #5089EF !default;
+$primary-60: #1D56BC !default;
+$primary-70: #16408D !default;
+$primary-80: #0E2B5E !default;
+$primary-90: #07152F !default;
+
+$primary-colors: (
+	"5": $primary-5,
+	"10": $primary-10,
+	"20": $primary-20,
+	"30": $primary-30,
+	"40": $primary-40,
+	"60": $primary-60,
+	"70": $primary-70,
+	"80": $primary-80,
+	"90": $primary-90,
+) !default;
+
+//secondary colors
+$secondary-5: #EDF1F5 !default;
+$secondary-10: #CDD7E4 !default;
+$secondary-20: #B4C4D6 !default;
+$secondary-30: #99B0CB !default;
+$secondary-40: #2A5C96 !default;
+$secondary-60: #002B5E !default;
+$secondary-70: #002046 !default;
+$secondary-80: #00162F !default;
+$secondary-90: #000B17 !default;
+
+$secondary-colors: (
+	"5": $secondary-5,
+	"10": $secondary-10,
+	"20": $secondary-20,
+	"30": $secondary-30,
+	"40": $secondary-40,
+	"60": $secondary-60,
+	"70": $secondary-70,
+	"80": $secondary-80,
+	"90": $secondary-90,
+) !default;
+
+//point colors
+$point-5: #FDF2F3 !default;
+$point-10: #FAD1D3 !default;
+$point-20: #F5A3A8 !default;
+$point-30: #F1747C !default;
+$point-40: #EC4651 !default;
+$point-60: #B9131E !default;
+$point-70: #8B0E16 !default;
+$point-80: #5C0A0F !default;
+$point-90: #2E0507 !default;
+
+$point-colors: (
+	"5": $point-5,
+	"10": $point-10,
+	"20": $point-20,
+	"30": $point-30,
+	"40": $point-40,
+	"60": $point-60,
+	"70": $point-70,
+	"80": $point-80,
+	"90": $point-90,
+) !default;
+
+//gray colors
+$gray-5: #F8F8F8 !default;
+$gray-10: #F0F0F0 !default;
+$gray-20: #E4E4E4 !default;
+$gray-30: #D8D8D8 !default;
+$gray-40: #C6C6C6 !default;
+$gray-50: #8E8E8E !default;
+$gray-60: #717171 !default;
+$gray-70: #555555 !default;
+$gray-80: #2D2D2D !default;
+$gray-90: #1D1D1D !default;
+
+$gray-colors: (
+	"5": $gray-5,
+	"10": $gray-10,
+	"20": $gray-20,
+	"30": $gray-30,
+	"40": $gray-40,
+	"50": $gray-50,
+	"60": $gray-60,
+	"70": $gray-70,
+	"80": $gray-80,
+	"90": $gray-90,
+) !default;
+
+
+//prefix
+$prefix: tk- !default;
+
+//breakpoints
+$breakpoint-sm: 600px !default;
+$breakpoint-md: 1024px !default;
+$breakpoint-lg: 1920px !default;
+$breakpoints: (
+	"sm": $breakpoint-sm,
+	"md": $breakpoint-md,
+	"lg": $breakpoint-lg,
+) !default;
+
+//spacers
+$spacers: (
+	"0": "0",
+	"default": ".1rem",
+	"default2": ".2rem",
+	"full": "100%",
+) !default;
+
+//font style
+$font-family-base: "Pretendard GOV", sans-serif !default;
+$font-size-root: 62.5% !default; //10px 1rem으로 설정
+//$font-size-base: 1rem !default;
+
+$font-size: (
+	sizes: (
+		display: (
+			"sm": "4rem",
+			"md": "5rem",
+			"lg": "6.6rem",
+		),
+		heading: (
+			"sm": "3.2rem",
+			"md": "4rem",
+			"lg": "5rem",
+		),
+		title: (
+			"xsm": "1.5rem",
+			"sm": "1.7rem",
+			"md": "1.9rem",
+			"lg": "2.1rem",
+			"xlg": "2.5rem",
+            "xxlg": "3.2rem",
+		),
+		body: (
+			"sm": "1.5rem",
+			"md": "1.7rem",
+			"lg": "1.9rem",
+		),
+		link: (
+				"sm": "1.5rem",
+				"md": "1.7rem",
+				"lg": "1.9rem",
+		),
+		detail: (
+			"sm": "1.3rem",
+			"md": "1.5rem",
+			"lg": "1.7rem",
+		),
+		label: (
+			"xsm": "1.3rem",
+			"sm": "1.5rem",
+			"md": "1.7rem",
+			"lg": "1.9rem",
+		),
+	),
+) !default;
+
+
+$fws: (
+	"light": 300,
+	"normal": 400,
+	"medium": 500,
+	"bold": 700,
+	"bolder": 800,
+) !default;
+
+//line height style
+$line-height-none: 1 !default;
+$line-height-base: 1.5 !default;
+
+
+
+//border radius
+$border-radius: (
+	"1": ".1rem",
+	"2": ".2rem",
+	"4": ".4rem",
+	"6": ".6rem",
+	"8": ".8rem",
+	"10": "1rem",
+	"12": "1.2rem",
+	"full": "100%",
+) !default;
+
+//btn setting
+$btns: (
+	setting: (
+		//height
+		h: (
+			"xsm": "3.2rem",
+			"sm": "4rem",
+			"md": "4.8rem",
+			"lg": "5.6rem",
+			"xlg": "6.4rem",
+		),
+		//padding-x
+		px: (
+			"xsm": "1rem",
+			"sm": "1.2rem",
+			"md": "1.6rem",
+			"lg": "2rem",
+			"xlg": "2.4rem",
+		),
+		//border radius
+		rd: (
+			"xsm": ".6rem",
+			"sm": ".6rem",
+			"md": ".8rem",
+			"lg": ".8rem",
+			"xlg": ".8rem",
+		),
+		//font size
+		fz: (
+			"xsm": "1.5rem",
+			"sm": "1.7rem",
+			"md": "1.7rem",
+			"lg": "1.9rem",
+			"xlg": "1.9rem",
+		),
+	),
+) !default;
+
+
+//btn chips
+$btnChipOutline: (
+	setting: (
+		h: (			
+			"md": "3.2rem",
+			"lg": "3.6rem",
+		),
+		pd: (
+			"md": "0rem 1.2rem",
+			"lg": "0rem 1.2rem",
+		),
+		rd: (			
+			"md": "10rem",
+			"lg": "10rem",
+		),
+		fz: (
+			"md": "1.5rem",
+			"lg": "1.7rem",
+		),
+		gap:(			
+			"md": ".2rem",
+			"lg": ".2rem",
+		),
+		size:(
+			"md": "1.2rem",
+			"lg": "1.6rem",
+		),
+	), 
+) !default;
+
+$btnChipFill: (
+	setting: (
+		h: (			
+			"md": "3.2rem",
+			"lg": "3.6rem",
+		),
+		pd: (
+			"md": "0rem 1.2rem",
+			"lg": "0rem 1.2rem",
+		),
+		rd: (			
+			"md": ".6rem",
+			"lg": ".6rem",
+		),
+		fz: (
+			"md": "1.5rem",
+			"lg": "1.7rem",
+		),
+	), 
+) !default;
+
+
+//input setting
+$inputs: (
+	setting: (
+		h: (
+			"sm": "4rem",
+			"md": "4.8rem",
+			"lg": "5.6rem",
+			"xlg": "8rem",
+		),
+		px: (
+			"sm": "1.6rem",
+			"md": "1.6rem",
+			"lg": "1.6rem",
+			"xlg": "2.4rem",
+		),
+		rd: (
+			"sm": ".6rem",
+			"md": ".8rem",
+			"lg": ".8rem",
+			"xlg": "1.2rem",
+		),
+		fz: (
+			"sm": "1.5rem",
+			"md": "1.7rem",
+			"lg": "1.9rem",
+			"xlg": "2.5rem",
+		),
+	),
+) !default;
+
+//radio checkbox setting
+$radios: (
+	setting: (
+		size: (
+			"sm": "1.6rem",
+			"md": "2rem",
+			"lg": "2.4rem",
+		),
+		chk: (
+			"sm": ".8rem",
+			"md": "1rem",
+			"lg": "1.4rem",
+		),
+		pos: (
+			"sm": ".2rem",
+			"md": ".5rem",
+			"lg": "1rem",
+		),
+		fz: (
+			"sm": "1.5rem",
+			"md": "1.7rem",
+			"lg": "1.9rem",
+		),
+	),
+) !default;
+
+//form chips
+$rdoChipOutline: (
+	setting: (
+		h: (			
+			"sm": "3.2rem",
+			"md": "4rem",
+			"lg": "4.8rem",
+		),
+		pd: (
+			"sm": "0 1rem",
+			"md": "0 1.2rem",
+			"lg": "0 1.6rem",
+		),
+		rd: (			
+			"sm": ".6rem",
+			"md": ".6rem",
+			"lg": ".8rem",
+		),
+		fz: (
+			"sm": "1.5rem",
+			"md": "1.7rem",
+			"lg": "1.7rem",
+		),
+	), 
+) !default;
+
+$chkChipOutline: (
+	setting: (
+		h: (			
+			"sm": "3.2rem",
+			"md": "4rem",
+			"lg": "4.8rem",
+		),
+		pd: (
+			"sm": "0 1rem 0 .8rem",
+			"md": "0 1.2rem 0 1rem",
+			"lg": "0 1.6rem 0 1.2rem",
+		),
+		rd: (			
+			"sm": ".6rem",
+			"md": ".6rem",
+			"lg": ".8rem",
+		),
+		fz: (
+			"sm": "1.5rem",
+			"md": "1.7rem",
+			"lg": "1.7rem",
+		),
+		gap:(
+			"sm": ".4rem",
+			"md": ".4rem",
+			"lg": ".4rem",
+		),
+		ico:(
+			"sm": "1.6rem",
+			"md": "2rem",
+			"lg": "2rem",
+		),
+	), 
+) !default;
+
+// checkbox
+$checkboxes: (
+	setting: (
+		size: (
+			"sm": "1.6rem",
+			"md": "2rem",
+			"lg": "2.4rem",
+		),
+		primary-chk: (
+			"sm": "1.2rem",
+			"md": "1.6rem",
+			"lg": "2rem",
+		),
+		secondary-chk: (
+			"md": "2rem",
+		),
+		pos: (
+			"md": ".5rem",
+		),
+		fz: (
+			"sm": "1.5rem",
+			"md": "1.7rem",
+			"lg": "1.9rem",
+		),
+	),
+) !default;
+
+//select setting
+$select: (
+	setting: (
+		h: (
+			"sm": "4rem",
+			"md": "4.8rem",
+			"lg": "5.6rem",
+		),
+		pd: (
+			"sm": "0 5.2rem 0 1.6rem",
+			"md": "0 5.2rem 0 1.6rem",
+			"lg": "0 5.2rem 0 1.6rem",
+		),
+		rd: (
+			"sm": ".6rem",
+			"md": ".8rem",
+			"lg": ".8rem",
+		),
+		fz: (
+			"sm": "1.5rem",
+			"md": "1.7rem",
+			"lg": "1.9rem",
+		),
+		rn: (
+			"sm": "1.6rem",
+			"md": "1.6rem",
+			"lg": "1.6rem",
+		),
+		bgs : (
+			"sm": "2rem",
+			"md": "2rem",
+			"lg": "2.4rem",
+		)
+	),
+) !default;
+
+//switch setting
+$switch: (
+	setting: (
+		h: (
+			"md": "2rem",
+			"lg": "2.4rem",
+		),
+		w: (
+			"md": "3.2rem",
+			"lg": "4rem",
+		),
+		b: (
+			"md": "1.6rem",
+			"lg": "2rem",
+		),
+		br: (
+			"md": "0.2rem",
+			"lg": "0.2rem",
+		),
+		pd: (
+			"md": "0.8rem",
+			"lg": "0.8rem",
+		),
+		rd: (
+			"md": "4rem",
+			"lg": "4rem",
+		),
+		fz: (
+			"md": "1.7rem",
+			"lg": "1.9rem",
+		),		
+	),
+) !default;
+
+//tab setting
+$tabs: (
+	setting: (
+		h: (
+			full: "5.6rem",
+			fill: "4.8rem",
+			line: "4.8rem",
+		),
+		fz: (
+			full: "1.9rem",
+			fill: "1.9rem",
+			ilne: "1.9rem",
+		),
+		px: (
+			full: "0",
+			fill: "1.6rem",
+			line: ".2rem",
+		),
+		ml: (
+			full: "0",
+			fill: ".8rem",
+			line: "1.6rem",
+		),
+		rd: (
+			full: ".8rem",
+			fill: ".8rem",
+			line: "0",
+		),
+	),
+) !default;
+
+//table setting
+
+//form control setting
+
+
+//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;
+
+//box shadow
+$box-shadow-base: 2px 2px 2px 0px rgba(0, 0, 0, 0.15) !default;
+
+//img url 대치
+$url: "../img" !default;
+
+//position 종류
+$position-type: (x, y, both);
 
client/resources/scss/common/base/base.scss (added)
+++ client/resources/scss/common/base/base.scss
@@ -0,0 +1,5 @@
+@import "./variables";
+@import "./root";
+@import "./colors";
+@import "./fonts";
+@import "./reset";(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_accordion.scss (added)
+++ client/resources/scss/common/component/_accordion.scss
@@ -0,0 +1,47 @@
+.accordion {
+	border-top: 1px solid var(--#{$prefix}gray-40);
+}
+.accordion-item {
+	background-color: var(--#{$prefix}white);
+	border-bottom: 1px solid var(--#{$prefix}gray-40);
+	.btn-accordion {
+		position: relative;
+		width: 100%;
+		min-height: 6.4rem;
+		padding: var(--#{$prefix}spacer-5) var(--#{$prefix}spacer-10) var(--#{$prefix}spacer-5) 0;
+		font-size: var(--#{$prefix}fz-body-lg);
+		font-weight: map-get($fws, bold);
+		text-align: left;
+		&::after {
+			@include position($t: 2.2rem, $r: 0);
+			@include pseudo();
+			width: 2.4rem;
+			height: 2.4rem;
+			background: url(#{$url}/component/common/ico_arr_accordion.svg) no-repeat center;
+			background-size: 2rem;
+			transition: $transition-base;
+			transform: rotate(0deg);
+		}
+		&.active {
+			&::after {
+				transform: rotate(180deg);
+			}
+		}
+	}
+	.accordion-collapse {
+		max-height: 0;
+		overflow: hidden;
+		transition: max-height .5s cubic-bezier(0, 1, 0, 1);
+	}
+	&.active {
+		.accordion-collapse {
+			height: auto;
+			max-height: 1000vh;
+			transition: max-height 1.5s ease-in-out;
+		}
+	}
+	.accordion-body {
+		padding-top: var(--#{$prefix}spacer-1);
+		padding-bottom: var(--#{$prefix}spacer-5);
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_breadcrumbs.scss (added)
+++ client/resources/scss/common/component/_breadcrumbs.scss
@@ -0,0 +1,4 @@
+.navigation-wrap{
+    padding: 1rem;
+    border-bottom: 1px solid var(--tk-gray-10);
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_buttons.scss (added)
+++ client/resources/scss/common/component/_buttons.scss
@@ -0,0 +1,580 @@
+.btn {
+  //default : primary color height lg
+  $size: lg;
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  gap: 0.4rem;
+  min-width: 120px;
+  width: auto;
+  height: var(--#{$prefix}btn-h-#{$size});
+  padding: 0 var(--#{$prefix}btn-px-#{$size});
+  background-color: var(--#{$prefix}primary);
+  border: 1px solid var(--#{$prefix}primary);
+  border-radius: var(--#{$prefix}btn-rd-#{$size});
+  font-size: var(--#{$prefix}fz-body-#{$size});
+  color: var(--#{$prefix}white);
+  font-weight: map-get($fws, normal);
+  line-height: 1;
+  cursor: pointer;
+  white-space: nowrap;
+  transition: $transition-base;
+  &:hover {
+    background-color: var(--#{$prefix}primary-60);
+    border-color: var(--#{$prefix}primary-60);
+  }
+  &:active {
+    background-color: var(--#{$prefix}primary-70);
+    border-color: var(--#{$prefix}primary-70);
+  }
+  &:focus {
+    @include focus($color: $white, $alpha: 0.9);
+    transition: none;
+  }
+  &[disabled] {
+    background-color: var(--#{$prefix}gray-30);
+    border-color: var(--#{$prefix}gray-30);
+    color: var(--#{$prefix}gray-60);
+    cursor: default;
+  }
+
+  //color
+  &.primary {
+    background-color: var(--#{$prefix}primary);
+    border: 1px solid var(--#{$prefix}primary);
+    color: var(--#{$prefix}white);
+    &:hover {
+      background-color: var(--#{$prefix}primary-60);
+      border-color: var(--#{$prefix}primary-60);
+    }
+    &:active {
+      background-color: var(--#{$prefix}primary-70);
+      border-color: var(--#{$prefix}primary-70);
+    }
+    &[disabled] {
+      background-color: var(--#{$prefix}gray-30);
+      border-color: var(--#{$prefix}gray-30);
+      color: var(--#{$prefix}gray-60);
+    }
+  }
+  &.secondary {
+    background-color: var(--#{$prefix}primary-5);
+    border: 1px solid var(--#{$prefix}primary);
+    color: $primary-60;
+    &:hover {
+      background-color: var(--#{$prefix}primary-10);
+    }
+    &:active {
+      background-color: var(--#{$prefix}primary-20);
+    }
+    &:focus {
+      @include focus($color: $primary);
+    }
+    &[disabled] {
+      background-color: var(--#{$prefix}gray-30);
+      border-color: var(--#{$prefix}gray-40);
+      color: var(--#{$prefix}gray-60);
+    }
+    &.ico-arr-down {
+      &::after {
+        background-image: url(#{$url}/component/common/ico_arr_20_down_blue.svg);
+        background-size: contain;
+        background-position: center;
+      }
+    }
+    &.active {
+      &.ico-arr-down {
+        &::after {
+          transform: rotate(180deg);
+        }
+      }
+    }
+  }
+  &.tertiary {
+    background-color: var(--#{$prefix}white);
+    border: 1px solid var(--#{$prefix}gray-90);
+    color: var(--#{$prefix}secondary-90);
+    &:hover {
+      background-color: var(--#{$prefix}gray-5);
+    }
+    &:active {
+      background-color: var(--#{$prefix}gray-10);
+    }
+    &:focus {
+      @include focus($color: $primary);
+    }
+    &[disabled] {
+      background-color: var(--#{$prefix}gray-30);
+      border-color: var(--#{$prefix}gray-40);
+      color: var(--#{$prefix}gray-60);
+    }
+  }
+  &.red {
+    background-color: var(--#{$prefix}point);
+    border: 1px solid var(--#{$prefix}point);
+    color: var(--#{$prefix}white);
+    &:hover {
+      background-color: var(--#{$prefix}point-60);
+      border-color: var(--#{$prefix}point-60);
+    }
+    &:active {
+      background-color: var(--#{$prefix}point-70);
+      border-color: var(--#{$prefix}point-70);
+    }
+    &[disabled] {
+      background-color: var(--#{$prefix}gray-30);
+      border-color: var(--#{$prefix}gray-30);
+      color: var(--#{$prefix}gray-60);
+    }
+  }
+
+  //txt + ico
+  &[class*='ico-'] {
+    &::after {
+      display: inline-flex;
+      content: '';
+      width: 2.4rem;
+      height: 2.4rem;
+      background-repeat: no-repeat;
+      background-size: contain;
+    }
+    &.ico-before {
+      &::before {
+        display: inline-flex;
+        content: '';
+        width: 2.4rem;
+        height: 2.4rem;
+        background-repeat: no-repeat;
+        background-size: contain;
+        background-position: center;
+      }
+      &::after {
+        display: none;
+      }
+    }
+  }
+  &.ico-sch {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_sch_20_wh.svg);
+    }
+  }
+  &.ico-arr {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_arr_20_right.svg);
+    }
+  }
+  &.ico-upload {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_upload_20_wh.svg);
+    }
+  }
+  &.xsm {
+    &[class*='ico-'] {
+      &::after {
+        width: 1.6rem;
+        height: 1.6rem;
+      }
+    }
+  }
+  &.sm &[class*='ico-'] {
+    &::after {
+      width: 2rem;
+      height: 2rem;
+    }
+  }
+}
+
+/* **** button : only icon **** */
+.btn-ico {
+  @include btn-reset;
+  padding: 0 !important;
+  &:focus {
+    @include focus($offset: 0.4rem);
+  }
+  &[class*='ico-'] {
+    width: 4rem;
+    height: 4rem;
+    background-repeat: no-repeat;
+    background-size: contain;
+    background-position: center;
+    &::after {
+      display: none;
+    }
+    &.md {
+      width: 2.4rem;
+      height: 2.4rem;
+    }
+    &.sm {
+      width: 2rem;
+      height: 2rem;
+    }
+    &.sm-m {
+      width: 2.4rem;
+      height: 2.4rem;
+    }
+    &.sm-l {
+      width: 3.2rem;
+      height: 3.2rem;
+    }
+    &.xsm {
+      width: 1.6rem;
+      height: 1.6rem;
+    }
+  }
+  &.ico-sch {
+    background-image: url(#{$url}/component/common/ico_sch_40.svg);
+  }
+  &.ico-info {
+    background-image: url(#{$url}/component/common/ico_info.svg);
+    &.sm {
+      background-position: center;
+      background-size: 1.6rem;
+    }
+  }
+  &.ico-refresh {
+    border-radius: 10rem;
+    border: 0.1rem solid var(--#{$prefix}gray-40);
+    background-color: var(--#{$prefix}white);
+    background-image: url(#{$url}/component/common/ico_refresh_16.svg);
+    background-size: 1.6rem;
+  }
+  &.ico-toggle-r {
+    border-radius: 10rem;
+    border: 0.1rem solid var(--#{$prefix}gray-40);
+    background-color: var(--#{$prefix}white);
+    background-image: url(#{$url}/component/common/ico_arr_16_down.svg);
+    background-size: 1.6rem;
+  }
+  &.ico-pw-visible {
+    background-image: url(#{$url}/component/common/ico_pw_visible.svg);
+  }
+  &.ico-help {
+    background-image: url(#{$url}/component/common/ico_help_24.svg);
+  }
+  &.ico-page-prev {
+    border-radius: 10rem;
+    border: 0.1rem solid var(--#{$prefix}gray-40);
+    background-color: var(--#{$prefix}white);
+    background-image: url(#{$url}/component/common/ico_swiper_prev.svg);
+    background-size: 2.4rem;
+    &.disabled {
+      background-color: var(--#{$prefix}secondary-5);
+    }
+  }
+  &.ico-page-next {
+    border-radius: 10rem;
+    border: 0.1rem solid var(--#{$prefix}gray-40);
+    background-color: var(--#{$prefix}white);
+    background-image: url(#{$url}/component/common/ico_swiper_next.svg);
+    background-size: 2.4rem;
+    &.disabled {
+      background-color: var(--#{$prefix}secondary-5);
+    }
+  }
+}
+
+/* **** button : text button **** */
+.btn-txt {
+  @include btn-reset;
+  padding: 0 var(--#{$prefix}spacer-default2) !important;
+  &:hover {
+    background-color: var(--#{$prefix}secondary-5);
+  }
+  &:active {
+    background-color: var(--#{$prefix}secondary-10);
+  }
+  &:focus {
+    @include focus($offset: 0.4rem);
+  }
+  &[disabled] {
+    color: var(--#{$prefix}gray-50);
+  }
+  &[class*='ico-'] {
+    &::after {
+      background-repeat: no-repeat;
+      background-size: contain;
+      background-position: center;
+    }
+    &.ico-before {
+      &::before {
+        display: inline-flex;
+        content: '';
+        background-repeat: no-repeat;
+        background-size: contain;
+        background-position: center;
+      }
+      &::after {
+        display: none;
+      }
+    }
+    &.ico-call {
+      &::before {
+        background-image: url(#{$url}/component/common/ico_call.svg);
+      }
+      &::after {
+        background-image: url(#{$url}/component/common/ico_call.svg);
+      }
+    }
+    &.ico-faq {
+      &::before {
+        background-image: url(#{$url}/component/common/ico_faq.svg);
+      }
+      &::after {
+        background-image: url(#{$url}/component/common/ico_faq.svg);
+      }
+    }
+  }
+  &.underline {
+    text-decoration: underline;
+  }
+  &.link {
+    //링크이면서 텍스트사이에 있는경우 높이값 초기화
+    height: auto;
+    text-decoration: underline !important;
+  }
+  &.ico-like {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_like_20.svg);
+    }
+  }
+  &.ico-share {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_share_20.svg);
+    }
+  }
+  &.ico-arr {
+    &::after {
+      background-image: url(#{$url}/component/common/ico_arr_20_right.svg);
+    }
+  }
+  &.ico-arr-down {
+    &::after {
+      background-image: url(#{$url}/component/common/ico_arr_16_down.svg);
+    }
+  }
+  &.ico-more {
+    &::after {
+      background-image: url(#{$url}/component/common/ico_arr1_20_right.svg);
+    }
+  }
+  &.ico-sch {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_sch_40.svg);
+    }
+  }
+  &.ico-sch1 {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_sch1_20.svg);
+    }
+  }
+  &.ico-go {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_go_20.svg);
+    }
+  }
+  &.ico-down {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_file_20.svg);
+    }
+  }
+  &.ico-filter {
+    position: relative;
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_filter_20.svg);
+    }
+    .num {
+      display: inline-flex;
+      position: absolute;
+      right: 0.1rem;
+      z-index: 1;
+      height: 2rem;
+      font-size: var(--#{$prefix}fz-label-sm);
+      color: var(--#{$prefix}white);
+      padding: 0 var(--#{$prefix}spacer-2);
+      margin-top: -3rem;
+      border-radius: 2rem;
+      background-color: var(--#{$prefix}primary);
+    }
+  }
+  &.ico-reset {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_refresh_16.svg);
+    }
+  }
+  &.ico-log {
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_login_20.svg);
+    }
+  }
+  &.ico-func {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_arr_func_20.svg);
+    }
+  }
+  &.ico-logout {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_logout_16.svg);
+    }
+  }
+  &.ico-email {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_email_20.svg);
+    }
+  }
+  &.ico-print {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_print_20.svg);
+    }
+  }
+  &.ico-scrap {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_scrap_20.svg);
+    }
+  }
+  &.ico-del {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_del1_20.svg);
+    }
+  }
+  &.ico-plus {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_plus_24.svg);
+    }
+  }
+  &.ico-setting {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_setting_20.svg);
+    }
+  }
+  &.ico-link {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_link_16.svg);
+    }
+  }
+  &.ico-comment {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico_comment_16.svg);
+    }
+  }
+  &.ico-prev {
+    gap: var(--#{$prefix}spacer-2);
+    &::before,
+    &::after {
+      background-image: url(#{$url}/component/common/ico-prev_24.svg);
+    }
+  }
+  &.sm {
+    &[class*='ico-'] {
+      &::before,
+      &::after {
+        width: 2rem;
+        height: 2rem;
+      }
+    }
+  }
+  &.xsm {
+    &[class*='ico-'] {
+      gap: var(--#{$prefix}spacer-default2);
+      &::before,
+      &::after {
+        width: 1.6rem;
+        height: 1.6rem;
+      }
+    }
+  }
+  &.h-auto {
+    height: auto;
+    padding: var(--#{$prefix}spacer-default2) !important;
+  }
+}
+//텍스트 사이에 링크만 삽입되는 경우
+.link-txt {
+  text-decoration: underline;
+}
+
+/* **** button : chips **** */
+// 배경색이 있는 타입
+.btn-chip-fill {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  background-color: var(--#{$prefix}gray-10);
+  &:hover {
+    background-color: var(--#{$prefix}secondary-5);
+  }
+  &:active {
+    background-color: var(--#{$prefix}secondary-10);
+  }
+  &[disabled],
+  &.disabled {
+    background-color: var(--#{$prefix}gray-30);
+  }
+}
+
+//외곽 라인이 있는 타입
+.btn-chip-outline {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  flex-shrink: 0;
+  gap: 0.2rem;
+  background-color: var(--#{$prefix}white);
+  border: 0.1rem solid var(--#{$prefix}gray-40);
+  &:hover {
+    background-color: var(--#{$prefix}secondary-5);
+  }
+  &:active {
+    background-color: var(--#{$prefix}secondary-10);
+  }
+  &:disabled,
+  &.disabled {
+    background-color: var(--#{$prefix}gray-30);
+  }
+}
+
+/* **** button area **** */
+.btn-wrap {
+  width: 100%;
+}
+
+//responsive mobile
+@include mobile {
+  .btn-ico {
+    &[class*='ico-'] {
+      width: 2.4rem;
+      height: 2.4rem;
+    }
+  }
+}
 
client/resources/scss/common/component/_checkbox.scss (added)
+++ client/resources/scss/common/component/_checkbox.scss
@@ -0,0 +1,119 @@
+/* 
+ * name : Checkbox Css
+ * date : 2024-01-03
+ */
+
+
+ /* **** checkbox : switch type **** */
+.form-switch {
+	$size: lg;
+	display: inline-flex;
+	position: relative;
+	label {
+		display: inline-flex;
+		font-size: var(--#{$prefix}switch-fz-#{$size});
+	}
+	[type="checkbox"] {
+		~ i {			
+			display: inline-flex;
+			align-items: center;
+			&::before,
+			&::after {
+				display: inline-flex;
+				content: '';
+			}
+			&::before {
+				@include position($l: var(--#{$prefix}switch-br-#{$size}));
+				width: var(--#{$prefix}switch-b-#{$size});
+				height: var(--#{$prefix}switch-b-#{$size});
+				border-radius: var(--#{$prefix}switch-rd-#{$size});
+				background-color: var(--#{$prefix}white);
+				transition: all 0.3s;
+
+			}
+			&::after {
+				width: var(--#{$prefix}switch-w-#{$size});
+				height: var(--#{$prefix}switch-h-#{$size});
+				border-radius: var(--#{$prefix}switch-rd-#{$size});
+				background-color: var(--#{$prefix}secondary-20);
+			}
+		}
+		~ label {
+			z-index: 1;
+			$labelValue : var(--#{$prefix}switch-w-#{$size});
+			$pdValue : var(--#{$prefix}switch-pd-#{$size});
+			padding-left: calc($labelValue + $pdValue);
+			margin-left: calc($labelValue * -1);
+			font-size: var(--#{$prefix}switch-fz-#{$size});
+		}
+		&:checked {
+			~ i {
+				&::before {
+					$posL : calc(var(--#{$prefix}switch-w-#{$size}) - var(--#{$prefix}switch-b-#{$size}) - var(--#{$prefix}switch-br-#{$size}));
+					@include position($l: $posL);
+				}
+				&::after {
+					background-color: var(--#{$prefix}primary);
+				}
+			}
+		}
+		&:disabled {
+			~ i {
+				&::before {
+					border-color: var(--#{$prefix}gray-20);
+					background-color:var(--#{$prefix}gray-40);
+				}
+				&::after {
+					background-color: var(--#{$prefix}gray-20);
+				}
+			}
+			~ label {
+				color: var(--#{$prefix}gray-50);
+				cursor: inherit;
+			}
+		}
+		&:focus {
+			~ label {
+				@include focus($offset: .4rem, $color: $primary);
+			}
+		}
+	}
+}
+
+/* **** checkbox : chip type **** */
+.form-chip {
+	.checkbox {
+		~ .form-chip-outline {
+			&::before {
+				display: inline-flex;
+				content: '';
+			}
+
+		}
+		&:focus {
+			~ .form-chip-outline {
+				@include focus(-.4rem);
+				border-radius: var(--#{$prefix}chkChipOutline-rd-lg);
+			}
+		}
+	}
+	&.md {
+		.checkbox {
+			&:focus {
+				~ .form-chip-outline {
+					border-radius: var(--#{$prefix}chkChipOutline-rd-md);
+				}
+			}
+		}
+	}
+	&.sm {
+		.checkbox {
+			&:focus {
+				~ .form-chip-outline {
+					border-radius: var(--#{$prefix}chkChipOutline-rd-sm);
+				}
+			}
+		}
+	}
+}
+
 
client/resources/scss/common/component/_coach.scss (added)
+++ client/resources/scss/common/component/_coach.scss
@@ -0,0 +1,213 @@
+.helper-area {
+  .tab {
+    .btn-tab {
+      background-color: transparent;
+      border-color: transparent;
+    }
+  }
+  .tab-conts {
+    &.active {
+      gap: 0;
+    }
+  }
+
+  .helper-sm-tit {
+    font-size: var(--#{$prefix}fz-title-lg);
+    font-weight: map-get($fws, bold);
+
+    + .helper-desc {
+      margin-top: var(--#{$prefix}spacer-6);
+    }
+  }
+
+  .helper-desc {
+    margin-bottom: var(--#{$prefix}spacer-8);
+    font-size: var(--#{$prefix}fz-body-md);
+    color: var(--#{$prefix}gray-70);
+  }
+
+  .btn-wrap {
+    display: flex;
+    align-items: flex-start;
+    flex-direction: column;
+    gap: var(--#{$prefix}spacer-3);
+
+    .btn-txt {
+      color: var(--#{$prefix}gray-80);
+    }
+
+    + .accordion {
+      margin-top: var(--#{$prefix}spacer-8);
+    }
+  }
+
+  .page-btn {
+    margin-bottom: var(--#{$prefix}spacer-9);
+
+    .btn-txt {
+      font-size: var(--#{$prefix}fz-title-lg);
+      font-weight: map-get($fws, bold);
+    }
+  }
+
+  .accordion-item {
+    background-color: transparent;
+
+    .btn-accordion {
+      min-height: 5.4rem;
+      padding: var(--#{$prefix}spacer-4) var(--#{$prefix}spacer-8) var(--#{$prefix}spacer-4) 0;
+      font-size: var(--#{$prefix}fz-body-md);
+
+      &::after {
+        top: var(--#{$prefix}spacer-4);
+      }
+    }
+
+    .accordion-body {
+      padding-top: var(--#{$prefix}spacer-1);
+
+      .info-txt {
+        font-size: var(--#{$prefix}fz-body-md);
+        color: var(--#{$prefix}gray-70);
+
+        + .info-list {
+          margin-top: var(--#{$prefix}spacer-8);
+        }
+      }
+
+      .info-list {
+        > li {
+          color: var(--#{$prefix}gray-70);
+
+          + li {
+            margin-top: var(--#{$prefix}spacer-6);
+          }
+        }
+
+        + .btn-wrap {
+          margin-top: var(--#{$prefix}spacer-8);
+        }
+      }
+    }
+  }
+
+  .coach-btn-stop {
+    position: fixed;
+    bottom: 4rem;
+  }
+}
+
+.coach-highligt {
+  position: relative;
+
+  &.txt-box,
+  &.form-addr-result,
+  .coach-btn {
+    border: 0.1rem solid var(--#{$prefix}primary);
+    outline: 1rem solid var(--#{$prefix}primary-5);
+  }
+
+  .coach-balloon {
+    position: absolute;
+    z-index: 5;
+    display: flex;
+    flex-direction: column;
+    max-width: 36rem;
+    padding: var(--#{$prefix}spacer-6);
+    background-color: var(--#{$prefix}white);
+    border: 0.2rem solid var(--#{$prefix}primary);
+    border-radius: var(--#{$prefix}spacer-3);
+    box-shadow: rgba($black, 0.15) 0 0.2rem 0.8rem;
+    right: 0;
+    top: 0;
+    transform: translateY(calc(-100% - 2.6rem));
+    word-break: break-all;
+
+    &::after {
+      content: '';
+      position: absolute;
+      display: block;
+      width: 3.2rem;
+      height: 1.7rem;
+      bottom: -1.6rem;
+      right: 2.4rem;
+      background-image: url('#{$url}/pattern/content/balloon-bottom.png');
+      background-repeat: no-repeat;
+      background-size: contain;
+    }
+
+    .coach-tit {
+      color: var(--#{$prefix}gray-70);
+      font-size: var(--#{$prefix}fz-detail-sm);
+      margin-bottom: var(--#{$prefix}spacer-4);
+      font-weight: map-get($fws, normal);
+    }
+
+    .desc {
+      font-size: var(--#{$prefix}fz-body-md);
+    }
+
+    .coach-controls {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      gap: var(--#{$prefix}spacer-3);
+      margin-top: var(--#{$prefix}spacer-6);
+
+      .num {
+        display: flex;
+        font-size: var(--#{$prefix}fz-body-md);
+        color: var(--#{$prefix}gray-90);
+
+        strong {
+          display: flex;
+          color: var(--#{$prefix}secondary);
+          font-weight: map-get($fws, normal);
+
+          &::after {
+            content: '/';
+            color: var(--#{$prefix}gray-90);
+            margin: 0 var(--#{$prefix}spacer-1);
+          }
+        }
+      }
+    }
+
+    .btn-wrap {
+      display: flex;
+      justify-content: flex-end;
+      gap: var(--#{$prefix}spacer-4);
+    }
+  }
+}
+
+.coach-help-process {
+  > li {
+    + li {
+      margin-top: var(--#{$prefix}spacer-10);
+      padding-top: var(--#{$prefix}spacer-10);
+      border-top: 0.1rem solid var(--#{$prefix}gray-30);
+    }
+  }
+  .tit {
+    display: flex;
+    gap: var(--#{$prefix}spacer-2);
+    margin-bottom: var(--#{$prefix}spacer-6);
+    font-size: var(--#{$prefix}fz-title-md);
+    color: var(--#{$prefix}gray-90);
+
+    &.current {
+      color: var(--#{$prefix}primary);
+
+      &::before {
+        content: '';
+        flex-shrink: 0;
+        width: var(--#{$prefix}spacer-5);
+        height: var(--#{$prefix}spacer-5);
+        margin-top: 0.4rem;
+        background: url('#{$url}/component/common/ico_step_active.svg') no-repeat;
+        background-size: contain;
+      }
+    }
+  }
+}
 
client/resources/scss/common/component/_datepicker.scss (added)
+++ client/resources/scss/common/component/_datepicker.scss
@@ -0,0 +1,197 @@
+.datepicker-area {
+	display: none;
+	position: relative;
+	z-index: 1000;
+	@at-root .datepicker-wrap {
+		@include position($t: .8rem, $l: 0);
+		width: 100%;
+		background-color: var(--#{$prefix}white);
+		border: 1px solid var(--#{$prefix}gray-40);
+		border-radius: var(--#{$prefix}rd-8);
+		&:focus {
+			@include focus($offset: -.4rem);
+		}
+		&.bottom {
+			top: auto;
+			bottom: 6.4rem;
+		}
+		.datepicker-head {
+			@include flex-layout($ai: center, $jc: space-between);
+			position: relative;
+			width: 100%;
+			height: 6.4rem;
+			padding: 0 var(--#{$prefix}spacer-3);
+			background-color: var(--#{$prefix}secondary-5);
+			border-top-left-radius: inherit;
+			border-top-right-radius: inherit;
+			font-size: var(--#{$prefix}fz-body-lg);
+			.btn-cal-move {
+				width: 4rem;
+				height: 4rem;
+				background: url(#{$url}/component/common/ico_cal_move.svg) no-repeat center;
+				background-size: 1.6rem;
+				&.next {
+					transform: rotate(180deg);
+				}
+			}
+			.datepicker-switch-wrap {
+				@include flex-layout($ai: center, $jc: center);
+				width: 100%;
+				padding: 0 var(--#{$prefix}spacer-3);
+				.btn-cal-switch {
+					@include flex-layout($ai: center, $jc: center);
+					width: 50%;
+					height: 3.8rem;
+					background-color: transparent;
+					border: 1px solid transparent;
+					border-radius: var(--#{$prefix}rd-8);
+					text-align: center;
+					transition: $transition-base;
+					&::after {
+						@include pseudo();
+						width: 1.6rem;
+						height: 1.6rem;
+						margin-left: var(--#{$prefix}spacer-1);
+						background: url(#{$url}/component/common/ico_cal_dropdown.svg) no-repeat center;
+						background-size: 1.6rem;
+					}
+					&:hover {
+						background-color: var(--#{$prefix}secondary-10);
+					}
+					&:focus,
+					&:active {
+						border: 1px solid var(--#{$prefix}secondary-10);
+					}
+				}
+			}
+		}
+		.datepicker-tbl-wrap {
+			padding: 0 var(--#{$prefix}spacer-3);
+			.datepicker-tbl {
+				th,
+				td {
+					width: calc(100% / 7);
+					padding-top: var(--#{$prefix}spacer-1);
+					> button {
+						@include flex-layout($ai: center, $jc: center);
+						width: 100%;
+						height: 100%;
+					}
+					&.old,
+					&.new {
+						color: transparentize($gray-60, 0.7);
+					}
+					&.period {
+						.btn-set-date {
+							background-color: var(--#{$prefix}primary-10);
+						}
+						&.start,
+						&.end {
+							> .btn-set-date {
+								background-color: var(--#{$prefix}primary);
+								color: var(--#{$prefix}white);
+								&:focus {
+									@include focus($offset: -.4rem, $color: $white, $alpha: 0.9);
+								}
+							}
+						}
+						&.start {
+							> .btn-set-date {
+								border-top-left-radius: var(--#{$prefix}rd-full);
+								border-bottom-left-radius: var(--#{$prefix}rd-full);
+							}
+						}
+						&.end {
+							> .btn-set-date {
+								border-top-right-radius: var(--#{$prefix}rd-full);
+								border-bottom-right-radius: var(--#{$prefix}rd-full);
+							}
+						}
+					}
+				}
+			}
+		}
+		.datepicker-body {
+			position: relative;
+			.sel {
+				&.year {
+					@include flex-layout($jc: center, $fd: column);
+					width: 14rem;
+					margin: 0 auto;
+					li,
+					.btn {
+						width: 100%;
+					}
+				}
+				&.month {
+					display: grid;
+					grid-template-columns: repeat(3, 1fr);
+					column-gap: 1.2rem;
+					row-gap: .8rem;
+					> li {
+						flex: 1;
+						.btn {
+							width: 100%;
+						}
+					}
+				}
+				.btn {
+					background-color: transparent;
+					border-color: transparent;
+					color: var(--#{$prefix}gray-90);
+					&.active {
+						background-color: var(--#{$prefix}primary);
+						border-color: var(--#{$prefix}primary);
+						color: var(--#{$prefix}white);
+					}
+				}
+			}
+			.datepicker-conts {
+				@include position($t:0, $l: 0);
+				@include visibility(hidden);
+				width: 100%;
+				height: 100%;
+				transition: $transition-base;
+				&.active {
+					@include visibility(visible);
+				}
+			}
+		}
+		.datepicker-mon-wrap,
+		.datepicker-year-wrap {
+			overflow-x: hidden;
+			overflow-y: auto;
+		}
+		.datepicker-mon-wrap {
+			padding: var(--#{$prefix}spacer-5) var(--#{$prefix}spacer-6) 0;
+		}
+		.datepicker-btn-wrap {
+			@include flex-layout($jc: flex-end);
+			gap: .8rem;
+			margin: 0 calc(var(--#{$prefix}spacer-3) * -1);
+			padding: var(--#{$prefix}spacer-4);
+			border-top: 1px solid var(--#{$prefix}gray-20);
+		}
+	}
+	&.active {
+		display: block;
+	}
+}
+.row {
+	.datepicker-wrap {
+		&.bottom {
+			bottom: 12.8rem;
+		}
+	}
+}
+
+@media (min-width: 361px) {
+	.datepicker-wrap {
+		width: 36rem;
+	}
+}
+@include tabletMore() {
+	.datepicker-year-wrap {
+		@include scrollbar;
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_disclosure.scss (added)
+++ client/resources/scss/common/component/_disclosure.scss
@@ -0,0 +1,37 @@
+.tk-disclosure {
+	.btn-conts-expand {
+		height: 4rem;
+		&::before {
+			display: inline-flex;
+			content: "";
+			width: 2rem;
+			height: 2rem;
+			margin-right: var(--#{$prefix}spacer-1);			
+			background-image: url(#{$url}/component/common/ico_arr_func_20.svg);
+			background-size: contain;
+			transition: $transition-base;
+			transform: rotate(0);
+			background-repeat: no-repeat;
+			background-position: center;
+		}
+		&::after {
+			display: none;
+		}
+	}
+	.expand-wrap {
+		max-height: 0;
+		&::after { 
+			display: none;
+		}
+		.expand-in {
+			padding: var(--#{$prefix}spacer-6);
+		}
+	}
+	&.active {
+		.btn-conts-expand {
+			&::before {
+				transform: rotate(-90deg);
+			}
+		}
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_fileupload.scss (added)
+++ client/resources/scss/common/component/_fileupload.scss
@@ -0,0 +1,85 @@
+/* 파일 업로드 */
+.file-upload {
+    @include flex-layout($fd:column, $jc: center, $ai: center);
+    gap: var(--#{$prefix}spacer-10);
+    padding: var(--#{$prefix}spacer-16) var(--#{$prefix}spacer-10);
+    border-radius: 12px;
+    border: .1rem dashed var(--tk-gray-40);
+    background-color: var(--tk-gray-10);
+    .txt {
+        font-size: var(--#{$prefix}fz-body-lg);
+        text-align: center;
+    }
+}
+
+.file-upload-result {
+	display: flex;
+	flex-wrap: wrap;
+    margin-top: var(--#{$prefix}spacer-6 );
+    .upload-top {
+		flex: 1;
+		order: -1;
+        @include flex-layout($ai:center);
+        .file-total {
+            flex: 1;
+            font-weight: map-get($fws, bold);
+            .current {
+                color: var(--#{$prefix}primary);
+            }
+        }
+    }
+    .upload-list {
+        @include flex-layout($fd: column, $ai: normal);
+        gap: var(--#{$prefix}spacer-4);
+        margin-top: var(--#{$prefix}spacer-6);
+		width: 100%;
+        > li {
+            padding: var(--#{$prefix}spacer-3) var(--#{$prefix}spacer-4);
+            border-radius: var(--#{$prefix}rd-6);
+            border: .1rem solid var(--#{$prefix}gray-30);
+            &.is-error {
+                border: .2rem solid var(--#{$prefix}danger);
+                background-color: var(--#{$prefix}point-5);
+                .file-hint {
+                    color: var(--#{$prefix}danger);
+                }
+            }
+        }
+        .in {
+            @include flex-layout($ai:center);
+            gap: var(--#{$prefix}spacer-4);
+            > div {
+                display: inline-flex;
+            }
+            .file-name {
+                flex: 1;
+                @include ellipsis(1);
+            }
+            .file-btn {
+                gap: var(--#{$prefix}spacer-4);
+            }
+            .ico-invalid {
+                display: inline-flex;
+                width: 2.4rem;
+                height: 2.4rem;
+                background-repeat: no-repeat;
+                background-position: center;
+                &.error {
+                    background-image: url(#{$url}/component/common/ico_invalid_error_20.svg);
+                }
+                &.ok {
+                    background-image: url(#{$url}/component/common/ico_invalid_ok_20.svg);
+                }
+            }
+        }
+        .file-hint {
+            padding-top: var(--#{$prefix}spacer-4);
+            margin-top: var(--#{$prefix}spacer-4);
+            border-top: .1rem solid var(--#{$prefix}gray-30);
+        }
+    }
+	.upload-delete-btn {
+		order: -1;
+		line-height: 1;
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_helper.scss (added)
+++ client/resources/scss/common/component/_helper.scss
@@ -0,0 +1,207 @@
+/*  ***** 도움말 박스 *****  */
+.helper-area {
+	$w: 39rem;
+	@include position($p:fixed, $t: 0, $b: 0, $r: 0);
+	visibility: hidden;
+	opacity: 0;
+	z-index: 60;
+	width: $w;
+	transition: $transition-base;
+	transform: translateX(100%);
+	.helper-wrap {
+		@include position($t: 0, $b: 0, $r: 0);
+		width: $w;
+		padding: 0 var(--#{$prefix}spacer-10);
+		background-color: var(--#{$prefix}gray-5);
+		border-left: 1px solid var(--#{$prefix}gray-40);
+		transition: $transition-base;
+		.helper-tit {
+			padding-top: var(--#{$prefix}spacer-10);
+			font-size: var(--#{$prefix}fz-title-xlg);
+			font-weight: map-get($fws, bold);
+		}
+		.helper-conts-area {
+			@include flex-layout($jc: space-between, $fd: column);
+			gap: var(--#{$prefix}spacer-10);
+			position: relative;
+			overflow-x: hidden;
+			overflow-y: auto;
+			transition: $transition-base;
+			.conts-area-wrap {
+				@include flex-layout($jc: space-between, $fd: column);
+				gap: var(--#{$prefix}spacer-10);
+				position: relative;
+				overflow-x: hidden;
+				overflow-y: auto;
+				transition: $transition-base;
+			}
+			.conts-area {
+				.tit {
+					@include flex-layout($ai: center);
+					font-size: var(--#{$prefix}fz-title-md);
+					font-weight: map-get($fws, bold);
+					.btn-ico {
+						margin-left: var(--#{$prefix}spacer-1);
+					}
+				}
+				&.helper-conts {
+					 width: 100%;
+					 padding-top: 7rem;
+					 .conts-wrap {
+						 gap: var(--#{$prefix}spacer-8);
+						 .conts-desc {
+							 @include flex-layout($fd: column);
+							 gap: var(--#{$prefix}spacer-2);
+						 }
+					 }
+				 }
+				&.related-service {
+					padding: var(--#{$prefix}spacer-10) 0;
+					background-color: var(--#{$prefix}gray-5);
+					border-top: 1px solid var(--#{$prefix}gray-40);
+					transition: $transition-base;
+					.conts-wrap {
+						gap: var(--#{$prefix}spacer-6);
+					}
+				}
+			}
+
+			.helper-in {
+				width: 100%;
+				height: 100%;
+				padding: var(--#{$prefix}spacer-11) 0 var(--#{$prefix}spacer-10);
+				.helper-conts {
+					padding-top: 0;
+				}
+			}
+		}
+	}
+	&.expand {
+		visibility: visible;
+		opacity: 1;
+		transform: translateX(0);
+		.btn-helper {
+			&.expand {
+				visibility: hidden;
+				opacity: 0;
+				transform: translateX(100%);
+			}
+		}
+	}
+}
+.btn-helper {
+	@include position($p:fixed, $t: 4rem, $r: 4rem);
+	&.expand {
+		visibility: visible;
+		opacity: 1;
+		transition: $transition-base;
+		transform: translateX(0);
+	}
+}
+
+/* 도움말 버튼 */
+.btn {
+	&.btn-helper {
+		height: 4.4rem;
+		padding: 0 var(--#{$prefix}btn-px-sm);
+		background-color: var(--#{$prefix}gray-5);
+		border: 1px solid var(--#{$prefix}gray-40);
+		border-radius: var(--#{$prefix}rd-4);
+		box-shadow: $box-shadow-base;
+		font-size: var(--#{$prefix}btn-fz-md);
+		color: var(--#{$prefix}black);
+		&::before,
+		&::after {
+			@include pseudo();
+			width: 2rem;
+			height: 2rem;
+			background: url(#{$url}/component/common/ico_foldable.svg) no-repeat center;
+			background-size: contain;
+		}
+		&:focus {
+			@include focus($color: $primary);
+		}
+		&.expand {
+			&::before {
+				margin-right: var(--#{$prefix}spacer-default2);
+			}
+			&::after {
+				display: none;
+			}
+		}
+		&.fold {
+			&::before {
+				display: none;
+			}
+			&::after {
+				margin-left: var(--#{$prefix}spacer-default2);
+				transform: rotate(180deg);
+			}
+		}
+	}
+}
+
+//mobile only
+@include tabletLess {
+	/*  ***** 도움말 박스 *****  */
+	.helper-area {
+		$w : calc(100vw - 3rem);
+		position: fixed;
+		z-index: 71;
+		width: $w;
+
+		&::before {
+			@include position($p: fixed, $t: 0, $l: -3rem, $r: 0, $b: 0);
+			@include pseudo();
+			background: transparent;
+			transition: $transition-base;
+		}
+
+		.helper-wrap {
+			width: $w;
+			padding: 0 var(--#{$prefix}spacer-4);
+			border-left: none;
+			.helper-conts-area {
+				.btn-helper {
+					top: 4rem;
+					right: 1.6rem;
+				}
+				.conts-area {
+					&.helper-conts {
+						.conts-wrap {
+							gap: var(--#{$prefix}spacer-6);
+						}
+					}
+					&.related-service {
+						width: calc(100vw - 6.2rem);
+					}
+				}
+				
+
+			}
+		}
+		&.expand {
+			&::before {
+				background: rgba(0, 0, 0, 0.60);
+				transition-delay: .3s;
+			}
+		}
+	}
+
+	.btn-helper {
+		top: 2.4rem;
+		right: 1.6rem;
+	}
+}
+
+//tablet size more
+@include tabletMore {
+	/*  ***** 도움말 박스 *****  */
+	.helper-area {
+		.helper-wrap {
+			.helper-conts-area {
+				@include scrollbar;
+			}
+		}
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_input.scss (added)
+++ client/resources/scss/common/component/_input.scss
@@ -0,0 +1,530 @@
+/* 
+ * name : Input Css
+ * date : 2024-01-03
+ */
+
+/* input style */
+.form-control {
+	//default : primary color height lg
+	$size: lg;
+	position: relative;
+	width: 100%;
+	height:var(--#{$prefix}input-h-#{$size});
+	padding: 0 var(--#{$prefix}input-px-#{$size});
+	background-color: var(--#{$prefix}white);
+	border: 1px solid var(--#{$prefix}gray-60);
+	border-radius: var(--#{$prefix}input-rd-#{$size});
+	font-family: inherit;
+	font-size: var(--#{$prefix}input-fz-#{$size});;
+	color: var(--#{$prefix}gray-90);
+	transition: $transition-base;
+	&.cal {
+		background: url(#{$url}/component/common/ico_calendar.svg) no-repeat right 1.6rem top 50%;
+		background-size: 2.4rem;
+	}
+}
+.form-control:focus {
+	border-color: var(--#{$prefix}primary);
+	border-width: 2px;
+	outline: none;
+}
+.form-control[readonly] {
+	background-color: var(--#{$prefix}gray-30);
+	border-color: var(--#{$prefix}gray-40);
+	color: var(--#{$prefix}gray-70);
+	&.datepicker {
+		background-color: var(--#{$prefix}white);
+		border-color: var(--#{$prefix}gray-60);
+		color: var(--#{$prefix}gray-90);
+	}
+	&::-webkit-input-placeholder {
+		color: var(--#{$prefix}gray-60);
+	}
+	&::-moz-placeholder {
+		color: var(--#{$prefix}gray-60);
+	}
+	&:-ms-input-placeholder {
+		color: var(--#{$prefix}gray-60);
+	}
+	&::-ms-input-placeholder {
+		color: var(--#{$prefix}gray-60);
+	}
+}
+.form-control[disabled] {
+	background-color: var(--#{$prefix}gray-30);
+	border-color: var(--#{$prefix}gray-40);
+	color: var(--#{$prefix}gray-60);
+	&::-webkit-input-placeholder {
+		color: var(--#{$prefix}gray-60);
+	}
+	&::-moz-placeholder {
+		color: var(--#{$prefix}gray-60);
+	}
+	&:-ms-input-placeholder {
+		color: var(--#{$prefix}gray-60);
+	}
+	&::-ms-input-placeholder {
+		color: var(--#{$prefix}gray-60);
+	}
+}
+.error .form-control,
+.error.form-control,
+.error .form-control:focus,
+.error.form-control:focus {
+	border-color: var(--#{$prefix}point);
+	border-width: 2px;
+}
+.validation-chk,
+.form-info {
+	display: flex;
+	position: relative;
+	min-height: var(--#{$prefix}spacer-6);
+	margin-top: var(--#{$prefix}spacer-3);
+	font-size: var(--#{$prefix}--tk-fz-body-sm);
+	color: var(--#{$prefix}gray-70);
+	line-height: var(--#{$prefix}spacer-6);
+}
+.validation-chk:empty {
+	display: none;
+}
+.validation-chk:before,
+.form-info:before {
+	@include foursquare(2rem);
+	@include flex-size(0, 0);
+	@include pseudo();
+	margin-right: var(--#{$prefix}spacer-1);
+	background-color: var(--#{$prefix}gray-30);
+}
+.error .validation-chk,
+.error .form-info {
+	color: var(--#{$prefix}danger);
+}
+textarea.form-control {
+	height: var(--#{$prefix}spacer-50);
+	padding: var(--#{$prefix}spacer-4);
+	line-height: $line-height-base;
+}
+.textarea-wrap {
+	@include flex-layout($fd:column, $ai:normal);
+    .form-control {
+        &:placeholder-shown {
+            -webkit-box-orient: inherit;
+        }
+
+    }
+}
+.textarea-count {
+	font-size: var(--#{$prefix}fz-label-sm);
+	width: 100%;
+	margin-top: var(--tk-spacer-3);
+	text-align: right;
+	.text-num {
+		margin-left: var(--tk-spacer-default2);
+	}
+}
+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;
+}
+
+/* placeholder style */
+.form-control::-webkit-input-placeholder {
+	color: var(--#{$prefix}gray-50);
+	
+}
+.form-control::-moz-placeholder {
+	color: var(--#{$prefix}gray-50);
+}
+.form-control:-ms-input-placeholder {
+	color: var(--#{$prefix}gray-50);
+}
+.form-control::-ms-input-placeholder {
+	color: var(--#{$prefix}gray-50);
+}
+.form-control:placeholder-shown {
+	@include ellipsis(1);
+}
+
+/* 날짜선택 */
+.datepicker-input {
+	position: relative;
+	z-index: 1;
+	.form-control {
+		padding-right: (var(--#{$prefix}spacer-14));
+		background-image: none;
+	}
+	.form-btn-datepicker {
+		position: absolute;
+		top: 50%;
+		right: .8rem;
+		width: 4rem;
+		height: 4rem;
+		padding: var(--#{$prefix}spacer-4);
+		transform: translateY(-50%);
+		background: url(#{$url}/component/common/ico_calendar.svg) no-repeat center;
+    	background-size: 2.4rem;
+	}
+    .range {
+        &::after {
+            display:none;
+        }
+    }
+}
+
+/* form layouts */
+.form-wrap {
+	display: grid;
+	gap: var(--#{$prefix}spacer-6);
+
+	> li,
+	&.standalone,
+	> .row {
+		line-height: $line-height-none;
+		@at-root .form-tit {
+			display: flex;
+			position: relative;
+			font-size: var(--#{$prefix}fz-body-sm);
+			color: var(--#{$prefix}black);
+			/*line-height: $line-height-none;*/
+		}
+	}
+	.form-conts {
+		&.group {
+			@include group-wrap;
+			> .form-control {
+				@include group;
+				margin-right: var(--#{$prefix}spacer-2);
+			}
+		}
+	}
+}
+
+/* radio checkbox */
+input[type=radio],
+input[type=checkbox] {
+	@include sr-only;
+}
+.chk-area {
+	display: flex;
+	gap: var(--#{$prefix}spacer-6);
+	&.chk-column {
+		flex-direction: column;
+	}
+}
+
+.chip-wrap {
+	@include flex-layout($jc: space-between,);
+	gap: var(--tk-spacer-2);
+	.form-chip {
+		flex: 1;
+		.radio {
+			&:not(:checked) {
+				~ .form-chip-outline {
+					&::before {
+						display: none;
+					}
+				}
+			}
+			~ .form-chip-outline {
+				justify-content: center;
+				width: 100%;
+				padding: 0;
+			}
+		}
+	}
+}
+
+.form-check {
+	$size: md;
+	input[type=radio],
+	input[type=checkbox] {
+		~ label {
+			position: relative;
+			display: inline-flex;
+			min-height: var(--#{$prefix}rdo-size-#{$size});
+			padding-left: calc(var(--#{$prefix}rdo-size-#{$size}) + var(--#{$prefix}spacer-2));
+			font-size: var(--#{$prefix}rdo-fz-#{$size});
+			line-height: var(--#{$prefix}rdo-size-#{$size});
+
+			&:before,
+			&:after {
+				display: block;
+				@include pseudo();
+				transition: .4s cubic-bezier(.4, .0, .23, 1);
+			}
+			&:before {
+				z-index: 3;
+			}
+			&:after {
+				z-index: 4;
+			}
+		}
+		&:focus {
+			~ label {
+				@include focus($offset: .4rem, $color: $primary);
+			}
+		}
+		&:disabled {
+			+ label {
+				color: var(--#{$prefix}gray-50);
+				cursor: default;
+			}
+		}
+	}
+
+	input[type=radio] {
+		~ label {
+			&:before {
+				@include position($t: 0, $l: 0,);
+				width: var(--#{$prefix}rdo-size-#{$size});
+				height: var(--#{$prefix}rdo-size-#{$size});
+				background-color: var(--#{$prefix}white);
+				border: 1px solid var(--#{$prefix}gray-60);
+				border-radius: var(--#{$prefix}rd-full);
+			}
+			&:after {
+				//포지션: (전체사이즈 - 체크박스 사이즈) / 2
+				$pos: calc((var(--#{$prefix}rdo-size-#{$size}) - var(--#{$prefix}rdo-chk-#{$size})) / 2);
+				@include position($t: $pos, $l: $pos);
+				width: var(--#{$prefix}rdo-chk-#{$size});
+				height: var(--#{$prefix}rdo-chk-#{$size});
+				background-color: var(--#{$prefix}white);
+				border-radius: var(--#{$prefix}rd-full);
+			}
+		}
+		&:checked {
+			~ label {
+				&:before {
+					border-color: var(--#{$prefix}primary);
+				}
+				&:after {
+					background-color: var(--#{$prefix}primary);
+				}
+			}
+			&:disabled {
+				~ label {
+					&:before {
+						border-color: var(--#{$prefix}gray-40);
+						background-color: var(--#{$prefix}gray-20);
+					}
+					&:after {
+						display: block;
+						background-color: var(--#{$prefix}gray-40);
+					}
+				}
+			}
+		}
+		&:disabled {
+			~ label {
+				&:before {
+					border-color: var(--#{$prefix}gray-40);
+					background-color: var(--#{$prefix}gray-20);
+				}
+				&:after {
+					display: none;
+					background-color: var(--#{$prefix}gray-40);
+				}
+			}
+		}
+	}
+	input[type=checkbox] {
+		~ label {
+			&:before {
+				@include position($t: 0, $l: 0,);
+				width: var(--#{$prefix}chk-size-#{$size});
+				height: var(--#{$prefix}chk-size-#{$size});
+				background-color: var(--#{$prefix}white);
+				border: 1px solid var(--#{$prefix}gray-60);
+				border-radius: var(--#{$prefix}rd-4);
+			}
+			&:after {
+				//포지션: (전체사이즈 - 체크박스 사이즈) / 2
+				$pos: calc((var(--#{$prefix}chk-size-#{$size}) - var(--#{$prefix}chk-primary-chk-#{$size})) / 2);
+				@include position($t: $pos, $l: $pos);
+				width: var(--#{$prefix}chk-primary-chk-#{$size});
+				height: var(--#{$prefix}chk-primary-chk-#{$size});
+				background: url(#{$url}/component/common/ico_check_primary_checked.svg) no-repeat 0 0;
+				background-size: contain;
+				opacity: 0;
+			}
+		}
+		&:checked {
+			~ label {
+				&:before {
+					background-color: var(--#{$prefix}primary);
+					border-color: var(--#{$prefix}primary);
+				}
+				&:after {
+					opacity: 1;
+					transition-delay: .2s;
+				}
+			}
+		}
+		&:disabled {
+			~ label {
+				&:before {
+					border-color: var(--#{$prefix}gray-40);
+					background-color: var(--#{$prefix}gray-20);
+				}
+				&:after {
+					background-image: url(#{$url}/component/common/ico_check_primary_disabled.svg);
+				}
+			}
+		}
+	}
+	&.ico-only {
+		display: inline-flex;
+        vertical-align: middle;
+		> [type=checkbox] {
+			~ label {
+				padding-left: var(--#{$prefix}chk-size-#{$size}) !important;
+			}
+		}
+		> [type=radio] {
+			~ label {
+				padding-left: var(--#{$prefix}rdo-size-#{$size}) !important;
+			}
+		}
+	}
+}
+
+.chk-secondary {
+	$size: md;
+	.form-check {
+		input[type=checkbox] {
+			~ label {
+				&:before {
+					background-color: transparent;
+					border-color: transparent;
+				}
+				&:after {
+					$pos: calc((var(--#{$prefix}chk-size-#{$size}) - var(--#{$prefix}chk-secondary-chk-#{$size})) / 2);
+					@include position($t: $pos, $l: $pos);
+					width: var(--#{$prefix}chk-secondary-chk-#{$size});
+					height: var(--#{$prefix}chk-secondary-chk-#{$size});
+					background: url(#{$url}/component/common/ico_check_secondary.svg) no-repeat 0 0;
+					opacity: 1;
+				}
+			}
+			&:checked {
+				~ label {
+					&:before {
+						background-color: transparent;
+						border-color: transparent;
+					}
+					&:after {
+						background-image: url(#{$url}/component/common/ico_check_secondary_checked.svg);
+					}
+				}
+			}
+			&:disabled {
+				~ label {
+					&:before {
+						background-color: transparent;
+						border-color: transparent;
+					}
+					&:after {
+						background-image: url(#{$url}/component/common/ico_check_secondary_disabled.svg);
+					}
+				}
+			}
+		}
+	}
+}
+
+//list형 checkbox
+.chk-group-area {
+	> * {
+		width: 100%;
+	}
+	.chk-all-wrap {
+		@include flex-layout($ai: center, $jc: space-between);
+		color: var(--#{$prefix}gray-90);
+		.form-group {
+			width: auto;
+		}
+	}
+	.chk-group-wrap {
+		@include flex-layout($fd: column);
+		gap: var(--#{$prefix}spacer-6);
+		> li {
+			@include flex-layout($fd: column);
+			gap: var(--#{$prefix}spacer-6);
+			width: 100%;
+			padding: var(--#{$prefix}spacer-6);
+			border: 1px solid var(--#{$prefix}gray-40);
+			border-radius: var(--#{$prefix}rd-12);
+			transition: $transition-base;
+			.btn {
+				color: var(--#{$prefix}gray-90);
+			}
+			&.checked {
+				border-color: var(--#{$prefix}primary);
+			}
+			&.disabled {
+				background-color: var(--#{$prefix}gray-5);
+				border-color: var(--#{$prefix}gray-30);
+				.btn {
+					color: var(--#{$prefix}gray-50);
+					&.btn-txt {
+						&.ico-arr {
+							&::after {
+								background-image: url(#{$url}/component/common/ico_arr_20_right_disabled.svg);
+								background-position: center;
+								background-size: 1.6rem;
+							}
+						}
+					}
+
+				}
+			}
+		}
+		$box-pl: 4.4rem;
+		input[type=radio],
+		input[type=checkbox] {
+			+ label {
+				flex-direction: column;
+				width: 100%;
+				padding-left: $box-pl;
+				.tit {
+					font-weight: map-get($fws, bold);
+					color: var(--#{$prefix}gray-90);
+					+ .conts-desc {
+						margin-top: var(--#{$prefix}spacer-4);
+					}
+				}
+			}
+			&:disabled {
+				+ label {
+					color: var(--#{$prefix}gray-50);
+					.tit {
+						color: inherit;
+					}
+				}
+			}
+		}
+		.btn-wrap {
+			width: initial;
+			margin-left: $box-pl;
+		}
+	}
+}
+
+//error
+.is-error {
+	.form-control {
+		border-color: var(--#{$prefix}point);
+		border-width: 2px;
+	}
+}
+
+
 
client/resources/scss/common/component/_layout.scss (added)
+++ client/resources/scss/common/component/_layout.scss
@@ -0,0 +1,264 @@
+/* form area */
+.fieldset {
+	display: flex;
+	flex-direction: column;
+	gap: var(--#{$prefix}spacer-6);
+}
+
+.form-group {
+	display: flex;
+	flex-direction: column;
+	gap: var(--#{$prefix}spacer-3);
+	width: 100%;
+	.form-tit {
+		width: 100%;
+	}	
+	.form-conts {
+		display: flex;
+		flex-direction: column;
+		gap:var(--tk-spacer-3);
+		width: 100%;
+		&.keyword-sch {
+			width: 58.8rem;
+		}
+		.form-label  {
+			display: flex;
+			// font-size: 1.5rem;
+			font-size: var(--#{$prefix}fz-label-sm);
+			width: 100%;
+		}
+		&.btn-ico-wrap { //input안에 button 노출
+			position: relative;
+			.form-control {
+				padding-right: var(--#{$prefix}spacer-14);
+			}
+			.btn {
+				@include position($t:50%, $r:1.6rem);
+				transform: translateY(-50%);
+			}
+		}
+		&.datepicker-conts {
+			gap: 0;
+		}
+		.form-check {
+			.form-check-cnt {
+				margin-top: 1.2rem;
+				.form-check-p {
+					color: var(--#{$prefix}gray-70);
+				}
+			}
+		}
+	}
+	> p {
+		width: 100%;
+	}
+	[class^=form-hint] {
+		$value : calc(2rem + var(--#{$prefix}spacer-1));
+		font-size: var(--#{$prefix}fz-label-sm);
+		color: var(--#{$prefix}gray-70);
+		padding-left:$value;
+		&::before {
+			display: inline-flex;
+			@include foursquare(2rem);
+			@include flex-size(0, 0);
+			@include pseudo();
+			margin-left: calc($value * -1);
+			margin-right: var(--#{$prefix}spacer-1);
+			vertical-align: top;
+			background: url(#{$url}/component/common/ico_hint_20.svg) no-repeat center;
+			background-size: contain;
+		}
+	}
+	.is-error {
+		~ .form-hint-invalid {
+			color:var(--#{$prefix}point);
+			&::before {
+				background-color: transparent;
+				background-image: url(#{$url}/component/common/ico_hint_error.svg);
+				background-repeat: no-repeat;
+				background-position: center;
+				background-size: contain;
+			}
+		}
+	}
+}
+
+
+.form-checks-inline {
+	display: flex;
+	gap:1.2rem;
+}
+
+.input-group {
+	display: flex;
+	align-items: center;
+	gap: 1rem;
+	width: 100%;
+	&.range {
+		align-items: flex-end;
+		position: relative;
+		> li {
+			&:not(.mark) {
+				//flex: auto;
+				@include flex-layout($fd: column);
+				@include equal-width();
+				gap: 1.2rem;
+			}
+			&.mark {
+				@include flex-layout($ai: center);
+				flex: none;
+				height: var(--#{$prefix}input-h-lg);
+				text-align: center;
+				&.md {
+					height: var(--#{$prefix}input-h-md);
+				}
+				&.sm {
+					height: var(--#{$prefix}input-h-sm);
+				}
+			}
+		}
+		&.set {
+			background-color: var(--#{$prefix}white);
+			border: 1px solid var(--#{$prefix}gray-60);
+			border-radius: var(--#{$prefix}input-rd-lg);
+			.form-control {
+				background-color: transparent;
+				border-color: transparent;
+			}
+			&::after {
+				@include position($t: 50%, $r:1.6rem);
+				@include pseudo();
+				width: 2.4rem;
+				height: 2.4rem;
+				background: url(#{$url}/component/common/ico_calendar.svg) no-repeat;
+				background-size: contain;
+				transform: translateY(-50%);
+			}
+		}
+	}
+}
+.row {
+	.input-group {
+		flex-direction: column;
+		&.range {
+			> li {
+				width: 100%;
+			}
+		}
+	}
+}
+
+
+/* for common */
+.radio,
+.checkbox {
+	~ .form-chip-outline {
+		display: inline-flex;
+		align-items: center;
+		border-width: 1px;
+		border-style: solid;
+		border-color:var(--#{$prefix}gray-40);
+	}
+	&:focus {
+		~ .form-chip-outline {
+			border-color: var(--#{$prefix}primary);
+			// border-width: .2rem;
+			// outline-offset: -.5rem;
+		}
+	}
+	&:checked {
+		~ .form-chip-outline {
+			background-color: var(--#{$prefix}primary-5);
+			border-color: var(--#{$prefix}information);
+			color: var(--#{$prefix}primary-60);
+		}
+	}
+	&:disabled {
+		~ .form-chip-outline {
+			pointer-events: none;
+			background-color: var(--#{$prefix}gray-30);
+			border-color: var(--#{$prefix}gray-40);
+			color: var(--#{$prefix}gray-60);
+		}
+	}
+}
+
+/* 검색 폼 */
+.sch-form-wrap {
+	@include flex-layout($ai: center);
+	gap: var(--tk-spacer-4);
+	&.vert {
+		@include flex-layout($fd:column, $ai : flex-start);
+		.sch-input {
+			width: 100%;
+		}
+	}
+	.input-group {
+		.form-select {
+			width: auto;
+		}
+	}
+	.btn-txt {
+		&.ico-sch1 {
+			&::before {
+				width: 2.4rem;
+				height: 2.4rem;
+			}
+		}
+	}
+}
+.sch-input {
+	display: flex;
+	position: relative;
+	.form-control {
+		padding: 0 var(--tk-spacer-12) 0 var(--tk-spacer-4);
+		~ .ico-sch {
+			width: 2.4rem;
+			height: 2.4rem;
+		}
+		&.xlg {
+			font-weight: map-get($fws, bold);
+			padding: 0 var(--tk-spacer-18) 0 var(--tk-spacer-6);
+			~ .ico-sch {
+				right: var(--tk-spacer-6);
+				width: 4rem;
+				height: 4rem;
+			}
+		}
+	}
+	.ico-sch {
+		position: absolute;
+		top: 50%;
+		right: var(--tk-spacer-4);
+		transform: translateY(-50%);
+	}
+}
+
+//모바일 전용
+@include mobile {
+	.form-group {
+		.form-conts {
+			&.keyword-sch {
+				width: 100%;
+			}
+		}
+	}
+
+	/* 검색 폼 */
+	.sch-form-wrap {
+		flex-direction: column;
+		align-items: flex-start;
+	}
+	.sch-input {
+		.form-control {
+			&.xlg {
+				padding: 0 var(--tk-spacer-12) 0 var(--tk-spacer-4);
+				~ .ico-sch {
+					right: var(--tk-spacer-4);
+					width: 2.4rem;
+					height: 2.4rem;
+				}
+			}
+		}
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_lists.scss (added)
+++ client/resources/scss/common/component/_lists.scss
@@ -0,0 +1,70 @@
+.info-list {
+	> li {
+		position: relative;
+		padding-left: var(--#{$prefix}spacer-3);
+		color: var(--#{$prefix}gray-70);
+		&::before {
+			@include position($t: 0, $l: 0);
+		}
+		& + li {
+			margin-top: var(--#{$prefix}spacer-4);
+		}
+		> .info-list { //2depth
+			margin-top: var(--#{$prefix}spacer-3);
+			> li {
+				padding-left: var(--#{$prefix}spacer-4);
+				& + li {
+					margin-top: var(--#{$prefix}spacer-2);
+				}
+				> .info-list { //3depth
+					font-size: var(--#{$prefix}fz-body-sm);
+					> li {
+						padding-left: var(--#{$prefix}spacer-3);
+					}
+				}
+			}
+		}
+		>.info-txt {
+			margin-top: var(--#{$prefix}spacer-3);
+		}
+	}
+	&.decimal {
+		> li {
+			&::before {
+				content: "\2022"; //bullet
+			}
+		}
+	}
+	&.dash {
+		> li {
+			&::before {
+				content: "\002D"; //hyphen-minus
+			}
+		}
+	}
+	&.ordered {
+		> li {
+			padding-left: var(--#{$prefix}spacer-6);
+			.num {
+				@include position($t: 0, $l: 0);
+			}
+			&::before {
+				display: none;
+			}
+			> .ordered { //2depth
+				> li {
+					padding-left: var(--#{$prefix}spacer-6);
+					> .ordered { //3depth
+						> li {
+							padding-left: var(--#{$prefix}spacer-4);
+						}
+					}
+				}
+			}
+		}
+	}
+}
+.txt-refer {//참고 또는 info성 텍스트
+	margin-top: var(--#{$prefix}spacer-5);
+	color: var(--#{$prefix}gray-70);
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_modal.scss (added)
+++ client/resources/scss/common/component/_modal.scss
@@ -0,0 +1,206 @@
+//default
+.modal-back,
+.modal {
+	display: none;
+	visibility: hidden;
+	z-index: -1;
+	&.in {
+		visibility: visible;
+	}
+}
+.modal-back {
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background-color: transparentize($black, 0.25);
+	//opacity: 0;
+	//transition: visibility 0s .3s;
+	&.in {
+		display: block;
+		z-index: 1000;
+	}
+}
+.modal {
+	/*@include flex-layout($ai: center, $jc: center, $fd: column);*/
+	display: none;
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	z-index: -1;
+	visibility: hidden;
+	overflow-x: hidden;
+	overflow-y: auto;
+	width: 100%;
+	height: 100%;
+	opacity: 0;
+	@include reset-text;
+	transition: visibility .15s .3s, z-index 0s .3s, opacity .2s;
+	> * {
+		width: 100%;
+	}
+	&.in {
+		z-index: 1010;
+		transition-delay: 0s;
+		opacity: 1;
+	}
+	&.shown {
+		display: block;
+	}
+
+	.modal-dialog { //기본 타입
+		$p: var(--#{$prefix}spacer-10);
+		$gap: var(--#{$prefix}spacer-8);
+		$m: var(--#{$prefix}spacer-20);
+		@include flex-layout($ai: center);
+		position: relative;
+		z-index: 1020;
+		width: 84.6rem;
+		height: calc(100% - $m * 2);
+		min-height: calc(100% - $m * 2);
+		margin: $m auto;
+		.modal-content {
+			@include flex-layout($ai: center, $fd: column);
+			position: relative;
+			overflow: hidden;
+			width: 100%;
+			max-height: 100%;
+			background-color: var(--#{$prefix}white);
+			border-radius: var(--#{$prefix}rd-12);
+			outline-color: transparent;
+			transition: outline-color .1s;
+			> * {
+				width: 100%;
+			}
+			&:focus {
+				@include focus($offset: .4rem, $color: $white, $alpha: 0.9);
+
+			}
+		}
+		.modal-header {
+			width: 100%;
+			padding: $p 6.8rem $gap $p;
+			background-color: inherit;
+			border-top-left-radius: inherit;
+			border-top-right-radius: inherit;
+			.modal-title {
+				@include ellipsis(1);
+				font-size: var(--#{$prefix}fz-title-sm);
+				font-weight: map-get($fws, bold);
+			}
+		}
+		.modal-conts {
+			@include flex-layout($fd: column);
+			gap: $gap;
+			position: relative;
+			overflow-y: auto;
+			width: 100%;
+			padding: 0 $p;
+			color: var(--#{$prefix}gray-90);
+			> * {
+				width: 100%;
+			}
+
+			.conts-tit {
+				font-size: var(--#{$prefix}fz-title-md);
+				font-weight: map-get($fws, bold);
+			}
+			.conts-area {
+				@include flex-layout($fd: column);
+				gap: $gap;
+				> * {
+					width: 100%;
+				}
+			}
+		}
+		.modal-btn {
+			@include flex-layout($ai: center, $jc: flex-end);
+			gap: .8rem;
+			width: 100%;
+			padding: $gap $p $p;
+			.btn {
+				min-width: 9.2rem;
+			}
+		}
+		.btn-close {
+			@include position($t: 3.2rem, $r: 3.2rem);
+			z-index: 901;
+			width: 3.6rem;
+			height: 3.6rem;
+			background: url(#{$url}/component/common/ico_close_modal.svg) no-repeat center;
+			background-size: 2rem;
+		}
+	}
+	&.alert { //얼럿 타입
+		.modal-dialog {
+			width: 56rem;
+			.modal-conts {
+				gap: 2.4rem;
+			}
+			.modal-btn {
+				.btn {
+					min-width: 7.8rem;
+				}
+			}
+		}
+	}
+}
+
+/* modal open 시 contents (전체모달 아닌경우) */
+.modal-open {
+	/*padding-right: 17px;*/
+	overflow: hidden;
+}
+
+/* mobile */
+@include mobile {
+	.modal {
+		$w: calc(100% - 3.2rem);
+		.modal-dialog {
+			$p: var(--#{$prefix}spacer-6);
+			$gap: var(--#{$prefix}spacer-6);
+			$m: var(--#{$prefix}spacer-4);
+			width: $w;
+			height: calc(100% - $m * 2);
+			min-height: calc(100% - $m * 2);
+			margin: $m auto;
+			.modal-header {
+				padding: $p 6.8rem $gap $p;
+			}
+			.modal-conts {
+				gap: $gap;
+				padding: 0 $p;
+				.conts-area {
+					gap: $gap;
+					> * {
+						width: 100%;
+					}
+				}
+			}
+			.modal-btn {
+				padding: $gap $p $p;
+				.btn {
+					width: calc((100% - 0.8rem) / 2);
+					min-width: 0;
+				}
+			}
+			.btn-close {
+				@include position($t: 1.6rem, $r: 1.6rem);
+			}
+		}
+		&.alert {
+			.modal-dialog {
+				width: $w;
+				.modal-btn {
+					.btn {
+						width: auto;
+						min-width: 7.8rem;
+					}
+				}
+			}
+		}
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_pagination.scss (added)
+++ client/resources/scss/common/component/_pagination.scss
@@ -0,0 +1,18 @@
+.pagination-button-type{
+    @include flex-layout(flex, center, center);
+
+    a{
+        width: 3.5rem;
+        height: 3.5rem;
+        @include flex-layout(flex, center, center);
+        border: 1px solid var(--tk-gray-30);
+        border-radius: var(--tk-rd-10);
+        margin: 0 .5rem;
+    }
+    
+    a.active{
+        background-color: #1a7ed3;
+        border: 1px solid #1a7ed3;
+        color: var(--tk-white);
+    }
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_radio.scss (added)
+++ client/resources/scss/common/component/_radio.scss
@@ -0,0 +1,41 @@
+/* 
+ * name : Radio Css
+ * date : 2024-01-03
+ */
+
+/* **** radio : chip type **** */
+.form-chip {
+	.radio {
+		~ .form-chip-outline {
+			&::before {
+				display: inline-flex;
+				content: '';
+			}
+
+		}
+		&:focus {
+			~ .form-chip-outline {
+				@include focus(-.4rem);
+				border-radius: var(--#{$prefix}chkChipOutline-rd-lg);
+			}
+		}
+	}
+	&.md {
+		.radio {
+			&:focus {
+				~ .form-chip-outline {
+					border-radius: var(--#{$prefix}chkChipOutline-rd-md);
+				}
+			}
+		}
+	}
+	&.sm {
+		.radio {
+			&:focus {
+				~ .form-chip-outline {
+					border-radius: var(--#{$prefix}chkChipOutline-rd-sm);
+				}
+			}
+		}
+	}
+}
 
client/resources/scss/common/component/_select.scss (added)
+++ client/resources/scss/common/component/_select.scss
@@ -0,0 +1,38 @@
+/* select style */
+.form-select {
+	$size: lg;
+	width: 100%;
+	height: var(--#{$prefix}select-h-#{$size});
+	padding: var(--#{$prefix}select-pd-#{$size});
+	background-color: var(--#{$prefix}white);
+	background-image: url(#{$url}/component/common/ico_select_#{$size}.svg);
+	background-repeat: no-repeat;
+	background-position: center right var(--#{$prefix}select-rn-#{$size});
+	border: 1px solid var(--#{$prefix}gray-60);
+	border-radius: var(--#{$prefix}select-rd-#{$size});
+	font-family: inherit;
+	font-size: var(--#{$prefix}select-fz-#{$size});;
+	color: var(--#{$prefix}gray-90);
+	opacity: 1;
+	&:focus {
+		border-color: var(--#{$prefix}primary);
+		border-width: 2px;
+		outline-offset: -.5rem;
+	}
+	&[disabled] {
+		background-color: var(--#{$prefix}gray-30);
+		border-color: var(--#{$prefix}gray-40);
+		color: var(--#{$prefix}gray-60);
+	}
+	&.error {
+		border-color: var(--#{$prefix}point);
+		border-width: 2px;
+	}
+}
+
+.is-error {
+	.form-select {
+		border-color: var(--#{$prefix}point);
+		border-width: 2px;
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_spinner.scss (added)
+++ client/resources/scss/common/component/_spinner.scss
@@ -0,0 +1,39 @@
+.spinner {
+	@include flex-layout($jc: center, $ai: center);
+	gap: var(--tk-spacer-2);
+	position: relative;
+	left:0;
+	top: 0; 
+	z-index: 10;
+	font-size: var(--tk-fz-detail-md);
+	width: 100%;
+	height: 100%;
+	text-align: right;
+	&::before {
+		display: inline-flex;
+		content: '';
+		height: 2rem;
+		width: 2rem;
+		border: .2rem solid var(--tk-gray-20);
+		border: {
+		right-color:  var(--tk-primary);
+		top-color:  var(--tk-primary);
+		radius: 100%;
+		}
+		animation: spin 900ms infinite linear;
+	}
+}
+
+@keyframes spin {
+	from { transform: rotate(0deg); }
+	to { transform: rotate(359deg); }
+}
+
+.form-spinner {
+	position: relative;
+	.spinner {
+		position: absolute;
+		justify-content: flex-end;
+		padding: 0 var(--tk-spacer-4);
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_tables.scss (added)
+++ client/resources/scss/common/component/_tables.scss
@@ -0,0 +1,88 @@
+.tbl-wrap {
+	.tbl {
+		&.data {
+			th,
+			td {
+				padding: var(--#{$prefix}spacer-1) var(--#{$prefix}spacer-4);
+				border-bottom: 1px solid;
+				line-height: $line-height-base;
+				vertical-align: middle;
+			}
+			thead {
+				th {
+					height: var(--#{$prefix}spacer-10);
+					background-color: var(--#{$prefix}secondary-5);
+					border-bottom: 1px solid var(--#{$prefix}secondary-30);
+					font-size: var(--#{$prefix}fz-body-sm);
+					color: var(--#{$prefix}gray-90);
+					font-weight: map-get($fws, bold);
+					text-align: left;
+				}
+			}
+			tbody {
+				th,
+				td {
+					height: var(--#{$prefix}spacer-14);
+					padding-top: 1.3rem;
+					padding-bottom: 1.4rem;
+					background-color: var(--#{$prefix}white);
+					border-bottom: 1px solid var(--#{$prefix}gray-30);
+					font-size: var(--#{$prefix}fz-body-md);
+					color: var(--#{$prefix}gray-90);
+					font-weight: map-get($fws, normal);
+					text-align: left;
+				}
+			}
+		}
+		&.row {
+			border-top: 1px solid var(--#{$prefix}secondary-30);
+		}
+	}
+	&.scroll {
+		overflow-x: auto;
+		overflow-y: hidden;
+		.tbl {
+			th,
+			td {
+				white-space: nowrap;
+			}
+		}
+	}
+	.def-list {
+		$bdc: var(--#{$prefix}gray-50);
+		@include flex-layout();
+		flex-wrap: wrap;
+		border-top: 1px solid $bdc;
+		border-bottom: 1px solid $bdc;
+		padding: var(--#{$prefix}spacer-2) 0;
+		> dt,
+		> dd {
+			min-height: var(--#{$prefix}spacer-12);
+			padding-top: .9rem;
+			padding-bottom: 1rem;
+			color: var(--#{$prefix}gray-90);
+			line-height: $line-height-base;
+			text-align: left;
+			vertical-align: top;
+		}
+		> dt {
+			width: 12.8rem;
+			font-weight: map-get($fws, bold);
+		}
+		> dd {
+			width: calc(100% - 12.8rem);
+		}
+	}
+}
+
+@include mobile {
+	.tbl-wrap {
+		&.mob-scroll {
+			width: 100%;
+			th,
+			td {
+				white-space: nowrap;
+			}
+		}
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_tabs.scss (added)
+++ client/resources/scss/common/component/_tabs.scss
@@ -0,0 +1,197 @@
+.tab-area {
+	width: 100%;
+}
+.tab {
+	> ul {
+		display: flex;
+		align-items: center;
+		overflow-x: auto;
+		width: 100%;
+	}
+	li,
+	.btn-tab {
+		@include flex-layout(inline-flex, center, center);
+		position: relative;
+		white-space: nowrap;
+	}
+	.btn-tab {
+		width: 100%;
+		background-color: var(--#{$prefix}white);
+		border: 1px solid var(--#{$prefix}white);
+		color: var(--#{$prefix}gray-70);
+		font-weight: map-get($fws, bold);
+		transition: $transition-base;
+		&:not(:disabled):hover {
+			border-radius: .6rem;
+			background-color: var(--tk-secondary-5);
+			transition: $transition-base;
+		}
+		&:not(:disabled):active {
+			background-color: var(--tk-secondary-10);
+			transition: $transition-base;
+		}
+		&[disabled] {
+			color: var(--tk-gray-50);
+			cursor: default;
+		}
+	}
+	li {
+		flex-grow: 0;
+	}
+	&.full {
+		width: 100%;
+		.btn-tab {
+			height: var(--#{$prefix}tab-h-full) !important;
+			font-size: var(--#{$prefix}tab-fz-full) !important;
+		}
+		> ul {
+			@include group-wrap;
+			> li {
+				@include equal-width;
+			}
+		}
+	}
+	&.fill {
+		.btn-tab {
+			height: var(--#{$prefix}tab-h-fill);
+			padding: 0 var(--#{$prefix}tab-px-fill);
+			font-size: var(--#{$prefix}tab-fz-fill);
+		}
+		.active {
+			.btn-tab {
+				background-color: var(--#{$prefix}secondary);
+				border-color: var(--#{$prefix}secondary);
+				color: var(--#{$prefix}white);
+			}
+		}
+		> ul {
+			> li {
+				& + li {
+					margin-left: var(--#{$prefix}tab-ml-fill);
+				}
+				.btn-tab {
+					border-radius: var(--#{$prefix}tab-rd-fill);
+				}
+			}
+		}
+		&.full {
+			.btn-tab {
+				border: 1px solid var(--#{$prefix}secondary-20);
+			}
+			.active {
+				.btn-tab {
+					background-color: var(--#{$prefix}secondary);
+					border-color: var(--#{$prefix}secondary);
+					color: var(--#{$prefix}white);
+				}
+			}
+			> ul {
+				> li {
+					& + li {
+						margin-left: 0;
+						.btn-tab {
+							border-left: none;
+						}
+					}
+					.btn-tab {
+						border-radius: 0;
+					}
+					&:first-of-type {
+						.btn-tab {
+							border-top-left-radius: var(--#{$prefix}tab-rd-full);
+							border-bottom-left-radius: var(--#{$prefix}tab-rd-full);
+						}
+					}
+					&:last-of-type {
+						.btn-tab {
+							border-top-right-radius: var(--#{$prefix}tab-rd-full);
+							border-bottom-right-radius: var(--#{$prefix}tab-rd-full);
+						}
+					}
+				}
+			}
+		}
+	}
+	&.line {
+		.btn-tab {
+			height: var(--#{$prefix}tab-h-line);
+			padding: 0 var(--#{$prefix}tab-px-line);
+			font-size: var(--#{$prefix}tab-fz-line);
+			&:before {
+				@include position($b: 0, $l: 50%);
+				@include pseudo();
+				width: 0;
+				height: .2rem;
+				background-color: var(--#{$prefix}secondary);
+				transition: $transition-base;
+			}
+		}
+		.active {
+			.btn-tab {
+				color: var(--#{$prefix}secondary);
+				&:before {
+					@include position($l: 0);
+					width: 100%;
+				}
+			}
+		}
+		> ul {
+			> li {
+				& + li {
+					margin-left: var(--#{$prefix}tab-ml-line);
+				}
+			}
+		}
+		&.full {
+			.btn-tab {
+				padding-left:0;
+				padding-right: 0;
+				border: 0;
+				border-bottom: 2px solid var(--#{$prefix}gray-30);
+				&:before {
+					bottom: -.2rem;
+					height: .4rem;
+				}
+				&:hover,
+				&:active {
+					border-bottom-left-radius: 0;
+					border-bottom-right-radius: 0;
+				}
+			}
+			> ul {
+				> li {
+					& + li {
+						margin-left: 0;
+					}
+				}
+			}
+		}
+	}
+}
+
+.tab-conts {
+	display: none;
+	margin-top: var(--#{$prefix}spacer-10);
+	/*position: absolute;
+	z-index: -1;
+	opacity: 0;
+	transition: $transition-fade;*/
+	&.active {
+		@include flex-layout($fd: column, $ai: normal);
+		gap: var(--#{$prefix}spacer-10);
+		/*position: relative;
+		z-index: auto;
+		opacity: 1;*/
+
+	}
+}
+
+//mobile only
+@include mobile {
+	.tab-conts {
+		margin-top: var(--#{$prefix}spacer-10);
+		&.active {
+			gap: var(--#{$prefix}spacer-8);
+		}
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_tooltip.scss (added)
+++ client/resources/scss/common/component/_tooltip.scss
@@ -0,0 +1,126 @@
+.tk-tooltip-wrap {
+	display: inline-flex;
+	position: relative;
+	.tool-txt {
+		@include flex-layout($ai:center);
+		gap: var(--tk-spacer-1);
+		font-size: var(--tk-fz-body-sm);
+	}
+	.tool-btn {
+		@include flex-layout($ai:center);
+		gap: var(--tk-spacer-1);
+		&::after {
+			display: inline-flex;
+			content:'';
+			width: 2rem;
+			height: 2rem;
+			background: url(#{$url}/component/common/ico_tooltip_20.svg) no-repeat center;
+			background-size: contain;
+		}
+	}
+	.tool-in {
+		display: none;
+		position: absolute;
+		z-index: 3;
+		font-size: var(--tk-fz-body-sm);
+		width: 56rem;
+		padding: var(--tk-spacer-6);
+		border-radius: var(--tk-rd-6);
+		border: .1rem solid var(--tk-gray-40);
+		background-color: var(--tk-white);
+		&::before {
+			display: inline-flex;
+			content:'';
+			position: absolute;
+			z-index: 4;
+			width: 2.2rem;
+			height: 1.2rem;
+			background: url(#{$url}/component/common/ico_tool_arr.svg) no-repeat center;
+			background-size: contain;
+		}
+		.tool-hd {
+			@include flex-layout($jc: space-between, $ai: center);	
+			gap: var(--tk-spacer-4);
+			
+		}
+        .tool-tit {
+            flex: 1;
+            @include ellipsis(1);
+            padding-right: var(--tk-spacer-10);
+        }
+		.tool-close {
+			display: inline-flex;
+            position: absolute;
+            top: var(--tk-spacer-3);
+            right: var(--tk-spacer-3);
+			width: 4rem;
+			height: 4rem;
+			background: url(#{$url}/component/common/ico_del_20.svg) no-repeat center;
+		}
+		.tool-cnt {
+			@include flex-layout($fd:column, $ai: normal);	
+			gap: var(--tk-spacer-6);
+			margin-top: var(--tk-spacer-4);
+		}
+       
+	}
+    &.left {
+        .tool-in {
+            left: 0;
+            &::before {
+                left: var(--tk-spacer-6);
+            }
+        }
+    }
+    &.center {
+        .tool-in {
+            left:50%;
+            transform: translateX(-50%);
+            &::before {
+                left: 50%;
+                margin-left: -1.1rem;
+            }
+        }
+    }
+    &.right {
+        .tool-in {
+            right: 0;
+            &::before {
+                right: var(--tk-spacer-6);
+            }
+        }
+    }
+    &.top {
+        .tool-in { 
+            bottom: 100%;
+            margin-bottom: var(--tk-spacer-3);
+            &::before {
+                top: 100%;
+            }
+        }
+        
+    }
+    &.bottom {
+        .tool-in { 
+            top: 100%;
+            margin-top: var(--tk-spacer-3);
+            &::before {
+                bottom: 100%;
+                transform: rotate(-180deg);
+            }
+        }
+    }
+}
+
+@include mobile {
+    .tk-tooltip-wrap { 
+        .tool-in {
+            width: auto !important;
+            // margin: 0 1.6rem;
+            transform: none !important;
+            &::before {
+                display: none;
+            }
+        }
+    }
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/_tree.scss (added)
+++ client/resources/scss/common/component/_tree.scss
@@ -0,0 +1,49 @@
+.tree-node {
+    li {
+        cursor: pointer;
+
+        >div {
+            padding: .5rem 1rem;
+        }
+
+        >div.select {
+            border: 1px solid var(--tk-primary);
+            border-radius: var(--tk-rd-12);
+        }
+
+
+
+        >div.node-wrap {
+            @include flex-layout(flex, center, space-between);
+            .node,
+            .node-name-wrap {
+                @include flex-layout(flex, center);
+    
+                .node-name {
+                    @include ellipsis(1);
+                }
+            }
+        }
+
+        >div.node-wrap.selected{
+            border: 1px solid var(--tk-primary);
+            border-radius: var(--tk-rd-12);
+            margin-bottom: 1rem;
+        }
+
+        .child-node {
+            padding: 1rem;
+            padding-left: 2rem;
+            background-color: var(--tk-white);
+            border-radius: var(--tk-rd-12);
+            margin-bottom: 1rem;
+
+            .node-wrap.selected{
+                background-color: var(--tk-primary);
+                color: var(--tk-white);
+                font-weight: 700;
+            }
+        }
+    }
+
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/component/component.scss (added)
+++ client/resources/scss/common/component/component.scss
@@ -0,0 +1,21 @@
+@import "./accordion";
+@import "./breadcrumbs";
+@import "./buttons";
+@import "./checkbox";
+@import "./coach";
+@import "./datepicker";
+@import "./disclosure";
+@import "./fileupload";
+@import "./helper";
+@import "./input";
+@import "./layout";
+@import "./lists";
+@import "./modal";
+@import "./radio";
+@import "./select";
+@import "./spinner";
+@import "./tables";
+@import "./tabs";
+@import "./tooltip";
+@import "./pagination";
+@import "./tree";(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/mixins/_breakpoints.scss (added)
+++ client/resources/scss/common/mixins/_breakpoints.scss
@@ -0,0 +1,36 @@
+@mixin mobile {
+	@media (max-width: $breakpoint-sm - 1px) {
+		@content;
+	}
+}
+@mixin mobileMore {
+	@media (min-width: $breakpoint-sm) {
+		@content;
+	}
+}
+
+@mixin tablet {
+	@media (min-width: $breakpoint-sm) and (max-width: $breakpoint-md - 1px) {
+		@content;
+	}
+}
+
+//tablet size 이하
+@mixin tabletLess { //
+	@media (max-width: $breakpoint-md - 1px) {
+		@content;
+	}
+}
+
+//tablet size 이상
+@mixin tabletMore { //
+	@media (min-width: $breakpoint-md) {
+		@content;
+	}
+}
+
+@mixin desktop {
+	@media (min-width: $breakpoint-lg) {
+		@content;
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/mixins/_utils.scss (added)
+++ client/resources/scss/common/mixins/_utils.scss
@@ -0,0 +1,669 @@
+// 포커스 효과를 위한 믹스인
+@mixin focus($offset: -.4rem, $color: $primary, $alpha: .8) {
+	// 포커스 아웃라인 색상 및 투명도 설정
+	outline-offset: $offset;
+	$transparent: 1 - $alpha;
+	$focus-color: transparentize($color, $transparent);
+	outline: 2px solid $focus-color;
+}
+
+// Flexbox 요소의 확대 및 축소 비율 설정
+@mixin flex-size($shrink, $grow) {
+	flex-shrink: $shrink;
+	flex-grow: $grow;
+}
+
+// 버튼 스타일 초기화 믹스인
+@mixin btn-reset {
+	color: inherit;
+	border: 0;
+	background-color: inherit;
+
+	&:hover,
+	&:active {
+		background-color: inherit;
+	}
+}
+
+/* **** 영역 관련 믹스인 **** */
+// 컬럼 설정 믹스인 (현재 비어 있음)
+@mixin columns($total, $num, $gutter) {}
+
+// 간격(Spacing) 설정 믹스인
+@mixin spacer($num) {
+	@for $i from 1 through $num {
+		$key: $i;
+		$value: (
+			$i * 4 * 0.1) + rem;
+		// 기본 spacer 값 설정
+		$spacers: map-merge(($key: $value,
+				),
+				$spacers) !global;
+	}
+}
+
+// 테두리 둥근 정도(border-radius) 설정 믹스인
+@mixin radius($num) {
+	$radius: ($num * 0.1) + rem;  // 숫자에 rem 단위를 추가하여 계산
+	border-radius: $radius;  // 계산된 border-radius 값 적용
+
+	// $border-radius: map-merge($num : ($num * 0.1) + rem,
+	// 	),
+	// 	$border-radius
+}
+
+// 위치(position) 설정 믹스인
+@mixin position($p: absolute,
+	$t: null,
+	$b: null,
+	$l: null,
+	$r: null) {
+	position: $p;
+	top: $t;
+	bottom: $b;
+	left: $l;
+	right: $r;
+}
+
+// 가로와 세로 크기를 동일하게 설정하는 믹스인
+@mixin foursquare($size) {
+	width: $size;
+	height: $size;
+}
+
+// 가상 요소(pseudo-element) 생성 시 사용
+@mixin pseudo($c: null) {
+	content: "#{$c}";
+}
+
+// Flexbox 레이아웃 설정 믹스인
+@mixin flex-layout($d: flex, $ai: flex-start, $jc: flex-start, $fd: row) {
+	display: $d;
+	align-items: $ai;
+	justify-content: $jc;
+	flex-direction: $fd;
+}
+
+// 그룹 요소를 감싸는 컨테이너 믹스인
+@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;
+}
+
+// Flexbox 아이템이 동일한 너비를 갖도록 설정하는 믹스인
+@mixin equal-width() {
+	flex: 1 1 0px;
+	min-width: 0;
+}
+
+// 요소를 중앙 정렬하는 믹스인
+@mixin position-center($type) {
+	@each $type in $position-type {
+
+		// 좌우 중앙 정렬
+		@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;
+}
+
+/* **** 텍스트 속성 ****/ 
+
+// 텍스트 말줄임표 설정 (지정된 줄 수 만큼 텍스트를 줄여 표시)
+@mixin ellipsis($line) {
+	display: -webkit-box;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	-webkit-box-orient: vertical;
+	-webkit-line-clamp: $line;
+}
+
+// 스크린 리더 전용 스타일 (화면에서 숨기고 접근성 유지)
+@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;
+}
+
+// 팝오버/툴팁 등의 텍스트 스타일 초기화
+@mixin reset-text {
+	font-family: var(--#{$prefix}-fz-body-md);
+	font-style: normal;
+	font-weight: map-get($fws, normal);
+	line-height: $line-height-base;
+	text-align: left;
+	text-decoration: none;
+	text-shadow: none;
+	text-transform: none;
+	letter-spacing: normal;
+	white-space: normal;
+	word-spacing: normal;
+	line-break: auto;
+}
+
+// CSS 애니메이션 가시성 설정 (hidden 또는 visible 값 사용)
+@mixin visibility($v) {
+	@if ($v ==hidden) {
+		visibility: hidden;
+		z-index: -1;
+		opacity: 0;
+	}
+
+	@else if ($v ==visible) {
+		visibility: visible;
+		z-index: auto;
+		opacity: 1;
+	}
+}
+
+/* **** 스크롤바 스타일 ****/ 
+
+// 스크롤바 커스텀 스타일
+@mixin scrollbar {
+	&::-webkit-scrollbar {
+		width: .8rem;
+	}
+
+	&::-webkit-scrollbar-thumb {
+		background-color: var(--#{$prefix}gray-40);
+		border-radius: .8rem;
+	}
+
+	&::-webkit-scrollbar-track {
+		background-color: var(--#{$prefix}gray-30);
+	}
+}
+
+/* **** 폰트 크기 설정 ****/ 
+
+// 전역 폰트 크기 설정 (CSS 변수로 지정)
+@mixin fz() {
+	@each $type, $size in map-get($font-size, 'sizes') {
+		@each $key, $value in $size {
+			--#{$prefix}fz-#{$type}-#{$key}: #{$value};
+		}
+	}
+}
+
+/* **** 버튼 스타일 ****/ 
+
+// 버튼 크기 및 스타일 설정
+@mixin btn() {
+	@each $type, $size in map-get($btns, 'setting') {
+		@each $key, $value in $size {
+			--#{$prefix}btn-#{$type}-#{$key}: #{$value};
+
+			// 높이별 버튼 클래스 추가
+			@if ($type =='h') {
+				@at-root .btn.#{$key} {
+					height: #{$value};
+					padding: 0 var(--#{$prefix}btn-px-#{$key});
+					border-radius: var(--#{$prefix}btn-rd-#{$key});
+					font-size: var(--#{$prefix}btn-fz-#{$key});
+				}
+			}
+		}
+	}
+}
+
+/* **** 칩 버튼 스타일 ****/ 
+
+// 칩 버튼 (outline 또는 fill 스타일 선택)
+@mixin btn-chip($name, $default) {
+	// 아웃라인 스타일 칩 버튼 설정
+	@if ($name =='outline') {
+		@each $type, $size in map-get($btnChipOutline, 'setting') {
+			@each $key, $value in $size {
+				--#{$prefix}btnChipOutline-#{$type}-#{$key}: #{$value};
+
+				// 높이별 칩 버튼 스타일 적용
+				@if ($type =='h') {
+					@at-root .btn-chip-outline.#{$key} {
+						height: var(--#{$prefix}btnChipOutline-h-#{$key});
+						padding: var(--#{$prefix}btnChipOutline-pd-#{$key});
+						border-radius: var(--#{$prefix}btnChipOutline-rd-#{$key});
+						font-size: var(--#{$prefix}btnChipOutline-fz-#{$key});
+
+						.btn-del {
+							width: var(--#{$prefix}btnChipOutline-size-#{$key});
+							height: var(--#{$prefix}btnChipOutline-size-#{$key});
+							background: url(#{$url}/component/common/ico_chip_del.svg) no-repeat 0 0;
+							background-size: contain;
+						}
+					}
+				}
+
+				// 기본 크기 설정
+				@if ($default) {
+					@at-root .btn-chip-outline {
+						height: var(--#{$prefix}btnChipOutline-h-#{$default});
+						padding: var(--#{$prefix}btnChipOutline-pd-#{$default});
+						border-radius: var(--#{$prefix}btnChipOutline-rd-#{$default});
+						font-size: var(--#{$prefix}btnChipOutline-fz-#{$default});
+
+						.btn-del {
+							width: var(--#{$prefix}btnChipOutline-size-#{$default});
+							height: var(--#{$prefix}btnChipOutline-size-#{$default});
+							background: url(#{$url}/component/common/ico_chip_del.svg) no-repeat 0 0;
+							background-size: contain;
+
+							// 포커스 스타일 추가
+							&:focus {
+								@include focus($offset: .4rem);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	// 채워진 스타일 칩 버튼 설정
+	@else if ($name =='fill') {
+		@each $type, $size in map-get($btnChipFill, 'setting') {
+			@each $key, $value in $size {
+				--#{$prefix}btnChipFill-#{$type}-#{$key}: #{$value};
+
+				// 높이별 칩 버튼 스타일 적용
+				@if ($type =='h') {
+					@at-root .btn-chip-fill.#{$key} {
+						height: var(--#{$prefix}btnChipFill-h-#{$key});
+						padding: var(--#{$prefix}btnChipFill-pd-#{$key});
+						border-radius: var(--#{$prefix}btnChipFill-rd-#{$key});
+						font-size: var(--#{$prefix}btnChipFill-fz-#{$key});
+					}
+				}
+
+				// 기본 크기 설정
+				@if ($default) {
+					@at-root .btn-chip-fill {
+						height: var(--#{$prefix}btnChipFill-h-#{$default});
+						padding: var(--#{$prefix}btnChipFill-pd-#{$default});
+						border-radius: var(--#{$prefix}btnChipFill-rd-#{$default});
+						font-size: var(--#{$prefix}btnChipFill-fz-#{$default});
+
+						// 포커스 스타일 추가
+						&:focus {
+							@include focus($offset: .4rem);
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+
+/* **** form mixin ****/
+// input 믹스인: 폼의 텍스트 입력 필드 스타일을 설정
+@mixin input() {
+	@each $type, $size in map-get($inputs, 'setting') {
+		@each $key, $value in $size {
+			--#{$prefix}input-#{$type}-#{$key}: #{$value};
+
+			@if ($type =='h') {
+
+				//높이별 class값 추가
+				@at-root .form-control.#{$key} {
+					height: #{$value};
+					padding: 0 var(--#{$prefix}input-px-#{$key});
+					border-radius: var(--#{$prefix}input-rd-#{$key});
+					font-size: var(--#{$prefix}input-fz-#{$key});
+				}
+			}
+		}
+	}
+}
+
+// radio 믹스인: 라디오 버튼 스타일 설정
+@mixin radio() {
+	@each $type, $size in map-get($radios, 'setting') {
+		@each $key, $value in $size {
+			--#{$prefix}rdo-#{$type}-#{$key}: #{$value};
+
+			@if ($type =='size') {
+				@at-root .form-check.#{$key} {
+					>[type=radio] {
+						~label {
+							font-size: var(--tk-rdo-fz-#{$key});
+							line-height: var(--tk-rdo-#{$type}-#{$key});
+							min-height: var(--tk-rdo-#{$type}-#{$key});
+							padding-left: calc(var(--tk-rdo-#{$type}-#{$key}) + var(--tk-spacer-2));
+
+							&::before {
+								width: var(--#{$prefix}rdo-#{$type}-#{$key});
+								height: var(--#{$prefix}rdo-#{$type}-#{$key});
+							}
+
+							&::after {
+								top: calc((var(--#{$prefix}rdo-size-#{$key}) - var(--#{$prefix}rdo-chk-#{$key})) / 2);
+								left: calc((var(--#{$prefix}rdo-size-#{$key}) - var(--#{$prefix}rdo-chk-#{$key})) / 2);
+								width: var(--#{$prefix}rdo-chk-#{$key});
+								height: var(--#{$prefix}rdo-chk-#{$key});
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+// checkbox 믹스인: 체크박스 스타일 설정
+@mixin chk() {
+	@each $type, $size in map-get($checkboxes, 'setting') {
+		@each $key, $value in $size {
+			--#{$prefix}chk-#{$type}-#{$key}: #{$value};
+
+			@if ($type =='size') {
+				@at-root .form-check.#{$key} {
+					>[type=checkbox] {
+						~label {
+							font-size: var(--tk-chk-fz-#{$key});
+							line-height: var(--tk-chk-#{$type}-#{$key});
+							min-height: var(--tk-chk-#{$type}-#{$key});
+							padding-left: calc(var(--tk-chk-#{$type}-#{$key}) + var(--tk-spacer-2));
+
+							&::before {
+								width: var(--#{$prefix}chk-#{$type}-#{$key});
+								height: var(--#{$prefix}chk-#{$type}-#{$key});
+							}
+
+							&::after {
+								width: var(--#{$prefix}chk-primary-chk-#{$key});
+								height: var(--#{$prefix}chk-primary-chk-#{$key});
+							}
+						}
+					}
+
+					&.ico-only {
+						>[type=checkbox] {
+							~label {
+								padding-left: var(--tk-chk-#{$type}-#{$key});
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+// select 믹스인: 셀렉트 박스 스타일 설정
+@mixin select() {
+	@each $type, $size in map-get($select, 'setting') {
+		@each $key, $value in $size {
+			--#{$prefix}select-#{$type}-#{$key}: #{$value};
+
+			@if ($type =='h') {
+
+				//높이별 class값 추가
+				@at-root .form-select.#{$key} {
+					height: #{$value};
+					padding: var(--#{$prefix}select-pd-#{$key});
+					border-radius: var(--#{$prefix}select-rd-#{$key});
+					font-size: var(--#{$prefix}select-fz-#{$key});
+					background-size: var(--#{$prefix}select-bgs-#{$key});
+				}
+			}
+		}
+	}
+}
+
+// switch 믹스인: 스위치 컴포넌트 스타일 설정
+@mixin switch() {
+	@each $type, $size in map-get($switch, 'setting') {
+		@each $key, $value in $size {
+			--#{$prefix}switch-#{$type}-#{$key}: #{$value};
+
+			@if ($type =='w') {
+				@at-root .form-switch.#{$key} {
+					[type=checkbox] {
+						~i {
+							&::before {
+								width: var(--#{$prefix}switch-b-#{$key});
+								height: var(--#{$prefix}switch-b-#{$key});
+								border-radius: var(--#{$prefix}switch-rd-#{$key});
+							}
+
+							&::after {
+								width: var(--#{$prefix}switch-w-#{$key});
+								height: var(--#{$prefix}switch-h-#{$key});
+							}
+						}
+
+						~label {
+							$labelValue : var(--#{$prefix}switch-w-#{$key});
+							$pdValue : var(--#{$prefix}switch-pd-#{$key});
+							padding-left: calc($labelValue + $pdValue);
+							margin-left: calc($labelValue * -1);
+							font-size: var(--#{$prefix}switch-fz-#{$key});
+						}
+
+						&:checked {
+							~i {
+								&::before {
+									$posL : calc(var(--#{$prefix}switch-w-#{$key}) - var(--#{$prefix}switch-b-#{$key}) - var(--#{$prefix}switch-br-#{$key}));
+									@include position($l: $posL);
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+// form-chip 믹스인: 칩 형태의 선택 가능한 컴포넌트 스타일 설정
+@mixin form-chip($name, $default) {
+	@if ($name =='radio') {
+		@each $type, $size in map-get($rdoChipOutline, 'setting') {
+			@each $key, $value in $size {
+				--#{$prefix}rdoChipOutline-#{$type}-#{$key}: #{$value};
+
+				@if ($type =='h') {
+					@at-root .form-chip.#{$key} {
+						.radio {
+							~.form-chip-outline {
+								gap:var(--#{$prefix}chkChipOutline-gap-#{$key});
+								height: var(--#{$prefix}rdoChipOutline-h-#{$key});
+								padding: var(--#{$prefix}rdoChipOutline-pd-#{$key});
+								border-radius: var(--#{$prefix}rdoChipOutline-rd-#{$key});
+								font-size: var(--#{$prefix}rdoChipOutline-fz-#{$key});
+
+								&::before {
+									width:var(--#{$prefix}chkChipOutline-ico-#{$key});
+									height:var(--#{$prefix}chkChipOutline-ico-#{$key});
+									background: url(#{$url}/component/common/ico_check_chip.svg) no-repeat 0 0;
+									background-size: contain;
+								}
+							}
+
+							&:checked {
+								~.form-chip-outline {
+									&::before {
+										background-image: url(#{$url}/component/common/ico_check_chip_checked.svg);
+									}
+								}
+							}
+
+							&:disabled {
+								~.form-chip-outline {
+									&::before {
+										background-image: url(#{$url}/component/common/ico_check_chip_disabled.svg);
+									}
+								}
+							}
+						}
+					}
+				}
+
+				@if ($default) {
+					@at-root .form-chip {
+						.radio {
+							~.form-chip-outline {
+								gap:var(--#{$prefix}chkChipOutline-gap-#{$key});
+								height: var(--#{$prefix}rdoChipOutline-h-#{$key});
+								padding: var(--#{$prefix}rdoChipOutline-pd-#{$key});
+								border-radius: var(--#{$prefix}rdoChipOutline-rd-#{$key});
+								font-size: var(--#{$prefix}rdoChipOutline-fz-#{$key});
+
+								&::before {
+									width:var(--#{$prefix}chkChipOutline-ico-#{$key});
+									height:var(--#{$prefix}chkChipOutline-ico-#{$key});
+									background: url(#{$url}/component/common/ico_check_chip.svg) no-repeat 0 0;
+									background-size: contain;
+								}
+							}
+
+							&:checked {
+								~.form-chip-outline {
+									&::before {
+										background-image: url(#{$url}/component/common/ico_check_chip_checked.svg);
+									}
+								}
+							}
+
+							&:disabled {
+								~.form-chip-outline {
+									&::before {
+										background-image: url(#{$url}/component/common/ico_check_chip_disabled.svg);
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	@else if ($name =='checkbox') {
+		@each $type, $size in map-get($chkChipOutline, 'setting') {
+			@each $key, $value in $size {
+				--#{$prefix}chkChipOutline-#{$type}-#{$key}: #{$value};
+
+				@if ($type =='h') {
+					@at-root .form-chip.#{$key} {
+						.checkbox {
+							~.form-chip-outline {
+								gap:var(--#{$prefix}chkChipOutline-gap-#{$key});
+								height: var(--#{$prefix}chkChipOutline-h-#{$key});
+								padding: var(--#{$prefix}chkChipOutline-pd-#{$key});
+								border-radius: var(--#{$prefix}chkChipOutline-rd-#{$key});
+								font-size: var(--#{$prefix}chkChipOutline-fz-#{$key});
+
+								&::before {
+									width:var(--#{$prefix}chkChipOutline-ico-#{$key});
+									height:var(--#{$prefix}chkChipOutline-ico-#{$key});
+									background: url(#{$url}/component/common/ico_check_chip.svg) no-repeat 0 0;
+									background-size: contain;
+								}
+							}
+
+							&:checked {
+								~.form-chip-outline {
+									&::before {
+										background-image: url(#{$url}/component/common/ico_check_chip_checked.svg);
+									}
+								}
+							}
+
+							&:disabled {
+								~.form-chip-outline {
+									&::before {
+										background-image: url(#{$url}/component/common/ico_check_chip_disabled.svg);
+									}
+								}
+							}
+						}
+					}
+				}
+
+				@if ($default) {
+					@at-root .form-chip {
+						.checkbox {
+							~.form-chip-outline {
+								gap:var(--#{$prefix}chkChipOutline-gap-#{$key});
+								height: var(--#{$prefix}chkChipOutline-h-#{$key});
+								padding: var(--#{$prefix}chkChipOutline-pd-#{$key});
+								border-radius: var(--#{$prefix}chkChipOutline-rd-#{$key});
+								font-size: var(--#{$prefix}chkChipOutline-fz-#{$key});
+
+								&::before {
+									width:var(--#{$prefix}chkChipOutline-ico-#{$key});
+									height:var(--#{$prefix}chkChipOutline-ico-#{$key});
+									background: url(#{$url}/component/common/ico_check_chip.svg) no-repeat 0 0;
+									background-size: contain;
+								}
+							}
+
+							&:checked {
+								~.form-chip-outline {
+									&::before {
+										background-image: url(#{$url}/component/common/ico_check_chip_checked.svg);
+									}
+								}
+							}
+
+							&:disabled {
+								~.form-chip-outline {
+									&::before {
+										background-image: url(#{$url}/component/common/ico_check_chip_disabled.svg);
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+//tab setting
+@mixin tabs() {
+	@each $type, $size in map-get($tabs, 'setting') {
+		@each $key, $value in $size {
+			--#{$prefix}tab-#{$type}-#{$key}: #{$value};
+		}
+	}
+}(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/common/mixins/mixins.scss (added)
+++ client/resources/scss/common/mixins/mixins.scss
@@ -0,0 +1,2 @@
+@import "./utils";
+@import "./breakpoints";(파일 끝에 줄바꿈 문자 없음)
 
client/resources/scss/main.scss (added)
+++ client/resources/scss/main.scss
@@ -0,0 +1,11 @@
+
+
+@import "./common/mixins/mixins.scss";
+@import "./common/base/base.scss";
+@import "./common/component/component.scss";
+
+
+
+// admin
+@import "./admin/layout.scss";
+@import "./admin/content.scss";
 
client/resources/svg/Lock.svg (deleted)
--- client/resources/svg/Lock.svg
@@ -1,3 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
-  <path stroke-linecap="round" stroke-linejoin="round" d="M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z" />
-</svg>
client/theme/tema_v1/css/component.css
--- client/theme/tema_v1/css/component.css
+++ client/theme/tema_v1/css/component.css
@@ -15,7 +15,7 @@
     height: auto;
     padding: 2rem;
     border-radius: 10px;
-    border: 0.1rem solid var(--krds-gray-40);
+    border: 0.1rem solid var(--tk-gray-40);
 
 }
 
@@ -106,7 +106,7 @@
     padding: 2.4rem 0 0 0 ;
     gap: 1.2rem;
     width: 100%;
-    color: var(--krds-gray-70);
+    color: var(--tk-gray-70);
     }
     .conts-wrap .tit {
         font-size: 1.9rem;
@@ -612,7 +612,7 @@
 .search-input{
     
         border-radius: 0.8rem;
-    border: 1px solid var(--krds-gray-60);
+    border: 1px solid var(--tk-gray-60);
         width: 100%;
         height: 100%;
     
@@ -634,7 +634,7 @@
 	color: #999999;
 }
 .search-input:focus {
-    border: 2px solid var(--krds-primary-40); /* 원하는 색상으로 변경 (예: 파란색) */
+    border: 2px solid var(--tk-primary-40); /* 원하는 색상으로 변경 (예: 파란색) */
     outline: none;  /* 포커스 시 outline 제거 (선택사항) */
   }
 
client/theme/tema_v1/css/style.css
--- client/theme/tema_v1/css/style.css
+++ client/theme/tema_v1/css/style.css
@@ -156,17 +156,17 @@
 }
 .tab-nav>ul>li>p {
     font-size: 1.8rem;
-    background-color: var(--krds-primary-5);
-    border: 1px solid var(--krds-primary);
+    background-color: var(--tk-primary-5);
+    border: 1px solid var(--tk-primary);
     color: #1D56BC;
     border-radius: 1rem;
     text-align: center;
 }
 
 .tab-nav>ul>li.activeTab>p {
-    background-color: var(--krds-primary);
-    border: 1px solid var(--krds-primary);
-    color: var(--krds-white);
+    background-color: var(--tk-primary);
+    border: 1px solid var(--tk-primary);
+    color: var(--tk-white);
 }
 
 .select-label {
client/theme/tema_v2/css/component.css
--- client/theme/tema_v2/css/component.css
+++ client/theme/tema_v2/css/component.css
@@ -14,7 +14,7 @@
     background-color: var(--white);
     padding: 2rem;
     border-radius: 10px;
-    border: 0.1rem solid var(--krds-gray-40);
+    border: 0.1rem solid var(--tk-gray-40);
 
 }
 
@@ -102,7 +102,7 @@
     padding: 2.4rem 0 0 0 ;
     gap: 1.2rem;
     width: 100%;
-    color: var(--krds-gray-70);
+    color: var(--tk-gray-70);
     }
     .conts-wrap .tit {
         font-size: 1.9rem;
@@ -603,7 +603,7 @@
 /* 서치 */
 .search-bar {
     position: relative;
-    /* border: 2px solid var(--krds-primary-40);
+    /* border: 2px solid var(--tk-primary-40);
     border-radius: 0.8rem; */
     height: 5.6rem;    
         width: 100%;
@@ -627,7 +627,7 @@
     }
 }
 .user-search-bar{ 
-    border: 2px solid var(--krds-primary-40);
+    border: 2px solid var(--tk-primary-40);
     border-radius: 0.8rem;
     overflow: hidden;
 }
client/theme/tema_v2/css/style.css
--- client/theme/tema_v2/css/style.css
+++ client/theme/tema_v2/css/style.css
@@ -160,7 +160,7 @@
 
 .tab-nav>ul>li.activeTab>p {
     color: #1D56BC;
-    border-bottom: 5px solid var(--krds-primary);
+    border-bottom: 5px solid var(--tk-primary);
 }
 
 .select-label {
client/views/component/hierachy/HierachyDraggable.vue
--- client/views/component/hierachy/HierachyDraggable.vue
+++ client/views/component/hierachy/HierachyDraggable.vue
@@ -2,13 +2,13 @@
   <li>
     <div
       :class="{
-        'flex align-center justify-between cursor p-tree no-gutters': true,
+        'node-wrap': true,
         selected: displaySelectedNode === tasks.id,
       }"
       @click="toggleNode(tasks.id)"
     >
-      <div class="gd-11 flex align-center no-gutters">
-        <div class="gd-1" v-if="tasks.childList.length">
+      <div class="node">
+        <div class="arrow-img" v-if="tasks.childList.length">
           <svg-icon
             type="mdi"
             :width="18"
@@ -16,8 +16,7 @@
             :path="iconPath()"
           ></svg-icon>
         </div>
-        <div class="gd-11 flex align-center">
-          <div class="gd-1">
+        <div class="node-name-wrap">
             <svg-icon
               type="mdi"
               v-if="tasks.childList.length"
@@ -26,14 +25,13 @@
               :path="icon"
               :color="'#5089ef'"
             ></svg-icon>
-          </div>
-          <div class="gd-10 cursor" :title="tasks.nm">
+          <div :title="tasks.nm">
             <p class="node-name">{{ tasks.nm }}</p>
           </div>
         </div>
       </div>
       <svg-icon
-        class="gd-1 handle"
+        class="handle"
         type="mdi"
         :width="18"
         :height="18"
 
client/views/component/paginavigationbar/PagiNavigationBar.vue (added)
+++ client/views/component/paginavigationbar/PagiNavigationBar.vue
@@ -0,0 +1,46 @@
+<template>
+    <div :class="className">
+        <p class="navigation-bar">
+            <router-link
+                to="/adm/main.page"  aria-label="home으로 가기" id="home" style="border-bottom: 1px solid;">
+                Home
+            </router-link>                       
+            <!-- <span v-if = "pageNavi.main != ''">&nbsp;&nbsp;&nbsp;&nbsp;>&nbsp;&nbsp;&nbsp;&nbsp;{{ pageNavi.main }}</span><span v-if = "!(pageNavi.sub == null || pageNavi.sub.trim() == '')">&nbsp;&nbsp;&nbsp;&nbsp;>&nbsp;&nbsp;&nbsp;&nbsp;{{ pageNavi.sub }} </span>
+            <span v-if = "!(pageNavi.third == null || pageNavi.third.trim() == '')">&nbsp;&nbsp;&nbsp;&nbsp;>&nbsp;&nbsp;&nbsp;&nbsp;{{ pageNavi.third }} </span> -->
+        </p>
+    </div>
+</template>
+
+<script>
+export default {
+    props: {
+        className: {
+            type: String,
+            default: 'navigation-wrap',
+        },
+        navi : {
+            type: Object,
+            default : null
+        }
+    },
+    data() {
+        return {
+            // pageNavi : this.$getPageNaviInfo(),
+        }
+    },
+    mounted()  {
+       
+    },
+    watch:{
+        'className':function(newV,oldV){          
+        },
+        // '$store.state.pageNaviInfo': function (newValue) {
+        //     this.pageNavi = newValue;
+        // },
+        // 'navi.sub' : function(v){
+        //     this.pageNavi.main = this.navi.main;
+        //     this.pageNavi.sub = this.navi.sub;
+        // }
+    },
+}
+</script>
client/views/component/table/ListTable.vue
--- client/views/component/table/ListTable.vue
+++ client/views/component/table/ListTable.vue
@@ -1,5 +1,5 @@
 <template>
-  <table :class="{ 'list-table mb10': true, [className]: className }">
+  <table :class="{ 'tbl': true, [className]: className }">
     <colgroup>
       <col v-for="(w, idx) in colgroup" :width="w" :key="idx" />
     </colgroup>
@@ -25,7 +25,7 @@
           <td
             v-for="(content, index) in row"
             :key="index"
-            :class="index === 'title' ? 'text-lf' : 'text-ct'"
+            :class="index === 'title' ? 'text-lf table-title' : 'text-ct'"
           >
           <svg-icon type="mdi" :path="pinPath" :width="20" :height="20"  v-if="index == 'bbsNm' && ntcList.includes(idx)"></svg-icon>
           <svg-icon type="mdi" :path="lockPath" :width="20" :height="20" v-else-if="index == 'bbsNm' && lockList.includes(idx)"></svg-icon>
client/views/index.html
--- client/views/index.html
+++ client/views/index.html
@@ -9,38 +9,22 @@
   <base href="/" />
 
   <!-- 공통css -->
-  <link rel="stylesheet" href="../client/resources/lib/swiper/swiper-bundle.min.css">
-  <link rel="stylesheet" href="../client/resources/css/reset.css">
-  <link rel="stylesheet" href="../client/resources/css/grid.css">
-  <link rel="stylesheet" href="../client/resources/css/common.css">
-  <link rel="stylesheet" href="../client/resources/css/admin.css">
-  <link rel="stylesheet" href="../client/resources/css/responsive.css">
-  <link rel="stylesheet" href="../client/resources/css/layout.css"> 
+  <link rel="stylesheet" href="/client/resources/lib/swiper/swiper-bundle.min.css">
+  <link rel="stylesheet" href="/client/build/assets/css/app.css">
+  
 
-  <!--위쪽 헤더 -->   
-  <link rel="stylesheet" href="../client/resources/css/header.css">
-    <!--좌측 헤더 -->
-  <!-- <link rel="stylesheet" href="../client/resources/css/header_column.css"> -->
 
-  <!-- v0 css -->
-  <!-- <link rel="stylesheet" href="../client/resources/css/component.css"> 
-  <link rel="stylesheet" href="../client/resources/css/style.css"> -->
-
-  <!-- v1 css -->
-  <!-- <link rel="stylesheet" href="../client/theme/tema_v1/css/component.css">
-  <link rel="stylesheet" href="../client/theme/tema_v1/css/style.css"> -->
-
-  <!-- v2 css -->
-  <link rel="stylesheet" href="../client/theme/tema_v2/css/component.css">
-  <link rel="stylesheet" href="../client/theme/tema_v2/css/style.css">
+  <!-- 테마 v2 css -->
+  <!-- <link rel="stylesheet" href="/client/theme/tema_v2/css/component.css">
+  <link rel="stylesheet" href="/client/theme/tema_v2/css/style.css"> -->
  
   <script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
-  <script src="../client/resources/lib/swiper/swiper-element-bundle.min.js"></script>
+  <script src="/client/resources/lib/swiper/swiper-element-bundle.min.js"></script>
   <script type="text/javascript" charset="utf-8" src="../client/ckeditor/build/ckeditor.js"></script>
   <title>takensoft cms</title>
 </head>
 <body>
   <div id="root"></div>
-  <script src="../client/build/bundle.js"></script>
+  <script src="/client/build/bundle.js"></script>
 </body>
 </html>
(파일 끝에 줄바꿈 문자 없음)
client/views/index.js
--- client/views/index.js
+++ client/views/index.js
@@ -17,6 +17,7 @@
 import VueDaumPostcode from "vue-daum-postcode";
 import VueDatePicker from '@vuepic/vue-datepicker';
 import '@vuepic/vue-datepicker/dist/main.css'
+import '../resources/scss/main.scss';
 
 async function initVueApp() {
   const router = await createAppRouter()
client/views/layout/AdminHeader.vue
--- client/views/layout/AdminHeader.vue
+++ client/views/layout/AdminHeader.vue
@@ -1,19 +1,14 @@
 <template>
-    <header class="admin-header pd15">
-        <div class="flex justify-between align-center no-gutters">
-            <div class="logo gd-2">
-                <router-link :to="{path : '/adm/main.page'}">ADMINISTRATOR</router-link>
-            </div>
-            <div class="gd-10">
-                <nav>
-                    <ul class="admin-main-menu flex justify-between align-center">
-                        <li v-for="(menu, idx) in menuList" :key="idx" @click="subMenuShow(menu)"
-                            :class="{ 'cursor': true, 'main-active': checkMenu == menu.menuId }">
-                            {{ menu.menuNm }}
-                        </li>
-                    </ul>
-                </nav>
-            </div>
+    <header class="admin-header">
+        <div class="header-wrap">
+            <nav class="top-menu">
+                <ul class="main-menu">
+                    <li v-for="(menu, idx) in menuList" :key="idx" @click="subMenuShow(menu)"
+                        :class="{ 'main-active': checkMenu == menu.menuId }">
+                        {{ menu.menuNm }}
+                    </li>
+                </ul>
+            </nav>
         </div>
     </header>
 </template>
client/views/layout/AdminMenu.vue
--- client/views/layout/AdminMenu.vue
+++ client/views/layout/AdminMenu.vue
@@ -1,26 +1,24 @@
 <template>
-  <nav class="admin-sub-menu pt50 pb50">
-    <div class="pd30 pt0 pb15">
-      <div class="admin-info pd15 mb10">
-        <div class="flex justify-center align-center mb10">
-          <p class="admin-name">{{ mbrNm }}</p>
-        </div>
-        <div class="flex justify-center align-center">
-          <button class="admin-btn pr10" @click="fnlogOut">로그아웃</button>
-          <button class="admin-btn pl10" @click="fnSiteMove">사이트이동</button>
-        </div>
-      </div>
-      <div class="flex justify-center no-gutters">
-        <div class="gd-12">
-          <button class="large-btn darkg-border-btn" @click="cacheClean()">
-            <svg-icon type="mdi" :path="refreshPath"></svg-icon> 변경사항 적용 </button>
+  <nav class="sub-menu">
+    <div class="logo">
+        <router-link :to="{path : '/adm/main.page'}">ADMINISTRATOR</router-link>
+    </div>
+    <div class="info-wrap">
+      <div class="info">
+        <p class="info-name">{{ mbrNm }}</p>
+        <button  @click="fnlogOut">로그아웃</button>
+        <button  @click="fnSiteMove">사이트이동</button>
+    
+        <div class="reset-wrap">
+            <button  @click="cacheClean()">
+              <svg-icon type="mdi" :path="refreshPath"></svg-icon> 변경사항 적용 </button>
         </div>
       </div>
     </div>
-    <ul class="side-menu pt10 pb10">
+    <ul class="side-menu">
       <template v-if="menuList.length > 0">
         <li v-for="(sub, subidx) in menuList" :key="subidx" :class="{ 'sub-active': isActive(sub.routerUrl) }">
-          <div :class="{ 'pt10 pb10 pl30 cursor': true }" @click="
+          <div  @click="
             menuClick(
               sub.routerUrl != '' && sub.routerUrl != null
                 ? sub
@@ -31,7 +29,6 @@
           </div>
           <ul v-show="sub.childList.length > 0">
             <li v-for="(third, thirdIdx) in sub.childList" :key="thirdIdx" :class="{
-              'pt10 pb10 pl60 cursor': true,
               'sub-active': isActive(third.routerUrl),
             }" @click="menuClick(third)">
               <span>{{ third.menuNm }}</span>
client/views/pages/App.vue
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
@@ -2,17 +2,18 @@
   <div v-if="isAdminPage" v-cloak class="admin-wrap">
     <AdminHeader />
     <AdminMenu />
-    <div class="main-warp">
-      <div class="router-wrap">
-        <router-view />
-      </div>
-    </div>
+    <main class="main-wrap">
+        <Paginavigationbar :className="'navigation-wrap'"/>
+        <div class="content-wrap">
+          <router-view />
+        </div>
+    </main>
   </div>
   <div v-else v-cloak class="user-wrap relative">
     <UserHeader v-if="path != '/login.page'"/>
-    <div class="main-warp">
+    <main class="main-wrap">
       <router-view />
-    </div>
+    </main>
   </div>
 </template>
 
@@ -20,6 +21,7 @@
 import UserHeader from "../layout/UserHeader.vue";
 import AdminHeader from "../layout/AdminHeader.vue";
 import AdminMenu from "../layout/AdminMenu.vue";
+import Paginavigationbar from "../component/paginavigationbar/PagiNavigationBar.vue";
 
 const App = {
   data: () => {
@@ -42,9 +44,10 @@
     },
   },
   components: {
-    UserHeader: UserHeader,
-    AdminHeader: AdminHeader,
-    AdminMenu: AdminMenu,
+    'UserHeader': UserHeader,
+    'AdminHeader': AdminHeader,
+    'AdminMenu': AdminMenu,
+    'Paginavigationbar': Paginavigationbar
   },
   mounted() {},
 };
client/views/pages/adm/main/Main.vue
--- client/views/pages/adm/main/Main.vue
+++ client/views/pages/adm/main/Main.vue
@@ -1,66 +1,70 @@
 <template>
-  <div class="content admin-style">
-    <div class="flex mb30">
-      <div class="gd-6 pl0">
-        <div class="admin-sec-title point-font2">
-          <p class="mb10">팝업관리</p>
+  <div class="content-zone">
+    <div class="content">
+       <div class="scroll">
+        <div class="top-zone">
+          <div class="popup-table tbl-wrap">
+            <div class="section-title">
+              <p>팝업관리</p>
+            </div>
+            <ListTable
+              :colgroup="colgroup"
+              :thead="thead"
+              :tbody="tbody"
+              :className="'data'"
+              @listClick="fnPopupViewDetail"
+            />
+          </div>
+          <div class="new-table tbl-wrap">
+            <div class="section-title">
+              <p>최근 등록 글</p>
+            </div>
+            <ListTable
+              :colgroup="colgroup2"
+              :thead="thead2"
+              :tbody="tbody2"
+              :className="'data'"
+              @listClick="fnBbsCnViewDetail"
+            />
+          </div>
         </div>
-        <ListTable
-          :colgroup="colgroup"
-          :thead="thead"
-          :tbody="tbody"
-          :className="'admin-list cmmn-table'"
-          @listClick="fnPopupViewDetail"
-        />
-      </div>
-      <div class="gd-6 pr0">
-        <div class="admin-sec-title point-font2">
-          <p class="mb10">최근 등록 글</p>
+        <div class="middle-zone">
+          <div class="first-box">
+            <div class="box">
+              <p class="box-title">오늘 방문자 수</p>
+              <p class="box-content text-rg">
+                {{ cntnStats.dayCnt.toLocaleString("ko-KR") }}
+              </p>
+            </div>
+          </div>
+          <div class="two-box">
+            <div class="box">
+              <p class="box-title">이번달 방문자 수</p>
+              <p class="box-content text-rg">
+                {{ cntnStats.mmCnt.toLocaleString("ko-KR") }}
+              </p>
+            </div>
+          </div>
+          <div class="three-box">
+            <div class="box">
+              <p class="box-title">총 방문자 수</p>
+              <p class="box-content text-rg">
+                {{ cntnStats.totalCnt.toLocaleString("ko-KR") }}
+              </p>
+            </div>
+          </div>
         </div>
-        <ListTable
-          :colgroup="colgroup2"
-          :thead="thead2"
-          :tbody="tbody2"
-          :className="'admin-list cmmn-table'"
-          @listClick="fnBbsCnViewDetail"
-        />
-      </div>
-    </div>
-    <div class="flex mb15">
-      <div class="gd-4 pl0">
-        <div class="box">
-          <p class="box-title point-font2 mb10">오늘 방문자 수</p>
-          <p class="box-content text-rg">
-            {{ cntnStats.dayCnt.toLocaleString("ko-KR") }}
-          </p>
+        <div class="chart-zone">
+          <div  class="section-title">
+            <p >방문자 접속 통계</p>
+          </div>
+          <div class="box" style="height: 320px">
+            <div class="chart-wrap" ref="chartdiv" style="height: 100%">
+              <ClusteredColumnChart :chartData="chartData" columnX="date" />
+            </div>
+          </div>
         </div>
-      </div>
-      <div class="gd-4">
-        <div class="box">
-          <p class="box-title point-font2 mb10">이번달 방문자 수</p>
-          <p class="box-content text-rg">
-            {{ cntnStats.mmCnt.toLocaleString("ko-KR") }}
-          </p>
-        </div>
-      </div>
-      <div class="gd-4 pr0">
-        <div class="box">
-          <p class="box-title point-font2 2mb10">총 방문자 수</p>
-          <p class="box-content text-rg">
-            {{ cntnStats.totalCnt.toLocaleString("ko-KR") }}
-          </p>
-        </div>
-      </div>
-    </div>
-    <div class="chart-zone">
-      <div class="admin-sec-title point-font2">
-        <p class="mb10">방문자 접속 통계</p>
-      </div>
-      <div class="box" style="height: 320px">
-        <div class="chart-wrap" ref="chartdiv" style="height: 100%">
-          <ClusteredColumnChart :chartData="chartData" columnX="date" />
-        </div>
-      </div>
+       </div>
     </div>
   </div>
 </template>
client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
--- client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
+++ client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
@@ -1,143 +1,98 @@
 <template>
-  <div class="content admin-style">
-    <div class="admin-page-title point-font2 mb30">
-      <p>공통코드관리</p>
-    </div>
-    <div class="full-page">
-      <div class="flex content">
-        <div class="gd-3 pl0 content">
-          <div class="tree-zone content pd15">
-            <div class="tree">
-              <div class="content overflow-y">
-                <draggable tag="ul" class="tree-node" :list="codeList" :group="{ name: 'menu' }" item-key="id"
-                  handle=".handle" ghost-class="ghost">
-                  <template #item="{ element }">
-                    <Hierachy :tasks="element" :icon="iconPath" :selectedNode="selectedCd"
-                      @changeSelected="fnViewDetail" />
-                  </template>
-                </draggable>
+  <div class="content-zone">
+    <div class="content">
+      <div class="section-title">
+        <p>공통코드관리</p>
+      </div>
+      <div class="setting-box">
+
+          <div class="node-zone">
+
+              <div class="tree">
+                <div class="content overflow-y">
+                  <draggable tag="ul" class="tree-node" :list="codeList" :group="{ name: 'menu' }" item-key="id"
+                    handle=".handle" ghost-class="ghost">
+                    <template #item="{ element }">
+                      <Hierachy :tasks="element" :icon="iconPath" :selectedNode="selectedCd"
+                        @changeSelected="fnViewDetail" />
+                    </template>
+                  </draggable>
+                </div>
               </div>
-            </div>
-            <div class="btn-zone pt15">
-              <template v-if="pageAuth.mdfcnAuthrt == 'Y'">
-                <div class="flex">
-                  <div class="gd-6 pl0">
-                    <button class="large-btn blue-border-btn" @click="topAdd">
-                      TOP+
+              <div class="btn-zone">
+                <template v-if="pageAuth.mdfcnAuthrt == 'Y'">
+                      <button class="btn top sm secondary" @click="topAdd">
+                        TOP+
+                      </button>
+                      <button class="btn sub sm secondary" @click="subAdd">
+                        SUB+
+                      </button>
+                    <button class="btn save sm" @click="fnListUpdate">
+                      메뉴 저장
                     </button>
-                  </div>
-                  <div class="gd-6 pr0">
-                    <button class="large-btn blue-border-btn" @click="subAdd">
-                      SUB+
-                    </button>
-                  </div>
-                </div>
-                <div class="pt15">
-                  <button class="large-btn blue-border-btn" @click="fnListUpdate">
-                    메뉴 저장
-                  </button>
-                </div>
-              </template>
-            </div>
+                </template>
+              </div>
           </div>
-        </div>
-        <div class="gd-9 pr0">
-          <div class="content">
-            <table class="form-table">
-              <colgroup>
-                <col width="50%" />
-                <col width="50%" />
-              </colgroup>
-              <tr>
-                <td>
-                  <div class="gd-12 pl0">
-                    <label for="" class="point-font2 mb10">상위코드</label>
-                    <input type="text" class="full-input" disabled v-model="viewCode.upCd" />
-                  </div>
-                </td>
-                <td>
-                  <div class="gd-12 pr0">
-                    <label for="" class="point-font2 mb10">상위코드명</label>
-                    <input type="text" class="full-input" disabled v-model="viewCode.upCdNm" />
-                  </div>
-                </td>
-              </tr>
-              <tr>
-                <td>
-                  <div class="gd-12 pl0">
-                    <label for="" class="form-title point-font2 mb10">
-                      코드
-                    </label>
-                    <input type="text" class="full-input" :disabled="isFormDisabled || !submitStts"
-                      v-model="viewCode.cd" />
-                  </div>
-                </td>
-                <td>
-                  <div class="gd-12 pr0">
-                    <label for="" class="form-title point-font2 mb10">
-                      코드명
-                    </label>
-                    <input type="text" class="full-input" :disabled="isFormDisabled" v-model="viewCode.cdNm" />
-                  </div>
-                </td>
-              </tr>
-              <tr>
-                <td>
-                  <div class="gd-12 pl0">
-                    <label for="" class="point-font2 mb10">코드값</label>
-                    <input type="text" class="full-input" :disabled="isFormDisabled" v-model="viewCode.cdVl" />
-                  </div>
-                </td>
-                <td>
-                  <div class="gd-12 pr0">
-                    <label for="" class="form-title point-font2 mb10">사용여부</label>
-                    <div class="flex align-center no-gutters">
-                      <div class="gd-4">
-                        <input type="radio" name="code" id="y" class="mr5" value="Y" :disabled="isFormDisabled"
-                          v-model="viewCode.useYn" />
-                        <label for="y">사용</label>
-                      </div>
-                      <div class="gd-4">
-                        <input type="radio" name="code" id="n" class="mr5" value="N" :disabled="isFormDisabled"
-                          v-model="viewCode.useYn" />
-                        <label for="n">미사용</label>
-                      </div>
-                    </div>
-                  </div>
-                </td>
-              </tr>
-              <tr>
-                <td colspan="2">
-                  <div class="gd-12 pl0 pr0">
-                    <label for="" class="point-font2 mb10">코드설명</label>
-                    <textarea name="" id="" :disabled="isFormDisabled" v-model="viewCode.cdExpln"></textarea>
-                  </div>
-                </td>
-              </tr>
-            </table>
-            <div class="flex justify-end pt15">
-              <div class="gd-1">
-                <button class="large-btn blue-btn" :disabled="isFormDisabled" @click="fnSave"
-                  v-if="pageAuth.regAuthrt == 'Y'">
-                  <span v-if="submitStts">등록</span>
-                  <span v-else>수정</span>
-                </button>
+          <div class="setting-zone">
+            <div class="form-content">
+              <div>
+                <label for="" class="form-title">상위코드</label>
+                <input type="text" class="form-control sm" disabled v-model="viewCode.upCd" />
               </div>
-              <div class="gd-1">
-                <button :class="{
-                  'large-btn': true,
-                  'gray-btn': isFormDisabled,
-                  'red-border-btn': !isFormDisabled,
-                }" :disabled="isFormDisabled" @click="fnDel" v-if="pageAuth.delAuthrt == 'Y'">
-                  삭제
-                </button>
+              <div>
+                <label for="" class="form-title">상위코드명</label>
+                <input type="text" class="form-control sm" disabled v-model="viewCode.upCdNm" />
+              </div>
+              <div>
+                <label for="" class="form-title">코드</label>
+                <input type="text" class="form-control sm" :disabled="isFormDisabled || !submitStts"
+                  v-model="viewCode.cd" />
+              </div>
+              <div>
+                <label for="" class="form-title">코드명</label>
+                <input type="text" class="form-control sm" :disabled="isFormDisabled" v-model="viewCode.cdNm" />
+              </div>
+              <div>
+                <label for="" class="form-title">코드값</label>
+                <input type="text" class="form-control sm" :disabled="isFormDisabled" v-model="viewCode.cdVl" />
+              </div>
+              <div>
+                <label for="" class="form-title">사용여부</label>
+                <div class="check-area">
+                  <div class="form-check">
+                    <input type="radio" name="code" id="y"  value="Y" :disabled="isFormDisabled"
+                      v-model="viewCode.useYn" />
+                    <label for="y">사용</label>
+                  </div>
+                  <div class="form-check">
+                    <input type="radio" name="code" id="n"  value="N" :disabled="isFormDisabled"
+                      v-model="viewCode.useYn" />
+                    <label for="n">미사용</label>
+                  </div>
+                </div>
+              </div>
+              <div>
+                <label for="textarea" class="form-title">코드설명</label>
+                <textarea class="form-control" id="textarea" :disabled="isFormDisabled" v-model="viewCode.cdExpln"></textarea>
               </div>
             </div>
           </div>
-        </div>
       </div>
     </div>
   </div>
+  <div class="btn-wrap">
+        <button class="btn sm primary" :disabled="isFormDisabled" @click="fnSave"
+          v-if="pageAuth.regAuthrt == 'Y'">
+          <span v-if="submitStts">등록</span>
+          <span v-else>수정</span>
+        </button>
+        <button :class="{
+          'btn sm': true,
+          'red': !isFormDisabled,
+        }" :disabled="isFormDisabled" @click="fnDel" v-if="pageAuth.delAuthrt == 'Y'">
+          삭제
+        </button>
+    </div>
 </template>
 
 <script>
client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
@@ -1,135 +1,108 @@
 <template>
-  <div class="content admin-style">
-    <div class="admin-page-title point-font2 mb30">
-      <p>콘텐츠 유형 관리</p>
-    </div>
-    <details open class="form-table-style mb30">
-      <summary class="point-font2">
-        <p class="summary-style pl10">기본정보</p>
-      </summary>
-      <div class="pt10 pb10">
-        <table class="form-table">
-          <colgroup>
-            <col width="50%" />
-            <col width="50%" />
-          </colgroup>
-          <tr>
-            <td>
-              <div class="gd-12 prl0">
-                <label for="" class="form-title point-font2 mb10">
+  <div class="content-zone">
+    <div class="content">
+      <div class="scroll">
+        <div class="section-title">
+          <p>콘텐츠 유형 관리</p>
+        </div>
+        <div open class="form-box">
+          <div class="form-box-title">
+            <p>기본정보</p>
+          </div>
+          <div class="form-content">
+            <div>
+                <label for="" class="form-title">
                   콘텐츠 한글명
                 </label>
                 <input
                   type="text"
-                  class="full-input"
+                  class="form-control sm"
                   v-model="contsTypeVO.contsKornNm"
                   ref="contsKornNm"
                 />
               </div>
-            </td>
-            <td>
-              <div class="gd-12 pr0">
-                <label for="" class="form-title point-font2 mb10">
+              <div>
+                <label for="" class="form-title">
                   콘텐츠 영문명
                 </label>
                 <input
                   type="text"
-                  class="full-input"
+                  class="form-control sm"
                   v-model="contsTypeVO.contsEngNm"
                   ref="contsEngNm"
                 />
               </div>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <div class="gd-12 pr10">
-                <label for="" class="form-title point-font2 mb10">
+              <div>
+                <label for="" class="form-title">
                   관리자 PATH
                 </label>
                 <input
                   type="text"
-                  class="full-input"
+                  class="form-control sm"
                   v-model="contsTypeVO.mngrPageCrs"
                   ref="mngrPageCrs"
                 />
               </div>
-            </td>
-            <td>
-              <div class="gd-12 pr0">
-                <label for="" class="form-title point-font2 mb10">
+              <div>
+                <label for="" class="form-title">
                   사용자 PATH
                 </label>
                 <input
                   type="text"
-                  class="full-input"
+                  class="form-control sm"
                   v-model="contsTypeVO.pageCrs"
                   ref="pageCrs"
                 />
               </div>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <div class="gd-12 pr0">
-                <label for="" class="form-title point-font2 mb10">
+              <div>
+                <label for="" class="form-title">
                   COMPONENT_URL
                 </label>
                 <input
                   type="text"
-                  class="full-input"
+                  class="form-control sm"
                   v-model="contsTypeVO.compnCrs"
                   ref="compnCrs"
                 />
               </div>
-            </td>
-            <td>
-              <div class="gd-12 pr0">
-                <label for="" class="form-title point-font2 mb10">
+              <div>
+                <label for="" class="form-title">
                   메뉴노출
                 </label>
-                <div class="flex align-center no-gutters">
-                  <div class="gd-4">
-                    <input
-                      type="radio"
-                      name="code"
-                      id="y"
-                      class="mr5"
-                      v-model="contsTypeVO.expsrYn"
-                      value="Y"
-                    />
-                    <label for="y">노출</label>
-                  </div>
-                  <div class="gd-4">
-                    <input
-                      type="radio"
-                      name="code"
-                      id="n"
-                      class="mr5"
-                      v-model="contsTypeVO.expsrYn"
-                      value="N"
-                    />
-                    <label for="n">미노출</label>
-                  </div>
+                <div class="check-area">
+                    <div class="form-check">
+                      <input
+                        type="radio"
+                        name="code"
+                        id="y"
+                        v-model="contsTypeVO.expsrYn"
+                        value="Y"
+                      />
+                      <label for="y">노출</label>
+                    </div>
+                   <div class="form-check">
+                      <input
+                        type="radio"
+                        name="code"
+                        id="n"
+                        v-model="contsTypeVO.expsrYn"
+                        value="N"
+                      />
+                      <label for="n">미노출</label>
+                   </div>
                 </div>
               </div>
-            </td>
-          </tr>
-        </table>
-      </div>
-    </details>
-
-    <div class="flex justify-end align-center no-gutters">
-      <div class="gd-1 mr10">
-        <button class="large-btn blue-btn" @click="fnUpsert">
-          {{ pageId == null ? "등록" : "수정" }}
-        </button>
-      </div>
-      <div class="gd-1">
-        <button class="large-btn gray-btn" @click="fnList">취소</button>
+          </div>
+        </div>
       </div>
     </div>
   </div>
+  <div class="btn-wrap">
+        <button class="btn sm primary" @click="fnUpsert">
+          {{ pageId == null ? "등록" : "수정" }}
+        </button>
+        <button class="btn sm tertiary" @click="fnList">취소</button>
+    </div>
 </template>
 
 <script>
client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
@@ -1,55 +1,49 @@
 <template>
-  <div class="content">
-    <div class="admin-page-title point-font2 mb30">
-      <p>콘텐츠 유형 관리</p>
-    </div>
-    <div class="search-bar mb15">
-      <div class="flex justify-end align-center no-gutters">
-        <div class="gd-6 mr10">
-          <div class="border">
+  <div class="content-zone">
+    <div class="content">
+      <div class="scroll">
+        <div class="section-title">
+          <p>콘텐츠 유형 관리</p>
+        </div>
+        <div class="search-bar">
             <input
               type="text"
-              class="full-input border-none gd-10 condition-input"
+              class="form-control sm"
               v-model="search['searchText']"
               v-on:keyup.enter="fnViewList"
               placeholder="콘텐츠 한글명을 입력해주세요."
             />
-          </div>
-        </div>
-        <div class="gd-1">
-          <button class="large-btn blue-border-btn" @click="fnViewList">
+          <button class="btn sm ico-before ico-sch" @click="fnViewList">
             검색
           </button>
         </div>
+        <div class="tbl-wrap">
+          <ListTable
+            :colgroup="colgroup"
+            :thead="thead"
+            :tbody="tbody"
+            :className="'data'"
+            @listClick="fnViewDetail"
+          />
+        </div>
       </div>
     </div>
-    <ListTable
-      :colgroup="colgroup"
-      :thead="thead"
-      :tbody="tbody"
-      :className="'admin-list cmmn-table2'"
-      @listClick="fnViewDetail"
-    />
-    <div class="flex justify-between align-center no-gutters">
-      <div class="gd-1"></div>
-      <div class="gd-10">
-        <PaginationButton
-          :className="'admin-pagination'"
-          v-model:currentPage="search['currentPage']"
-          :pagination="search"
-          :click="fnViewList"
-        />
-      </div>
-      <div class="gd-1">
-        <button
-          class="large-btn blue-btn"
-          @click="fnInsert"
-          v-if="pageAuth.regAuthrt == 'Y'"
-        >
-          등록
-        </button>
-      </div>
-    </div>
+  </div>
+  <div class="btn-wrap list">
+    <div class="gd-1"></div>
+      <PaginationButton
+        :className="'pagination'"
+        v-model:currentPage="search['currentPage']"
+        :pagination="search"
+        :click="fnViewList"
+      />
+      <button
+        class="btn primary sm"
+        @click="fnInsert"
+        v-if="pageAuth.regAuthrt == 'Y'"
+      >
+        등록
+      </button>
   </div>
 </template>
 
client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectListOne.vue
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectListOne.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectListOne.vue
@@ -1,149 +1,115 @@
 <template>
-  <div class="content admin-style">
-    <div class="admin-page-title point-font2 mb30">
+  <div class="content-zone">
+    <div class="content">
+      <div class="scroll">
+        <div class="section-title">
       <p>콘텐츠 유형 관리</p>
     </div>
-    <details open class="form-table-style mb30">
-      <summary class="point-font2">
-        <p class="summary-style pl10">기본정보</p>
-      </summary>
-      <div class="pt10 pb10">
-        <table class="form-table">
-          <colgroup>
-            <col width="50%" />
-            <col width="50%" />
-          </colgroup>
-          <tr>
-            <td>
-              <div class="gd-12 prl0">
-                <label for="" class="form-title point-font2 mb10">
-                  콘텐츠 한글명
-                </label>
+    <div class="form-box">
+        <div class="form-box-title">
+          <p>기본정보</p>
+        </div>
+        <div class="form-content">
+          <div>
+            <p class="form-title">콘텐츠 한글명</p>
+            <p>{{ contsTypeVO.contsKornNm }}</p>
+            <!-- <input
+              type="text"
+              class="full-input"
+              v-model="contsTypeVO.contsKornNm"
+              disabled
+            /> -->
+          </div>
+          <div class="gd-12 pr0">
+            <p class="form-title">콘텐츠 영문명</p>
+            <p>{{ contsTypeVO.contsEngNm }}</p>
+            <!-- <input
+              type="text"
+              class="full-input"
+              v-model="contsTypeVO.contsEngNm"
+              disabled
+            /> -->
+          </div>
+          <div class="gd-12 pr10">
+            <p class="form-title">관리자 PATH</p>
+            <p>{{ contsTypeVO.mngrPageCrs }}</p>
+            <!-- <input
+              type="text"
+              class="full-input"
+              v-model="contsTypeVO.mngrPageCrs"
+              disabled
+            /> -->
+          </div>
+          <div>
+            <p class="form-title">사용자 PATH</p>
+            <p>{{ contsTypeVO.pageCrs }}</p>
+            <!-- <input
+              type="text"
+              class="full-input"
+              v-model="contsTypeVO.pageCrs"
+              disabled
+            /> -->
+          </div>
+          <div>
+            <p class="form-title">COMPONENT_URL</p>
+            <p>{{ contsTypeVO.compnCrs }}</p>
+            <!-- <input
+              type="text"
+              class="full-input"
+              v-model="contsTypeVO.compnCrs"
+              disabled
+            /> -->
+          </div>
+          <div>
+            <p class="form-title">메뉴타입 목록 노출</p>
+            <p>{{contsTypeVO.expsrYn}}</p>
+            <!--<div class="check-area">
+               <div class="form-check">
                 <input
-                  type="text"
-                  class="full-input"
-                  v-model="contsTypeVO.contsKornNm"
+                  type="radio"
+                  name="code"
+                  id="y"
+                  v-model="contsTypeVO.expsrYn"
+                  value="Y"
                   disabled
                 />
+                <label for="y">노출</label>
               </div>
-            </td>
-            <td>
-              <div class="gd-12 pr0">
-                <label for="" class="form-title point-font2 mb10">
-                  콘텐츠 영문명
-                </label>
+              <div class="form-check">
                 <input
-                  type="text"
-                  class="full-input"
-                  v-model="contsTypeVO.contsEngNm"
+                  type="radio"
+                  name="code"
+                  id="n"
+                  v-model="contsTypeVO.expsrYn"
+                  value="N"
                   disabled
                 />
+                <label for="n">미노출</label>
               </div>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <div class="gd-12 pr10">
-                <label for="" class="form-title point-font2 mb10">
-                  관리자 PATH
-                </label>
-                <input
-                  type="text"
-                  class="full-input"
-                  v-model="contsTypeVO.mngrPageCrs"
-                  disabled
-                />
-              </div>
-            </td>
-            <td>
-              <div class="gd-12 pr0">
-                <label for="" class="form-title point-font2 mb10">
-                  사용자 PATH
-                </label>
-                <input
-                  type="text"
-                  class="full-input"
-                  v-model="contsTypeVO.pageCrs"
-                  disabled
-                />
-              </div>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <div class="gd-12 pr0">
-                <label for="" class="form-title point-font2 mb10">
-                  COMPONENT_URL
-                </label>
-                <input
-                  type="text"
-                  class="full-input"
-                  v-model="contsTypeVO.compnCrs"
-                  disabled
-                />
-              </div>
-            </td>
-            <td>
-              <div class="gd-12 pr0">
-                <label for="" class="form-title point-font2 mb10">
-                  메뉴 타입 목록 노출
-                </label>
-                <div class="flex align-center no-gutters">
-                  <div class="gd-4">
-                    <input
-                      type="radio"
-                      name="code"
-                      id="y"
-                      class="mr5"
-                      v-model="contsTypeVO.expsrYn"
-                      value="Y"
-                      disabled
-                    />
-                    <label for="y">노출</label>
-                  </div>
-                  <div class="gd-4">
-                    <input
-                      type="radio"
-                      name="code"
-                      id="n"
-                      class="mr5"
-                      v-model="contsTypeVO.expsrYn"
-                      value="N"
-                      disabled
-                    />
-                    <label for="n">미노출</label>
-                  </div>
-                </div>
-              </div>
-            </td>
-          </tr>
-        </table>
+            </div> -->
+          </div>
+        </div>
       </div>
-    </details>
-    <div class="flex justify-end align-center no-gutters">
-      <div class="gd-1 mr10">
-        <button class="large-btn gray-border-btn" @click="fnList">목록</button>
       </div>
-      <div class="gd-1 mr10">
+    </div>
+  </div>
+  <div class="btn-wrap">
+        <button class="btn sm tertiary" @click="fnList">목록</button>
         <button
-          class="large-btn blue-border-btn"
+          class="btn sm primary"
           @click="fnUpdate"
           v-if="pageAuth.mdfcnAuthrt == 'Y'"
         >
           수정
         </button>
-      </div>
-      <div class="gd-1">
         <button
-          class="large-btn red-border-btn"
+          class="btn sm red"
           @click="fnDelete"
           v-if="pageAuth.delAuthrt == 'Y'"
         >
           삭제
         </button>
-      </div>
     </div>
-  </div>
 </template>
 
 <script>
client/views/pages/adm/system/networkAccessControl/NetworkAccessControlInsert.vue
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlInsert.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlInsert.vue
@@ -1,62 +1,46 @@
 <template>
-    <div class="content admin-style">
-        <div class="admin-page-title  point-font2 mb30">
-            <p>IP접근제어</p>
-        </div>
-        <details open class="form-table-style mb30">
-            <summary class="point-font2">
-                <p class="summary-style pl10">기본정보</p>
-            </summary>
-            <div class="pt10 pb10">
-                <table class="form-table">
-                    <colgroup>
-                        <col width="50%" />
-                        <col width="50%" />
-                    </colgroup>
-                    <tr>
-                        <td>
-                            <div class="gd-12 pl0">
-                                <label for="" class="form-title point-font2 mb10">제어 유형</label>
-                                <select name="selectType" id="selectType" class="half-select block"
+    <div class="content-zone">
+        <div class="content">
+            <div class="scroll">
+                <div class="section-title">
+                    <p>IP접근제어</p>
+                </div>
+                <div class="form-box">
+                    <div class="form-box-title">
+                        <p>기본정보</p>
+                        <p><span>*</span>필수입력</p>
+                    </div>
+                    <div class="form-content">
+                            <div>
+                                <label for="" class="form-title"><span>*</span> 제어 유형</label>
+                                <select name="selectType" id="selectType" class="form-select sm"
                                     v-model="accesCtrl.cntrlType">
                                     <option value="">전체</option>
                                     <option v-for="(item, idx) in codeList" :key="idx" :value="item.cd">{{ item.cdNm }}
                                     </option>
                                 </select>
                             </div>
-
-                        </td>
-                        <td>
-                            <div class="gd-12 pr0">
-                                <label for="" class="form-title point-font2 mb10">제어 IP</label>
-                                <span class="ml10 gray">※ 1~255 범위의 숫자로 구성하여 형식에 맞게 작성해주세요. ex) 192.168.0.1 / 192.168.0.*</span>
-                                
-                                <input type="text" class="full-input" v-model="accesCtrl.cntrlIp" />
+                            <div>
+                                <label for="" class="form-title"><span>*</span> 제어 IP</label>
+                                <div class="form-group">
+                                    <input type="text" class="form-control sm" v-model="accesCtrl.cntrlIp"  placeholder="1~255 범위의 숫자로 구성하여 형식에 맞게 작성해주세요." />
+                                    <span>ex) 192.168.0.1 / 192.168.0.*</span>
+                                </div>
                             </div>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td colspan="2">
-                            <div class="gd-12 pl0">
-                                <label for="" class="form-title point-font2 ">제어 경로</label>
-                                <input type="text" class="full-input" v-model="accesCtrl.cntrlCrs" />
+                            <div>
+                                <label for="" class="form-title"><span>*</span> 제어 경로</label>
+                                <input type="text"  class="form-control sm"  v-model="accesCtrl.cntrlCrs" placeholder="제어할 경로 URL을 입력하세요."/>
                             </div>
-
-                        </td>
-                    </tr>
-                </table>
-            </div>
-        </details>
-        <div class="flex justify-end align-center no-gutters">
-            <div class="gd-1 mr10">
-                <button class="large-btn blue-btn" @click="fnInsert">{{ accesCtrl.acsCntrlId == 0 ? '등록' :
-                    '수정'}}</button>
-            </div>
-            <div class="gd-1">
-                <button class="large-btn gray-btn" @click="fnCancel">취소</button>
+                    </div>
+                </div>
             </div>
         </div>
     </div>
+    <div class="btn-wrap">
+        <button class="btn sm primary" @click="fnInsert">{{ accesCtrl.acsCntrlId == 0 ? '등록' :
+            '수정'}}</button>
+        <button class="btn sm tertiary" @click="fnCancel">취소</button>
+    </div>
 </template>
 
 <script>
client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
@@ -1,16 +1,15 @@
 <template>
-  <div class="content">
-    <div class="admin-page-title point-font2 mb30">
-      <p>IP접근제어</p>
-    </div>
-    <div class="search-bar mb15">
-      <div class="flex justify-end align-center no-gutters">
-        <div class="gd-6 mr10">
-          <div class="border">
+  <div class="content-zone">
+    <div class="content">
+      <div class="scroll">
+        <div class="section-title">
+          <p>IP접근제어</p>
+        </div>
+        <div class="search-bar">
             <select
               name="selectType"
               id="selectType"
-              class="border-none gd-2"
+              class="form-select sm"
               v-model="search.searchType"
             >
               <option value="">전체</option>
@@ -24,47 +23,43 @@
             </select>
             <input
               type="text"
-              class="full-input border-none gd-10 condition-input"
+              class="form-control sm"
+              placeholder="검색어를 입력하세요."
               v-model="search.searchText"
               @keyup.enter="findAll"
             />
-          </div>
-        </div>
-        <div class="gd-1">
-          <button class="large-btn blue-border-btn" @click="findAll">
+          <button class="btn sm ico-before ico-sch " @click="findAll">
             검색
           </button>
         </div>
-      </div>
-    </div>
-    <ListTable
-      :className="'admin-list cmmn-table2'"
-      :colgroup="colgroup"
-      :thead="thead"
-      :tbody="tbody"
-      @listClick="fnView"
-    />
-    <div class="flex justify-between align-center no-gutters">
-      <div class="gd-1"></div>
-      <div class="gd-10">
-        <PaginationButton
-          :className="'admin-pagination'"
-          v-model:currentPage="search.currentPage"
-          :pagination="search"
-          :click="findAll"
+       <div class="tbl-wrap">
+        <ListTable
+          :className="'data'"
+          :colgroup="colgroup"
+          :thead="thead"
+          :tbody="tbody"
+          @listClick="fnView"
         />
-      </div>
-      <div class="gd-1">
-        <button
-          class="large-btn blue-btn"
-          @click="fnAdd"
-          v-if="pageAuth.regAuthrt == 'Y'"
-        >
-          등록
-        </button>
+       </div>
       </div>
     </div>
   </div>
+  <div class="btn-wrap list">
+    <div></div>
+    <PaginationButton
+              :className="'pagination'"
+              v-model:currentPage="search.currentPage"
+              :pagination="search"
+              :click="findAll"
+            />
+    <button
+      class="btn sm primary"
+      @click="fnAdd"
+      v-if="pageAuth.regAuthrt == 'Y'"
+    >
+      등록
+    </button>
+  </div>
 </template>
 
 <script>
client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
@@ -1,58 +1,50 @@
 <template>
-  <div class="content admin-style">
-    <div class="admin-page-title point-font2 mb30">
-      <p>IP접근제어</p>
+  <div class="content-zone">
+    <div class="content">
+      <div class="scroll">
+        <div class="section-title">
+          <p>IP접근제어</p>
+        </div>
+        <div open class="form-box">
+          <div class="form-box-title">
+            <p>기본정보</p>
+          </div>
+          <div class="form-content">
+            <div>
+              <p class="form-title">제어유형</p>
+              <p>{{ accesCtrl.cntrlTypeNm }}</p>
+            </div>
+            <div>
+              <p class="form-title">제어 IP</p>
+              <p>{{ accesCtrl.cntrlIp }}</p>
+            </div>
+            <div>
+              <p class="form-title">제어 경로</p>
+              <p colspan="3">{{ accesCtrl.cntrlCrs }}</p>
+            </div>
+          </div>
+        </div>
+      </div>
     </div>
-    <details open class="form-table-style mb30">
-      <summary class="point-font2">
-        <p class="summary-style pl10">기본정보</p>
-      </summary>
-      <div class="pt10 pb10">
-        <table class="form-table2 mb10">
-          <colgroup>
-            <col width="15%" />
-            <col width="35%" />
-            <col width="15%" />
-            <col width="35%" />
-          </colgroup>
-          <tr>
-            <th class="point-font2">제어유형</th>
-            <td>{{ accesCtrl.cntrlTypeNm }}</td>
-            <th class="point-font2">제어 IP</th>
-            <td>{{ accesCtrl.cntrlIp }}</td>
-          </tr>
-          <tr>
-            <th class="point-font2">제어 경로</th>
-            <td colspan="3">{{ accesCtrl.cntrlCrs }}</td>
-          </tr>
-        </table>
-      </div>
-    </details>
-
-    <div class="flex justify-end align-center no-gutters">
-      <div class="gd-1 mr10">
-        <button class="large-btn gray-border-btn" @click="fnList">목록</button>
-      </div>
-      <div class="gd-1 mr10">
+  </div>
+  
+  <div class="btn-wrap">
+        <button class="btn tertiary sm" @click="fnList">목록</button>
         <button
-          class="large-btn blue-border-btn"
+          class="btn primary sm"
           @click="fnUpdate"
           v-if="pageAuth.mdfcnAuthrt == 'Y'"
         >
           수정
         </button>
-      </div>
-      <div class="gd-1">
         <button
-          class="large-btn red-border-btn"
+          class="btn red sm"
           @click="fnDelete"
           v-if="pageAuth.delAuthrt == 'Y'"
         >
           삭제
         </button>
-      </div>
     </div>
-  </div>
 </template>
 
 <script>
package-lock.json
--- package-lock.json
+++ package-lock.json
@@ -42,7 +42,10 @@
       },
       "devDependencies": {
         "html-webpack-plugin": "^5.6.0",
+        "mini-css-extract-plugin": "^2.9.2",
+        "node-sass": "^9.0.0",
         "rimraf": "^6.0.1",
+        "sass-loader": "^16.0.5",
         "vue-style-loader": "^4.1.3"
       }
     },
@@ -435,6 +438,13 @@
       "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz",
       "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA=="
     },
+    "node_modules/@gar/promisify": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
+      "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@isaacs/cliui": {
       "version": "8.0.2",
       "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -547,6 +557,65 @@
       "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
       "optional": true
     },
+    "node_modules/@npmcli/fs": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz",
+      "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@gar/promisify": "^1.1.3",
+        "semver": "^7.3.5"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@npmcli/fs/node_modules/semver": {
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@npmcli/move-file": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz",
+      "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==",
+      "deprecated": "This functionality has been moved to @npmcli/fs",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mkdirp": "^1.0.4",
+        "rimraf": "^3.0.2"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@npmcli/move-file/node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/@pkgjs/parseargs": {
       "version": "0.11.0",
       "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -555,6 +624,16 @@
       "optional": true,
       "engines": {
         "node": ">=14"
+      }
+    },
+    "node_modules/@tootallnate/once": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+      "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10"
       }
     },
     "node_modules/@types/d3": {
@@ -839,6 +918,13 @@
       "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
       "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
     },
+    "node_modules/@types/minimist": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@types/node": {
       "version": "20.14.10",
       "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
@@ -846,6 +932,13 @@
       "dependencies": {
         "undici-types": "~5.26.4"
       }
+    },
+    "node_modules/@types/normalize-package-data": {
+      "version": "2.4.4",
+      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+      "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/@types/polylabel": {
       "version": "1.1.3",
@@ -1154,6 +1247,13 @@
       "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
       "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
     },
+    "node_modules/abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/accepts": {
       "version": "1.3.8",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -1185,6 +1285,46 @@
         "acorn": "^8"
       }
     },
+    "node_modules/agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
+    },
+    "node_modules/agentkeepalive": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz",
+      "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "humanize-ms": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 8.0.0"
+      }
+    },
+    "node_modules/aggregate-error": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+      "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "clean-stack": "^2.0.0",
+        "indent-string": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -1199,6 +1339,48 @@
         "type": "github",
         "url": "https://github.com/sponsors/epoberezkin"
       }
+    },
+    "node_modules/ajv-formats": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+      "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "ajv": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/ajv-formats/node_modules/ajv": {
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/ajv-formats/node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/ajv-keywords": {
       "version": "3.5.2",
@@ -1251,10 +1433,51 @@
         "lodash.throttle": "^4.1.1"
       }
     },
+    "node_modules/aproba": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
+      "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/are-we-there-yet": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
+      "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
+      "deprecated": "This package is no longer supported.",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^3.6.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
     "node_modules/array-flatten": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
       "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+    },
+    "node_modules/arrify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+      "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/async-foreach": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+      "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==",
+      "dev": true,
+      "engines": {
+        "node": "*"
+      }
     },
     "node_modules/asynckit": {
       "version": "0.4.0",
@@ -1475,6 +1698,173 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/cacache": {
+      "version": "16.1.3",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz",
+      "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@npmcli/fs": "^2.1.0",
+        "@npmcli/move-file": "^2.0.0",
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.1.0",
+        "glob": "^8.0.1",
+        "infer-owner": "^1.0.4",
+        "lru-cache": "^7.7.1",
+        "minipass": "^3.1.6",
+        "minipass-collect": "^1.0.2",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.4",
+        "mkdirp": "^1.0.4",
+        "p-map": "^4.0.0",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^3.0.2",
+        "ssri": "^9.0.0",
+        "tar": "^6.1.11",
+        "unique-filename": "^2.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/cacache/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/cacache/node_modules/glob": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^5.0.1",
+        "once": "^1.3.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/cacache/node_modules/lru-cache": {
+      "version": "7.18.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+      "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/cacache/node_modules/minimatch": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/cacache/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cacache/node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/cacache/node_modules/rimraf/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/cacache/node_modules/rimraf/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/cacache/node_modules/rimraf/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/cacache/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/call-bind": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
@@ -1501,6 +1891,34 @@
       "dependencies": {
         "pascal-case": "^3.1.2",
         "tslib": "^2.0.3"
+      }
+    },
+    "node_modules/camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/camelcase-keys": {
+      "version": "6.2.2",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+      "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "camelcase": "^5.3.1",
+        "map-obj": "^4.0.0",
+        "quick-lru": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/caniuse-lite": {
@@ -1559,6 +1977,16 @@
         "fsevents": "~2.3.2"
       }
     },
+    "node_modules/chownr": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/chrome-trace-event": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
@@ -1582,6 +2010,107 @@
       },
       "engines": {
         "node": ">= 10.0"
+      }
+    },
+    "node_modules/clean-stack": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+      "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/cliui": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/cliui/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/cliui/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/cliui/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/cliui/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/cliui/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cliui/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
     "node_modules/clone": {
@@ -1618,6 +2147,16 @@
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
       "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
     },
+    "node_modules/color-support": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "color-support": "bin.js"
+      }
+    },
     "node_modules/colorette": {
       "version": "2.0.20",
       "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
@@ -1651,6 +2190,13 @@
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+    },
+    "node_modules/console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+      "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/content-disposition": {
       "version": "0.5.4",
@@ -1698,6 +2244,13 @@
         "type": "opencollective",
         "url": "https://opencollective.com/core-js"
       }
+    },
+    "node_modules/core-util-is": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/cross-spawn": {
       "version": "7.0.3",
@@ -2304,6 +2857,43 @@
         }
       }
     },
+    "node_modules/decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/decamelize-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+      "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "decamelize": "^1.1.0",
+        "map-obj": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/decamelize-keys/node_modules/map-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+      "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/deep-equal": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz",
@@ -2378,6 +2968,13 @@
       "engines": {
         "node": ">=0.4.0"
       }
+    },
+    "node_modules/delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/depd": {
       "version": "2.0.0",
@@ -2533,6 +3130,17 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/encoding": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+      "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "iconv-lite": "^0.6.2"
+      }
+    },
     "node_modules/enhanced-resolve": {
       "version": "5.17.0",
       "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz",
@@ -2554,6 +3162,16 @@
         "url": "https://github.com/fb55/entities?sponsor=1"
       }
     },
+    "node_modules/env-paths": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+      "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/envinfo": {
       "version": "7.13.0",
       "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
@@ -2563,6 +3181,23 @@
       },
       "engines": {
         "node": ">=4"
+      }
+    },
+    "node_modules/err-code": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+      "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-arrayish": "^0.2.1"
       }
     },
     "node_modules/es-define-property": {
@@ -2759,6 +3394,23 @@
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
       "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+    },
+    "node_modules/fast-uri": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
+      "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fastify"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fastify"
+        }
+      ],
+      "license": "BSD-3-Clause"
     },
     "node_modules/fastest-levenshtein": {
       "version": "1.0.16",
@@ -2970,6 +3622,39 @@
       "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
       "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w=="
     },
+    "node_modules/fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/fs-minipass/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/fs-minipass/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/fs-readdir-recursive": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
@@ -3009,12 +3694,85 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/gauge": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+      "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+      "deprecated": "This package is no longer supported.",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "aproba": "^1.0.3 || ^2.0.0",
+        "color-support": "^1.1.3",
+        "console-control-strings": "^1.1.0",
+        "has-unicode": "^2.0.1",
+        "signal-exit": "^3.0.7",
+        "string-width": "^4.2.3",
+        "strip-ansi": "^6.0.1",
+        "wide-align": "^1.1.5"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/gauge/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/gauge/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/gauge/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/gaze": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+      "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "globule": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
     "node_modules/gensync": {
       "version": "1.0.0-beta.2",
       "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
       "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
       "engines": {
         "node": ">=6.9.0"
+      }
+    },
+    "node_modules/get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
       }
     },
     "node_modules/get-intrinsic": {
@@ -3033,6 +3791,16 @@
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+      "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
     "node_modules/get-youtube-id": {
@@ -3085,6 +3853,56 @@
         "node": ">=4"
       }
     },
+    "node_modules/globule": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz",
+      "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "glob": "~7.1.1",
+        "lodash": "^4.17.21",
+        "minimatch": "~3.0.2"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/globule/node_modules/glob": {
+      "version": "7.1.7",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+      "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/globule/node_modules/minimatch": {
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
+      "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/gopd": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
@@ -3100,6 +3918,16 @@
       "version": "4.2.11",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
       "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+    },
+    "node_modules/hard-rejection": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+      "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
     },
     "node_modules/has-flag": {
       "version": "3.0.0",
@@ -3156,6 +3984,13 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+      "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/hash-sum": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
@@ -3180,6 +4015,39 @@
       "bin": {
         "he": "bin/he"
       }
+    },
+    "node_modules/hosted-git-info": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+      "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/hosted-git-info/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/hosted-git-info/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/html-minifier-terser": {
       "version": "6.1.0",
@@ -3274,6 +4142,13 @@
         "entities": "^2.0.0"
       }
     },
+    "node_modules/http-cache-semantics": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+      "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
     "node_modules/http-errors": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
@@ -3287,6 +4162,45 @@
       },
       "engines": {
         "node": ">= 0.8"
+      }
+    },
+    "node_modules/http-proxy-agent": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+      "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@tootallnate/once": "2",
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/humanize-ms": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+      "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.0.0"
       }
     },
     "node_modules/iconv-lite": {
@@ -3329,6 +4243,33 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.19"
+      }
+    },
+    "node_modules/indent-string": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/infer-owner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+      "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/inflight": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -3360,6 +4301,20 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/ip-address": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+      "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jsbn": "1.1.0",
+        "sprintf-js": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 12"
+      }
+    },
     "node_modules/ipaddr.js": {
       "version": "1.9.1",
       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
@@ -3382,6 +4337,13 @@
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
+    },
+    "node_modules/is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/is-binary-path": {
       "version": "2.1.0",
@@ -3453,6 +4415,13 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/is-lambda": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+      "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -3460,6 +4429,16 @@
       "optional": true,
       "engines": {
         "node": ">=0.12.0"
+      }
+    },
+    "node_modules/is-plain-obj": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+      "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
     "node_modules/is-plain-object": {
@@ -3487,6 +4466,13 @@
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
+    },
+    "node_modules/isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/isexe": {
       "version": "2.0.0",
@@ -3554,10 +4540,24 @@
         "url": "https://github.com/chalk/supports-color?sponsor=1"
       }
     },
+    "node_modules/js-base64": {
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+      "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
+      "dev": true,
+      "license": "BSD-3-Clause"
+    },
     "node_modules/js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
       "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+    },
+    "node_modules/jsbn": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+      "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/jsesc": {
       "version": "2.5.2",
@@ -3606,6 +4606,13 @@
       "engines": {
         "node": ">=0.10.0"
       }
+    },
+    "node_modules/lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/loader-runner": {
       "version": "4.3.0",
@@ -3700,6 +4707,77 @@
         "semver": "bin/semver"
       }
     },
+    "node_modules/make-fetch-happen": {
+      "version": "10.2.1",
+      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz",
+      "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "agentkeepalive": "^4.2.1",
+        "cacache": "^16.1.0",
+        "http-cache-semantics": "^4.1.0",
+        "http-proxy-agent": "^5.0.0",
+        "https-proxy-agent": "^5.0.0",
+        "is-lambda": "^1.0.1",
+        "lru-cache": "^7.7.1",
+        "minipass": "^3.1.6",
+        "minipass-collect": "^1.0.2",
+        "minipass-fetch": "^2.0.3",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.4",
+        "negotiator": "^0.6.3",
+        "promise-retry": "^2.0.1",
+        "socks-proxy-agent": "^7.0.0",
+        "ssri": "^9.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/make-fetch-happen/node_modules/lru-cache": {
+      "version": "7.18.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+      "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/make-fetch-happen/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/make-fetch-happen/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/map-obj": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+      "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/markerjs2": {
       "version": "2.32.1",
       "resolved": "https://registry.npmjs.org/markerjs2/-/markerjs2-2.32.1.tgz",
@@ -3711,6 +4789,33 @@
       "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
       "engines": {
         "node": ">= 0.6"
+      }
+    },
+    "node_modules/meow": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+      "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/minimist": "^1.2.0",
+        "camelcase-keys": "^6.2.2",
+        "decamelize": "^1.2.0",
+        "decamelize-keys": "^1.1.0",
+        "hard-rejection": "^2.1.0",
+        "minimist-options": "4.1.0",
+        "normalize-package-data": "^3.0.0",
+        "read-pkg-up": "^7.0.1",
+        "redent": "^3.0.0",
+        "trim-newlines": "^3.0.0",
+        "type-fest": "^0.18.0",
+        "yargs-parser": "^20.2.3"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/merge-descriptors": {
@@ -3761,6 +4866,94 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/min-indent": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+      "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/mini-css-extract-plugin": {
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz",
+      "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "schema-utils": "^4.0.0",
+        "tapable": "^2.2.1"
+      },
+      "engines": {
+        "node": ">= 12.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.0.0"
+      }
+    },
+    "node_modules/mini-css-extract-plugin/node_modules/ajv": {
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3"
+      },
+      "peerDependencies": {
+        "ajv": "^8.8.2"
+      }
+    },
+    "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
+      "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/json-schema": "^7.0.9",
+        "ajv": "^8.9.0",
+        "ajv-formats": "^2.1.1",
+        "ajv-keywords": "^5.1.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      }
+    },
     "node_modules/minimatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -3781,6 +4974,21 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/minimist-options": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+      "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "arrify": "^1.0.1",
+        "is-plain-obj": "^1.1.0",
+        "kind-of": "^6.0.3"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/minipass": {
       "version": "7.1.2",
       "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
@@ -3788,6 +4996,223 @@
       "dev": true,
       "engines": {
         "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/minipass-collect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+      "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minipass-collect/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-collect/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minipass-fetch": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz",
+      "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minipass": "^3.1.6",
+        "minipass-sized": "^1.0.3",
+        "minizlib": "^2.1.2"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      },
+      "optionalDependencies": {
+        "encoding": "^0.1.13"
+      }
+    },
+    "node_modules/minipass-fetch/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-fetch/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minipass-flush": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+      "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minipass-flush/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-flush/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minipass-pipeline": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+      "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-pipeline/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-pipeline/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minipass-sized": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+      "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-sized/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-sized/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minizlib/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minizlib/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
     "node_modules/moment": {
@@ -3802,6 +5227,13 @@
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "node_modules/nan": {
+      "version": "2.22.2",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz",
+      "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/nanoid": {
       "version": "3.3.7",
@@ -3848,10 +5280,425 @@
         "tslib": "^2.0.3"
       }
     },
+    "node_modules/node-gyp": {
+      "version": "8.4.1",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
+      "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "env-paths": "^2.2.0",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.2.6",
+        "make-fetch-happen": "^9.1.0",
+        "nopt": "^5.0.0",
+        "npmlog": "^6.0.0",
+        "rimraf": "^3.0.2",
+        "semver": "^7.3.5",
+        "tar": "^6.1.2",
+        "which": "^2.0.2"
+      },
+      "bin": {
+        "node-gyp": "bin/node-gyp.js"
+      },
+      "engines": {
+        "node": ">= 10.12.0"
+      }
+    },
+    "node_modules/node-gyp/node_modules/@npmcli/fs": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
+      "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@gar/promisify": "^1.0.1",
+        "semver": "^7.3.5"
+      }
+    },
+    "node_modules/node-gyp/node_modules/@npmcli/move-file": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+      "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+      "deprecated": "This functionality has been moved to @npmcli/fs",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mkdirp": "^1.0.4",
+        "rimraf": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/node-gyp/node_modules/@tootallnate/once": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+      "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/node-gyp/node_modules/cacache": {
+      "version": "15.3.0",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
+      "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@npmcli/fs": "^1.0.0",
+        "@npmcli/move-file": "^1.0.1",
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "glob": "^7.1.4",
+        "infer-owner": "^1.0.4",
+        "lru-cache": "^6.0.0",
+        "minipass": "^3.1.1",
+        "minipass-collect": "^1.0.2",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.2",
+        "mkdirp": "^1.0.3",
+        "p-map": "^4.0.0",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^3.0.2",
+        "ssri": "^8.0.1",
+        "tar": "^6.0.2",
+        "unique-filename": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/node-gyp/node_modules/http-proxy-agent": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+      "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@tootallnate/once": "1",
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/node-gyp/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/node-gyp/node_modules/make-fetch-happen": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
+      "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "agentkeepalive": "^4.1.3",
+        "cacache": "^15.2.0",
+        "http-cache-semantics": "^4.1.0",
+        "http-proxy-agent": "^4.0.1",
+        "https-proxy-agent": "^5.0.0",
+        "is-lambda": "^1.0.1",
+        "lru-cache": "^6.0.0",
+        "minipass": "^3.1.3",
+        "minipass-collect": "^1.0.2",
+        "minipass-fetch": "^1.3.2",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.4",
+        "negotiator": "^0.6.2",
+        "promise-retry": "^2.0.1",
+        "socks-proxy-agent": "^6.0.0",
+        "ssri": "^8.0.0"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/node-gyp/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/node-gyp/node_modules/minipass-fetch": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
+      "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minipass": "^3.1.0",
+        "minipass-sized": "^1.0.3",
+        "minizlib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "optionalDependencies": {
+        "encoding": "^0.1.12"
+      }
+    },
+    "node_modules/node-gyp/node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/node-gyp/node_modules/semver": {
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/node-gyp/node_modules/socks-proxy-agent": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
+      "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "agent-base": "^6.0.2",
+        "debug": "^4.3.3",
+        "socks": "^2.6.2"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/node-gyp/node_modules/ssri": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+      "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.1.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/node-gyp/node_modules/unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "unique-slug": "^2.0.0"
+      }
+    },
+    "node_modules/node-gyp/node_modules/unique-slug": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+      "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "node_modules/node-gyp/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/node-releases": {
       "version": "2.0.14",
       "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
       "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
+    },
+    "node_modules/node-sass": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz",
+      "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==",
+      "deprecated": "Node Sass is no longer supported. Please use `sass` or `sass-embedded` instead.",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "dependencies": {
+        "async-foreach": "^0.1.3",
+        "chalk": "^4.1.2",
+        "cross-spawn": "^7.0.3",
+        "gaze": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "glob": "^7.0.3",
+        "lodash": "^4.17.15",
+        "make-fetch-happen": "^10.0.4",
+        "meow": "^9.0.0",
+        "nan": "^2.17.0",
+        "node-gyp": "^8.4.1",
+        "sass-graph": "^4.0.1",
+        "stdout-stream": "^1.4.0",
+        "true-case-path": "^2.2.1"
+      },
+      "bin": {
+        "node-sass": "bin/node-sass"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/node-sass/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/node-sass/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/node-sass/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/node-sass/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/node-sass/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/node-sass/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/nopt": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "abbrev": "1"
+      },
+      "bin": {
+        "nopt": "bin/nopt.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/normalize-package-data": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+      "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "hosted-git-info": "^4.0.1",
+        "is-core-module": "^2.5.0",
+        "semver": "^7.3.4",
+        "validate-npm-package-license": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/normalize-package-data/node_modules/semver": {
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
     },
     "node_modules/normalize-path": {
       "version": "3.0.0",
@@ -3860,6 +5707,23 @@
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
+      }
+    },
+    "node_modules/npmlog": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+      "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+      "deprecated": "This package is no longer supported.",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "are-we-there-yet": "^3.0.0",
+        "console-control-strings": "^1.1.0",
+        "gauge": "^4.0.3",
+        "set-blocking": "^2.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
       }
     },
     "node_modules/nth-check": {
@@ -3952,6 +5816,22 @@
         "node": ">=8"
       }
     },
+    "node_modules/p-map": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+      "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "aggregate-error": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/p-try": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -3984,6 +5864,25 @@
       "dependencies": {
         "dot-case": "^3.0.4",
         "tslib": "^2.0.3"
+      }
+    },
+    "node_modules/parse-json": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.0.0",
+        "error-ex": "^1.3.1",
+        "json-parse-even-better-errors": "^2.3.0",
+        "lines-and-columns": "^1.1.6"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/parseurl": {
@@ -4344,6 +6243,34 @@
         "renderkid": "^3.0.0"
       }
     },
+    "node_modules/process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+      "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/promise-retry": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+      "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "err-code": "^2.0.2",
+        "retry": "^0.12.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/proxy-addr": {
       "version": "2.0.7",
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -4381,6 +6308,16 @@
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/quick-lru": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+      "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
     "node_modules/randombytes": {
@@ -4424,6 +6361,105 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/read-pkg": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+      "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^2.5.0",
+        "parse-json": "^5.0.0",
+        "type-fest": "^0.6.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/read-pkg-up": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+      "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "find-up": "^4.1.0",
+        "read-pkg": "^5.2.0",
+        "type-fest": "^0.8.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/read-pkg-up/node_modules/type-fest": {
+      "version": "0.8.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/read-pkg/node_modules/hosted-git-info": {
+      "version": "2.8.9",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+      "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/read-pkg/node_modules/normalize-package-data": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "node_modules/read-pkg/node_modules/semver": {
+      "version": "5.7.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/read-pkg/node_modules/type-fest": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+      "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/readdirp": {
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -4445,6 +6481,20 @@
       },
       "engines": {
         "node": ">= 0.10"
+      }
+    },
+    "node_modules/redent": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+      "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "indent-string": "^4.0.0",
+        "strip-indent": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
     "node_modules/regexp.prototype.flags": {
@@ -4486,6 +6536,26 @@
         "strip-ansi": "^6.0.1"
       }
     },
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/require-from-string": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/resolve": {
       "version": "1.22.8",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@@ -4519,6 +6589,16 @@
       "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
       "engines": {
         "node": ">=8"
+      }
+    },
+    "node_modules/retry": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+      "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4"
       }
     },
     "node_modules/rimraf": {
@@ -4621,6 +6701,66 @@
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
+    "node_modules/sass-graph": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz",
+      "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "glob": "^7.0.0",
+        "lodash": "^4.17.11",
+        "scss-tokenizer": "^0.4.3",
+        "yargs": "^17.2.1"
+      },
+      "bin": {
+        "sassgraph": "bin/sassgraph"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/sass-loader": {
+      "version": "16.0.5",
+      "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz",
+      "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "neo-async": "^2.6.2"
+      },
+      "engines": {
+        "node": ">= 18.12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "@rspack/core": "0.x || 1.x",
+        "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
+        "sass": "^1.3.0",
+        "sass-embedded": "*",
+        "webpack": "^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@rspack/core": {
+          "optional": true
+        },
+        "node-sass": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "sass-embedded": {
+          "optional": true
+        },
+        "webpack": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/sax": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
@@ -4641,6 +6781,27 @@
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/webpack"
+      }
+    },
+    "node_modules/scss-tokenizer": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz",
+      "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "js-base64": "^2.4.9",
+        "source-map": "^0.7.3"
+      }
+    },
+    "node_modules/scss-tokenizer/node_modules/source-map": {
+      "version": "0.7.4",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+      "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">= 8"
       }
     },
     "node_modules/seedrandom": {
@@ -4718,6 +6879,13 @@
       "engines": {
         "node": ">= 0.8.0"
       }
+    },
+    "node_modules/set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/set-function-length": {
       "version": "1.2.2",
@@ -4827,6 +6995,47 @@
         "node": ">=6"
       }
     },
+    "node_modules/smart-buffer": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6.0.0",
+        "npm": ">= 3.0.0"
+      }
+    },
+    "node_modules/socks": {
+      "version": "2.8.4",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz",
+      "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ip-address": "^9.0.5",
+        "smart-buffer": "^4.2.0"
+      },
+      "engines": {
+        "node": ">= 10.0.0",
+        "npm": ">= 3.0.0"
+      }
+    },
+    "node_modules/socks-proxy-agent": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz",
+      "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "agent-base": "^6.0.2",
+        "debug": "^4.3.3",
+        "socks": "^2.6.2"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
     "node_modules/sortablejs": {
       "version": "1.14.0",
       "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
@@ -4863,6 +7072,42 @@
       "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
       "deprecated": "Please use @jridgewell/sourcemap-codec instead"
     },
+    "node_modules/spdx-correct": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "node_modules/spdx-exceptions": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+      "dev": true,
+      "license": "CC-BY-3.0"
+    },
+    "node_modules/spdx-expression-parse": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "node_modules/spdx-license-ids": {
+      "version": "3.0.21",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
+      "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
+      "dev": true,
+      "license": "CC0-1.0"
+    },
     "node_modules/split2": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
@@ -4871,11 +7116,51 @@
         "node": ">= 10.x"
       }
     },
+    "node_modules/sprintf-js": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+      "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+      "dev": true,
+      "license": "BSD-3-Clause"
+    },
     "node_modules/ssr-window": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-1.0.1.tgz",
       "integrity": "sha512-dgFqB+f00LJTEgb6UXhx0h+SrG50LJvti2yMKMqAgzfUmUXZrLSv2fjULF7AWGwK25EXu8+smLR3jYsJQChPsg==",
       "license": "MIT"
+    },
+    "node_modules/ssri": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz",
+      "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/ssri/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ssri/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/statuses": {
       "version": "2.0.1",
@@ -4883,6 +7168,59 @@
       "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
       "engines": {
         "node": ">= 0.8"
+      }
+    },
+    "node_modules/stdout-stream": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
+      "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "node_modules/stdout-stream/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/stdout-stream/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/stdout-stream/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
       }
     },
     "node_modules/string-width": {
@@ -4975,6 +7313,19 @@
         "node": ">=8"
       }
     },
+    "node_modules/strip-indent": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+      "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "min-indent": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/supports-color": {
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -5027,6 +7378,41 @@
       "engines": {
         "node": ">=6"
       }
+    },
+    "node_modules/tar": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+      "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^5.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/tar/node_modules/minipass": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/tar/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/terser": {
       "version": "5.31.2",
@@ -5146,10 +7532,40 @@
         "node": ">=0.6"
       }
     },
+    "node_modules/trim-newlines": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+      "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/true-case-path": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz",
+      "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
     "node_modules/tslib": {
       "version": "2.6.3",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
       "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
+    },
+    "node_modules/type-fest": {
+      "version": "0.18.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+      "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
     "node_modules/type-is": {
       "version": "1.6.18",
@@ -5184,6 +7600,32 @@
       "dependencies": {
         "pako": "^0.2.5",
         "tiny-inflate": "^1.0.0"
+      }
+    },
+    "node_modules/unique-filename": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz",
+      "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "unique-slug": "^3.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/unique-slug": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz",
+      "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "imurmurhash": "^0.1.4"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
       }
     },
     "node_modules/unpipe": {
@@ -5299,6 +7741,17 @@
       "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
       "dependencies": {
         "base64-arraybuffer": "^1.0.2"
+      }
+    },
+    "node_modules/validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
       }
     },
     "node_modules/vary": {
@@ -5687,6 +8140,38 @@
         "node": ">= 8"
       }
     },
+    "node_modules/wide-align": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+      "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^1.0.2 || 2 || 3 || 4"
+      }
+    },
+    "node_modules/wide-align/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/wide-align/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/wildcard": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
@@ -5840,10 +8325,81 @@
         "node": ">=0.4"
       }
     },
+    "node_modules/y18n": {
+      "version": "5.0.8",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/yallist": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
       "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+    },
+    "node_modules/yargs": {
+      "version": "17.7.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yargs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/yargs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/yargs/node_modules/yargs-parser": {
+      "version": "21.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
     }
   }
 }
package.json
--- package.json
+++ package.json
@@ -48,6 +48,9 @@
   "devDependencies": {
     "html-webpack-plugin": "^5.6.0",
     "rimraf": "^6.0.1",
-    "vue-style-loader": "^4.1.3"
+    "vue-style-loader": "^4.1.3",
+    "sass-loader": "^16.0.5",
+    "mini-css-extract-plugin": "^2.9.2",
+    "node-sass": "^9.0.0"
   }
 }
webpack.config.js
--- webpack.config.js
+++ webpack.config.js
@@ -1,5 +1,7 @@
 const HtmlWebpackPlugin = require('html-webpack-plugin');
 const { VueLoaderPlugin } = require('vue-loader');
+const path = require('path');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 const webpack = require('webpack');
 
 const { PROJECT_NAME, BASE_DIR, SERVICE_STATUS } = require('./Global');
@@ -23,16 +25,37 @@
     }, {
       test: /\.css$/,
       use: ['vue-style-loader', 'css-loader']
-    }, {
+    },
+    // {
+    //   test: /\.(jpe?g|png|gif|svg|ttf|eot|woff|woff2)$/i,
+    //   use: [{
+    //     loader: 'url-loader',
+    //     options: {
+    //       limit: 8192,
+    //       fallback: require.resolve('file-loader')
+    //     }
+    //   }]
+    // }
+    {
+      test: /\.scss$/,
+      use: [
+        MiniCssExtractPlugin.loader,
+        "css-loader",
+        {
+          loader: "sass-loader",
+          options: {
+            sassOptions: {
+              includePaths: [path.resolve(__dirname, "client/resources/scss")],
+            },
+          },
+        },
+      ],
+    },
+    {
       test: /\.(jpe?g|png|gif|svg|ttf|eot|woff|woff2)$/i,
-      use: [{
-        loader: 'url-loader',
-        options: {
-          limit: 8192,
-          fallback: require.resolve('file-loader')
-        }
-      }]
-    }],
+      type: 'asset/resource',
+    },
+    ],
   },
 
   plugins: [
@@ -41,6 +64,9 @@
     }),
     new VueLoaderPlugin(),
     new webpack.HotModuleReplacementPlugin(),
+    new MiniCssExtractPlugin({
+      filename: "assets/css/[name].css",
+    }),
   ],
 
   output: {
Add a comment
List