류윤주 류윤주 04-09
250409 류윤주 수정
@2515f8387208fb433cdc50f3235fb55b8fa1408e
client/resources/scss/admin/content.scss
--- client/resources/scss/admin/content.scss
+++ client/resources/scss/admin/content.scss
@@ -1,649 +1,706 @@
-.content-wrap {
-    width: 100%;
-    height: 100%;
-    padding: 3rem;
-
-    >.content-zone {
-        height: calc(100% - 142px);
-        // background-color: #ffffff;
-        // padding: 3rem;
-        // @include radius(20);
-        // box-shadow: 0 0 1rem rgba(0, 0, 0, 0.02);
-
-        >.content {
-            height: 100%;
-
-            .scroll {
-                height: 100%;
-                overflow-y: auto;
-            }
-
-        }
-        &.full-page {
-            height: 100%;
-        }
-        &.detail{
-            height: calc(100% - 228px);
-        }
-    }
-}
-
-.content-wrap.main {
-    .content-zone {
+.admin-wrap{
+    .content-wrap {
+        width: 100%;
         height: 100%;
+        padding: 3rem;
+    
+        >.content-zone {
+            height: calc(100% - 142px);
+            // background-color: #ffffff;
+            // padding: 3rem;
+            // @include radius(20);
+            // box-shadow: 0 0 1rem rgba(0, 0, 0, 0.02);
+    
+            >.content {
+                height: 100%;
+    
+                .scroll {
+                    height: 100%;
+                    overflow-y: auto;
+                }
+    
+            }
+            &.full-page {
+                height: 100%;
+            }
+            &.sch-full{
+                height: calc(100% - 60px);
+            }
+            &.detail{
+                height: calc(100% - 228px);
+            }
+        }
     }
-}
-
-.box-title,
-.section-title {
-    font-size: var(--tk-fz-title-md);
-    font-weight: 700;
-    margin-bottom: 1rem;
-}
-
-.search-wrap{
-    @include flex-layout(flex, center, end);
-    .search-bar {
-        position: relative;
-        @include flex-layout(flex, center, end);
+    
+    .content-wrap.main {
+        .content-zone {
+            height: 100%;
+        }
+    }
+    
+    .box-title,
+    .section-title {
+        font-size: var(--tk-fz-title-md);
+        font-weight: 700;
+        margin-bottom: 1rem;
+    }
+    
+    .search-wrap{
+        @include flex-layout(flex, center, space-between);
         margin-bottom: 3rem;
-    
-        .form-select {
-            width: 120px;
-    
-            &.border-none{
-                border: none;
-                margin-left: 0;
+        .search-bar {
+            position: relative;
+            @include flex-layout(flex, center, end);
+        
+            .form-select {
+                width: 120px;
+                margin-left: 1rem;
+        
+                &.border-none{
+                    border: none;
+                    margin-left: 0;
+                }
             }
-        }
-    
-        .form-control {
-            width: 300px;
-            margin-left: 1rem;
-    
-            &.border-none{
-                border: none;
-                margin-left: 0;
+        
+            .form-control {
+                width: 300px;
+                margin-left: 1rem;
+        
+                &.border-none{
+                    border: none;
+                    margin-left: 0;
+                }
             }
-        }
-    
-        button{
-            
-            &.btn {
+
+            .mark{
                 margin-left: 1rem;
             }
-    
-            &.btn-ico{
-                position: absolute;
-                top: 50%;
-                right: 1rem;
-                transform: translateY(-50%);
-                &.main{
-                    &.ico-sch {
-                        &::before,
-                        &::after {
-                            background-image: url(#{$url}/component/common/ico_sch_20_gn.svg);
+        
+            button{
+                
+                &.btn {
+                    margin-left: 1rem;
+                }
+        
+                &.btn-ico{
+                    position: absolute;
+                    top: 50%;
+                    right: 1rem;
+                    transform: translateY(-50%);
+                    &.main{
+                        &.ico-sch {
+                            &::before,
+                            &::after {
+                                background-image: url(#{$url}/component/common/ico_sch_20_gn.svg);
+                            }
                         }
                     }
                 }
             }
+        
+            &.border{
+                width: fit-content;
+                border: 1px solid var(--tk-gray-60);
+                background-color: var(--tk-white);
+                border-radius: var(--tk-input-rd-sm);
+            }
+
+            .ml10{
+                margin-left: 1rem
+            }
         }
+    }
     
-        &.border{
-            width: fit-content;
-            border: 1px solid var(--tk-gray-60);
-            background-color: var(--tk-white);
-            border-radius: var(--tk-input-rd-sm);
-        }
-    }
-}
-
-.btn-wrap {
-    @include flex-layout(flex, center, end);
-    // padding: 2rem 0;
-    padding-top: 2rem;
-
-    button {
-        margin-left: 1rem;
-        &.main{
-            background-color: var(--tk-main-50);
-            border: 1px solid var(--tk-main-50);
-            &:hover{
-                background-color: var(--tk-main-70);
-                border: 1px solid var(--tk-main-70);
-            }
-            &[disabled] {
-                background-color: var(--#{$prefix}gray-30);
-                border-color: var(--#{$prefix}gray-30);
-                color: var(--#{$prefix}gray-60);
-            }
-        }
-    }
-
-    &.list {
-        @include flex-layout(flex, center, space-between);
-        padding: 3rem 0;
-    }
-}
-
-.form-content {
-    padding: 2rem;
-    display: grid;
-    grid-template-columns: 1fr 1fr;
-    background-color: var(--tk-white);
-    border-radius: 0 0 2rem 2rem;
-    height: calc(100% - 45px);
-    grid-auto-rows: min-content;
-    // max-height: fit-content;
-
-    .layout {
-        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 {
-            min-width: 135px;
-            max-width: 300px;
-
-            &.fixed{
-                width: 135px;
-            }
-        }
-
-        .form-control {
-            max-width: calc(100% - 180px);
-        }
-
-        >div,
-        .form-group {
-            max-width: calc(100% - 180px);
-
-            .form-control {
-                max-width: 100%;
-            }
-
-            span {
-                font-size: var(--tk-fz-detail-sm);
-            }
-
-            &.w_100{
-                width: 100%;
-            }
-        }
-
-        >div,
-        .input-group{
-            max-width: calc(100% - 180px);
-            &.w_100{
-                width: 100%;
-            }
-        }
-
-
-
-        &.grid-column {
-            grid-column: 1/3;
-        }
-
-        &:nth-child(1),:nth-child(2){
-            padding-top: 0;
-        }
-
-        &:last-child{
-            grid-column: 1/3;
-            padding-bottom: 0;
-            border-bottom: 0;
-        }
-
-        &.pb10{
-            padding-bottom: 1rem; 
-        }
-    }
-
-    &.grid-none {
-        display: block;
-    }
-
-
-    // 자식 div 개수가 짝수일 때 마지막 div의 스타일을 변경
-    &:has(> div:nth-child(even)) {
-
-        >div{
-
-            &:nth-last-child(-n + 2){
-                border-bottom: 0;
-                &.border-bottom{
-                    border-bottom: 1px solid var(--tk-gray-10);
-                }
-            }
-
-            &:last-child {
-                grid-column: unset;
+    .btn-wrap {
+        @include flex-layout(flex, center, end);
+        // padding: 2rem 0;
+        padding-top: 2rem;
     
-                &.grid-column {
-                    grid-column: 1/3;
-                }
-            }
-        }
-
-    }
-
-}
-
-.form-box {
-    border: 1px solid var(--tk-gray-10);
-    @include radius(20);
-    box-shadow: 0 0 1rem rgba(0, 0, 0, 0.02);
-
-    .form-box-title {
-        padding: 1rem 3rem;
-        background-color: #c8d0d8;
-        @include flex-layout(flex, center, start);
-        font-size: var(--tk-fz-title-sm);
-        border-radius: 2rem 2rem 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;
-            }
-        }
-    }
-
-    &.mb30{
-        margin-bottom: 3rem
-    }
-
-
-}
-
-.setting-box {
-    @include flex-layout(flex, start, start);
-    width: 100%;
-    // height: calc(100% - 77.5px);
-
-    .node-zone {
-        width: 325px;
-        height: 100%;
-        margin-right: 3rem;
-        background-color: #ffffff;
-        border-radius: var(--tk-rd-12);
-        box-shadow: 0 0 1rem rgba(0, 0, 0, 0.02);
-
-        .tree {
-            padding: 3rem;
-            width: 100%;
-            height: calc(100% - 149px);
-            overflow-y: auto;
-
-
-        }
-    }
-
-    .setting-zone {
-        width: calc(100% - 325px - 3rem);
-        height: 100%;
-
-        // .btn-wrap {
-        //     // justify-content: flex-end;
-        //     padding: 1rem 0;
-        // }
-
-
-    }
-
-    .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;
-        }
-    }
-}
-
-.top-zone {
-    >div {
-        margin-bottom: 5rem;
-
-        .tbl {
-            .table-title {
-                @include ellipsis(1);
+            &.main{
+                background-color: var(--tk-main-50);
+                border: 1px solid var(--tk-main-50);
+                &:hover{
+                    background-color: var(--tk-main-70);
+                    border: 1px solid var(--tk-main-70);
+                }
+                &[disabled] {
+                    background-color: var(--#{$prefix}gray-30);
+                    border-color: var(--#{$prefix}gray-30);
+                    color: var(--#{$prefix}gray-60);
+                }
             }
-
+        }
+    
+        &.list {
+            @include flex-layout(flex, center, space-between);
+            padding: 3rem 0;
         }
     }
-
-}
-
-.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);
+    
+    .form-content {
         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(20);
-    background-color: var(--tk-white);
-    height:350px
-}
-
-.area{
-    font-size: var(--tk-input-fz-sm);
-}
-
-.form-check{
-    display: flex;
-    align-items: center;
-}
-
-.tbl-wrap{
-    // height: 100%;
-    // box-shadow: 0 0 1rem rgba(0, 0, 0, 0.02);
-
-    .tbl{
-        max-width: 100%;
-        width: 100%;
-        &.data{
-            thead{
-                th{
-                    background-color: #c8d0d8;
-                    &:first-child{
-                        border-radius: 1rem 0 0 0;
+        display: grid;
+        grid-template-columns: 1fr 1fr;
+        background-color: var(--tk-white);
+        border-radius: 0 0 2rem 2rem;
+        height: calc(100% - 45px);
+        grid-auto-rows: min-content;
+        // max-height: fit-content;
+    
+        .layout {
+            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 {
+                min-width: 135px;
+                max-width: 300px;
+    
+                &.fixed{
+                    width: 135px;
+                }
+            }
+    
+            .form-control {
+                max-width: calc(100% - 180px);
+            }
+    
+            >div,
+            .form-group {
+                max-width: calc(100% - 180px);
+    
+                .form-control {
+                    max-width: 100%;
+                }
+    
+                span {
+                    font-size: var(--tk-fz-detail-sm);
+                }
+    
+                &.w_100{
+                    width: 100%;
+                }
+            }
+    
+            >div,
+            .input-group{
+                max-width: calc(100% - 180px);
+                &.w_100{
+                    width: 100%;
+                }
+            }
+    
+    
+    
+            &.grid-column {
+                grid-column: 1/3;
+            }
+    
+            &:nth-child(1),:nth-child(2){
+                padding-top: 0;
+            }
+    
+            &:last-child{
+                grid-column: 1/3;
+                padding-bottom: 0;
+                border-bottom: 0;
+            }
+    
+            &.pb10{
+                padding-bottom: 1rem; 
+            }
+        }
+    
+        &.grid-none {
+            display: block;
+        }
+    
+    
+        // 자식 div 개수가 짝수일 때 마지막 div의 스타일을 변경
+        &:has(> div:nth-child(even)) {
+    
+            >div{
+    
+                &:nth-last-child(-n + 2){
+                    border-bottom: 0;
+                    &.border-bottom{
+                        border-bottom: 1px solid var(--tk-gray-10);
                     }
-                    &:last-child{
-                        border-radius: 0 1rem 0 0;
-                    }
-
-                    &.sticky{
-                        position: sticky;
-                        top: 0;
-                        z-index: 10;
-                        background-color: #c8d0d8;
+                }
+    
+                &:last-child {
+                    grid-column: unset;
+        
+                    &.grid-column {
+                        grid-column: 1/3;
                     }
                 }
             }
     
-            tbody{
-                tr{
-                    &:last-child{
-                        td{
-                            &:first-child{
-                                border-radius:  0 0 0 1rem;
-                            }
-                            &:last-child{
-                                border-radius: 0 0 1rem 0;
-                            }
-
+        }
+    
+    }
+    
+    .form-box {
+        border: 1px solid var(--tk-gray-10);
+        @include radius(20);
+        box-shadow: 0 0 1rem rgba(0, 0, 0, 0.02);
+    
+        .form-box-title {
+            padding: 1rem 3rem;
+            background-color: #c8d0d8;
+            @include flex-layout(flex, center, start);
+            font-size: var(--tk-fz-title-sm);
+            border-radius: 2rem 2rem 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;
+                }
+            }
+        }
+    
+        &.mb30{
+            margin-bottom: 3rem
+        }
+    
+    
+    }
+    
+    .setting-box {
+        @include flex-layout(flex, start, start);
+        width: 100%;
+        // height: calc(100% - 77.5px);
+    
+        .node-zone {
+            width: 325px;
+            height: 100%;
+            margin-right: 3rem;
+            background-color: #ffffff;
+            border-radius: var(--tk-rd-12);
+            box-shadow: 0 0 1rem rgba(0, 0, 0, 0.02);
+    
+            .tree {
+                padding: 3rem;
+                width: 100%;
+                height: calc(100% - 149px);
+                overflow-y: auto;
+    
+    
+            }
+        }
+    
+        .setting-zone {
+            width: calc(100% - 325px - 3rem);
+            height: 100%;
+    
+            // .btn-wrap {
+            //     // justify-content: flex-end;
+            //     padding: 1rem 0;
+            // }
+    
+    
+        }
+    
+        .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;
+            }
+        }
+    }
+    
+    .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(20);
+        background-color: var(--tk-white);
+        height:350px
+    }
+    
+    .area{
+        font-size: var(--tk-input-fz-sm);
+    }
+    
+    .form-check{
+        display: flex;
+        align-items: center;
+    }
+    
+    .tbl-wrap{
+        // height: 100%;
+        // box-shadow: 0 0 1rem rgba(0, 0, 0, 0.02);
+    
+        .tbl{
+            max-width: 100%;
+            width: 100%;
+            &.data{
+                thead{
+                    th{
+                        background-color: #c8d0d8;
+                        &:first-child{
+                            border-radius: 1rem 0 0 0;
+                        }
+                        &:last-child{
+                            border-radius: 0 1rem 0 0;
+                        }
+    
+                        &.sticky{
+                            position: sticky;
+                            top: 0;
+                            z-index: 10;
+                            background-color: #c8d0d8;
                         }
                     }
-                    td{
-                        .form-check{
-                            justify-content: center;
-                            input[type=checkbox] ~ label{
-                                padding-left: calc(var(--tk-rdo-size-md));
+                }
+        
+                tbody{
+                    tr{
+                        &:last-child{
+                            td{
+                                &:first-child{
+                                    border-radius:  0 0 0 1rem;
+                                }
+                                &:last-child{
+                                    border-radius: 0 0 1rem 0;
+                                }
+    
+                            }
+                        }
+                        td{
+                            .form-check{
+                                justify-content: center;
+                                input[type=checkbox] ~ label{
+                                    padding-left: calc(var(--tk-rdo-size-md));
+                                }
                             }
                         }
                     }
                 }
             }
+            &.mixing {
+                thead{
+                    tr{
+                        &:nth-child(2){
+                            th{
+                                &:first-child{
+                                    border-radius: 0;
+                                }
+                                &:last-child{
+                                    border-radius: 0;
+                                }
+                            }
+                        }
+                        th{
+                        
+                            border-right: 1px solid var(--tk-secondary-30);
+                
+                            &[rowspan="2"]:last-child{
+                                border-right:0;
+                            }
+                    
+                            &.sticky{
+                                position: sticky;
+                                background-color: #c8d0d8;
+                                z-index: 2;
+                            }
+                            &.top-0 {
+                                top: 0;
+                            }
+                            &.top-40 {
+                                top: 4rem; /* 첫 번째 헤더 높이에 맞춰 조정 */
+                            }
+                        }
+                    }
+                }
+                
+            }
+    
         }
-
+        &.overflow-y{
+            overflow-y: auto;
+        }
+    
     }
-    &.overflow-y{
-        overflow-y: auto;
+    
+    
+    .mb30{
+        margin-bottom: 3rem;
     }
-
-}
-
-.mixing thead th{
-    border-right: 1px solid var(--tk-secondary-30);
-
-    &[rowspan="2"]:last-child{
-        border-right:0;
-    }
-}
-
-.mb30{
-    margin-bottom: 3rem;
-}
-
-.dp__main{
-    height: 100%;
-    >div:first-child{
+    
+    .dp__main{
         height: 100%;
-        *{
+        >div:first-child{
             height: 100%;
+            *{
+                height: 100%;
+            }
+            .dp__input{
+                width: 100%;
+                border: none;
+                background-color: transparent;
+                transition: none;
+                line-height: 100%;
+                padding: 0;
+                font-size: 1.5rem;
+            }
+            .dp__icon{
+                display: none;
+            }
+           
         }
-        .dp__input{
-            width: 100%;
-            border: none;
-            background-color: transparent;
-            transition: none;
-            line-height: 100%;
-            padding: 0;
+    
+        .dp__menu,
+        .dp__selection_preview,
+        .dp__action_button{
             font-size: 1.5rem;
         }
-        .dp__icon{
-            display: none;
-        }
-       
-    }
-
-    .dp__menu,
-    .dp__selection_preview,
-    .dp__action_button{
-        font-size: 1.5rem;
-    }
-}
-
-.check-area {
-    @include flex-layout(flex, center);
-    gap: 3rem;
-}
-
-.w_100{
-    width: 100%;
-}
-
-.h_100{
-    height: 100%;
-}
-
-.layout{
-    @include flex-layout(flex, center, flex-start);
-    .ml10{
-        margin-left: 1rem;
-    }
-
-    &.between{
-        @include flex-layout(flex, center, space-between);
-    }
-}
-
-.border-top{
-    border-top: 1px solid var(--tk-gray-10);
-}
-
-
-.gallery-wrap{
-    margin-bottom: 3rem;
-    .mySwiper{
-        max-width: 600px;
-        height: auto;
-        aspect-ratio: 4/3;
-        background-color: #c8d0d8;
     }
     
-    .mySwiper2{
-        max-width: 600px;
-        .swiper-slide{
-            width: 25%;
+    .check-area {
+        @include flex-layout(flex, center);
+        gap: 3rem;
+    }
+    
+    .w_100{
+        width: 100%;
+    }
+    
+    .h_100{
+        height: 100%;
+    }
+    
+    .layout{
+        @include flex-layout(flex, center, flex-start);
+        .ml10{
+            margin-left: 1rem;
+        }
+    
+        &.between{
+            @include flex-layout(flex, center, space-between);
+        }
+    }
+    
+    .border-top{
+        border-top: 1px solid var(--tk-gray-10);
+    }
+    
+    
+    .gallery-wrap{
+        margin-bottom: 3rem;
+        .mySwiper{
+            max-width: 600px;
             height: auto;
             aspect-ratio: 4/3;
             background-color: #c8d0d8;
         }
+        
+        .mySwiper2{
+            max-width: 600px;
+            .swiper-slide{
+                width: 25%;
+                height: auto;
+                aspect-ratio: 4/3;
+                background-color: #c8d0d8;
+            }
+        }
     }
-}
-
-.video-zone{
-    margin-bottom: 3rem;
-
-    iframe{
-        display: block;
-        width: 600px;
-        height: auto;
-        aspect-ratio: 16/9;
-        margin: 0 auto;
+    
+    .video-zone{
+        margin-bottom: 3rem;
+    
+        iframe{
+            display: block;
+            width: 600px;
+            height: auto;
+            aspect-ratio: 16/9;
+            margin: 0 auto;
+        }
     }
-}
-
-.comment-box{
-    padding: 3rem;
-    background-color: var(--tk-gray-10);
-    @include radius(20);
-    margin-top: 3rem;
-
-    .comment-head{
-        width: auto;
-        margin-right: 3rem;
-        padding-left: 3rem;
-        background-image: url(#{$url}/component/common/ico_comment.svg);
-        background-repeat: no-repeat;
-        background-position: left center;
+    
+    .comment-box{
+        padding: 3rem;
+        background-color: var(--tk-gray-10);
+        @include radius(20);
+        margin-top: 3rem;
+    
+        .comment-head{
+            width: auto;
+            margin-right: 3rem;
+            padding-left: 3rem;
+            background-image: url(#{$url}/component/common/ico_comment.svg);
+            background-repeat: no-repeat;
+            background-position: left center;
+        }
+    
+        .form-control{
+            max-width: calc(100% - 230px);
+        }
+    
+        .btn{
+            margin-left: 1rem;
+        }
     }
-
-    .form-control{
-        max-width: calc(100% - 230px);
-    }
-
-    .btn{
-        margin-left: 1rem;
-    }
-}
-
-.navigate-wrap{
-    padding: 2rem;
-    background-color: var(--tk-white);
-    @include radius(20);
-    margin-top: 2rem;
-    .content-navigate{
-        border-top: 1px solid var(--tk-gray-50);
-        border-bottom: 1px solid var(--tk-gray-50);
-        tbody{
-            tr{
-                border-bottom: 1px solid var(--tk-gray-30);
-
-                td{
-                    padding: 1rem;
-                }
-
-                &:last-child{
-                    border-bottom: 0;
+    
+    .navigate-wrap{
+        padding: 2rem;
+        background-color: var(--tk-white);
+        @include radius(20);
+        margin-top: 2rem;
+        .content-navigate{
+            border-top: 1px solid var(--tk-gray-50);
+            border-bottom: 1px solid var(--tk-gray-50);
+            tbody{
+                tr{
+                    border-bottom: 1px solid var(--tk-gray-30);
+    
+                    td{
+                        padding: 1rem;
+                    }
+    
+                    &:last-child{
+                        border-bottom: 0;
+                    }
                 }
             }
         }
     }
-}
-
-.icon-btn-zone{
-    button{
-        border: 1px solid var(--tk-gray-30);
+    
+    .icon-btn-zone{
+        button{
+            border: 1px solid var(--tk-gray-30);
+            background-color: var(--tk-white);
+            border-radius: 50%;
+            margin-left: 1rem;
+            &.btn-ico[class*='ico-'] {
+                background-size: 1.8rem;
+            }
+    
+            &:first-child{
+                margin-left: 0;
+            }
+        }
+    }
+    
+    .state{
+        display: inline-block;
+        padding: .5rem 1rem;
+        @include radius(10);
+        font-weight: 700;
+        &.red{
+            background-color: var(--tk-point-10);
+            color: var(--tk-point-40);
+        }
+        &.blue{
+            background-color: var(--tk-primary-10); 
+            color: var(--tk-primary-40); 
+        }
+    
+        &.answer{
+            border: 1px solid var(--tk-gray-90);
+            margin-right: 1rem;
+            font-size: 1.5rem;
+        }
+    
+         &.question{
+            background-color: var(--tk-gray-90);
+            color: var(--tk-white);
+            margin-right: 1rem;
+            font-size: 1.5rem;
+        }
+    }
+    
+    .sch-full{
+        height: calc(100% - 60px);
+    }
+    
+    .breadcrumb-warp{
+        padding: .5rem 1rem;
         background-color: var(--tk-white);
-        border-radius: 50%;
-        margin-left: 1rem;
-        &.btn-ico[class*='ico-'] {
-            background-size: 1.8rem;
-        }
-
-        &:first-child{
-            margin-left: 0;
+        @include radius(20);
+        font-size: 1.3rem;
+    
+        .home{
+            padding-left: 2rem;
+            background-image: url(#{$url}/component/common/ico_bread_home.svg);
+            background-position: left center;
+            background-repeat: no-repeat;
         }
     }
+    
 }
-
-.state{
-    display: inline-block;
-    padding: .5rem 1rem;
-    @include radius(10);
-    font-weight: 700;
-    &.red{
-        background-color: var(--tk-point-10);
-        color: var(--tk-point-40);
-    }
-    &.blue{
-        background-color: var(--tk-primary-10); 
-        color: var(--tk-primary-40); 
-    }
-
-    &.answer{
-        border: 1px solid var(--tk-gray-90);
-        margin-right: 1rem;
-        font-size: 1.5rem;
-    }
-
-     &.question{
-        background-color: var(--tk-gray-90);
-        color: var(--tk-white);
-        margin-right: 1rem;
-        font-size: 1.5rem;
-    }
-}
-
-.sch-full{
-    height: calc(100% - 60px);
-}
-
-
 
 
 
client/resources/scss/admin/layout.scss
--- client/resources/scss/admin/layout.scss
+++ client/resources/scss/admin/layout.scss
@@ -17,7 +17,7 @@
         border-bottom: 1px solid var(--tk-gray-30);
 
         .title-zone{
-            @include flex-layout(flex, flex-end, flex-start); 
+            @include flex-layout(flex, center, flex-start); 
 
             .page-title {
                 font-size: var(--tk-fz-title-xlg);
client/views/component/Breadcrumb/Breadcrumb.vue
--- client/views/component/Breadcrumb/Breadcrumb.vue
+++ client/views/component/Breadcrumb/Breadcrumb.vue
@@ -1,6 +1,6 @@
 <template>
-  <div v-if="breadcrumbList.length > 0">
-    <span><router-link :to="{path : this.$filters.ctxPath('/adm/main.page')}">홈</router-link> &gt; </span>
+  <div v-if="breadcrumbList.length > 0" class="breadcrumb-warp">
+    <span class="home"><router-link :to="{path : this.$filters.ctxPath('/adm/main.page')}">홈</router-link> &gt; </span>
     <span v-for="(crumb, index) in breadcrumbList" :key="index">
       {{ crumb.menuNm }}
       <span v-if="index < breadcrumbList.length - 1"> &gt; </span>
client/views/pages/adm/authority/authority/AuthoritySelectList.vue
--- client/views/pages/adm/authority/authority/AuthoritySelectList.vue
+++ client/views/pages/adm/authority/authority/AuthoritySelectList.vue
@@ -1,5 +1,6 @@
 <template>
   <div class="search-wrap">
+    <div></div>
     <div class="search-bar border">
       <!-- <select name="" id="" class="border-none gd-2">
                       <option value="">전체</option>
client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectList.vue
--- client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectList.vue
+++ client/views/pages/adm/boardManagement/boardManagement/BoardManagementSelectList.vue
@@ -1,5 +1,6 @@
 <template>
     <div class="search-wrap">
+        <div></div>
         <div class="search-bar border">
             <select name="selectType" id="selectType" class="form-select sm border-none" v-model="search.searchType">
                 <option value="">전체</option>
client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectList.vue
--- client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectList.vue
+++ client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectList.vue
@@ -72,6 +72,7 @@
   <!-- 관리자 -->
   <template v-else>
     <div class="search-wrap">
+      <div></div>
       <div class="search-bar border">
         <select
           class="form-select sm border-none"
client/views/pages/adm/boardManagement/template/faqTemplate/FaqSelectList.vue
--- client/views/pages/adm/boardManagement/template/faqTemplate/FaqSelectList.vue
+++ client/views/pages/adm/boardManagement/template/faqTemplate/FaqSelectList.vue
@@ -186,6 +186,7 @@
   </template>
   <template v-else>
       <div class="search-wrap">
+        <div></div>
         <div class="search-bar border">
           <select
             class="form-select sm border-none"
client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectList.vue
--- client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectList.vue
+++ client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectList.vue
@@ -54,6 +54,7 @@
     </template>
     <template v-else>
         <div class="search-wrap">
+            <div></div>
             <div class="search-bar border">
                 <select name="" id="" class="form-select sm border-none" v-model="search.searchType">
                     <option value="">전체</option>
client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectList.vue
--- client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectList.vue
+++ client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectList.vue
@@ -2,15 +2,18 @@
     <template  v-if="pageRole === 'portal'"></template>
     <template v-else>
         <div class="search-wrap">
+            <div></div>
             <div class="search-bar border">
                 <select class="form-select sm border-none" v-model="search.searchType">
                     <option value="">전체</option>
                     <option v-for="(item, idx) in codeList" :key="idx" :value="item.cd">{{ item.cdNm }}</option>
                 </select>
-                <input type="text" class="full-input border-none gd-9 condition-input" placeholder="검색어를 입력하세요." v-model="search.searchText" @keyup.enter="findAll">
+                <input type="text" class="form-control sm border-none" placeholder="검색어를 입력하세요." v-model="search.searchText" @keyup.enter="findAll">
 
 
-                <button class="form-control sm border-none" @click="findAll">검색</button>
+                <button class="btn-ico xsm  main ico-sch" @click="findAll">
+                    <span class="sr-only">검색</span>
+                </button>
 
                 <!-- <button class="large-btn darkg-border-btn" @click="fnSearchReset"><svg-icon type="mdi" :path="refreshPath"></svg-icon> 초기화</button> -->
             </div>
client/views/pages/adm/boardManagement/wordsManagement/WordsManagementSelectList.vue
--- client/views/pages/adm/boardManagement/wordsManagement/WordsManagementSelectList.vue
+++ client/views/pages/adm/boardManagement/wordsManagement/WordsManagementSelectList.vue
@@ -1,5 +1,6 @@
 <template>
     <div class="search-wrap">
+        <div></div>
         <div class="search-bar border">
             <select class="form-select sm border-none">
                 <option value="">전체</option>
client/views/pages/adm/log/LoginLog.vue
--- client/views/pages/adm/log/LoginLog.vue
+++ client/views/pages/adm/log/LoginLog.vue
@@ -1,6 +1,7 @@
 <template>
   <div class="search-wrap">
-    <div class="search-bar">
+    <div></div>
+    <div class="layout">
       <div class="form-control sm cal">
         <VueDatePicker
           InlineOptions
@@ -22,31 +23,33 @@
           v-model="search['endDt']"
         />
       </div>
-      <select
-        name="selectType"
-        id="selectType"
-        class="form-select sm"
-        v-model="search['searchType']"
-      >
-        <option value="">전체</option>
-        <option
-          v-for="(item, idx) in codeList"
-          :key="idx"
-          :value="item.cd"
+      <div class="search-bar border ml10">
+        <select
+          name="selectType"
+          id="selectType"
+          class="form-select sm border-none"
+          v-model="search['searchType']"
         >
-          {{ item.cdNm }}
-        </option>
-      </select>
-      <input
-        type="text"
-        class="form-control sm"
-        v-model="search['searchText']"
-        v-on:keyup.enter="fnViewList"
-        placeholder="검색어를 입력하세요."
-      />
-      <button class="btn-ico xsm  main ico-sch" @click="fnViewList">
-        <span class="sr-only">검색</span>
-      </button>
+          <option value="">전체</option>
+          <option
+            v-for="(item, idx) in codeList"
+            :key="idx"
+            :value="item.cd"
+          >
+            {{ item.cdNm }}
+          </option>
+        </select>
+        <input
+          type="text"
+          class="form-control sm border-none"
+          v-model="search['searchText']"
+          v-on:keyup.enter="fnViewList"
+          placeholder="검색어를 입력하세요."
+        />
+        <button class="btn-ico xsm  main ico-sch" @click="fnViewList">
+          <span class="sr-only">검색</span>
+        </button>
+      </div>
     </div>
   </div>
   <div class="content-zone">
client/views/pages/adm/log/PersonalDataLog.vue
--- client/views/pages/adm/log/PersonalDataLog.vue
+++ client/views/pages/adm/log/PersonalDataLog.vue
@@ -1,52 +1,55 @@
 <template>
   <div class="search-wrap">
-    <div class="search-bar">
-      <div class="form-control sm cal">
-        <VueDatePicker
-          InlineOptions   
-          placeholder="시작일"
-          locale="ko"
-          :enable-time-picker="false"
-          :format="formatDate"
-          v-model="search['startDt']"
-            />
-      </div>  
-      <div class="mark">-</div>
-      <div  class="form-control sm cal">
-        <VueDatePicker
-          InlineOptions
-          placeholder="종료일"
-          locale="ko"
-          :enable-time-picker="false"
-          :format="formatDate"
-          v-model="search['endDt']"
-        />
+    <div></div>
+    <div class="layout">
+        <div class="form-control sm cal">
+          <VueDatePicker
+            InlineOptions   
+            placeholder="시작일"
+            locale="ko"
+            :enable-time-picker="false"
+            :format="formatDate"
+            v-model="search['startDt']"
+              />
+        </div>  
+        <div class="mark">-</div>
+        <div  class="form-control sm cal">
+          <VueDatePicker
+            InlineOptions
+            placeholder="종료일"
+            locale="ko"
+            :enable-time-picker="false"
+            :format="formatDate"
+            v-model="search['endDt']"
+          />
       </div>
-            <select
-              name="selectType"
-              id="selectType"
-              class="form-select sm"
-              v-model="search['searchType']"
-            >
-              <option value="">전체</option>
-              <option
-                v-for="(item, idx) in codeList"
-                :key="idx"
-                :value="item.cd"
-              >
-                {{ item.cdNm }}
-              </option>
-            </select>
-            <input
-              type="text"
-              class="form-control sm"
-              v-model="search['searchText']"
-              v-on:keyup.enter="fnViewList"
-              placeholder="검색어를 입력하세요."
-            />
-          <button class="btn-ico xsm  main ico-sch" @click="fnViewList">
-            <span class="sr-only">검색</span>
-          </button>
+      <div class="search-bar border ml10">
+        <select
+          name="selectType"
+          id="selectType"
+          class="form-select sm border-none"
+          v-model="search['searchType']"
+        >
+          <option value="">전체</option>
+          <option
+            v-for="(item, idx) in codeList"
+            :key="idx"
+            :value="item.cd"
+          >
+            {{ item.cdNm }}
+          </option>
+        </select>
+        <input
+          type="text"
+          class="form-control sm border-none"
+          v-model="search['searchText']"
+          v-on:keyup.enter="fnViewList"
+          placeholder="검색어를 입력하세요."
+        />
+        <button class="btn-ico xsm  main ico-sch" @click="fnViewList">
+          <span class="sr-only">검색</span>
+        </button>
+      </div>
     </div>
   </div>
   <div class="content-zone">
client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
--- client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
+++ client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
@@ -1,5 +1,6 @@
 <template>
   <div class="search-wrap">
+    <div></div>
     <div class="search-bar border">
         <select class="form-select sm border-none" v-model="search['searchType']">
           <option value="">전체</option>
client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
--- client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
+++ client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
@@ -1,5 +1,6 @@
 <template>
   <div class="search-wrap">
+    <div></div>
     <div class="search-bar  border">
         <select class="form-select sm border-none" v-model="search['searchType']">
           <option value="">전체</option>
client/views/pages/adm/menuManagement/menuManagement/MenuManagement.vue
--- client/views/pages/adm/menuManagement/menuManagement/MenuManagement.vue
+++ client/views/pages/adm/menuManagement/menuManagement/MenuManagement.vue
@@ -29,7 +29,7 @@
               <div class="form-box-title">
                 <p>메뉴 정보</p>
               </div>
-              <div class="form-content">
+              <div class="form-content"  style="grid-template-rows: auto auto auto auto 1fr auto auto;">
                 <div  class="layout">
                   <label class="form-title">상위 메뉴명 </label>
                   <input type="text" class="form-control sm" v-model="viewMenu.upMenuNm" disabled />
@@ -38,10 +38,6 @@
                   <label class="form-title">메뉴명</label>
                   <input type="text" class="form-control sm" ref="menuNm" v-model="viewMenu.menuNm"
                     :disabled="!editMode" />
-                </div>
-                <div class="grid-column layout">
-                  <label class="form-title">메뉴 설명</label>
-                  <textarea  v-model="viewMenu.menuExpln" :disabled="!editMode" class="form-control lg area"></textarea>
                 </div>
                 <div class="grid-column layout">
                   <label class="form-title">메뉴 타입</label>
@@ -130,6 +126,10 @@
                     </div>
                   </div>
                 </div>
+                <div class="grid-column layout">
+                  <label class="form-title">메뉴 설명</label>
+                  <textarea  v-model="viewMenu.menuExpln" :disabled="!editMode" class="form-control area" style="height: 100%;"></textarea>
+                </div>
                 <div  class="layout">
                   <label class="form-title">등록자</label>
                   <input type="text" class="form-control sm" v-model="viewMenu.rgtrNm" disabled />
client/views/pages/adm/popup/PopupManagementSelectList.vue
--- client/views/pages/adm/popup/PopupManagementSelectList.vue
+++ client/views/pages/adm/popup/PopupManagementSelectList.vue
@@ -1,5 +1,6 @@
 <template>
   <div class="search-wrap">
+    <div></div>
     <div class="search-bar border">
       <select class="form-select sm border-none" v-model="search['searchType']">
         <option value="">전체</option>
client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
--- client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
+++ client/views/pages/adm/preferences/commonCodeManagement/CommonCodeManagement.vue
@@ -31,7 +31,7 @@
               <div class="form-box-title">
                 <p>공통코드정보</p>
               </div>
-              <div class="form-content">
+              <div class="form-content" style="grid-template-rows: auto auto auto 1fr;">
                 <div class="layout">
                   <label for="" class="form-title">상위코드</label>
                   <input type="text" class="form-control sm" disabled v-model="viewCode.upCd" />
@@ -69,8 +69,8 @@
                   </div>
                 </div>
                 <div class="grid-column layout">
-                  <label for="textarea" class="form-title">코드설명</label>
-                  <textarea class="form-control" id="textarea" :disabled="isFormDisabled" v-model="viewCode.cdExpln"></textarea>
+                  <label for="textarea" class="form-title" style="vertical-align: top;">코드설명</label>
+                  <textarea class="form-control" id="textarea" :disabled="isFormDisabled" v-model="viewCode.cdExpln" style="height: 100%;"></textarea>
                 </div>
               </div>
             </div>
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,5 +1,6 @@
 <template>
   <div class="search-wrap">
+    <div></div>
     <div class="search-bar border">
         <input
           type="text"
client/views/pages/adm/statistics/BbsStatistics.vue
--- client/views/pages/adm/statistics/BbsStatistics.vue
+++ client/views/pages/adm/statistics/BbsStatistics.vue
@@ -1,5 +1,12 @@
 <template>
   <div class="search-wrap">
+    <div class="chart-info">
+      <p class="detail-text">
+        방문자 총
+        <span class="detail-bold blue">{{ totalCnt }}</span>
+        명
+      </p>
+    </div>
     <div class="search-bar">
       <div class="form-control sm cal">
         <VueDatePicker
@@ -51,19 +58,12 @@
   <div class="content-zone sch-full">
     <div class="content">
       <div class="scroll">
-        <div class="chart-zone mb30" v-show="bbsCnt > 0">
-          <div class="chart-info">
-            <p class="detail-text">
-              방문자 총
-              <span class="detail-bold blue">{{ totalCnt }}</span>
-              명
-            </p>
-          </div>
+        <div class="chart-zone mb30" v-show="bbsCnt > 0"  ref="two">
           <div class="chart-wrap" ref="chartdiv">
             <ClusteredBarChart :chartData="chartData" columnX="menu" />
           </div>
         </div>
-        <div class="tbl-wrap">
+        <div class="tbl-wrap" ref="first">
           <table class="tbl data mixing">
             <colgroup>
               <col width="25%" />
@@ -73,22 +73,22 @@
             </colgroup>
             <thead>
               <tr>
-                <th rowspan="2">구분</th>
-                <th colspan="3">사용자 구분</th>
+                <th rowspan="2"  class="sticky top-0">구분</th>
+                <th colspan="3"  class="sticky top-0">사용자 구분</th>
               </tr>
               <tr>
-                <th class="text-ct">관리자</th>
-                <th class="text-ct">사용자</th>
-                <th class="text-ct">비로그인 사용자</th>
+                <th class="sticky top-40">관리자</th>
+                <th class="sticky top-40">사용자</th>
+                <th class="sticky top-40">비로그인 사용자</th>
               </tr>
             </thead>
             <tbody>
               <template v-if="bbsCnt > 0">
                 <tr v-for="(tr, index) of chartData" :key="index">
-                  <td class="text-ct">{{ tr.menu }}</td>
-                  <td class="text-rg">{{ tr["관리자"] }}</td>
-                  <td class="text-rg">{{ tr["사용자"] }}</td>
-                  <td class="text-rg">{{ tr["비로그인 사용자"] }}</td>
+                  <td>{{ tr.menu }}</td>
+                  <td>{{ tr["관리자"] }}</td>
+                  <td>{{ tr["사용자"] }}</td>
+                  <td>{{ tr["비로그인 사용자"] }}</td>
                 </tr>
               </template>
               <template v-else>
@@ -250,7 +250,39 @@
       const month = ('00' + (date.getMonth() + 1)).slice(-2);
       const day = ('00' + date.getDate()).slice(-2);
       return `${year}-${month}-${day}`;
+    },
+    updateHeight() {
+      this.$nextTick(() => {
+        const first = this.$refs.first;
+        const two = this.$refs.two;
+
+        let total = 0;
+        if (two) total += two.offsetHeight;
+
+        if (first) {
+          first.style.height = `calc(100% - ${total}px - 30px)`;
+        }
+      });
+    },
+  },
+  watch:{
+    bbsCnt:{
+      handler() {
+        this.$nextTick(() => {
+          this.updateHeight();
+        });
+      },
+      deep: true,
     }
   },
+  mounted() {
+    this.updateHeight();
+
+    // 창 크기 변경 시에도 대응하고 싶다면:
+    window.addEventListener('resize', this.updateHeight);
+  },
+  beforeUnmount() {
+    window.removeEventListener('resize', this.updateHeight);
+  },
 };
 </script>
(파일 끝에 줄바꿈 문자 없음)
client/views/pages/adm/statistics/MenuStatistics.vue
--- client/views/pages/adm/statistics/MenuStatistics.vue
+++ client/views/pages/adm/statistics/MenuStatistics.vue
@@ -1,5 +1,12 @@
 <template>
   <div class="search-wrap">
+    <div class="chart-info">
+      <p class="detail-text">
+        방문자 총
+        <span class="detail-bold blue">{{ totalCnt }}</span>
+        명
+      </p>
+    </div>
     <div class="search-bar">
       <div class="form-control sm cal">
         <VueDatePicker
@@ -51,19 +58,12 @@
   <div class="content-zone sch-full">
     <div class="content">
       <div class="scroll">
-        <div class="chart-zone mb30" v-show="menuCnt > 0">
-          <div class="chart-info">
-            <p class="detail-text">
-              방문자 총
-              <span class="detail-bold blue">{{ totalCnt }}</span>
-              명
-            </p>
-          </div>
+        <div class="chart-zone mb30" v-show="menuCnt > 0" ref="two">
           <div class="chart-wrap" ref="chartdiv">
             <ClusteredBarChart :chartData="chartData" columnX="menu" />
           </div>
         </div>
-        <div class="tbl-wrap">
+        <div class="tbl-wrap  overflow-y" ref="first">
           <table class="tbl data mixing">
             <colgroup>
               <col width="25%" />
@@ -73,27 +73,27 @@
             </colgroup>
             <thead>
               <tr>
-                <th rowspan="2">구분</th>
-                <th colspan="3">사용자 구분</th>
+                <th rowspan="2" class="sticky top-0">구분</th>
+                <th colspan="3" class="sticky top-0">사용자 구분</th>
               </tr>
               <tr>
-                <th class="text-ct">관리자</th>
-                <th class="text-ct">사용자</th>
-                <th class="text-ct">비로그인 사용자</th>
+                <th class="sticky top-40">관리자</th>
+                <th class="sticky top-40">사용자</th>
+                <th class="sticky top-40">비로그인 사용자</th>
               </tr>
             </thead>
             <tbody>
               <template v-if="menuCnt > 0">
                 <tr v-for="(tr, index) of chartData" :key="index">
-                  <td class="text-ct">{{ tr.menu }}</td>
-                  <td class="text-rg">{{ tr["관리자"] }}</td>
-                  <td class="text-rg">{{ tr["사용자"] }}</td>
-                  <td class="text-rg">{{ tr["비로그인 사용자"] }}</td>
+                  <td>{{ tr.menu }}</td>
+                  <td>{{ tr["관리자"] }}</td>
+                  <td>{{ tr["사용자"] }}</td>
+                  <td>{{ tr["비로그인 사용자"] }}</td>
                 </tr>
               </template>
               <template v-else>
                 <tr>
-                  <td colspan="4" class="text-ct">
+                  <td colspan="4" class="data-none">
                     등록된 정보가 존재하지 않습니다.
                   </td>
                 </tr>
@@ -248,7 +248,39 @@
       const month = ('00' + (date.getMonth() + 1)).slice(-2);
       const day = ('00' + date.getDate()).slice(-2);
       return `${year}-${month}-${day}`;
+    },
+    updateHeight() {
+      this.$nextTick(() => {
+        const first = this.$refs.first;
+        const two = this.$refs.two;
+
+        let total = 0;
+        if (two) total += two.offsetHeight;
+
+        if (first) {
+          first.style.height = `calc(100% - ${total}px - 30px)`;
+        }
+      });
+    },
+  },
+  watch:{
+    menuCnt:{
+      handler() {
+        this.$nextTick(() => {
+          this.updateHeight();
+        });
+      },
+      deep: true,
     }
   },
+  mounted() {
+    this.updateHeight();
+
+    // 창 크기 변경 시에도 대응하고 싶다면:
+    window.addEventListener('resize', this.updateHeight);
+  },
+  beforeUnmount() {
+    window.removeEventListener('resize', this.updateHeight);
+  },
 };
 </script>
(파일 끝에 줄바꿈 문자 없음)
client/views/pages/adm/statistics/UserStatistics.vue
--- client/views/pages/adm/statistics/UserStatistics.vue
+++ client/views/pages/adm/statistics/UserStatistics.vue
@@ -1,5 +1,13 @@
 <template>
+  
   <div class="search-wrap">
+    <div class="chart-info">
+      <p class="detail-text">
+        방문자 총
+        <span class="detail-bold blue">{{ totalCnt }}</span>
+        명
+      </p>
+    </div>
     <div class="search-bar">
       <div class="form-control sm cal">
           <VueDatePicker
@@ -55,19 +63,12 @@
   <div class="content-zone sch-full">
     <div class="content">
       <div class="scroll">
-        <div class="chart-zone mb30">
-          <div class="chart-info">
-            <p class="detail-text">
-              방문자 총
-              <span class="detail-bold blue">{{ totalCnt }}</span>
-              명
-            </p>
-          </div>
+        <div class="chart-zone mb30"  ref="two">
           <div class="chart-wrap" ref="chartdiv">
             <ClusteredColumnChart :chartData="chartData" columnX="date" />
           </div>
         </div>
-        <div class="tbl-wrap">
+        <div class="tbl-wrap overflow-y" ref="first">
           <table class="tbl data mixing">
             <colgroup>
               <template v-for="(key, index) of chartData[0]" :key="index">
@@ -77,23 +78,23 @@
                 />
               </template>
             </colgroup>
-            <thead>
+            <thead class="sticky">
               <tr>
-                <th rowspan="2">구분</th>
-                <th colspan="3">사용자 구분</th>
+                <th rowspan="2" class="sticky top-0" >구분</th>
+                <th colspan="3" class="sticky top-0">사용자 구분</th>
               </tr>
               <tr>
-                <th class="text-ct">관리자</th>
-                <th class="text-ct">사용자</th>
-                <th class="text-ct">비로그인 사용자</th>
+                <th class="sticky top-40">관리자</th>
+                <th class="sticky top-40">사용자</th>
+                <th class="sticky top-40">비로그인 사용자</th>
               </tr>
             </thead>
             <tbody>
               <tr v-for="(tr, index) of chartData" :key="index">
-                <td class="text-ct">{{ tr.date }}</td>
-                <td class="text-rg">{{ tr["관리자"] }}</td>
-                <td class="text-rg">{{ tr["사용자"] }}</td>
-                <td class="text-rg">{{ tr["비로그인 사용자"] }}</td>
+                <td>{{ tr.date }}</td>
+                <td>{{ tr["관리자"] }}</td>
+                <td>{{ tr["사용자"] }}</td>
+                <td>{{ tr["비로그인 사용자"] }}</td>
               </tr>
             </tbody>
           </table>
@@ -237,7 +238,29 @@
       const month = ('00' + (date.getMonth() + 1)).slice(-2);
       const day = ('00' + date.getDate()).slice(-2);
       return `${year}-${month}-${day}`;
-    }
+    },
+    updateHeight() {
+      this.$nextTick(() => {
+        const first = this.$refs.first;
+        const two = this.$refs.two;
+
+        let total = 0;
+        if (two) total += two.offsetHeight;
+
+        if (first) {
+          first.style.height = `calc(100% - ${total}px - 30px)`;
+        }
+      });
+    },
+  },
+  mounted() {
+    this.updateHeight();
+
+    // 창 크기 변경 시에도 대응하고 싶다면:
+    window.addEventListener('resize', this.updateHeight);
+  },
+  beforeUnmount() {
+    window.removeEventListener('resize', this.updateHeight);
   },
 };
 </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,5 +1,6 @@
 <template>
    <div class="search-wrap">
+    <div></div>
     <div class="search-bar border">
       <select
         name="selectType"
Add a comment
List