diff --git a/src/main/resources/static/sass/components/_modals.scss b/src/main/resources/static/sass/components/_modals.scss index 8ca5505..9a67c40 100644 --- a/src/main/resources/static/sass/components/_modals.scss +++ b/src/main/resources/static/sass/components/_modals.scss @@ -11,9 +11,9 @@ left: 0; right: 0; bottom: 0; - background: rgba(0, 0, 0, 0.6); + background: #385670; z-index: $z-index-modal-backdrop; - opacity: 0; + opacity: 0.9; visibility: hidden; transition: $transition-base; @@ -30,7 +30,7 @@ left: 0; width: 100%; height: 100vh; - z-index: 1000; + z-index: $z-index-modal; display: flex; align-items: center; justify-content: center; @@ -128,9 +128,9 @@ // Modal dialog .modal-dialog { - margin-top: 150px; position: relative; background: $white; + padding: 0 $spacing-lg; border-radius: $border-radius-lg; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); max-width: 700px; @@ -156,11 +156,10 @@ // Modal header with gradient background .modal-header { padding: 30px 50px 20px; - background: #C7EAFF; - border-bottom: none; display: flex; align-items: center; justify-content: space-between; + border-bottom: 1px solid black; border-top-left-radius: $border-radius-lg; border-top-right-radius: $border-radius-lg; @@ -224,52 +223,6 @@ justify-content: space-between; } - // Cancel button (Figma node 985:1990) - .btn-modal-cancel { - min-width: 150px; - height: 50px; - padding: 10px 40px; - background: $white; - border: 1px solid #dadada; - border-radius: 50px; - font-size: 16px; - font-weight: $font-weight-bold; - color: #5f666c; - cursor: pointer; - transition: $transition-base; - - &:hover { - background: #f5f5f5; - border-color: #c0c0c0; - } - - &:active { - transform: scale(0.98); - } - } - - // Confirm button (Figma node 985:1989) - .btn-modal-confirm { - min-width: 150px; - height: 50px; - padding: 10px 40px; - background: #0049b4; - border: none; - border-radius: 50px; - font-size: 16px; - font-weight: $font-weight-bold; - color: $white; - cursor: pointer; - transition: $transition-base; - - &:hover { - background: #003a91; - } - - &:active { - transform: scale(0.98); - } - } @media (max-width: $breakpoint-sm) { padding: 16px 24px 24px; @@ -284,6 +237,37 @@ } } +.pop_input_field { + width: 100%; + padding: 12px $spacing-md; + border: 1px solid $border-gray; + border-radius: $border-radius-md; + font-size: $font-size-sm; + font-family: $font-family-primary; + transition: all 0.3s ease; + box-sizing: border-box; + + &:focus { + outline: none; + border-color: $primary-blue; + box-shadow: 0 0 0 3px rgba($primary-blue, 0.1); + } + + &::placeholder { + color: $text-light; + } + + // Error state + &.error { + border-color: $accent-orange; + + &:focus { + border-color: $accent-orange; + box-shadow: 0 0 0 3px rgba($accent-orange, 0.1); + } + } +} + // Alert modal .modal-alert { .modal-container { diff --git a/src/main/resources/static/sass/components/_password-popup.scss b/src/main/resources/static/sass/components/_password-popup.scss index 3c949f3..13d250c 100644 --- a/src/main/resources/static/sass/components/_password-popup.scss +++ b/src/main/resources/static/sass/components/_password-popup.scss @@ -6,9 +6,9 @@ // Password popup specific styles (using modal structure) #passwordInputPopup { // Modal dialog size override - .modal-dialog { - max-width: 450px; - } + //.modal-dialog { + // max-width: 450px; + //} // Password input group .pop_input_group { @@ -16,37 +16,6 @@ margin: 0; } - .pop_input_field { - width: 100%; - padding: 12px $spacing-md; - border: 1px solid $border-gray; - border-radius: $border-radius-md; - font-size: $font-size-sm; - font-family: $font-family-primary; - transition: all 0.3s ease; - box-sizing: border-box; - - &:focus { - outline: none; - border-color: $primary-blue; - box-shadow: 0 0 0 3px rgba($primary-blue, 0.1); - } - - &::placeholder { - color: $text-light; - } - - // Error state - &.error { - border-color: $accent-orange; - - &:focus { - border-color: $accent-orange; - box-shadow: 0 0 0 3px rgba($accent-orange, 0.1); - } - } - } - .error-message { color: $accent-orange; font-size: $font-size-xs; diff --git a/src/main/resources/static/sass/components/_tables.scss b/src/main/resources/static/sass/components/_tables.scss index f526ce0..bc8d09f 100644 --- a/src/main/resources/static/sass/components/_tables.scss +++ b/src/main/resources/static/sass/components/_tables.scss @@ -271,12 +271,244 @@ } } +// ----------------------------------------------------------------------------- +// List Table - Modern design with colored header (Figma: 984-2173) +// Used in: User management, API key list, etc. +// ----------------------------------------------------------------------------- +.list-table { + width: 100%; + background: $white; + border-radius: $border-radius-lg; + overflow: hidden; + + &-wrapper { + overflow-x: auto; + margin-bottom: $spacing-xl; + } + + // Table Header - Blue background with white text + .list-table-header { + display: flex; + align-items: center; + background: #3BA4ED; + height: 72px; + padding: 0 $spacing-lg; + + @media (max-width: $breakpoint-md) { + display: none; + } + + .header-cell { + display: flex; + align-items: center; + justify-content: center; + padding: $spacing-sm $spacing-md; + font-size: 20px; + font-weight: $font-weight-bold; + color: $white; + text-align: center; + } + } + + // Table Body + .list-table-body { + display: flex; + flex-direction: column; + } + + // Table Row + .list-table-row { + display: flex; + align-items: center; + height: 54px; + padding: $spacing-sm $spacing-lg; + transition: $transition-base; + + // Alternating row colors + &:nth-child(even) { + background-color: #EDF5FD; + } + + &:nth-child(odd) { + background-color: $white; + } + + &:hover { + background-color: rgba($primary-blue, 0.08); + } + + @media (max-width: $breakpoint-md) { + flex-direction: column; + align-items: flex-start; + gap: $spacing-sm; + padding: $spacing-md; + } + + .row-cell { + display: flex; + align-items: center; + justify-content: center; + padding: $spacing-sm $spacing-md; + font-size: 18px; + color: #515151; + text-align: center; + + @media (max-width: $breakpoint-md) { + font-size: $font-size-sm; + padding: $spacing-xs 0; + + &::before { + content: attr(data-label); + font-weight: $font-weight-semibold; + color: $text-gray; + margin-right: $spacing-sm; + min-width: 80px; + text-align: left; + } + } + } + + // Action buttons container + .row-actions { + display: flex; + align-items: center; + justify-content: center; + gap: 14px; + flex-wrap: wrap; + + @media (max-width: $breakpoint-md) { + width: 100%; + justify-content: flex-start; + padding-top: $spacing-sm; + } + } + } +} + +// List table action buttons +.list-table-btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: $spacing-sm $spacing-md; + height: 40px; + border-radius: $border-radius-md; + font-size: $font-size-base; + font-weight: $font-weight-regular; + color: #000000; + border: none; + cursor: pointer; + transition: $transition-base; + white-space: nowrap; + + &:hover { + transform: translateY(-1px); + box-shadow: $shadow-sm; + } + + &:active { + transform: translateY(0); + } + + // Button variants + &--default { + background-color: #DADADA; + + &:hover { + background-color: darken(#DADADA, 5%); + } + } + + &--primary { + background-color: #A4D6EA; + + &:hover { + background-color: darken(#A4D6EA, 5%); + } + } + + &--secondary { + background-color: #CDD4F0; + + &:hover { + background-color: darken(#CDD4F0, 5%); + } + } +} + +// ----------------------------------------------------------------------------- +// Pagination - Table pagination controls +// ----------------------------------------------------------------------------- +.table-pagination { + display: flex; + align-items: center; + justify-content: center; + gap: 13px; + padding: $spacing-xl 0; + + .pagination-btn { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + background: none; + border: none; + cursor: pointer; + color: #212529; + transition: $transition-base; + + &:hover { + color: $primary-blue; + } + + &:disabled { + opacity: 0.4; + cursor: not-allowed; + } + + i { + font-size: $font-size-base; + } + } + + .pagination-numbers { + display: flex; + align-items: center; + gap: 13px; + } + + .pagination-number { + display: flex; + align-items: center; + justify-content: center; + min-width: 10px; + height: 21px; + font-size: 18px; + color: #5F666C; + background: none; + border: none; + cursor: pointer; + transition: $transition-base; + + &:hover { + color: $primary-blue; + } + + &.active { + font-weight: $font-weight-bold; + color: #212529; + } + } +} + // Search and filter section for tables .table-controls { display: flex; justify-content: space-between; align-items: center; - margin-bottom: $spacing-xl; + margin-bottom: $spacing-lg; + padding: 0 $spacing-sm; gap: $spacing-lg; @media (max-width: $breakpoint-sm) { @@ -286,12 +518,14 @@ } .total-count { - font-size: $font-size-sm; + font-size: $font-size-base; color: $text-gray; + margin-bottom: 0; strong { color: $primary-blue; font-weight: $font-weight-semibold; + font-size: $font-size-lg; } @media (max-width: $breakpoint-sm) { diff --git a/src/main/resources/static/sass/layout/_header.scss b/src/main/resources/static/sass/layout/_header.scss index 1f4b6b9..2777586 100644 --- a/src/main/resources/static/sass/layout/_header.scss +++ b/src/main/resources/static/sass/layout/_header.scss @@ -54,7 +54,7 @@ background-color: #ffffff; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); - z-index: 1000; + z-index: $z-index-header; height: 112px; transition: all 0.3s ease; border-bottom: 1px solid #dddddd; diff --git a/src/main/resources/static/sass/main.scss b/src/main/resources/static/sass/main.scss index 3b5989d..db6dcf4 100644 --- a/src/main/resources/static/sass/main.scss +++ b/src/main/resources/static/sass/main.scss @@ -36,6 +36,7 @@ @import 'components/accordion'; @import 'components/page-title-banner'; @import 'components/alerts'; +@import 'components/pagination'; // 5. Page-specific styles @import 'pages/index'; diff --git a/src/main/resources/static/sass/pages/_user-management.scss b/src/main/resources/static/sass/pages/_user-management.scss index 593afa6..38b461a 100644 --- a/src/main/resources/static/sass/pages/_user-management.scss +++ b/src/main/resources/static/sass/pages/_user-management.scss @@ -8,8 +8,7 @@ max-width: 1400px; margin: 0 auto; padding: $spacing-3xl $spacing-2xl; - background-color: $gray-bg; - min-height: 100vh; + margin-bottom: $spacing-2xl; @media (max-width: $breakpoint-sm) { padding: $spacing-lg $spacing-md; @@ -56,237 +55,54 @@ margin-top: $spacing-lg; } -// Table Controls -.table-controls { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: $spacing-lg; - padding: 0 $spacing-sm; +// Table Controls - Uses common styles from components/_tables.scss +// Page-specific overrides only - @media (max-width: $breakpoint-sm) { - flex-direction: column; - align-items: flex-start; - gap: $spacing-md; - } -} +// ----------------------------------------------------------------------------- +// User List Table Customizations +// Extends .list-table from components/_tables.scss +// ----------------------------------------------------------------------------- +.user-management-container { + .list-table { + margin-bottom: $spacing-2xl; -.total-count { - font-size: $font-size-base; - color: $text-gray; + // Link styles in table cells + .row-cell a { + color: $text-dark; + text-decoration: none; + transition: $transition-base; - strong { - color: $primary-blue; - font-weight: $font-weight-semibold; - font-size: $font-size-lg; - } -} - -// User Table -.user-list-wrapper { - background: $white; - border-radius: $border-radius-lg; - box-shadow: $shadow-sm; - overflow: hidden; - margin-bottom: $spacing-2xl; -} - -.user-table { - display: flex; - flex-direction: column; - width: 100%; -} - -// Table Header -.table-header { - display: grid; - grid-template-columns: 60px 120px 1fr 150px 120px 200px; - gap: $spacing-md; - padding: $spacing-md $spacing-lg; - background: $light-bg; - border-bottom: 2px solid $border-gray; - font-size: $font-size-sm; - font-weight: $font-weight-semibold; - color: $text-dark; - - @media (max-width: $breakpoint-lg) { - grid-template-columns: 50px 100px 1fr 120px 100px 180px; - font-size: $font-size-xs; - padding: $spacing-sm $spacing-md; + &:hover { + color: $primary-blue; + } + } } - @media (max-width: $breakpoint-md) { - display: none; // Hide on mobile, use stacked layout - } -} + .table-controls { + @extend .common-title-bar; -// Table Row -.table-row { - display: grid; - grid-template-columns: 60px 120px 1fr 150px 120px 200px; - gap: $spacing-md; - padding: $spacing-lg; - border-bottom: 1px solid $border-gray; - align-items: center; - transition: $transition-base; - cursor: pointer; - - &:hover { - background-color: rgba($primary-blue, 0.02); - } - - &:last-child { - border-bottom: none; - } - - &.row-pending { - background-color: rgba($accent-yellow, 0.03); - border-left: 3px solid $accent-yellow; - } - - @media (max-width: $breakpoint-lg) { - grid-template-columns: 50px 100px 1fr 120px 100px 180px; - padding: $spacing-md; - font-size: $font-size-sm; - } - - @media (max-width: $breakpoint-md) { - grid-template-columns: 1fr; - gap: $spacing-sm; - padding: $spacing-md; - - &::before { - content: attr(data-label); - font-weight: $font-weight-semibold; - color: $text-gray; + .search-box { + .btn { + height: 44px; + } } } } -// Table Columns -.col-num { - font-size: $font-size-sm; - color: $text-gray; - text-align: center; - - @media (max-width: $breakpoint-md) { - display: none; - } -} - -.col-name { - font-weight: $font-weight-medium; - - a { - color: $text-dark; - text-decoration: none; - transition: $transition-base; - - &:hover { - color: $primary-blue; - } - } - - .pending-label { - display: inline-flex; - align-items: center; - gap: $spacing-xs; - color: $text-gray; - font-style: italic; - - i { - color: $accent-yellow; - } - } -} - -.col-email { - color: $text-gray; - font-size: $font-size-sm; - word-break: break-all; -} - -.col-role { - display: flex; - align-items: center; -} - -.user-role-badge { - display: inline-flex; - align-items: center; - gap: 6px; - padding: 6px 12px; - background-color: rgba($primary-blue, 0.1); - color: $primary-blue; - border-radius: $border-radius-sm; - font-size: $font-size-xs; - font-weight: $font-weight-medium; - - i { - font-size: $font-size-xs; - } -} - -// Status and Actions Columns -.col-status { - display: flex; - align-items: center; - justify-content: center; -} - -.col-actions { - display: flex; - align-items: center; - justify-content: flex-start; -} - -.user-status-badge { - display: inline-flex; - align-items: center; - justify-content: center; - padding: 6px 12px; - border-radius: $border-radius-full; - font-size: $font-size-xs; - font-weight: $font-weight-semibold; - text-transform: uppercase; - letter-spacing: 0.5px; - white-space: nowrap; - - &.status-active { - background-color: rgba($accent-green, 0.1); - color: darken($accent-green, 10%); - } - - &.status-inactive { - background-color: rgba($text-gray, 0.1); - color: $text-gray; - } - - &.status-pending { - background-color: rgba($accent-yellow, 0.15); - color: darken($accent-yellow, 30%); - } -} - +// Current user badge (used in actions column) .user-current-badge { display: inline-flex; + height: 40px; align-items: center; gap: 6px; padding: 6px 12px; background-color: rgba($accent-purple, 0.1); color: $accent-purple; border-radius: $border-radius-sm; - font-size: $font-size-xs; + font-size: $font-size-sm; font-weight: $font-weight-medium; } -.user-action-buttons { - display: flex; - flex-wrap: wrap; - gap: $spacing-xs; - align-items: center; -} - // Empty State .user-empty-state { text-align: center; diff --git a/src/main/resources/templates/views/apps/users/userList.html b/src/main/resources/templates/views/apps/users/userList.html index 1f521fa..e9da1c1 100644 --- a/src/main/resources/templates/views/apps/users/userList.html +++ b/src/main/resources/templates/views/apps/users/userList.html @@ -1,314 +1,288 @@ + xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/kjbank_title_layout}">
+새로운 이용자를 추가하여 시작하세요.
-새로운 이용자를 추가하여 시작하세요.
+