feat: deliver V1.1 dual-client UI fidelity milestone

This commit is contained in:
2026-09-10 16:06:11 +08:00
parent 5b51d5b3f1
commit 45ca118453
82 changed files with 682 additions and 1167 deletions
+14 -246
View File
@@ -1,246 +1,14 @@
/* U18 首页 - V1.1 新版样式 */
.page {
min-height: 100vh;
background: #FAFAF8;
padding-bottom: 0;
}
/* ========== 品牌区 ========== */
.brand-bar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20rpx 24rpx 16rpx;
background: #fff;
position: sticky;
top: 0;
z-index: 100;
}
.brand-info { display: flex; flex-direction: column; }
.brand-name {
font-size: 36rpx;
font-weight: 700;
color: #E96B6B;
line-height: 1.2;
}
.brand-slogan {
font-size: 22rpx;
color: #888;
margin-top: 4rpx;
}
.bell-btn {
position: relative;
width: 64rpx; height: 64rpx;
display: flex; align-items: center; justify-content: center;
border-radius: 50%;
background: #f5f5f5;
}
.bell-icon { font-size: 32rpx; }
.badge {
position: absolute; top: -4rpx; right: -4rpx;
min-width: 28rpx; height: 28rpx; line-height: 28rpx;
padding: 0 6rpx;
background: #E96B6B; color: #fff;
font-size: 20rpx; border-radius: 14rpx;
text-align: center;
}
/* ========== 用户状态条 ========== */
.status-strip {
background: #fff;
padding: 16rpx 24rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.status-checks { display: flex; gap: 24rpx; flex-wrap: wrap; }
.status-check {
font-size: 24rpx; color: #666;
}
.status-check.done { color: #2E7D32; }
.status-check.pending { color: #F57C00; }
.status-prompt { padding: 16rpx 0; }
.prompt-text {
font-size: 26rpx; color: #555;
display: block; margin-bottom: 16rpx;
}
.prompt-actions { display: flex; gap: 16rpx; }
.prompt-btn {
padding: 12rpx 28rpx; border-radius: 8rpx;
font-size: 26rpx; font-weight: 500;
}
.prompt-btn.primary { background: #E96B6B; color: #fff; }
.prompt-btn.secondary { background: #fff; color: #E96B6B; border: 1rpx solid #E96B6B; }
.paused-hint, .successful-hint { padding: 16rpx 0; text-align: center; }
.paused-hint text { font-size: 26rpx; color: #888; display: block; margin-bottom: 12rpx; }
.resume-btn {
display: inline-block; padding: 10rpx 32rpx;
background: #E96B6B; color: #fff;
border-radius: 8rpx; font-size: 26rpx;
}
/* ========== Banner ========== */
.banner-section { padding: 16rpx 24rpx; }
.banner-swiper {
width: 100%; height: 340rpx;
border-radius: 16rpx; overflow: hidden;
}
.banner-card { width: 100%; height: 100%; position: relative; }
.banner-img { width: 100%; height: 100%; object-fit: cover; }
.banner-overlay {
position: absolute; bottom: 0; left: 0; right: 0;
padding: 24rpx;
background: linear-gradient(transparent, rgba(0,0,0,0.6));
color: #fff;
}
.banner-title { font-size: 30rpx; font-weight: 600; display: block; margin-bottom: 4rpx; }
.banner-subtitle { font-size: 22rpx; opacity: 0.9; display: block; margin-bottom: 8rpx; }
.banner-btn {
display: inline-block; padding: 8rpx 20rpx;
background: rgba(255,255,255,0.25); border: 1rpx solid rgba(255,255,255,0.6);
border-radius: 20rpx; font-size: 22rpx; color: #fff;
}
/* ========== 8个核心入口 ========== */
.entries-section {
background: #fff;
margin: 0 24rpx; border-radius: 16rpx;
padding: 24rpx 16rpx; margin-top: -8rpx;
position: relative; z-index: 10;
}
.entries-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16rpx;
}
.entry-item {
display: flex; flex-direction: column; align-items: center;
padding: 12rpx 0;
}
.entry-item.disabled { opacity: 0.5; }
.entry-icon-bg {
width: 72rpx; height: 72rpx;
border-radius: 16rpx;
display: flex; align-items: center; justify-content: center;
margin-bottom: 8rpx;
}
.entry-icon-bg.icon-dating { background: #FFF0F0; }
.entry-icon-bg.icon-matchmaker { background: #FFF8E6; }
.entry-icon-bg.icon-activity { background: #E8F5E9; }
.entry-icon-bg.icon-counseling { background: #E3F2FD; }
.entry-icon-bg.icon-class { background: #F3E5F5; }
.entry-icon-bg.icon-premarital { background: #FFF3E0; }
.entry-icon-bg.icon-shield { background: #E8EAF6; }
.entry-icon-bg.icon-location { background: #E0F2F1; }
.entry-icon { font-size: 32rpx; }
.entry-label { font-size: 22rpx; color: #333; text-align: center; line-height: 1.3; }
/* ========== 通用 Section ========== */
.section { margin-top: 24rpx; padding: 0 24rpx; }
/* ========== 推荐卡片 ========== */
.rec-card { margin-bottom: 16rpx; }
.end-tip { text-align: center; font-size: 24rpx; color: #999; padding: 16rpx 0; }
/* ========== 骨架屏 ========== */
.skeleton-card {
display: flex; align-items: center;
padding: 16rpx 0; margin-bottom: 12rpx;
}
.skeleton-avatar {
width: 88rpx; height: 112rpx;
background: #eee; border-radius: 8rpx; margin-right: 16rpx;
}
.skeleton-info { flex: 1; }
.skeleton-line {
height: 24rpx; background: #eee;
border-radius: 4rpx; margin-bottom: 8rpx;
}
.skeleton-line.w60 { width: 60%; }
.skeleton-line.w40 { width: 40%; }
.skeleton-line.w80 { width: 80%; }
/* ========== 善缘公益服务 ========== */
.service-card {
background: linear-gradient(135deg, #FFF8F0 0%, #FFF0F0 100%);
border-radius: 16rpx; padding: 24rpx; margin-bottom: 12rpx;
}
.service-card-inner { display: flex; flex-direction: column; gap: 8rpx; }
.service-title { font-size: 28rpx; font-weight: 600; color: #333; }
.service-desc { font-size: 24rpx; color: #666; line-height: 1.5; }
.service-cta {
display: inline-block; margin-top: 8rpx;
padding: 8rpx 20rpx; background: #E96B6B;
color: #fff; border-radius: 20rpx;
font-size: 24rpx; width: fit-content;
}
/* ========== 近期活动 ========== */
.activity-scroll { white-space: nowrap; margin: 0 -4rpx; }
.activity-h-card {
display: inline-block; width: 480rpx; margin: 0 4rpx 12rpx;
background: #fff; border-radius: 12rpx; overflow: hidden;
box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.06);
}
.activity-cover { width: 100%; height: 270rpx; background: #f0f0f0; }
.activity-info { padding: 12rpx 16rpx; }
.activity-title { font-size: 26rpx; font-weight: 600; color: #333; display: block; margin-bottom: 4rpx; }
.activity-meta { font-size: 22rpx; color: #888; display: block; }
/* ========== 善缘服务站 ========== */
.station-card {
background: #fff; border-radius: 16rpx; overflow: hidden;
box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.06); margin-top: 24rpx;
}
.station-card-inner {
display: flex; align-items: center; padding: 24rpx; gap: 16rpx;
}
.station-icon-area {
width: 80rpx; height: 80rpx; background: #E8F5E9;
border-radius: 16rpx; display: flex; align-items: center;
justify-content: center; flex-shrink: 0;
}
.station-icon { font-size: 40rpx; }
.station-info { flex: 1; min-width: 0; }
.station-name { font-size: 28rpx; font-weight: 600; color: #333; display: block; }
.station-short { font-size: 22rpx; color: #888; display: block; margin-top: 2rpx; }
.station-services { display: flex; flex-wrap: wrap; gap: 8rpx; margin-top: 8rpx; }
.station-tag {
font-size: 20rpx; padding: 2rpx 12rpx;
background: #F5F5F5; border-radius: 12rpx; color: #666;
}
.station-arrow { font-size: 36rpx; color: #ccc; flex-shrink: 0; }
/* ========== 安全提醒 ========== */
.safety-notice {
margin: 24rpx 24rpx 0;
background: #FFF9E6; border-radius: 12rpx;
padding: 20rpx 24rpx;
}
.safety-notice-inner { display: flex; align-items: flex-start; gap: 12rpx; }
.safety-icon { font-size: 32rpx; flex-shrink: 0; margin-top: 2rpx; }
.safety-text-area { flex: 1; }
.safety-title { font-size: 24rpx; font-weight: 600; color: #8B6914; display: block; margin-bottom: 4rpx; }
.safety-body { font-size: 22rpx; color: #8B6914; line-height: 1.5; display: block; }
.safety-cta { font-size: 24rpx; color: #E96B6B; flex-shrink: 0; padding-left: 12rpx; }
/* ========== 底部安全区 ========== */
.safe-area-bottom { height: env(safe-area-inset-bottom); }
.page{min-height:100vh;background:var(--color-bg-page);padding-bottom:var(--spacing-8)}
.brand-bar{height:104rpx;padding:12rpx var(--spacing-page-x);display:flex;align-items:center;gap:16rpx;background:var(--color-bg-card);position:sticky;top:0;z-index:var(--z-sticky);border-bottom:1rpx solid var(--color-divider)}
.brand-bar>view:first-child{display:flex;flex-direction:column;flex:1}.brand-name{font-size:36rpx;font-weight:700;color:var(--color-primary);line-height:1.25}.brand-slogan{font-size:22rpx;color:var(--color-text-tertiary);margin-top:4rpx}.brand-mark{font-size:20rpx;color:var(--color-success);background:var(--color-success-light);padding:6rpx 12rpx;border-radius:var(--radius-full)}
.bell-btn{position:relative;min-width:88rpx;height:88rpx;display:flex;align-items:center;justify-content:center;font-size:24rpx;color:var(--color-text-secondary)}.badge{position:absolute;right:0;top:8rpx;min-width:28rpx;height:28rpx;padding:0 4rpx;line-height:28rpx;text-align:center;font-size:18rpx;color:var(--color-text-inverse);background:var(--color-primary);border-radius:var(--radius-full)}
.preview-note{text-align:center;background:var(--color-warning-light);color:var(--color-warning);font-size:20rpx;padding:6rpx}
.status-strip{margin:16rpx var(--spacing-page-x) 0;padding:20rpx 24rpx;background:var(--color-bg-card);border:1rpx solid var(--color-border);border-radius:var(--radius-md)}.status-main{display:flex;align-items:center;gap:12rpx;flex-wrap:wrap}.status-title{font-size:27rpx;font-weight:600}.status-desc{font-size:23rpx;color:var(--color-text-tertiary);flex:1}.status-action{min-height:64rpx;padding:0 22rpx;display:flex;align-items:center;color:var(--color-primary);font-size:24rpx;font-weight:600}.status-checks{display:flex;justify-content:space-between;gap:12rpx}.status-check{font-size:23rpx;color:var(--color-warning)}.status-check.done{color:var(--color-success)}
.banner-section{padding:16rpx var(--spacing-page-x) 0}.banner-swiper{height:292rpx;border-radius:var(--radius-lg);overflow:hidden}.banner-card{height:100%;position:relative;background:linear-gradient(135deg,var(--color-primary-lighter),#FBE8DE)}.banner-img{width:100%;height:100%}.banner-art{position:absolute;right:-24rpx;top:-28rpx;width:260rpx;height:260rpx;border-radius:50%;background:rgba(255,255,255,.55);display:flex;align-items:center;justify-content:center}.heart-line{font-size:128rpx;color:rgba(233,107,107,.34)}.banner-copy{position:absolute;left:28rpx;top:36rpx;width:72%}.banner-title{display:block;font-size:34rpx;font-weight:700;color:#6F3A35;line-height:1.35}.banner-subtitle{display:block;margin-top:12rpx;font-size:24rpx;color:#8B5E56}.banner-btn{display:inline-flex;align-items:center;gap:8rpx;margin-top:24rpx;min-height:64rpx;padding:0 24rpx;border-radius:var(--radius-full);background:var(--color-primary);color:var(--color-text-inverse);font-size:24rpx}
.entries-card{margin:20rpx var(--spacing-page-x) 0;padding:24rpx 12rpx;background:var(--color-bg-card);border-radius:var(--radius-lg);box-shadow:var(--shadow-card)}.entries-grid{display:grid;grid-template-columns:repeat(4,1fr);row-gap:24rpx}.entry-item{min-height:116rpx;display:flex;flex-direction:column;align-items:center;justify-content:center}.entry-item.disabled{opacity:.45}.entry-icon{width:76rpx;height:76rpx;display:flex;align-items:center;justify-content:center;border-radius:24rpx;font-size:28rpx;font-weight:700}.entry-label{margin-top:9rpx;font-size:23rpx;color:var(--color-text-primary)}.tone-rose{background:#FFF0EF;color:#D85D62}.tone-amber{background:#FFF7E6;color:#B77B19}.tone-green{background:#ECF8F2;color:#2E8A62}.tone-blue{background:#EEF5FF;color:#4A72B8}.tone-purple{background:#F5EFFB;color:#8865A7}.tone-orange{background:#FFF2E8;color:#B9723B}.tone-indigo{background:#EEF0FB;color:#5F6FAE}.tone-teal{background:#EAF7F5;color:#31867C}
.section{margin-top:var(--spacing-section);padding:0 var(--spacing-page-x)}.rec-wrap{margin-top:20rpx}.service-card{display:flex;align-items:center;gap:20rpx;padding:28rpx;background:linear-gradient(135deg,var(--color-primary-lighter),#FFF9F0);border:1rpx solid #F8E3DD;border-radius:var(--radius-lg)}.service-card>view:first-child{flex:1}.service-title{display:block;font-size:30rpx;font-weight:650}.service-desc{display:block;margin-top:10rpx;font-size:24rpx;color:var(--color-text-secondary);line-height:1.55}.text-link{font-size:23rpx;font-weight:600;color:var(--color-primary);white-space:nowrap}
.activity-scroll{white-space:nowrap;margin-top:18rpx;width:100%}.activity-card{display:inline-block;width:560rpx;margin-right:20rpx;background:var(--color-bg-card);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-card);white-space:normal}.activity-cover{height:210rpx;padding:18rpx;background:linear-gradient(135deg,#F3D7CA,#F8ECE4);position:relative}.activity-tag{font-size:21rpx;color:#A45D50;background:rgba(255,255,255,.8);padding:7rpx 14rpx;border-radius:var(--radius-full)}.activity-symbol{position:absolute;right:28rpx;bottom:18rpx;font-size:52rpx;color:rgba(164,93,80,.32);font-weight:700}.activity-info{padding:22rpx}.activity-title{display:block;font-size:28rpx;font-weight:600}.activity-meta{display:block;margin-top:10rpx;font-size:23rpx;color:var(--color-text-tertiary)}
.station-card{display:flex;align-items:center;gap:20rpx;padding:28rpx;background:var(--color-bg-card);border:1rpx solid var(--color-border);border-radius:var(--radius-lg)}.station-pin,.shield,.article-icon{width:72rpx;height:72rpx;flex:none;display:flex;align-items:center;justify-content:center;border-radius:22rpx;background:var(--color-success-light);color:var(--color-success);font-size:27rpx;font-weight:700}.station-info,.article-info,.safety-info{flex:1;min-width:0}.station-name{display:block;font-size:29rpx;font-weight:650}.station-desc{display:block;margin:7rpx 0 12rpx;font-size:23rpx;color:var(--color-text-tertiary)}.mini-tag{font-size:20rpx;color:var(--color-text-secondary);margin-right:10rpx;padding:5rpx 10rpx;background:var(--color-bg-page);border-radius:var(--radius-full)}.arrow{font-size:40rpx;color:var(--color-text-disabled)}
.article-list{margin-top:18rpx;background:var(--color-bg-card);border-radius:var(--radius-lg);overflow:hidden}.article-row{min-height:124rpx;padding:18rpx 24rpx;display:flex;align-items:center;gap:18rpx;border-bottom:1rpx solid var(--color-divider)}.article-row:last-child{border-bottom:0}.article-icon{background:#F5EFFB;color:#8865A7}.article-title{display:block;font-size:27rpx;font-weight:550;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.article-meta{display:block;margin-top:8rpx;font-size:22rpx;color:var(--color-text-tertiary)}
.safety-card{display:flex;gap:20rpx;margin-left:var(--spacing-page-x);margin-right:var(--spacing-page-x);padding:28rpx;background:#F3F7FC;border-radius:var(--radius-lg)}.shield{background:#E7EEF9;color:var(--color-info)}.safety-title{display:block;font-size:28rpx;font-weight:650}.safety-body{display:block;margin-top:8rpx;font-size:23rpx;color:var(--color-text-secondary);line-height:1.6}.safety-link{display:block;margin-top:12rpx;font-size:23rpx;color:var(--color-info);font-weight:600}
@media (max-width:340px){.brand-mark{display:none}.entry-label{font-size:21rpx}.entry-icon{width:68rpx;height:68rpx}.banner-title{font-size:31rpx}.status-checks{flex-wrap:wrap;justify-content:flex-start}}