page { /* 配色令牌来自 app.wxss(全站唯一来源),本页不再留副本; 页面底色改用暖白纸面,与首页一致 */ background-color: var(--paper); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; } .container { min-height: 100vh; box-sizing: border-box; display: flex; flex-direction: column; /* 给 fixed 的自定义 tabBar 留位,避免底部版权被盖住 */ padding: 0 32rpx calc(140rpx + env(safe-area-inset-bottom)); } /* 顶部身份行:头像、昵称、出口三项左对齐浮在纸面上,与下方三个区块 共用同一条 32rpx 左基线,并复现首页 hero 的「纸面上 + 主 CTA」语言。 刻意不做成白卡——身份行与功能卡不是一类东西, 按硬约束 3「需区分时先改结构,不要加颜色」,这里用"去卡"而非换色区分; 若改用暖橙框,会与全站浅橙卡"区块收口"的语义打架, 且未登录时浅橙底上再叠实心橙胶囊属暖色叠暖色,故不加色。 微信胶囊底沿约落在 152rpx,上距现取 176rpx(余量 24rpx)。 这是安全距不是设计留白:下限约 160rpx,再小就会与胶囊挤在一起。 纵向 32rpx 内距给身份行本身留出上下呼吸, 同时把整行热区从 128rpx 撑到 192rpx(含内距),未登录点整行也更好点中 */ .header-card { display: flex; flex-direction: row; align-items: center; margin: 176rpx 0 24rpx; padding: 32rpx 0; } /* 无框行的按下反馈:与首页 .section-link:active 同一手法(整体淡出), 不引入新色值;仅已登录时可点,未登录时 hover-class 传 'none' */ .header-card-hover { opacity: 0.7; } .avatar { width: 128rpx; height: 128rpx; margin-right: 28rpx; /* 圆角方形而非正圆,与微信「我」页头像同形 */ border-radius: 24rpx; flex-shrink: 0; /* 默认头像底座要把 t-icon 居中,位图头像不受影响 */ display: flex; align-items: center; justify-content: center; /* 默认头像底座带 2rpx 描边,border-box 保证尺寸仍是 128rpx 不被撑到 132rpx */ box-sizing: border-box; } /* 默认头像底座:浅橙衬底 + 暖陶土线标,走项目既有的「图标衬底」档 (同 .quick-icon 一类),而不是首页 .brand-mark 的实心橙档。 理由是面积:128rpx 实心橙是 .brand-mark(56rpx) 的 5.2 倍, 已从"小体量印记"跨到"色块",而它承载的只是"头像待设置"这一低价值信息; 且 --brand-strong 在本项目的语义是主操作/选中态,让占位头像占用它会误导。 浅橙块按既有规矩靠 2rpx --brand-line 描边托形、不加阴影; --brand-ink 落 --brand-soft 上 5.96:1,比白字压 #B8520A 的 4.94:1 更高 */ .avatar-default { background: var(--brand-soft); border: 2rpx solid var(--brand-line); } /* 文字块:主行昵称与副行账号分别贴近头像的上、下沿(各内收 12rpx), 中间的空隙交给 space-between 撑开——它随头像高度自适应, 比写死 margin 稳。align-self: stretch 让文字块撑满 128rpx 头像高度。 min-width 归零,长昵称/长账号才能在右侧出口前收成省略号 */ .header-info { flex: 1; min-width: 0; align-self: stretch; display: flex; flex-direction: column; justify-content: space-between; /* 两行各向内收 12rpx:与头像边缘严格齐平时读起来"被撑满了", 略微内收后间隙从 57rpx 收到约 33rpx,视觉上更聚拢 */ padding: 12rpx 0; } /* 未登录时只有昵称一行,space-between 会把它顶到最上,故改回居中 */ .header-info-single { justify-content: center; } /* 行高收到 1.15(约半行距 3rpx):1.3 的半行距会把字形从块边缘推进 5.5rpx, "顶部对齐"就会变成"看着差一点"。1.15 把视觉边缘压到与头像边缘相差 3rpx 内, 同时仍留一点余量,不至于配合 overflow: hidden 把字形切掉 */ .user-name { font-size: 36rpx; font-weight: 700; color: var(--ink); line-height: 1.15; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } /* 副行账号:muted,比主行小两档,与微信副行同层级。 与主行的间距不再用 margin——已由 .header-info 的 space-between 撑开 */ .user-account { font-size: 26rpx; color: var(--muted); line-height: 1.15; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } /* 身份行右侧 chevron:与菜单行的 .menu-arrow 同形同色, 整行因此读成"菜单里的一行",点击暗示不必再添文字 */ .header-arrow { flex-shrink: 0; color: var(--muted); } /* 未登录时的登录胶囊:右对齐的一枚小胶囊。 它是本页唯一的实心暖橙块,独占「全页同类实心块不超过一处」的额度; 登录成功后整枚换成 chevron,「我的服务」区块随之出现 */ .login-btn { width: 176rpx; margin: 0; padding: 18rpx 0; border: none; border-radius: 999rpx; background: var(--brand-strong); box-shadow: var(--shadow-cta); color: var(--white); font-size: 28rpx; font-weight: 700; letter-spacing: 2rpx; line-height: 1.4; flex-shrink: 0; } .login-btn::after { border: none; } /* 区块间距:卡片改通栏、去掉区块抬头后,组与组之间只靠三样东西分界—— 上一块的 2rpx 下边线、这 24rpx 纸面留白、下一块的 2rpx 上边线。 留白与身份行的下距同值,全页只有这一种竖向节奏。 这是全页唯一收窄过的一处:纸面与白面的填充差只有 1.05:1, 分界其实全靠这一条纸面缝在看,所以不能收到贴边,24rpx(12px)是下限。 原「单竖条 + 标题」的抬头样式(.section-head/.section-bar/.section-title) 已随标题一并删除,不留死代码 */ .section + .section { margin-top: 24rpx; } .menu-list { /* 通栏白卡:左右顶到屏幕两侧,做法与 itemlist 的服务分组同源 (margin 负向抵消容器 32rpx 内距)。圆角必须为 0, 否则满宽块的圆角会切在屏幕边上;上、下各一条 2rpx 发丝线托形。 行内容靠 .menu-item 自己的 32rpx 内距回到同一左基线, 组内分隔线(.menu-item::after)则左缩进到文字左缘,不压到图标 */ margin: 0 -32rpx; background: var(--white); border-top: 2rpx solid var(--line); border-bottom: 2rpx solid var(--line); box-shadow: var(--shadow-card); } .menu-item { /* 给内嵌分隔线(::after)做定位参照 */ position: relative; display: flex; align-items: center; padding: 32rpx; } /* 组内分隔线不横跨整行:左端从文字左缘起,避开图标和它的右侧间距; 右端仍通到卡片边缘。 左缩进 = 行内距 32 + 图标 40 + 图标右距 24 = 96rpx */ .menu-item::after { content: ''; position: absolute; left: 96rpx; right: 0; bottom: 0; height: 2rpx; background: var(--line); } .menu-item:last-child::after { display: none; } .menu-item-hover { background: var(--brand-soft); } /* t-icon 未传 color 属性,这里用 CSS 变量着色即可 */ .menu-icon { margin-right: 24rpx; color: var(--brand-ink); } .menu-text { flex: 1; font-size: 30rpx; font-weight: 400; /* 比标题层的 --ink 轻一档的暖墨,弱化"导航项"的视觉重量 */ color: var(--ink-2); } .menu-arrow { flex-shrink: 0; color: var(--muted); } /* 退出登录:单独一个通栏白块(与 .menu-list 同法、同语言), 但只有一行、居中、无图标无 chevron——动作与导航的区分交给结构, 不交给颜色(状态色不得用于按钮,见 DESIGN.md §三)。 上距 24rpx 沿用全页唯一的那一种竖向节奏 */ .logout-block { display: flex; align-items: center; justify-content: center; margin: 24rpx -32rpx 0; padding: 32rpx; background: var(--white); border-top: 2rpx solid var(--line); border-bottom: 2rpx solid var(--line); box-shadow: var(--shadow-card); } /* 按下反馈与 .menu-item-hover 同源,不引入新色值 */ .logout-block-hover { background: var(--brand-soft); } /* 字色走 --muted:退出是次要动作,不给它主色,也不用状态色 */ .logout-text { font-size: 30rpx; color: var(--muted); } /* 页脚:B 端合作文字链 + 版本信息,低调可读 */ .footer-section { display: flex; flex-direction: column; align-items: center; margin-top: auto; padding-top: 60rpx; } .footer-links { display: flex; align-items: center; margin-bottom: 20rpx; } /* 文字只有 24rpx 高,用 padding 撑热区、等量负外边距抵消,不影响行距 */ .footer-link { padding: 16rpx 0; margin: -16rpx 0; font-size: 24rpx; color: var(--muted); letter-spacing: 1rpx; } .footer-link:active { color: var(--brand-strong); } /* 细竖线分隔:替代原中点字符,避免一行多点 */ .footer-sep { width: 2rpx; height: 20rpx; margin: 0 24rpx; background: var(--faint); flex-shrink: 0; } /* 版本 + 版权同处一行,复用 .footer-sep 做竖线分隔 */ .footer-meta { display: flex; align-items: center; } .version { font-size: 24rpx; color: var(--muted); } .copyright { font-size: 24rpx; color: var(--muted); }