:host { display: block; width: 100%; min-height: 100vh; background: #f4f6f8; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang SC', sans-serif; color: #1a1a1a; -webkit-font-smoothing: antialiased; } // 动画定义 @keyframes slideDown { from { opacity: 0; transform: translateY(-10px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes slideUp { from { opacity: 1; transform: translateY(0) scale(1); } to { opacity: 0; transform: translateY(-10px) scale(0.95); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } @keyframes shimmer { 0% { background-position: -1000px 0; } 100% { background-position: 1000px 0; } } // 顶部标题栏 .header { position: fixed; top: 0; left: 0; right: 0; height: 56px; background: linear-gradient(145deg, #1b5e20 0%, #2e7d32 40%, #43a047 100%); color: white; display: flex; align-items: center; padding: 0 16px; z-index: 1000; box-shadow: 0 2px 12px rgba(27, 94, 32, 0.3); .back-btn { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; font-size: 20px; cursor: pointer; border-radius: 50%; transition: all 0.3s ease; background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); &:hover { background: rgba(255, 255, 255, 0.2); transform: scale(1.1); } &:active { transform: scale(0.95); } } .header-title { flex: 1; text-align: center; font-size: 20px; font-weight: 700; margin-right: 40px; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } } @keyframes gradientShift { 0%, 100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } } // 主容器 .container { padding: 75px 15px 100px; background: linear-gradient(to bottom, #f8f9fa 0%, #e8f5e9 100%); min-height: 100vh; } // 通用区块样式 .section { background: white; border-radius: 20px; padding: 20px; margin-bottom: 20px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); border: 1px solid rgba(76, 175, 80, 0.1); animation: fadeIn 0.5s ease-out; .section-header { margin-bottom: 20px; .section-title { font-size: 18px; font-weight: 700; color: #2e7d32; display: flex; align-items: center; gap: 10px; margin-bottom: 5px; i { font-size: 20px; } } .section-subtitle { font-size: 13px; color: #6c757d; margin-left: 30px; } } .section-title { font-size: 18px; font-weight: 700; color: #2e7d32; margin-bottom: 20px; display: flex; align-items: center; gap: 10px; i { font-size: 20px; } } } // 收益总览卡片 .earnings-overview { background: linear-gradient(135deg, #ffffff 0%, #f1f8e9 100%); border-radius: 25px; padding: 25px; margin-bottom: 25px; box-shadow: 0 8px 30px rgba(76, 175, 80, 0.2); animation: fadeIn 0.6s ease-out; border: 2px solid rgba(76, 175, 80, 0.2); position: relative; overflow: hidden; &::before { content: ''; position: absolute; top: -50%; right: -50%; width: 200%; height: 200%; background: radial-gradient(circle, rgba(76, 175, 80, 0.1) 0%, transparent 70%); animation: pulse 4s ease-in-out infinite; } .earnings-stats { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; margin-bottom: 25px; position: relative; z-index: 1; .stat-item { display: flex; align-items: center; gap: 15px; padding: 20px; border-radius: 18px; transition: all 0.3s ease; position: relative; overflow: hidden; &::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); transition: left 0.6s; } &:hover::before { left: 100%; } &.cash { background: linear-gradient(135deg, rgba(76, 175, 80, 0.1), rgba(46, 125, 50, 0.05)); border: 2px solid rgba(76, 175, 80, 0.2); .stat-icon { background: linear-gradient(135deg, #4caf50, #66bb6a); } .stat-value { color: #2e7d32; } } &.points { background: linear-gradient(135deg, rgba(255, 152, 0, 0.1), rgba(255, 193, 7, 0.05)); border: 2px solid rgba(255, 152, 0, 0.2); .stat-icon { background: linear-gradient(135deg, #ff9800, #ffc107); } .stat-value { color: #f57c00; } } &:hover { transform: translateY(-3px); box-shadow: 0 8px 25px rgba(76, 175, 80, 0.2); } .stat-icon { width: 55px; height: 55px; border-radius: 15px; display: flex; align-items: center; justify-content: center; color: white; font-size: 24px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); flex-shrink: 0; i { animation: pulse 3s ease-in-out infinite; } } .stat-info { flex: 1; .stat-value { font-size: 24px; font-weight: 700; margin-bottom: 5px; } .stat-label { font-size: 13px; color: #6c757d; font-weight: 500; } } } } .carbon-section { background: rgba(255, 255, 255, 0.8); backdrop-filter: blur(10px); border-radius: 20px; padding: 20px; border: 2px solid rgba(26, 188, 156, 0.2); position: relative; z-index: 1; .carbon-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; .carbon-title { font-size: 16px; color: #1abc9c; font-weight: 700; display: flex; align-items: center; gap: 8px; i { font-size: 18px; } } .carbon-value { font-size: 22px; font-weight: 700; color: #16a085; background: linear-gradient(135deg, #1abc9c, #16a085); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } } .time-range-selector { display: flex; gap: 8px; margin-bottom: 15px; background: #f8f9fa; padding: 5px; border-radius: 12px; .time-range-btn { flex: 1; padding: 8px 12px; border-radius: 8px; text-align: center; font-size: 13px; font-weight: 600; color: #6c757d; cursor: pointer; transition: all 0.3s ease; background: transparent; &:hover { background: rgba(26, 188, 156, 0.1); color: #1abc9c; } &.active { background: linear-gradient(135deg, #1abc9c, #16a085); color: white; box-shadow: 0 4px 15px rgba(26, 188, 156, 0.3); } } } .chart-container { height: 220px; background: white; border-radius: 15px; padding: 10px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); position: relative; } } } // 筛选栏 .filter-bar { display: flex; gap: 10px; margin-bottom: 15px; overflow-x: auto; padding-bottom: 5px; &::-webkit-scrollbar { height: 3px; } &::-webkit-scrollbar-thumb { background: #4caf50; border-radius: 3px; } .filter-btn { padding: 10px 18px; border: 2px solid #e9ecef; border-radius: 25px; background: white; color: #6c757d; cursor: pointer; transition: all 0.3s ease; font-size: 14px; font-weight: 500; white-space: nowrap; display: flex; align-items: center; gap: 6px; i { font-size: 13px; } &:hover { border-color: #4caf50; color: #2e7d32; background: rgba(76, 175, 80, 0.05); transform: translateY(-2px); } &.active { background: linear-gradient(135deg, #2e7d32, #4caf50); color: white; border-color: #2e7d32; box-shadow: 0 4px 15px rgba(76, 175, 80, 0.3); } } } // 日期筛选 .date-filter { display: flex; align-items: center; gap: 10px; margin-bottom: 20px; padding: 15px; background: linear-gradient(135deg, #f8f9fa, #e8f5e9); border-radius: 15px; border: 2px solid rgba(76, 175, 80, 0.1); .date-input-group { flex: 1; display: flex; align-items: center; gap: 10px; > i { font-size: 16px; color: #4caf50; } .date-input { flex: 1; padding: 10px 12px; border: 2px solid #e0e0e0; border-radius: 10px; font-size: 13px; background: white; transition: all 0.3s ease; color: #333; &:focus { outline: none; border-color: #4caf50; box-shadow: 0 0 0 3px rgba(76, 175, 80, 0.1); } } .date-separator { font-size: 13px; color: #6c757d; font-weight: 500; } } .clear-date-btn { width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; background: #dc3545; color: white; border: none; border-radius: 10px; font-size: 14px; cursor: pointer; transition: all 0.3s ease; flex-shrink: 0; &:hover { background: #c82333; transform: scale(1.1); } &:active { transform: scale(0.95); } } } // 收益列表 .earnings-list { display: flex; flex-direction: column; gap: 12px; .earning-item { background: linear-gradient(135deg, #ffffff, #f8f9fa); border-radius: 15px; padding: 15px; display: flex; justify-content: space-between; align-items: center; cursor: pointer; transition: all 0.3s ease; border: 2px solid rgba(76, 175, 80, 0.1); position: relative; overflow: hidden; &::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(76, 175, 80, 0.05), transparent); transition: left 0.5s; } &:hover { transform: translateY(-3px); box-shadow: 0 8px 25px rgba(76, 175, 80, 0.15); border-color: rgba(76, 175, 80, 0.3); &::before { left: 100%; } .earning-icon { transform: scale(1.1); box-shadow: 0 6px 20px rgba(76, 175, 80, 0.3); } } .earning-info { display: flex; align-items: center; gap: 15px; flex: 1; .earning-icon { width: 50px; height: 50px; border-radius: 15px; background: linear-gradient(135deg, rgba(76, 175, 80, 0.15), rgba(76, 175, 80, 0.05)); display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; flex-shrink: 0; i { font-size: 22px; color: #4caf50; } } .earning-details { flex: 1; .earning-category { font-size: 16px; font-weight: 600; color: #333; margin-bottom: 5px; } .earning-time { font-size: 12px; color: #6c757d; display: flex; align-items: center; gap: 5px; margin-bottom: 3px; i { font-size: 11px; } } .earning-carbon { font-size: 12px; color: #1abc9c; display: flex; align-items: center; gap: 5px; font-weight: 500; i { font-size: 11px; } } } } .earning-amount { text-align: right; flex-shrink: 0; .cash-amount { font-size: 18px; font-weight: 700; color: #2e7d32; margin-bottom: 4px; display: flex; align-items: center; justify-content: flex-end; gap: 5px; i { font-size: 14px; } } .points-amount { font-size: 13px; color: #ff9800; font-weight: 500; display: flex; align-items: center; justify-content: flex-end; gap: 5px; i { font-size: 11px; } } } } } // 空状态 .empty-state { text-align: center; padding: 60px 20px; .empty-icon { font-size: 60px; margin-bottom: 20px; opacity: 0.3; i { color: #6c757d; } } .empty-text { font-size: 16px; color: #6c757d; margin-bottom: 20px; } .empty-btn { padding: 12px 30px; background: linear-gradient(135deg, #4caf50, #66bb6a); color: white; border: none; border-radius: 25px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; display: inline-flex; align-items: center; gap: 8px; &:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(76, 175, 80, 0.4); } &:active { transform: translateY(0); } } } // 功能按钮区 .action-buttons { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; .action-btn { background: linear-gradient(135deg, #ffffff, #f8f9fa); border-radius: 18px; padding: 25px 20px; text-align: center; cursor: pointer; transition: all 0.3s ease; position: relative; overflow: hidden; border: 2px solid rgba(76, 175, 80, 0.1); &::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(76, 175, 80, 0.1), transparent); transition: left 0.5s; } &:hover::before { left: 100%; } &:hover { transform: translateY(-5px); box-shadow: 0 10px 30px rgba(76, 175, 80, 0.2); border-color: rgba(76, 175, 80, 0.3); .action-icon { transform: scale(1.15); i { animation: pulse 0.6s ease-in-out; } } } .action-icon { width: 60px; height: 60px; margin: 0 auto 12px; border-radius: 18px; display: flex; align-items: center; justify-content: center; font-size: 28px; transition: all 0.3s ease; } &.withdraw .action-icon { background: linear-gradient(135deg, #4caf50, #66bb6a); color: white; box-shadow: 0 4px 15px rgba(76, 175, 80, 0.3); } &.exchange .action-icon { background: linear-gradient(135deg, #ff9800, #ffc107); color: white; box-shadow: 0 4px 15px rgba(255, 152, 0, 0.3); } &.donation .action-icon { background: linear-gradient(135deg, #e91e63, #f06292); color: white; box-shadow: 0 4px 15px rgba(233, 30, 99, 0.3); } &.export .action-icon { background: linear-gradient(135deg, #2196f3, #42a5f5); color: white; box-shadow: 0 4px 15px rgba(33, 150, 243, 0.3); } .action-text { font-size: 15px; color: #333; font-weight: 600; } } } // 模态框 .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.6); display: flex; justify-content: center; align-items: center; z-index: 10000; backdrop-filter: blur(5px); animation: fadeIn 0.2s ease-out; .modal-content { background: white; border-radius: 25px; padding: 30px; width: 90%; max-width: 450px; max-height: 85vh; overflow-y: auto; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); animation: slideDown 0.3s ease-out; border: 2px solid rgba(76, 175, 80, 0.2); .modal-title { font-size: 22px; font-weight: 700; color: #2e7d32; margin-bottom: 15px; text-align: center; display: flex; align-items: center; justify-content: center; gap: 10px; i { font-size: 24px; } } .modal-desc { text-align: center; color: #6c757d; margin-bottom: 25px; font-size: 14px; } } } // 提现选项 .withdraw-options { display: flex; gap: 12px; margin: 20px 0; .withdraw-option { flex: 1; padding: 18px 15px; border: 2px solid #e9ecef; border-radius: 15px; text-align: center; cursor: pointer; transition: all 0.3s ease; background: #f8f9fa; &:hover { border-color: rgba(76, 175, 80, 0.3); background: rgba(76, 175, 80, 0.05); transform: translateY(-2px); } &.active { border-color: #2e7d32; background: linear-gradient(135deg, rgba(76, 175, 80, 0.1), rgba(76, 175, 80, 0.05)); box-shadow: 0 4px 15px rgba(76, 175, 80, 0.2); .withdraw-icon i { color: #2e7d32; transform: scale(1.1); } .withdraw-name { color: #2e7d32; font-weight: 700; } } .withdraw-icon { margin-bottom: 10px; i { font-size: 28px; color: #6c757d; transition: all 0.3s ease; } } .withdraw-name { font-size: 14px; font-weight: 600; color: #333; } } } // 捐赠项目 .donation-projects { margin: 20px 0; .project-card { padding: 18px; background: #f8f9fa; border-radius: 15px; margin-bottom: 12px; cursor: pointer; transition: all 0.3s ease; border: 2px solid transparent; &:hover { background: rgba(76, 175, 80, 0.05); border-color: rgba(76, 175, 80, 0.2); transform: translateX(5px); } &.selected { background: linear-gradient(135deg, rgba(76, 175, 80, 0.15), rgba(76, 175, 80, 0.05)); border-color: #2e7d32; box-shadow: 0 4px 15px rgba(76, 175, 80, 0.2); .project-header { color: #2e7d32; i { color: #4caf50; } } } .project-header { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; i { font-size: 20px; color: #4caf50; } .project-name { font-size: 16px; font-weight: 700; color: #333; } } .project-desc { font-size: 13px; color: #6c757d; line-height: 1.5; padding-left: 30px; } } } // 输入组 .input-group { margin: 20px 0; .input-label { display: block; font-size: 14px; font-weight: 600; color: #333; margin-bottom: 10px; } .input-wrapper { position: relative; display: flex; align-items: center; background: white; border: 2px solid #e0e0e0; border-radius: 12px; overflow: hidden; transition: all 0.3s ease; &:focus-within { border-color: #4caf50; box-shadow: 0 0 0 3px rgba(76, 175, 80, 0.1); } .input-prefix { padding: 15px 0 15px 15px; font-size: 18px; font-weight: 700; color: #4caf50; } .amount-input { flex: 1; border: none; padding: 15px; font-size: 18px; font-weight: 600; outline: none; color: #333; &::placeholder { color: #bbb; font-weight: 400; } } } .input-hint { margin-top: 8px; font-size: 12px; color: #6c757d; strong { color: #2e7d32; font-weight: 700; } } } // 订单详情 .order-details { .detail-section { margin-bottom: 20px; .detail-row { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; border-bottom: 1px solid #f0f0f0; &:last-child { border-bottom: none; } .detail-label { font-size: 14px; color: #6c757d; font-weight: 500; } .detail-value { font-size: 14px; color: #333; font-weight: 600; text-align: right; } } } .earnings-summary { background: linear-gradient(135deg, #f8f9fa, #e8f5e9); border-radius: 15px; padding: 18px; margin-bottom: 20px; .summary-item { display: flex; align-items: center; gap: 15px; padding: 12px 0; &:not(:last-child) { border-bottom: 1px solid rgba(0, 0, 0, 0.05); } > i { width: 40px; height: 40px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 18px; color: white; flex-shrink: 0; } &.cash > i { background: linear-gradient(135deg, #4caf50, #66bb6a); } &.points > i { background: linear-gradient(135deg, #ff9800, #ffc107); } &.carbon > i { background: linear-gradient(135deg, #1abc9c, #16a085); } .summary-info { flex: 1; display: flex; justify-content: space-between; align-items: center; .summary-label { font-size: 14px; color: #6c757d; font-weight: 500; } .summary-value { font-size: 16px; font-weight: 700; color: #333; } } } } } // 模态框按钮 .modal-buttons { display: flex; gap: 12px; margin-top: 25px; .modal-btn { flex: 1; padding: 14px 20px; border: none; border-radius: 12px; font-size: 16px; font-weight: 700; cursor: pointer; transition: all 0.3s ease; &.cancel { background: #f8f9fa; color: #6c757d; border: 2px solid #e9ecef; &:hover { background: #e9ecef; color: #495057; } } &.confirm { background: linear-gradient(135deg, #2e7d32, #4caf50); color: white; box-shadow: 0 4px 15px rgba(76, 175, 80, 0.3); &:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(76, 175, 80, 0.4); } &:active { transform: translateY(0); } &.single { background: linear-gradient(135deg, #2196f3, #42a5f5); box-shadow: 0 4px 15px rgba(33, 150, 243, 0.3); &:hover { box-shadow: 0 6px 20px rgba(33, 150, 243, 0.4); } } } } } // 响应式设计 @media (max-width: 768px) { .container { padding: 70px 12px 100px; } .earnings-overview .earnings-stats { grid-template-columns: 1fr; } .action-buttons { grid-template-columns: 1fr; } .date-filter { flex-direction: column; align-items: stretch; .date-input-group { flex-direction: column; align-items: stretch; .date-input { width: 100%; } } .clear-date-btn { width: 100%; height: 40px; } } }