/* ============================================================ Shop Detail Page — 商品详情页 结构:沉浸式详情页(固定Hero + ScrollView内容 + CTA) ============================================================ */ .shop-detail-page { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: var(--bg-page); } /* --- Fixed Hero Area --- */ .shop-hero-fixed { position: absolute; top: 0; left: 0; width: 100%; height: 65vh; 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: 96rpx 40rpx calc(24rpx + env(safe-area-inset-bottom)); display: flex; flex-direction: column; gap: 8rpx; } .shop-hero-title { font-size: 44rpx; font-weight: 700; line-height: 1.3; color: var(--text-primary); } .shop-hero-subtitle { font-size: 24rpx; color: var(--text-secondary); 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: var(--text-muted); text-decoration: line-through; } /* --- ScrollView Content Layer --- */ .shop-scroll { position: relative; z-index: 3; } .shop-content { min-height: 100vh; will-change: transform; } /* --- Transition Band (sticky-like top info) --- */ .shop-band { position: -webkit-sticky; position: sticky; top: 0; z-index: 4; padding: 24rpx 40rpx 24rpx; display: flex; flex-direction: column; gap: 10rpx; transition: opacity 0.15s ease; will-change: opacity; } .shop-band-title { font-size: 40rpx; font-weight: 700; line-height: 1.3; color: var(--text-primary); } .shop-band-subtitle { font-size: 24rpx; color: var(--text-secondary); 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: 40rpx; font-weight: 700; color: var(--accent-primary); } .shop-band-original { font-size: 26rpx; color: var(--text-muted); text-decoration: line-through; } /* --- Detail Body --- */ .shop-detail-body { padding: 0 32rpx calc(48rpx + env(safe-area-inset-bottom)); will-change: opacity, transform; box-sizing: border-box; } .shop-content-card { padding: 32rpx; background: var(--bg-card); border: 1rpx solid var(--border); border-radius: 32rpx; box-shadow: var(--shadow-card); box-sizing: border-box; } .shop-section { margin-bottom: 32rpx; } .shop-section:last-child { margin-bottom: 0; } .shop-section-title { font-size: 34rpx; font-weight: 700; color: var(--text-primary); margin: 0 0 20rpx; display: block; position: relative; padding-left: 20rpx; letter-spacing: 0; } .shop-section-title::before { content: ''; position: absolute; left: 0; top: 8rpx; bottom: 8rpx; width: 6rpx; border-radius: 999rpx; background: var(--accent-primary); } .shop-section-text { font-size: 28rpx; color: var(--text-secondary); line-height: 1.8; display: block; } .shop-divider { height: 1rpx; background: var(--border); margin: 32rpx 0; } /* --- Tags --- */ .shop-tag-row { display: flex; flex-wrap: wrap; gap: 16rpx; margin: 20rpx 0; } .shop-tag { height: 56rpx; padding: 0 28rpx; border-radius: 999rpx; font-size: 22rpx; font-weight: 600; 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: 1rpx solid var(--border); border-radius: 20rpx; overflow: hidden; background: var(--bg-muted); } .shop-spec-row { display: flex; padding: 24rpx 28rpx; border-bottom: 1rpx solid var(--border); } .shop-spec-row:last-child { border-bottom: none; } .shop-spec-key { width: 35%; color: var(--text-muted); font-weight: 500; font-size: 24rpx; } .shop-spec-val { flex: 1; color: var(--text-primary); font-size: 26rpx; font-weight: 500; 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: 88rpx; height: 88rpx; border-radius: 50%; background: rgba(40, 35, 32, 0.5); backdrop-filter: blur(16px) saturate(1.4); -webkit-backdrop-filter: blur(16px) saturate(1.4); border: 1rpx solid var(--glass-line); box-shadow: var(--shadow-elevated); 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: var(--text-primary); line-height: 1; } /* --- Bottom Action Bar — 毛玻璃由 BottomActionBar 提供,本地只补充价格摘要 --- */ .bottom-action-bar .price-summary { flex-shrink: 0; } .bottom-action-bar .btn-primary, .bottom-action-bar .btn-secondary { flex: 1; text-align: center; padding: 28rpx 0; font-size: 28rpx; font-weight: 600; line-height: 1.2; } .summary-label { font-size: 22rpx; color: var(--text-secondary); display: block; } .summary-price { font-size: 40rpx; font-weight: 700; color: var(--accent-primary); } .summary-original { font-size: 24rpx; color: var(--text-muted); text-decoration: line-through; }