checkpoint: pre-refactor state before fixing P0/P1 issues

This commit is contained in:
2026-06-11 18:40:59 +08:00
parent 2c3c2653fa
commit d55ed60907
41 changed files with 1129 additions and 1051 deletions

View File

@@ -1,214 +1,121 @@
/* ── 底部导航:悬浮玻璃浮岛 ──
绝对定位浮在内容上方,左右下三边露出底层内容;
分层折射高光 + 缓慢流动的光泽,模拟液态玻璃透镜质感 */
/* ── 底部导航:白色悬浮浮岛(Vital 风格)──
纯白实底 + 中性柔和阴影,激活态用强调黑胶囊,不用主题色 */
.tab-dock {
position: fixed;
left: 16rpx;
right: 16rpx;
bottom: 28rpx;
bottom: calc(28rpx + env(safe-area-inset-bottom) * 0.5);
z-index: 999;
display: flex;
align-items: center;
justify-content: space-around;
border-radius: 64rpx;
padding: 14rpx 8rpx calc(14rpx + env(safe-area-inset-bottom) * 0.6);
border-radius: 56rpx;
padding: 12rpx 10rpx;
overflow: hidden;
isolation: isolate;
background:
radial-gradient(130% 160% at 16% -40%, rgba(255, 255, 255, 0.6), transparent 56%),
radial-gradient(110% 140% at 92% 145%, rgba(255, 255, 255, 0.16), transparent 60%),
rgba(255, 255, 255, 0.30);
backdrop-filter: blur(26rpx) saturate(200%);
-webkit-backdrop-filter: blur(26rpx) saturate(200%);
border: 1rpx solid rgba(255, 255, 255, 0.55);
box-shadow:
0 20rpx 50rpx rgba(120, 70, 140, 0.18),
inset 0 1.5rpx 0 rgba(255, 255, 255, 0.7),
inset 0 -10rpx 22rpx rgba(255, 255, 255, 0.10),
inset 10rpx 0 22rpx rgba(255, 255, 255, 0.08),
inset -10rpx 0 22rpx rgba(180, 150, 210, 0.10);
background: #ffffff;
box-shadow: 0 20rpx 50rpx rgba(27, 27, 32, 0.10);
}
/* 流动光泽:缓慢左右扫过的液态高光带 */
.dock-sheen {
position: absolute;
top: -60%;
left: -15%;
right: -15%;
height: 220%;
background: linear-gradient(102deg, transparent 32%, rgba(255, 255, 255, 0.40) 48%, transparent 64%);
filter: blur(14rpx);
animation: liquid-sheen 8s ease-in-out infinite;
pointer-events: none;
z-index: 0;
transform: translateX(-14%) rotate(-2deg);
}
@keyframes liquid-sheen {
0%, 100% { transform: translateX(-14%) rotate(-2deg); opacity: 0.45; }
50% { transform: translateX(14%) rotate(2deg); opacity: 0.85; }
}
/* ── Tab 项 ── */
/* ── Tab 项:展开胶囊 ──
未选中 = 浅灰图标;选中 = 横向展开为黑色胶囊(白图标 + 白文字) */
.tab-pill {
position: relative;
z-index: 1;
flex: 1;
flex: 0 0 auto;
display: flex;
flex-direction: column;
flex-direction: row;
align-items: center;
gap: 6rpx;
border-radius: 36rpx;
padding: 12rpx 0 8rpx;
transition: transform 0.25s cubic-bezier(.34, 1.56, .64, 1), background 0.25s ease, color 0.25s ease;
justify-content: center;
gap: 0;
border-radius: 999rpx;
padding: 10rpx 16rpx;
transition:
background 0.32s cubic-bezier(.34, 1.4, .64, 1),
padding 0.32s cubic-bezier(.34, 1.4, .64, 1),
box-shadow 0.32s ease;
}
.tab-pill.active {
background: rgba(255, 45, 110, 0.14);
transform: translateY(-6rpx) scale(1.04);
background: #2b2b30;
padding: 10rpx 26rpx;
box-shadow: 0 12rpx 26rpx rgba(43, 43, 48, 0.28);
}
.tab-pill:active {
transform: scale(0.94);
}
/* 文字标签:默认折叠隐藏,选中时从图标右侧平滑展开 */
.tab-label {
font-size: 20rpx;
font-weight: 700;
color: #a59cb5;
max-width: 0;
overflow: hidden;
white-space: nowrap;
font-size: 24rpx;
font-weight: 600;
color: transparent;
line-height: 1;
transition: color 0.2s;
opacity: 0;
margin-left: 0;
transition:
max-width 0.32s cubic-bezier(.34, 1.4, .64, 1),
opacity 0.24s ease,
margin-left 0.32s cubic-bezier(.34, 1.4, .64, 1);
}
.tab-pill.active .tab-label {
color: #ff2d6e;
font-weight: 900;
max-width: 140rpx;
opacity: 1;
color: #fff;
margin-left: 12rpx;
}
/* ── 图标容器 ── */
.icon-wrap {
width: 44rpx;
height: 44rpx;
width: 66rpx;
height: 66rpx;
display: flex;
align-items: center;
justify-content: center;
}
/* ── 广场图标2×2 圆角方块网格 ── */
.icon-grid {
width: 34rpx;
height: 34rpx;
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr;
gap: 5rpx;
/* ── Tab 图标:狗主题线性描边 SVG(base64 蒙版)──
单色 alpha 蒙版 + background-color 上色,
选中时浅灰→白平滑过渡,任意尺寸保持清晰 */
.tab-icon {
width: 52rpx;
height: 52rpx;
background-color: #b9bdc6;
transition: background-color 0.2s;
-webkit-mask-repeat: no-repeat;
-webkit-mask-position: center;
-webkit-mask-size: contain;
}
.icon-grid .sq {
background: #a59cb5;
border-radius: 4rpx;
transition: background 0.2s;
.tab-pill.active .tab-icon {
background-color: #fff;
}
.tab-pill.active .icon-grid .sq {
background: #ff2d6e;
/* 广场:狗窝(拱形门 + 门上小骨头) */
.icon-feed {
-webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjMuNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNNi41IDIxLjVWMzZhNS41IDUuNSAwIDAgMCA1LjUgNS41aDI0YTUuNSA1LjUgMCAwIDAgNS41LTUuNVYyMS41Ii8+PHBhdGggZD0iTTQgMTkuNUwyNCA0LjVMNDQgMTkuNSIvPjxwYXRoIGQ9Ik0xNy41IDQxLjV2LTcuNWE2LjUgNi41IDAgMCAxIDEzIDB2Ny41Ii8+PHBhdGggZD0iTTE5LjUgMTUuMmg5IiBzdHJva2Utd2lkdGg9IjQuNiIvPjwvZz48L3N2Zz4=");
}
/* ── 附近图标:地图 Pin ── */
.icon-pin {
display: flex;
flex-direction: column;
align-items: center;
gap: 0;
/* 附近:定位水滴 + 爪印 */
.icon-nearby {
-webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjMuNCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTI0IDQ0QzEzLjUgMzQgOCAyNi44IDggMjBhMTYgMTYgMCAwIDEgMzIgMEM0MCAyNi44IDM0LjUgMzQgMjQgNDRaIi8+PGcgZmlsbD0iIzAwMCI+PGNpcmNsZSBjeD0iMTcuNiIgY3k9IjE1LjQiIHI9IjIuMyIvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTMiIHI9IjIuNSIvPjxjaXJjbGUgY3g9IjMwLjQiIGN5PSIxNS40IiByPSIyLjMiLz48cGF0aCBkPSJNMjQgMTkuMmMyLjkgMCA1LjIgMS45IDUuMiA0LjNjMCAyLjQtMi4zIDQuMi01LjIgNC4yYy0yLjkgMC01LjItMS44LTUuMi00LjJjMC0yLjQgMi4zLTQuMyA1LjItNC4zWiIvPjwvZz48L3N2Zz4=");
}
.pin-head {
width: 22rpx;
height: 22rpx;
border-radius: 50% 50% 50% 0;
background: #a59cb5;
transform: rotate(-45deg);
transition: background 0.2s;
/* 汪友:交叉双骨头(前后交叠,交叠处留缝) */
.icon-friends {
-webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGRlZnM+PG1hc2sgaWQ9Im0iPjxyZWN0IHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0tNC4zNCAtMi42QTQuMiA0LjIgMCAxIDAgLTExLjIgMEE0LjIgNC4yIDAgMSAwIC00LjM0IDIuNkg0LjM0QTQuMiA0LjIgMCAxIDAgMTEuMiAwQTQuMiA0LjIgMCAxIDAgNC4zNCAtMi42WiIgZmlsbD0iIzAwMCIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjYuNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQgMjQpIHJvdGF0ZSgtNDUpIHNjYWxlKDEuMykiLz48L21hc2s+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIyLjUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxnIG1hc2s9InVybCgjbSkiPjxwYXRoIGQ9Ik0tNC4zNCAtMi42QTQuMiA0LjIgMCAxIDAgLTExLjIgMEE0LjIgNC4yIDAgMSAwIC00LjM0IDIuNkg0LjM0QTQuMiA0LjIgMCAxIDAgMTEuMiAwQTQuMiA0LjIgMCAxIDAgNC4zNCAtMi42WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjQgMjQpIHJvdGF0ZSg0NSkgc2NhbGUoMS4zKSIvPjwvZz48cGF0aCBkPSJNLTQuMzQgLTIuNkE0LjIgNC4yIDAgMSAwIC0xMS4yIDBBNC4yIDQuMiAwIDEgMCAtNC4zNCAyLjZINC4zNEE0LjIgNC4yIDAgMSAwIDExLjIgMEE0LjIgNC4yIDAgMSAwIDQuMzQgLTIuNloiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0IDI0KSByb3RhdGUoLTQ1KSBzY2FsZSgxLjMpIi8+PC9nPjwvc3ZnPg==");
}
.pin-tail {
width: 4rpx;
height: 8rpx;
background: #a59cb5;
border-radius: 0 0 4rpx 4rpx;
margin-top: -2rpx;
transition: background 0.2s;
/* 我的:项圈 + 爱心狗牌 */
.icon-profile {
-webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjMuNCI+PGNpcmNsZSBjeD0iMjQiIGN5PSIxNy41IiByPSIxMS40Ii8+PGNpcmNsZSBjeD0iMjQiIGN5PSIzNi41IiByPSI2LjQiLz48L2c+PHBhdGggZmlsbD0iIzAwMCIgZD0iTTI0IDQwYy0yLjItMS42LTMuMy0yLjctMy4zLTRhMS45IDEuOSAwIDAgMSAzLjMtMS4yYTEuOSAxLjkgMCAwIDEgMy4zIDEuMmMwIDEuMy0xLjEgMi40LTMuMyA0WiIvPjwvc3ZnPg==");
}
.tab-pill.active .pin-head,
.tab-pill.active .pin-tail {
background: #ff2d6e;
}
/* ── 汪友图标:双人轮廓 ── */
.icon-ppl {
width: 36rpx;
height: 30rpx;
position: relative;
}
.ppl-head {
position: absolute;
width: 14rpx;
height: 14rpx;
border-radius: 50%;
background: #a59cb5;
top: 0;
transition: background 0.2s;
}
.ppl-head-l { left: 2rpx; }
.ppl-head-r { right: 2rpx; }
.ppl-body {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 14rpx;
background: #a59cb5;
border-radius: 8rpx 8rpx 0 0;
transition: background 0.2s;
}
.tab-pill.active .ppl-head,
.tab-pill.active .ppl-body {
background: #ff2d6e;
}
/* ── 我的图标:单人轮廓 ── */
.icon-user {
width: 28rpx;
height: 34rpx;
display: flex;
flex-direction: column;
align-items: center;
gap: 4rpx;
}
.user-head {
width: 18rpx;
height: 18rpx;
border-radius: 50%;
background: #a59cb5;
transition: background 0.2s;
}
.user-body {
width: 28rpx;
height: 14rpx;
border-radius: 8rpx 8rpx 0 0;
background: #a59cb5;
transition: background 0.2s;
}
.tab-pill.active .user-head,
.tab-pill.active .user-body {
background: #ff2d6e;
}
/* ── 发布 FAB液态玻璃凸透镜质感 ── */
/* ── 发布按钮:黑色圆底 + 白色爪印(CTA 用强调黑) ── */
.tab-fab-wrap {
flex: 0 0 auto;
display: flex;
@@ -219,50 +126,32 @@
.tab-fab {
position: relative;
overflow: hidden;
isolation: isolate;
width: 100rpx;
height: 100rpx;
width: 84rpx;
height: 84rpx;
border-radius: 50%;
background: linear-gradient(140deg, #ff2d6e, #ff7a1a 55%, #ffd400);
border: 5rpx solid rgba(255, 255, 255, 0.85);
box-shadow: 0 16rpx 36rpx rgba(255, 45, 110, 0.40), inset 0 1rpx 0 rgba(255, 255, 255, 0.6);
background: #2b2b30;
display: flex;
align-items: center;
justify-content: center;
transform: translateY(-18rpx);
box-shadow: 0 10rpx 24rpx rgba(43, 43, 48, 0.30);
transition: transform 0.2s ease;
}
.tab-fab:active {
transform: translateY(-18rpx) scale(0.92);
transform: scale(0.9);
}
/* 液态高光:左上角玻璃透镜光斑 */
.fab-shine {
position: absolute;
top: 6%;
left: 14%;
width: 46%;
height: 38%;
border-radius: 50%;
background: radial-gradient(ellipse at center, rgba(255, 255, 255, 0.85), transparent 72%);
filter: blur(4rpx);
pointer-events: none;
z-index: 0;
/* 白色爪印(base64 SVG),任意尺寸保持清晰 */
.fab-paw {
width: 52rpx;
height: 52rpx;
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGcgZmlsbD0iI2ZmZiI+PGNpcmNsZSBjeD0iMTEuNSIgY3k9IjE4LjUiIHI9IjMuNiIvPjxjaXJjbGUgY3g9IjE5LjUiIGN5PSIxMy41IiByPSIzLjkiLz48Y2lyY2xlIGN4PSIyOC41IiBjeT0iMTMuNSIgcj0iMy45Ii8+PGNpcmNsZSBjeD0iMzYuNSIgY3k9IjE4LjUiIHI9IjMuNiIvPjxwYXRoIGQ9Ik0yNCAyMmM1IDAgOSAzLjQgOSA3LjZjMCA0LjItNCA3LjQtOSA3LjRjLTUgMC05LTMuMi05LTcuNGMwLTQuMiA0LTcuNiA5LTcuNloiLz48L2c+PC9zdmc+");
background-repeat: no-repeat;
background-position: center;
background-size: contain;
}
.fab-plus {
position: relative;
z-index: 1;
font-size: 56rpx;
color: #fff;
font-weight: 300;
line-height: 1;
margin-top: -4rpx;
}
/* ── 未读角标 ── */
/* ── 未读角标:主色紫 ── */
.badge {
position: absolute;
top: -4rpx;
@@ -270,10 +159,10 @@
min-width: 30rpx;
height: 30rpx;
border-radius: 15rpx;
background: #ff2d6e;
background: #8b7cf6;
color: #fff;
font-size: 18rpx;
font-weight: 800;
font-weight: 600;
display: flex;
align-items: center;
justify-content: center;