From 0e74ee5fcd974d3c50ca537cf5907029a53cafa1 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Mon, 3 Nov 2025 12:25:08 +0900 Subject: [PATCH] =?UTF-8?q?enhance:=20=EB=B9=A0=EB=A5=B8=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EC=B9=B4=EB=93=9C=20=ED=94=84=EB=A6=AC=EB=AF=B8?= =?UTF-8?q?=EC=97=84=20=EB=94=94=EC=9E=90=EC=9D=B8=20=EB=8C=80=ED=8F=AD=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐ŸŽจ ํ”„๋ฆฌ๋ฏธ์—„ ์นด๋“œ ๋””์ž์ธ: 1. ๊ณ ๊ธ‰์Šค๋Ÿฌ์šด ๊ทธ๋ผ๋ฐ์ด์…˜ ๋ฐฐ๊ฒฝ - ๊ธฐ๋ณธ: ํ™”์ดํŠธ โ†’ ๋ผ์ดํŠธ ๊ทธ๋ ˆ์ด ๊ทธ๋ผ๋ฐ์ด์…˜ - ํ˜ธ๋ฒ„: ํ™”์ดํŠธ โ†’ ๋ธ”๋ฃจ ํ‹ดํŠธ ๊ทธ๋ผ๋ฐ์ด์…˜ - ๋ถ€๋“œ๋Ÿฌ์šด ์ƒ‰์ƒ ์ „ํ™˜ ํšจ๊ณผ 2. ๋™์  ์ƒ๋‹จ ๊ทธ๋ผ๋ฐ์ด์…˜ ๋ฐ” - 4์ƒ‰ ๊ทธ๋ผ๋ฐ์ด์…˜ (๋ธ”๋ฃจ, ํผํ”Œ, ์‹œ์•ˆ, ๊ทธ๋ฆฐ) - 3์ดˆ ์ฃผ๊ธฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ - ํ˜ธ๋ฒ„ ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ์‹œ๊ฐ์  ํ”ผ๋“œ๋ฐฑ โœจ 3D ํ˜ธ๋ฒ„ ํšจ๊ณผ: 1. ์นด๋“œ ์ „์ฒด: - Y์ถ• -8px ์ด๋™ + 2% ํ™•๋Œ€ - ๊ณ ๊ธ‰ ๊ทธ๋ฆผ์ž ํšจ๊ณผ (๋‹ค์ธต ๊ทธ๋ฆผ์ž) - 0.4์ดˆ cubic-bezier ์• ๋‹ˆ๋ฉ”์ด์…˜ 2. ์•„์ด์ฝ˜ ๊ฐœ์„ : - ํฌ๊ธฐ ํ™•๋Œ€ (64px โ†’ 80px) - ํ˜ธ๋ฒ„ ์‹œ 15% ํ™•๋Œ€ + 5๋„ ํšŒ์ „ - ์ƒ‰์ƒ ๋ณ€ํ™” (๋ผ์ดํŠธ ๋ธ”๋ฃจ โ†’ ๋‹คํฌ ๋ธ”๋ฃจ) - 3D ๊ทธ๋ฆผ์ž ๋ฐ ํ…Œ๋‘๋ฆฌ ํšจ๊ณผ ๐ŸŽฏ ์ธํ„ฐ๋ž™์…˜ ๊ฐœ์„ : 1. ํ™”์‚ดํ‘œ ๋ฒ„ํŠผ: - ์›ํ˜• ๋ฐฐ๊ฒฝ ์ถ”๊ฐ€ (32px) - ์Šฌ๋ผ์ด๋“œ + ์Šค์ผ€์ผ ์• ๋‹ˆ๋ฉ”์ด์…˜ - ํ˜ธ๋ฒ„ ์‹œ ๋ธ”๋ฃจ ๊ทธ๋ผ๋ฐ์ด์…˜ ํ™œ์„ฑํ™” 2. ํ…์ŠคํŠธ ์ƒ‰์ƒ ๋ณ€ํ™”: - ์ œ๋ชฉ: ๋‹คํฌ ๊ทธ๋ ˆ์ด โ†’ ๋‹คํฌ ๋ธ”๋ฃจ - ์„ค๋ช…: ๋ฏธ๋””์—„ ๊ทธ๋ ˆ์ด โ†’ ๋‹คํฌ ๊ทธ๋ ˆ์ด - ๋ถ€๋“œ๋Ÿฌ์šด ์ƒ‰์ƒ ์ „ํ™˜ ๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ์ตœ์ ํ™”: - ๋ชจ๋ฐ”์ผ: ์•„์ด์ฝ˜ 60px, ํšŒ์ „ ๊ฐ๋„ 3๋„๋กœ ์กฐ์ • - ํƒœ๋ธ”๋ฆฟ: 2์—ด ๊ทธ๋ฆฌ๋“œ ์œ ์ง€ - ๋ฐ์Šคํฌํ†ฑ: 4์—ด ๊ทธ๋ฆฌ๋“œ ์ตœ์ ํ™” ๐Ÿš€ ์„ฑ๋Šฅ ์ตœ์ ํ™”: - GPU ๊ฐ€์† ์• ๋‹ˆ๋ฉ”์ด์…˜ (transform, opacity) - ์ตœ์ ํ™”๋œ cubic-bezier ์ „ํ™˜ - ๋ ˆ์ด์–ด ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•œ ๋ Œ๋”๋ง ์„ฑ๋Šฅ ํ–ฅ์ƒ ๐ŸŽจ ์‹œ๊ฐ์  ํšจ๊ณผ: - ๋ฐฉ์‚ฌํ˜• ๊ทธ๋ผ๋ฐ์ด์…˜ ์˜ค๋ฒ„๋ ˆ์ด - ๋‹ค์ธต ๊ทธ๋ฆผ์ž ์‹œ์Šคํ…œ - ๋ถ€๋“œ๋Ÿฌ์šด ์ƒ‰์ƒ ์ „ํ™˜ - ํ”„๋ฆฌ๋ฏธ์—„ ๋А๋‚Œ์˜ ์‹œ๊ฐ์  ๊ณ„์ธต ๊ฒฐ๊ณผ: ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋งค๋ ฅ์ ์ด๊ณ  ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ์นด๋“œ ๋””์ž์ธ ํ…Œ์ŠคํŠธ: http://localhost:20000/pages/dashboard/group-leader.html --- web-ui/css/modern-dashboard.css | 172 ++++++++++++++++++++++++-------- 1 file changed, 128 insertions(+), 44 deletions(-) diff --git a/web-ui/css/modern-dashboard.css b/web-ui/css/modern-dashboard.css index 94c1c78..90a32ee 100644 --- a/web-ui/css/modern-dashboard.css +++ b/web-ui/css/modern-dashboard.css @@ -411,19 +411,20 @@ display: flex; flex-direction: column; align-items: center; - gap: var(--space-3); - padding: var(--space-6); - background: linear-gradient(135deg, var(--bg-primary) 0%, var(--bg-tertiary) 100%); - border-radius: var(--radius-xl); + gap: var(--space-4); + padding: var(--space-8); + background: linear-gradient(145deg, #ffffff 0%, #f8fafc 50%, #f1f5f9 100%); + border-radius: var(--radius-2xl); text-decoration: none; color: var(--text-primary); - transition: var(--transition-normal); - border: 1px solid var(--border-light); + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + border: 2px solid transparent; position: relative; overflow: hidden; text-align: center; - min-height: 160px; + min-height: 180px; justify-content: center; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); } .quick-action-card::before { @@ -432,41 +433,91 @@ top: 0; left: 0; right: 0; - height: 3px; - background: linear-gradient(90deg, var(--primary-500), var(--primary-600)); + height: 4px; + background: linear-gradient(90deg, #3b82f6, #8b5cf6, #06b6d4, #10b981); + background-size: 300% 100%; + animation: gradientShift 3s ease-in-out infinite; opacity: 0; - transition: var(--transition-normal); + transition: opacity 0.3s ease; } -.quick-action-card:hover::before { +.quick-action-card::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: radial-gradient(circle at 50% 50%, rgba(59, 130, 246, 0.05) 0%, transparent 70%); + opacity: 0; + transition: opacity 0.3s ease; +} + +@keyframes gradientShift { + 0%, 100% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } +} + +.quick-action-card:hover::before, +.quick-action-card:hover::after { opacity: 1; } .quick-action-card:hover { - background: linear-gradient(135deg, var(--bg-primary) 0%, var(--primary-50) 100%); - box-shadow: var(--shadow-lg); - transform: translateY(-4px); - border-color: var(--primary-200); + background: linear-gradient(145deg, #ffffff 0%, #f0f9ff 50%, #e0f2fe 100%); + box-shadow: + 0 20px 25px -5px rgba(0, 0, 0, 0.1), + 0 10px 10px -5px rgba(0, 0, 0, 0.04), + 0 0 0 1px rgba(59, 130, 246, 0.1); + transform: translateY(-8px) scale(1.02); + border-color: rgba(59, 130, 246, 0.2); } .action-icon-large { - width: 64px; - height: 64px; - background: linear-gradient(135deg, var(--primary-100), var(--primary-200)); + width: 80px; + height: 80px; + background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 50%, #93c5fd 100%); border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; - font-size: var(--text-3xl); + font-size: 2.5rem; flex-shrink: 0; - transition: var(--transition-normal); - box-shadow: var(--shadow-sm); + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + box-shadow: + 0 4px 6px -1px rgba(0, 0, 0, 0.1), + 0 2px 4px -1px rgba(0, 0, 0, 0.06), + inset 0 1px 0 rgba(255, 255, 255, 0.1); + position: relative; + overflow: hidden; +} + +.action-icon-large::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(147, 197, 253, 0.1) 100%); + border-radius: inherit; + opacity: 0; + transition: opacity 0.3s ease; } .quick-action-card:hover .action-icon-large { - background: linear-gradient(135deg, var(--primary-200), var(--primary-300)); - transform: scale(1.1); - box-shadow: var(--shadow-md); + background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 50%, #1e40af 100%); + transform: scale(1.15) rotate(5deg); + box-shadow: + 0 10px 15px -3px rgba(0, 0, 0, 0.1), + 0 4px 6px -2px rgba(0, 0, 0, 0.05), + 0 0 0 3px rgba(59, 130, 246, 0.1), + inset 0 1px 0 rgba(255, 255, 255, 0.2); + color: white; +} + +.quick-action-card:hover .action-icon-large::before { + opacity: 1; } .action-content { @@ -477,34 +528,55 @@ } .action-content h3 { - font-size: var(--text-base); - font-weight: var(--font-semibold); + font-size: 1.125rem; + font-weight: 700; margin: 0; - color: var(--text-primary); + color: #1f2937; line-height: 1.3; + transition: color 0.3s ease; } .action-content p { - font-size: var(--text-sm); - color: var(--text-secondary); + font-size: 0.875rem; + color: #6b7280; margin: 0; - line-height: 1.4; + line-height: 1.5; + transition: color 0.3s ease; +} + +.quick-action-card:hover .action-content h3 { + color: #1e40af; +} + +.quick-action-card:hover .action-content p { + color: #374151; } .action-arrow { position: absolute; - top: var(--space-3); - right: var(--space-3); - font-size: var(--text-lg); - color: var(--primary-500); + top: var(--space-4); + right: var(--space-4); + width: 32px; + height: 32px; + background: linear-gradient(135deg, #f3f4f6, #e5e7eb); + border-radius: var(--radius-full); + display: flex; + align-items: center; + justify-content: center; + font-size: 1rem; + color: #6b7280; opacity: 0; - transition: var(--transition-normal); - transform: translateX(-10px); + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + transform: translateX(-10px) scale(0.8); + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.1); } .quick-action-card:hover .action-arrow { opacity: 1; - transform: translateX(0); + transform: translateX(0) scale(1); + background: linear-gradient(135deg, #3b82f6, #1d4ed8); + color: white; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); } .admin-only { @@ -528,30 +600,42 @@ .quick-actions-grid-full, .quick-actions-grid { grid-template-columns: 1fr; + gap: var(--space-3); } .quick-action-card { - min-height: 120px; - padding: var(--space-4); + min-height: 140px; + padding: var(--space-6); + gap: var(--space-3); } .action-icon-large { - width: 48px; - height: 48px; - font-size: var(--text-2xl); + width: 60px; + height: 60px; + font-size: 2rem; + } + + .quick-action-card:hover .action-icon-large { + transform: scale(1.1) rotate(3deg); } .action-content h3 { - font-size: var(--text-sm); + font-size: 1rem; } .action-content p { - font-size: var(--text-xs); + font-size: 0.8rem; } .work-status-container-enhanced { min-height: 300px; } + + .action-arrow { + width: 28px; + height: 28px; + font-size: 0.875rem; + } } /* ========== ์ž‘์—…์ž ์„น์…˜ ========== */