From d119467f5b2c435fcc9c7a48802c2640f0a524d7 Mon Sep 17 00:00:00 2001 From: Professional Date: Fri, 23 May 2025 17:25:58 +0700 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D0=B4=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D0=B9=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=20"=D0=BF=D1=80=D0=BE=D1=84=D0=B8=D0=BB=D1=8C"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/ProfileView.vue | 494 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 494 insertions(+) diff --git a/src/views/ProfileView.vue b/src/views/ProfileView.vue index c9da615..33716fe 100644 --- a/src/views/ProfileView.vue +++ b/src/views/ProfileView.vue @@ -1331,4 +1331,498 @@ onMounted(async () => { justify-content: flex-end; gap: 1rem; } + +/* New styles for improved profile design */ +.avatar-section { + text-align: center; + margin-bottom: 1.5rem; + position: relative; + padding: 1rem; +} + +.avatar-container { + position: relative; + display: inline-block; + margin-bottom: 1rem; +} + +.avatar-image { + width: 120px; + height: 120px; + border-radius: 50%; + object-fit: cover; + border: 4px solid white; + box-shadow: 0 8px 25px rgba(102, 126, 234, 0.2); + transition: all 0.3s ease; +} + +.avatar-placeholder { + width: 120px; + height: 120px; + border-radius: 50%; + background: linear-gradient(45deg, #f1f3f5, #e9ecef); + display: flex; + align-items: center; + justify-content: center; + border: 4px solid white; + box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1); +} + +.avatar-placeholder i { + font-size: 3rem; + color: #adb5bd; +} + +.avatar-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + transition: opacity 0.3s ease; + z-index: 5; +} + +.avatar-container:hover .avatar-overlay { + opacity: 1; +} + +.change-avatar-btn { + background: none; + border: none; + color: white; + font-size: 1.5rem; + cursor: pointer; + padding: 10px; + border-radius: 50%; + background: rgba(102, 126, 234, 0.7); + width: 50px; + height: 50px; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s ease; +} + +.change-avatar-btn:hover { + background: rgba(102, 126, 234, 0.9); + transform: scale(1.1); +} + +.user-info { + padding: 0.5rem; +} + +.user-name { + font-size: 1.5rem; + font-weight: 700; + color: #2c3e50; + margin: 0 0 0.3rem 0; + transition: color 0.3s ease; +} + +.user-email { + color: #6c757d; + margin: 0 0 1rem 0; + font-size: 0.9rem; +} + +.user-badges { + display: flex; + gap: 0.5rem; + justify-content: center; + flex-wrap: wrap; +} + +.badge { + padding: 0.25rem 0.75rem; + border-radius: 50px; + font-size: 0.75rem; + font-weight: 600; + transition: all 0.3s ease; +} + +.badge.verified { + background: linear-gradient(45deg, #28a745, #20c997); + color: white; +} + +.badge.member-since { + background: #f8f9fa; + color: #495057; + border: 1px solid #e9ecef; +} + +/* Stats Section with modern cards */ +.stats-section { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 0.75rem; + margin-top: 1.5rem; +} + +.stat-item { + text-align: center; + background: white; + border-radius: 12px; + padding: 1rem 0.5rem; + transition: all 0.3s ease; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); +} + +.stat-item:hover { + transform: translateY(-3px); + box-shadow: 0 5px 15px rgba(102, 126, 234, 0.2); +} + +.stat-value { + display: block; + font-size: 1.5rem; + font-weight: 700; + color: #667eea; + margin-bottom: 0.3rem; +} + +.stat-label { + font-size: 0.8rem; + color: #6c757d; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +/* Details Section */ +.details-section { + display: flex; + flex-direction: column; + gap: 2rem; +} + +.info-card { + background: rgba(255, 255, 255, 0.95); + backdrop-filter: blur(10px); + border-radius: 20px; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1); + overflow: hidden; + transition: transform 0.3s ease, box-shadow 0.3s ease; +} + +.info-card:hover { + transform: translateY(-5px); + box-shadow: 0 15px 35px rgba(102, 126, 234, 0.15); +} + +.card-header { + padding: 1.5rem 2rem; + background: linear-gradient(to right, #f8f9fa, #e9ecef); + border-bottom: 1px solid #dee2e6; + display: flex; + justify-content: space-between; + align-items: center; +} + +.card-header h3 { + margin: 0; + color: #495057; + font-size: 1.2rem; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.card-header h3 i { + color: #667eea; +} + +.card-content { + padding: 2rem; +} + +/* Form Styles */ +.info-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1.5rem; +} + +.info-item { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.info-item.full-width { + grid-column: 1 / -1; +} + +.info-item label { + font-weight: 600; + color: #495057; + font-size: 0.9rem; + letter-spacing: 0.5px; +} + +.info-item span { + color: #6c757d; + font-size: 1rem; + padding: 0.75rem; + background: #f8f9fa; + border-radius: 8px; + min-height: 2.5rem; + display: flex; + align-items: center; +} + +.bio-text { + font-style: italic; + line-height: 1.6; + white-space: pre-wrap; +} + +/* Form Input Styles */ +.form-input { + width: 100%; + padding: 0.75rem 1rem; + border-radius: 8px; + border: 1px solid #dee2e6; + background: #f8f9fa; + font-size: 0.95rem; + transition: all 0.3s ease; + color: #495057; + box-shadow: inset 0 1px 2px rgba(0,0,0,0.05); +} + +.form-input:focus { + outline: none; + border-color: #667eea; + box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.15); + background: white; +} + +.form-input:disabled { + opacity: 0.7; + cursor: not-allowed; + background: #e9ecef; +} + +.form-textarea { + min-height: 100px; + resize: vertical; + line-height: 1.5; +} + +/* Alerts */ +.alert { + padding: 1rem; + border-radius: 8px; + margin-bottom: 1.5rem; + display: flex; + align-items: center; + gap: 0.75rem; +} + +.alert i { + font-size: 1.25rem; +} + +.alert.error { + background-color: rgba(220, 53, 69, 0.15); + color: #dc3545; + border-left: 4px solid #dc3545; +} + +.alert.success { + background-color: rgba(40, 167, 69, 0.15); + color: #28a745; + border-left: 4px solid #28a745; +} + +.alert.info { + background-color: rgba(102, 126, 234, 0.15); + color: #667eea; + border-left: 4px solid #667eea; +} + +/* Photo Grid Styles */ +.photo-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); + gap: 1rem; +} + +.photo-item { + position: relative; + border-radius: 12px; + overflow: hidden; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); + aspect-ratio: 1 / 1; + transition: all 0.3s ease; +} + +.photo-item:hover { + transform: translateY(-5px); + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); +} + +.photo-item.main-photo { + box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4); + transform: scale(1.05); + z-index: 2; +} + +.photo-image { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.5s ease; +} + +.photo-item:hover .photo-image { + transform: scale(1.1); +} + +.main-badge { + position: absolute; + top: 10px; + left: 10px; + background: rgba(102, 126, 234, 0.9); + color: white; + padding: 0.25rem 0.5rem; + border-radius: 4px; + font-size: 0.7rem; + font-weight: 700; + display: flex; + align-items: center; + gap: 0.25rem; + box-shadow: 0 2px 5px rgba(0,0,0,0.2); + z-index: 2; +} + +.photo-actions { + position: absolute; + bottom: 10px; + right: 10px; + display: flex; + gap: 0.5rem; + opacity: 0; + transition: opacity 0.3s ease; + z-index: 2; +} + +.photo-item:hover .photo-actions { + opacity: 1; +} + +.empty-photos { + text-align: center; + padding: 3rem 0; +} + +.empty-photos i { + font-size: 3rem; + color: #dee2e6; + margin-bottom: 1rem; +} + +.empty-photos h4 { + margin: 0 0 0.5rem; + color: #495057; +} + +.empty-photos p { + color: #6c757d; + margin-bottom: 1.5rem; +} + +/* Add Photo Button */ +.add-photo-btn { + background: linear-gradient(45deg, #667eea, #764ba2); + color: white; + border: none; + padding: 0.6rem 1.2rem; + border-radius: 50px; + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; + display: inline-flex; + align-items: center; + gap: 0.5rem; + box-shadow: 0 4px 10px rgba(102, 126, 234, 0.3); +} + +.add-photo-btn:hover:not(:disabled) { + transform: translateY(-2px); + box-shadow: 0 6px 15px rgba(102, 126, 234, 0.4); +} + +.add-photo-btn i { + font-size: 1rem; +} + +/* City input and dropdown */ +.city-input-wrapper { + position: relative; + width: 100%; +} + +.city-dropdown { + position: absolute; + top: 100%; + left: 0; + right: 0; + max-height: 250px; + overflow-y: auto; + background: white; + border: 1px solid #dee2e6; + border-radius: 8px; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); + z-index: 100; +} + +.city-option { + padding: 0.75rem 1rem; + cursor: pointer; + color: #495057; + transition: all 0.2s ease; + border-bottom: 1px solid rgba(0,0,0,0.05); +} + +.city-option:last-child { + border-bottom: none; +} + +.city-option:hover { + background: rgba(102, 126, 234, 0.1); + color: #667eea; +} + +.city-clear-btn { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + background: none; + border: none; + color: #6c757d; + cursor: pointer; + padding: 5px; + display: flex; + align-items: center; + justify-content: center; + opacity: 0.7; + border-radius: 50%; + width: 24px; + height: 24px; +} + +.city-clear-btn:hover { + color: #dc3545; + background: rgba(220, 53, 69, 0.1); + opacity: 1; +} \ No newline at end of file