/* ============================================================ Shop Detail Page — 商品详情页 结构:沉浸式详情页(固定Hero + ScrollView内容 + CTA) ============================================================ */ .shop-detail-page { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgb(28, 22, 18); } /* --- Fixed Hero Area --- */ .shop-hero-fixed { position: absolute; top: 0; left: 0; width: 100%; height: 65vh; /* hero takes 65% viewport height */ z-index: 0; overflow: hidden; } .shop-hero-clip { position: absolute; top: 0; left: 0; right: 0; bottom: 0; will-change: height, transform; } .shop-hero-img { width: 100%; height: 100%; object-fit: cover; will-change: top; } /* Bottom gradient mask: pseudo-mask approach (better x-compatibility) */ .shop-hero-overlay { position: absolute; bottom: 0; left: 0; right: 0; height: 55%; pointer-events: none; } /* Hero info (title, price) anchored at bottom */ .shop-hero-info { position: absolute; bottom: 0; left: 0; right: 0; z-index: 2; padding: 80rpx 40rpx 24rpx; display: flex; flex-direction: column; gap: 8rpx; } .shop-hero-title { font-size: 40rpx; font-weight: 700; line-height: 1.3; color: #f0e6d8; } .shop-hero-subtitle { font-size: 22rpx; color: #b0a395; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .shop-hero-price-row { display: flex; align-items: baseline; gap: 16rpx; margin-top: 6rpx; } .shop-hero-price { font-size: 44rpx; font-weight: 700; color: var(--accent-primary); } .shop-hero-original { font-size: 26rpx; color: #8a7e72; text-decoration: line-through; } /* --- ScrollView Content Layer --- */ .shop-scroll { position: relative; z-index: 3; } .shop-content { min-height: 100vh; /* ensure scrollability */ will-change: transform; } /* --- Transition Band (sticky-like top info) --- */ .shop-band { position: -webkit-sticky; position: sticky; top: 0; z-index: 4; padding: 40rpx 40rpx 32rpx; display: flex; flex-direction: column; gap: 10rpx; transition: opacity 0.15s ease; will-change: opacity; } .shop-band-title { font-size: 44rpx; font-weight: 700; line-height: 1.3; color: #f0e6d8; } .shop-band-subtitle { font-size: 24rpx; color: #b0a395; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .shop-band-price-row { display: flex; align-items: baseline; gap: 16rpx; margin-top: 6rpx; } .shop-band-price { font-size: 48rpx; font-weight: 700; color: var(--accent-primary); } .shop-band-original { font-size: 26rpx; color: #8a7e72; text-decoration: line-through; } /* --- Detail Body --- */ .shop-detail-body { padding: 32rpx 40rpx 60rpx; will-change: opacity, transform; } .shop-section { margin-bottom: 32rpx; } .shop-section-title { font-size: 34rpx; font-weight: 700; color: #f0e6d8; margin: 28rpx 0 20rpx; display: block; position: relative; padding-left: 20rpx; } .shop-section-title::before { content: ''; position: absolute; left: 0; top: 6rpx; bottom: 6rpx; width: 6rpx; border-radius: 4rpx; background: linear-gradient(180deg, var(--accent-primary), var(--accent-primary-soft)); } .shop-section-text { font-size: 28rpx; color: #c4b8a8; line-height: 1.75; display: block; } .shop-divider { height: 2rpx; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent); margin: 40rpx 0; } /* --- Tags --- */ .shop-tag-row { display: flex; flex-wrap: wrap; gap: 16rpx; margin: 20rpx 0; } .shop-tag { padding: 10rpx 28rpx; border-radius: 40rpx; font-size: 22rpx; font-weight: 500; background: var(--accent-primary-soft); border: 1rpx solid var(--accent-primary); display: inline-flex; align-items: center; justify-content: center; } .shop-tag-text { color: var(--accent-primary); } /* --- Spec Table --- */ .shop-spec-table { width: 100%; border-collapse: collapse; border-radius: 16rpx; overflow: hidden; font-size: 26rpx; } .shop-spec-row { display: flex; padding: 20rpx 24rpx; border-bottom: 1rpx solid rgba(255,255,255,0.06); } .shop-spec-row:last-child { border-bottom: none; } .shop-spec-key { width: 35%; color: #8a7e72; font-weight: 500; font-size: 24rpx; } .shop-spec-val { flex: 1; color: #e8e0d6; word-break: break-all; } .shop-bottom-spacer { height: 200rpx; } /* --- Back Button --- */ .shop-back-btn { position: fixed; top: calc(env(safe-area-inset-top, 20px) + 20rpx); left: 24rpx; z-index: 50; width: 80rpx; height: 80rpx; border-radius: 50%; background: rgba(0, 0, 0, 0.35); backdrop-filter: blur(16rpx) saturate(1.4); -webkit-backdrop-filter: blur(16rpx) saturate(1.4); border: 1rpx solid rgba(255,255,255,0.12); box-shadow: var(--shadow-card); display: flex; align-items: center; justify-content: center; transition: opacity 0.2s ease, transform 0.15s ease; } .shop-back-btn:active { transform: scale(0.92); } .shop-back-arrow { font-size: 36rpx; color: rgba(255,255,255,0.85); line-height: 1; } /* --- Bottom CTA Bar --- */ .shop-cta-bar { position: fixed; bottom: 0; left: 0; right: 0; z-index: 60; padding: 20rpx 32rpx calc(20rpx + env(safe-area-inset-bottom, 0px)); display: flex; align-items: center; justify-content: space-between; gap: 24rpx; backdrop-filter: blur(16rpx) saturate(1.2); -webkit-backdrop-filter: blur(16rpx) saturate(1.2); box-shadow: var(--shadow-card); transition: background-color 0.4s ease; } .shop-cta-price-col { display: flex; align-items: baseline; gap: 12rpx; } .shop-cta-price { font-size: 40rpx; font-weight: 700; color: var(--accent-primary); } .shop-cta-original { font-size: 24rpx; color: #8a7e72; text-decoration: line-through; } .shop-cta-btn { flex: 1; max-width: 260rpx; background: linear-gradient(135deg, var(--accent-primary) 0%, var(--accent-primary-strong) 99%); color: #fff; border-radius: 50rpx; padding: 24rpx 48rpx; font-size: 30rpx; font-weight: 600; text-align: center; display: flex; align-items: center; justify-content: center; box-shadow: var(--shadow-card); } .shop-cta-btn-text { color: inherit; font-weight: 600; }