blob: 913b57125c390ad9b51379c764f490dd948077db [file] [log] [blame]
wht30587822025-06-09 23:33:09 +08001/* UserProfile.css - 翡翠园林风格用户个人资料页面样式 */
2
3/* 引入Google字体 */
4@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&family=Lora:wght@400;500;600&display=swap');
5
6/* 主容器 */
7.user-profile-container {
8 min-height: 100vh;
9 background: linear-gradient(135deg, #2d5016 0%, #4a7c59 20%, #8fbc8f 40%, #98fb98 60%, #f0fff0 100%);
10 padding: 24px;
11 font-family: 'Lora', serif;
12 position: relative;
13 overflow-x: hidden;
14}
15
16/* 背景装饰元素 */
17.user-profile-container::before {
18 content: '';
19 position: fixed;
20 top: 0;
21 left: 0;
22 right: 0;
23 bottom: 0;
24 background:
25 radial-gradient(circle at 20% 80%, rgba(255, 255, 255, 0.08) 0%, transparent 50%),
26 radial-gradient(circle at 80% 20%, rgba(255, 255, 255, 0.06) 0%, transparent 50%),
27 radial-gradient(circle at 40% 40%, rgba(144, 238, 144, 0.08) 0%, transparent 50%);
28 animation: backgroundShift 25s ease-in-out infinite;
29 pointer-events: none;
30 z-index: 0;
31}
32
33/* 响应式网格布局 */
34.profile-grid {
35 display: grid;
36 grid-template-columns: 400px 1fr;
37 grid-template-rows: auto auto;
38 gap: 24px;
39 max-width: 1400px;
40 margin: 0 auto;
41 position: relative;
42 z-index: 10;
43}
44
45@media (max-width: 1200px) {
46 .profile-grid {
47 grid-template-columns: 1fr;
48 grid-template-rows: auto auto auto auto;
49 }
50}
51
52/* 卡片基础样式 */
53.profile-card {
54 background: rgba(255, 255, 255, 0.95);
55 backdrop-filter: blur(20px);
56 border-radius: 25px;
57 box-shadow:
58 0 20px 60px rgba(45, 80, 22, 0.12),
59 0 8px 25px rgba(144, 238, 144, 0.08),
60 inset 0 1px 0 rgba(255, 255, 255, 0.9);
61 border: 2px solid rgba(144, 238, 144, 0.2);
62 backdrop-filter: blur(10px);
63 transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
64 overflow: hidden;
65 position: relative;
66}
67
68.profile-card::before {
69 content: '';
70 position: absolute;
71 top: -2px;
72 left: -2px;
73 right: -2px;
74 bottom: -2px;
75 background: linear-gradient(45deg,
76 #90ee90 0%,
77 #98fb98 25%,
78 #f0fff0 50%,
79 #98fb98 75%,
80 #90ee90 100%);
81 border-radius: 27px;
82 z-index: -1;
83 animation: borderGlow 4s ease-in-out infinite;
84 opacity: 0;
85 transition: opacity 0.3s ease;
86}
87
88.profile-card:hover {
89 transform: translateY(-4px);
90 box-shadow:
91 0 25px 80px rgba(45, 80, 22, 0.15),
92 0 12px 35px rgba(144, 238, 144, 0.12),
93 inset 0 1px 0 rgba(255, 255, 255, 0.9);
94}
95
96.profile-card:hover::before {
97 opacity: 1;
98}
99
100/* 用户基本信息卡片 */
101.user-info-card {
102 grid-column: 1;
103 grid-row: 1;
104 padding: 32px;
105 display: flex;
106 flex-direction: column;
107 align-items: center;
108 min-height: 600px;
109}
110
111.user-avatar-section {
112 display: flex;
113 flex-direction: column;
114 align-items: center;
115 margin-bottom: 32px;
116 position: relative;
117}
118
119.avatar-container {
120 position: relative;
121 cursor: pointer;
122 transition: all 0.3s ease;
123 margin-bottom: 16px;
124}
125
126.avatar-container:hover {
127 transform: scale(1.05);
128}
129
130.user-avatar {
131 width: 120px;
132 height: 120px;
133 border-radius: 50%;
134 border: 4px solid rgba(144, 238, 144, 0.4);
135 box-shadow:
136 0 8px 24px rgba(45, 80, 22, 0.2),
137 0 0 0 4px rgba(144, 238, 144, 0.2);
138 transition: all 0.3s ease;
139}
140
141.avatar-overlay {
142 position: absolute;
143 top: 0;
144 left: 0;
145 width: 100%;
146 height: 100%;
147 border-radius: 50%;
148 background: rgba(45, 80, 22, 0.8);
149 display: flex;
150 align-items: center;
151 justify-content: center;
152 opacity: 0;
153 transition: opacity 0.3s ease;
154 color: white;
155 font-size: 14px;
156 font-weight: 500;
157}
158
159.avatar-container:hover .avatar-overlay {
160 opacity: 1;
161}
162
163.user-title {
164 color: #1a237e;
165 font-size: 28px;
166 font-weight: 600;
167 margin: 0;
168 letter-spacing: 0.5px;
169 text-align: center;
170}
171
172/* 表单区域 */
173.user-form {
174 width: 100%;
175 flex: 1;
176 display: flex;
177 flex-direction: column;
178 gap: 20px;
179}
180
181.form-group {
182 display: flex;
183 flex-direction: column;
184 gap: 8px;
185}
186
187.form-label {
188 font-size: 14px;
189 font-weight: 600;
190 color: #3a4a6b;
191 letter-spacing: 0.3px;
192}
193
194.form-input {
195 padding: 12px 16px;
196 border: 2px solid #e0e7ff;
197 border-radius: 12px;
198 font-size: 16px;
199 background: rgba(248, 250, 255, 0.6);
200 transition: all 0.3s ease;
201 outline: none;
202}
203
204.form-input:focus {
205 border-color: #1a237e;
206 background: #ffffff;
207 box-shadow: 0 0 0 4px rgba(26, 35, 126, 0.1);
208}
209
210.form-input:read-only {
211 background: #f5f7ff;
212 cursor: not-allowed;
213 color: #6b7280;
214}
215
216.status-indicator {
217 display: flex;
218 align-items: center;
219 gap: 12px;
220}
221
222.status-dot {
223 width: 12px;
224 height: 12px;
225 border-radius: 50%;
226 border: 2px solid rgba(255, 255, 255, 0.8);
227 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
228}
229
230.status-dot.active {
231 background: #43a047;
232 box-shadow: 0 0 0 3px rgba(67, 160, 71, 0.2);
233}
234
235.status-dot.banned {
236 background: #e53935;
237 box-shadow: 0 0 0 3px rgba(229, 57, 53, 0.2);
238}
239
240/* 邀请功能 */
241.invite-section {
242 display: flex;
243 flex-direction: column;
244 gap: 12px;
245 padding: 20px;
246 background: linear-gradient(135deg, #f8faff 0%, #e0e7ff 100%);
247 border-radius: 16px;
248 border: 1px solid #e0e7ff;
249}
250
251.invite-form {
252 display: flex;
253 gap: 12px;
254 align-items: center;
255}
256
257.invite-input {
258 flex: 1;
259 min-width: 0;
260}
261
262.invite-counter {
263 font-size: 14px;
264 color: #6b7280;
265 font-weight: 500;
266}
267
268.invite-status {
269 font-size: 14px;
270 padding: 8px 12px;
271 border-radius: 8px;
272 background: rgba(229, 57, 53, 0.1);
273 color: #e53935;
274 border: 1px solid rgba(229, 57, 53, 0.2);
275}
276
277/* 按钮样式 */
278.btn {
279 padding: 12px 20px;
280 border: none;
281 border-radius: 12px;
282 font-size: 14px;
283 font-weight: 600;
284 cursor: pointer;
285 transition: all 0.3s ease;
286 display: inline-flex;
287 align-items: center;
288 justify-content: center;
289 gap: 8px;
290 min-width: 100px;
291 max-width: 140px;
292 position: relative;
293 overflow: hidden;
294 white-space: nowrap;
295 text-overflow: ellipsis;
296}
297
298.btn::before {
299 content: '';
300 position: absolute;
301 top: 0;
302 left: -100%;
303 width: 100%;
304 height: 100%;
305 background: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.3) 50%, transparent 100%);
306 transition: left 0.5s ease;
307}
308
309.btn:hover::before {
310 left: 100%;
311}
312
313.btn-primary {
314 background: linear-gradient(135deg, #1a237e 0%, #3f51b5 100%);
315 color: white;
316 box-shadow: 0 4px 16px rgba(26, 35, 126, 0.3);
317}
318
319.btn-primary:hover {
320 transform: translateY(-2px);
321 box-shadow: 0 6px 24px rgba(26, 35, 126, 0.4);
322}
323
324.btn-danger {
325 background: linear-gradient(135deg, #e53935 0%, #f44336 100%);
326 color: white;
327 box-shadow: 0 4px 16px rgba(229, 57, 53, 0.3);
328}
329
330.btn-warning {
331 background: linear-gradient(135deg, #ff9800 0%, #ffa726 100%);
332 color: white;
333 box-shadow: 0 4px 16px rgba(255, 152, 0, 0.3);
334}
335
336.btn-small {
337 padding: 6px 12px;
338 font-size: 12px;
339 min-width: 70px;
340 max-width: 100px;
341}
342
343.btn:disabled {
344 opacity: 0.6;
345 cursor: not-allowed;
346 transform: none !important;
347}
348
349.btn-group {
350 display: flex;
351 gap: 8px;
352 justify-content: flex-end;
353 margin-top: 20px;
354 flex-wrap: wrap;
355 max-width: 100%;
356 overflow: hidden;
357}
358
359/* 活跃度卡片 */
360.activity-card {
361 grid-column: 1;
362 grid-row: 2;
363 padding: 32px;
364 min-height: 400px;
365}
366
367.activity-title {
368 color: #1a237e;
369 font-size: 24px;
370 font-weight: 600;
371 margin: 0 0 24px 0;
372 letter-spacing: 0.5px;
373}
374
375.activity-content {
376 background: linear-gradient(135deg, #f0fff0 0%, #e6ffe6 100%);
377 border: 2px dashed rgba(144, 238, 144, 0.6);
378 border-radius: 16px;
379 padding: 20px;
380 height: calc(100% - 40px);
381 display: flex;
382 flex-direction: column;
383 gap: 16px;
384 box-sizing: border-box;
385 max-width: 100%;
386 overflow: hidden;
387}
388
389.magic-exchange {
390 display: flex;
391 flex-direction: column;
392 gap: 12px;
393 padding: 16px;
394 background: rgba(255, 255, 255, 0.9);
395 border-radius: 12px;
396 border: 1px solid rgba(144, 238, 144, 0.3);
397 box-sizing: border-box;
398 max-width: 100%;
399 overflow: hidden;
400}
401
402.exchange-form {
403 display: flex;
404 flex-wrap: wrap;
405 gap: 8px;
406 align-items: center;
407 box-sizing: border-box;
408 max-width: 100%;
409}
410
411.exchange-input {
412 min-width: 100px;
413 flex: 1;
414 max-width: calc(50% - 4px);
415}
416
417.exchange-result {
418 font-size: 14px;
419 font-weight: 600;
420 color: #43a047;
421 padding: 8px 12px;
422 background: rgba(67, 160, 71, 0.1);
423 border-radius: 8px;
424 border: 1px solid rgba(67, 160, 71, 0.2);
425}
426
427.stats-grid {
428 display: grid;
429 grid-template-columns: 1fr 1fr;
430 gap: 16px;
431}
432
433.stat-item {
434 display: flex;
435 justify-content: space-between;
436 align-items: center;
437 padding: 12px 16px;
438 background: rgba(255, 255, 255, 0.6);
439 border-radius: 10px;
440 border: 1px solid rgba(224, 231, 255, 0.5);
441}
442
443.stat-label {
444 font-size: 14px;
445 color: #6b7280;
446 font-weight: 500;
447}
448
449.stat-value {
450 font-size: 16px;
451 font-weight: 700;
452}
453
454.stat-value.upload { color: #43a047; }
455.stat-value.download { color: #e53935; }
456.stat-value.ratio { color: #ff9800; }
457.stat-value.vip { color: #1976d2; }
458.stat-value.magic { color: #9c27b0; }
459
460/* 种子列表卡片 */
461.seeds-card, .favorites-card {
462 grid-column: 2;
463 padding: 32px;
464 min-height: 400px;
465 display: flex;
466 flex-direction: column;
467}
468
469.seeds-card {
470 grid-row: 1;
471}
472
473.favorites-card {
474 grid-row: 2;
475}
476
477.list-title {
478 color: #1a237e;
479 font-size: 24px;
480 font-weight: 600;
481 margin: 0 0 24px 0;
482 letter-spacing: 0.5px;
483}
484
485.list-container {
486 background: linear-gradient(135deg, #f0fff0 0%, #e6ffe6 100%);
487 border: 2px dashed rgba(144, 238, 144, 0.6);
488 border-radius: 16px;
489 padding: 16px;
490 flex: 1;
491 overflow: hidden;
492 box-sizing: border-box;
493 max-width: 100%;
494 max-height: calc(100% - 40px);
495}
496
497.empty-state {
498 display: flex;
499 flex-direction: column;
500 align-items: center;
501 justify-content: center;
502 height: 200px;
503 color: #9e9e9e;
504 font-size: 18px;
505}
506
507.empty-icon {
508 font-size: 48px;
509 margin-bottom: 16px;
510 opacity: 0.5;
511}
512
513.seeds-list {
514 list-style: none;
515 margin: 0;
516 padding: 0;
517 display: flex;
518 flex-direction: column;
519 gap: 8px;
520 max-height: 320px;
521 overflow-y: auto;
522 box-sizing: border-box;
523 width: 100%;
524}
525
526.seed-item {
527 display: flex;
528 align-items: center;
529 padding: 16px 20px;
530 background: rgba(255, 255, 255, 0.8);
531 border-radius: 12px;
532 border: 1px solid rgba(224, 231, 255, 0.6);
533 transition: all 0.3s ease;
534 cursor: pointer;
535}
536
537.seed-item:hover {
538 background: #ffffff;
539 transform: translateY(-2px);
540 box-shadow: 0 4px 16px rgba(26, 35, 126, 0.1);
541}
542
543.seed-title {
544 flex: 2;
545 font-weight: 600;
546 color: #1a237e;
547 text-decoration: none;
548 font-size: 16px;
549 white-space: nowrap;
550 overflow: hidden;
551 text-overflow: ellipsis;
552}
553
554.seed-title:hover {
555 text-decoration: underline;
556}
557
558.seed-tags {
559 flex: 1;
560 color: #5c6bc0;
561 font-size: 14px;
562 padding: 0 12px;
563}
564
565.seed-stats {
566 flex: 1;
567 color: #ff9800;
568 font-size: 14px;
569 text-align: right;
570 font-weight: 500;
571 padding-right: 12px;
572}
573
574.seed-actions {
575 display: flex;
576 gap: 8px;
577}
578
579/* 滚动条样式 */
580.seeds-list::-webkit-scrollbar {
581 width: 6px;
582}
583
584.seeds-list::-webkit-scrollbar-track {
585 background: rgba(224, 231, 255, 0.3);
586 border-radius: 3px;
587}
588
589.seeds-list::-webkit-scrollbar-thumb {
590 background: rgba(26, 35, 126, 0.3);
591 border-radius: 3px;
592}
593
594.seeds-list::-webkit-scrollbar-thumb:hover {
595 background: rgba(26, 35, 126, 0.5);
596}
597
598/* 对话框覆盖样式 */
599.dialog-overlay {
600 position: fixed;
601 top: 0;
602 left: 0;
603 right: 0;
604 bottom: 0;
605 background: rgba(0, 0, 0, 0.5);
606 backdrop-filter: blur(8px);
607 z-index: 1000;
608}
609
610/* 响应式设计 */
611@media (max-width: 768px) {
612 .user-profile-container {
613 padding: 16px;
614 }
615
616 .profile-grid {
617 gap: 16px;
618 }
619
620 .profile-card {
621 padding: 24px;
622 }
623
624 .user-title {
625 font-size: 24px;
626 }
627
628 .exchange-form {
629 flex-direction: column;
630 align-items: stretch;
631 }
632
633 .seed-item {
634 flex-direction: column;
635 align-items: stretch;
636 gap: 12px;
637 }
638
639 .seed-title,
640 .seed-tags,
641 .seed-stats {
642 flex: none;
643 text-align: left;
644 padding: 0;
645 }
646
647 .seed-actions {
648 justify-content: flex-end;
649 }
650}
651
652/* 动画 */
653@keyframes fadeInUp {
654 from {
655 opacity: 0;
656 transform: translateY(30px);
657 }
658 to {
659 opacity: 1;
660 transform: translateY(0);
661 }
662}
663
664.profile-card {
665 animation: fadeInUp 0.6s ease-out;
666}
667
668.profile-card:nth-child(1) { animation-delay: 0.1s; }
669.profile-card:nth-child(2) { animation-delay: 0.2s; }
670.profile-card:nth-child(3) { animation-delay: 0.3s; }
671.profile-card:nth-child(4) { animation-delay: 0.4s; }
672
673/* 加载动画 */
674@keyframes pulse {
675 0%, 100% { opacity: 1; }
676 50% { opacity: 0.5; }
677}
678
679.loading {
680 animation: pulse 2s infinite;
681}