.xqbox { background: linear-gradient(180deg, #F8FBFF 0%, #F0F7FF 100%); min-height: 100vh; height: 100vh; display: flex; flex-direction: column; overflow: hidden; } /* 页面内容 */ .page-content { height: 100vh; padding-bottom: 40rpx; box-sizing: border-box; } /* iOS 底部安全区域适配 */ @supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) { .page-content { padding-bottom: calc(40rpx + constant(safe-area-inset-bottom)); padding-bottom: calc(40rpx + env(safe-area-inset-bottom)); } } /* 动画效果 */ @keyframes cardEnter { 0% { opacity: 0; transform: translateY(40rpx) scale(0.95); } 100% { opacity: 1; transform: translateY(0) scale(1); } } @keyframes fadeInUp { 0% { opacity: 0; transform: translateY(30rpx); } 100% { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } @keyframes slideUp { 0% { opacity: 0; transform: translateY(100rpx) scale(0.9); } 100% { opacity: 1; transform: translateY(0) scale(1); } } .card-enter { animation: cardEnter 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; } .fade-in-up { animation: fadeInUp 0.5s ease-out forwards; opacity: 0; } .fade-in { animation: fadeIn 0.8s ease-out forwards; opacity: 0; } .pulse { animation: pulse 2s infinite; } /* 渐变背景 */ .gradient-blue { background: linear-gradient(135deg, #6D9EFF 0%, #4A7CFF 100%); color: white !important; } .gradient-orange { background: linear-gradient(135deg, #FF9500 0%, #FF7F00 100%); color: white !important; } .gradient-pink { background: linear-gradient(135deg, #FF6B9D 0%, #FF4081 100%); color: white !important; } .gradient-purple { background: linear-gradient(135deg, #9D4BFF 0%, #7C3AED 100%); color: white !important; } .gradient-gold { background: linear-gradient(135deg, #FFD700 0%, #FFB300 100%); color: white !important; } /* 用户问诊卡片 */ .user-query-card { background: #FFFFFF; margin: 24rpx; border-radius: 28rpx; box-shadow: 0 12rpx 48rpx rgba(74, 144, 226, 0.15); border: 2rpx solid #FFFFFF; overflow: hidden; position: relative; backdrop-filter: blur(20rpx); } /* 卡片装饰 */ .card-decoration { position: absolute; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; z-index: 1; } .decoration-dot { position: absolute; border-radius: 50%; background: linear-gradient(135deg, rgba(109, 158, 255, 0.1) 0%, rgba(74, 124, 255, 0.1) 100%); } .dot-1 { width: 120rpx; height: 120rpx; top: -40rpx; right: -40rpx; } .dot-2 { width: 80rpx; height: 80rpx; bottom: 60rpx; left: -20rpx; } .dot-3 { width: 60rpx; height: 60rpx; bottom: -20rpx; right: 80rpx; } /* 用户信息区域 */ .user-info-section { padding: 40rpx 32rpx 32rpx; display: flex; align-items: flex-start; position: relative; z-index: 2; } .avatar-wrapper { position: relative; margin-right: 24rpx; flex-shrink: 0; } .user-avatar { width: 88rpx; height: 88rpx; border-radius: 50%; border: 3rpx solid #FFFFFF; box-shadow: 0 8rpx 24rpx rgba(74, 144, 226, 0.3); } .user-details { flex: 1; } .user-name-row { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16rpx; } .user-name { font-size: 34rpx; font-weight: 700; color: #1A1A1A; line-height: 1.2; text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1); } .status-badge { padding: 10rpx 24rpx; border-radius: 24rpx; font-size: 26rpx; font-weight: 700; min-width: 88rpx; text-align: center; box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1); } .status-replied { background: linear-gradient(135deg, #2ECC71 0%, #27AE60 100%); color: white; } .status-pending { background: linear-gradient(135deg, #FF9500 0%, #F39C12 100%); color: white; } .pet-info { display: flex; flex-direction: column; gap: 16rpx; } .pet-info-tags { display: flex; gap: 12rpx; flex-wrap: wrap; } .pet-tag { padding: 6rpx 20rpx; border-radius: 20rpx; font-size: 24rpx; font-weight: 600; box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1); } .time-info { display: flex; align-items: center; gap: 8rpx; background: rgba(109, 158, 255, 0.08); padding: 8rpx 16rpx; border-radius: 20rpx; align-self: flex-start; } .time-text { font-size: 24rpx; color: #6D9EFF; font-weight: 500; } /* 症状描述区域 */ .symptom-section { padding: 32rpx; position: relative; z-index: 2; } .section-header { display: flex; align-items: center; margin-bottom: 28rpx; } .section-title { font-size: 32rpx; font-weight: 700; color: #1A1A1A; position: relative; padding-right: 16rpx; } .title-decoration { flex: 1; height: 2rpx; background: linear-gradient(90deg, #E5F0FF 0%, #6D9EFF 50%, #E5F0FF 100%); margin-left: 16rpx; border-radius: 1rpx; } .symptom-content { background: #F8FBFF; border-radius: 24rpx; padding: 36rpx 32rpx; border: 2rpx solid #E5F0FF; position: relative; box-shadow: 0 4rpx 16rpx rgba(74, 144, 226, 0.1); transition: all 0.3s ease; } .symptom-content:active { transform: translateY(-2rpx); box-shadow: 0 8rpx 24rpx rgba(74, 144, 226, 0.15); } .quote-left { position: absolute; top: 20rpx; left: 20rpx; font-size: 48rpx; color: #6D9EFF; font-weight: 700; opacity: 0.3; } .symptom-text { font-size: 30rpx; color: #333; line-height: 1.8; font-weight: 400; text-align: left; } /* 图片展示区域 */ .image-section { padding: 32rpx; position: relative; z-index: 2; } .image-count { margin-left: auto; padding: 6rpx 16rpx; border-radius: 20rpx; font-size: 24rpx; font-weight: 600; } .images-scroll { width: 100%; } .images-container { display: flex; padding: 8rpx 0; } .image-wrapper { margin-right: 20rpx; position: relative; border-radius: 20rpx; overflow: hidden; box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.15); transition: all 0.3s ease; } .image-wrapper:last-child { margin-right: 0; } .image-wrapper:active { transform: scale(0.98); } .symptom-image { width: 220rpx; height: 220rpx; border-radius: 20rpx; } /* 兽医回复区域 */ .replies-section { margin: 24rpx; } .reply-count { margin-left: auto; padding: 8rpx 20rpx; border-radius: 24rpx; display: flex; align-items: center; gap: 4rpx; box-shadow: 0 4rpx 12rpx rgba(157, 75, 255, 0.3); } .count-number { font-size: 30rpx; font-weight: 700; } .count-text { font-size: 24rpx; font-weight: 500; opacity: 0.9; } /* 回复列表 */ .replies-list { display: flex; flex-direction: column; gap: 24rpx; } .vet-reply-card { background: #FFFFFF; border-radius: 28rpx; padding: 36rpx; box-shadow: 0 12rpx 48rpx rgba(74, 144, 226, 0.15); border: 2rpx solid #FFFFFF; position: relative; overflow: hidden; backdrop-filter: blur(20rpx); } /* 兽医信息 */ .vet-info { display: flex; align-items: center; margin-bottom: 32rpx; } .vet-avatar { width: 80rpx; height: 80rpx; border-radius: 50%; border: 3rpx solid #FFFFFF; box-shadow: 0 8rpx 24rpx rgba(255, 215, 0, 0.3); margin-right: 20rpx; flex-shrink: 0; } .vet-verified { position: absolute; bottom: 2rpx; right: 2rpx; width: 20rpx; height: 20rpx; background: #2ECC71; border: 2rpx solid white; border-radius: 50%; } .vet-details { flex: 1; } .vet-name-row { display: flex; align-items: center; margin-bottom: 12rpx; } .vet-name { font-size: 32rpx; font-weight: 700; color: #1A1A1A; margin-right: 16rpx; text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1); } .vet-badge { padding: 2rpx 10rpx; border-radius: 20rpx; box-shadow: 0 4rpx 12rpx rgba(255, 215, 0, 0.3); } .vet-title { font-size: 24rpx; font-weight: 700; letter-spacing: 0.5rpx; } .vet-meta { display: flex; align-items: center; gap: 20rpx; } .meta-item { display: flex; align-items: center; gap: 6rpx; background: rgba(109, 158, 255, 0.08); padding: 6rpx 12rpx; border-radius: 16rpx; } .vet-hospital, .vet-experience { font-size: 24rpx; color: #6D9EFF; font-weight: 500; } /* 回复内容 */ .reply-content { margin-bottom: 28rpx; } .reply-bubble { background: #F8FBFF; border-radius: 24rpx; padding: 32rpx; border: 2rpx solid #E5F0FF; position: relative; box-shadow: 0 4rpx 16rpx rgba(74, 144, 226, 0.1); } .reply-bubble::before { content: ''; position: absolute; top: -12rpx; left: 40rpx; width: 0; height: 0; border-left: 12rpx solid transparent; border-right: 12rpx solid transparent; border-bottom: 12rpx solid #F8FBFF; } .reply-text { font-size: 28rpx; color: #333; line-height: 1.8; font-weight: 400; } /* 回复底部 */ .reply-footer { display: flex; justify-content: space-between; align-items: center; padding-top: 24rpx; border-top: 2rpx dashed #E5F0FF; } .reply-time { display: flex; align-items: center; gap: 10rpx; background: rgba(109, 158, 255, 0.1); padding: 8rpx 20rpx; border-radius: 20rpx; } /* 无回复状态 */ .no-replies { background: #FFFFFF; border-radius: 28rpx; padding: 80rpx 40rpx; text-align: center; box-shadow: 0 12rpx 48rpx rgba(74, 144, 226, 0.15); border: 2rpx solid #FFFFFF; position: relative; overflow: hidden; } .no-replies-title { font-size: 32rpx; color: #333; font-weight: 700; margin-bottom: 16rpx; display: block; text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1); } .no-replies-desc { font-size: 26rpx; color: #999; line-height: 1.4; max-width: 400rpx; margin: 0 auto; } .waiting-animation { display: flex; justify-content: center; gap: 12rpx; margin-top: 40rpx; } .loading-dot { width: 16rpx; height: 16rpx; border-radius: 50%; background: #6D9EFF; animation: pulse 1.5s infinite ease-in-out; } .fazd { width: 100%; display: flex; justify-content: flex-end; } .zdnr { display: inline-block; background-color: #5587FF; color: #fff; margin: 20rpx; padding: 10rpx 20rpx; border-radius: 10rpx; font-size: 28rpx; } .loading-dot.dot-1 { animation-delay: 0s; } .loading-dot.dot-2 { animation-delay: 0.2s; } .loading-dot.dot-3 { animation-delay: 0.4s; } /* 底部安全区域 */ .page-bottom-safe { padding: 30rpx 0 40rpx; margin-top: 20rpx; text-align: center; } .bottom-content { display: flex; align-items: center; justify-content: center; padding: 20rpx 0; } .bottom-text { font-size: 24rpx; color: #999; opacity: 0.8; letter-spacing: 2rpx; } /* 兽医回复图片预览 */ .reply-images-section { margin-top: 24rpx; padding: 0 8rpx; } .reply-images-grid { display: grid; gap: 12rpx; width: 100%; } .reply-images-grid.grid-1 { grid-template-columns: repeat(1, minmax(200rpx, 320rpx)); justify-content: start; } .reply-images-grid.grid-2 { grid-template-columns: repeat(2, 1fr); } .reply-images-grid.grid-3, .reply-images-grid.grid-4, .reply-images-grid:not(.grid-1):not(.grid-2) { grid-template-columns: repeat(2, 1fr); } .reply-image-wrapper { position: relative; border-radius: 16rpx; overflow: hidden; background-color: #f5f5f5; aspect-ratio: 1 / 1; box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1); transition: transform 0.2s ease; } .reply-image-wrapper:active { transform: scale(0.98); } .reply-image { width: 100%; height: 100%; border-radius: 16rpx; object-fit: cover; } /* 图片数量遮罩 */ .image-more-mask { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; border-radius: 16rpx; } .more-count { color: #fff; font-size: 36rpx; font-weight: 700; text-shadow: 0 2rpx 4rpx rgba(0,0,0,0.3); } .modal-mask { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.6); display: flex; align-items: center; justify-content: center; z-index: 1000; animation: fadeIn 0.3s ease; backdrop-filter: blur(8rpx); /* 确保在 iOS 上正确显示 */ -webkit-backdrop-filter: blur(8rpx); } /* 弹框内容 - 优化高度计算 */ .modal-content { width: 700rpx; max-height: 80vh; background: linear-gradient(135deg, #FFFFFF 0%, #F8FBFF 100%); border-radius: 40rpx; overflow: hidden; box-shadow: 0 40rpx 80rpx rgba(0, 0, 0, 0.3); animation: slideUp 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); /* 优化显示 */ display: flex; flex-direction: column; } /* 弹框头部 - 固定在顶部 */ .modal-header { padding: 30rpx 40rpx; display: flex; align-items: center; justify-content: space-between; border-bottom: 2rpx solid #E5F0FF; background: linear-gradient(90deg, #6D9EFF 0%, #4A7CFF 100%); flex-shrink: 0; } .modal-title { font-size: 36rpx; font-weight: 700; color: #FFFFFF; text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.2); letter-spacing: 1rpx; } .modal-close { width: 48rpx; height: 48rpx; background: rgba(255, 255, 255, 0.3); border-radius: 50%; display: flex; align-items: center; justify-content: center; transition: all 0.3s ease; flex-shrink: 0; } .modal-close:active { background: rgba(255, 255, 255, 0.5); transform: scale(0.9); } .close-icon { color: #FFFFFF; font-size: 36rpx; font-weight: 500; line-height: 1; } /* 弹框主体*/ .modal-body { flex: 1; overflow-y: scroll; -webkit-overflow-scrolling: touch; padding: 0; box-sizing: border-box; /* 优化滚动条 */ scrollbar-width: thin; scrollbar-color: #6D9EFF #E5F0FF; } /* 自定义滚动条样式 */ .modal-body::-webkit-scrollbar { width: 6rpx; } .modal-body::-webkit-scrollbar-track { background: #E5F0FF; border-radius: 3rpx; } .modal-body::-webkit-scrollbar-thumb { background: #6D9EFF; border-radius: 3rpx; } .modal-body::-webkit-scrollbar-thumb:hover { background: #4A7CFF; } /* 方案列表容器 */ .plan-list { display: flex; flex-direction: column; gap: 24rpx; padding: 30rpx; } /* 方案卡片 */ .plan-card { background: #FFFFFF; border-radius: 28rpx; padding: 30rpx; box-shadow: 0 8rpx 24rpx rgba(74, 144, 226, 0.15); border: 2rpx solid #E5F0FF; position: relative; overflow: hidden; transition: all 0.3s ease; } .plan-card:last-child { margin-bottom: 0; } .plan-card:active { transform: translateY(-4rpx); box-shadow: 0 16rpx 40rpx rgba(74, 144, 226, 0.25); } /* 兽医信息行 */ .plan-vet-row { display: flex; align-items: center; margin-bottom: 24rpx; padding-bottom: 20rpx; border-bottom: 2rpx dashed #E5F0FF; } .plan-avatar { width: 72rpx; height: 72rpx; border-radius: 50%; margin-right: 20rpx; border: 3rpx solid #FFFFFF; box-shadow: 0 4rpx 12rpx rgba(74, 144, 226, 0.3); flex-shrink: 0; } .plan-vet-info { flex: 1; display: flex; flex-direction: column; gap: 6rpx; } .plan-user-name { font-size: 32rpx; font-weight: 700; color: #1A1A1A; line-height: 1.2; } .plan-title-tag { font-size: 22rpx; background: linear-gradient(135deg, #FFD700 0%, #FFB300 100%); color: #FFFFFF; padding: 4rpx 16rpx; border-radius: 20rpx; display: inline-block; align-self: flex-start; font-weight: 600; box-shadow: 0 4rpx 12rpx rgba(255, 215, 0, 0.3); } /* 方案条目 */ .plan-item { margin-bottom: 24rpx; background: #F8FBFF; border-radius: 20rpx; padding: 20rpx; border: 2rpx solid #E5F0FF; } .plan-item:last-child { margin-bottom: 0; } .item-label { font-size: 26rpx; font-weight: 600; color: #4A7CFF; margin-bottom: 12rpx; display: flex; align-items: center; gap: 8rpx; } .item-value { font-size: 28rpx; color: #333; line-height: 1.6; word-break: break-word; } .diagnosis-text { font-weight: 500; color: #1A1A1A; background: rgba(109, 158, 255, 0.1); padding: 16rpx; border-radius: 16rpx; } .precautions-text { color: #FF6B6B; background: rgba(255, 107, 107, 0.05); padding: 16rpx; border-radius: 16rpx; } /* 方案图片 */ .plan-images { margin-top: 24rpx; padding-top: 20rpx; border-top: 2rpx solid #E5F0FF; } .plan-images-scroll { width: 100%; white-space: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; padding-bottom: 4rpx; } .plan-images-scroll::-webkit-scrollbar { height: 4rpx; } .plan-images-scroll::-webkit-scrollbar-track { background: #E5F0FF; border-radius: 2rpx; } .plan-images-scroll::-webkit-scrollbar-thumb { background: #6D9EFF; border-radius: 2rpx; } .plan-images-container { display: flex; gap: 16rpx; padding: 8rpx 0; } .plan-thumb { width: 160rpx; height: 160rpx; border-radius: 16rpx; box-shadow: 0 8rpx 16rpx rgba(0, 0, 0, 0.15); transition: all 0.3s ease; flex-shrink: 0; } .plan-thumb:active { transform: scale(0.95); } /* 加载更多提示 */ .plan-loading-more, .plan-no-more { padding: 30rpx 0 20rpx; text-align: center; } .loading-more-text { font-size: 26rpx; color: #6D9EFF; font-weight: 500; padding: 10rpx 30rpx; background: rgba(109, 158, 255, 0.1); border-radius: 40rpx; display: inline-block; } .no-more-text { font-size: 24rpx; color: #999; opacity: 0.6; } /* 底部填充区域 */ .modal-bottom-fill { height: 20rpx; width: 100%; } /* 空状态 */ .plan-empty { padding: 80rpx 0; text-align: center; background: #F8FBFF; border-radius: 28rpx; } .empty-icon { font-size: 80rpx; display: block; margin-bottom: 20rpx; opacity: 0.5; } .empty-text { font-size: 28rpx; color: #999; font-weight: 500; } /* iOS 底部安全区域适配 */ @supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) { .modal-footer { padding-bottom: calc(20rpx + constant(safe-area-inset-bottom)); padding-bottom: calc(20rpx + env(safe-area-inset-bottom)); } } .fazd { width: 100%; display: flex; justify-content: flex-end; cursor: pointer; } .zdnr { display: inline-block; background: linear-gradient(135deg, #5587FF 0%, #3A6AFF 100%); color: #fff; margin: 20rpx; padding: 16rpx 32rpx; border-radius: 40rpx; font-size: 28rpx; font-weight: 600; box-shadow: 0 8rpx 24rpx rgba(85, 135, 255, 0.4); transition: all 0.3s ease; } .zdnr:active { transform: scale(0.95); box-shadow: 0 4rpx 12rpx rgba(85, 135, 255, 0.3); }