/* ===== 全局设计令牌 + 通用样式 ===== 规则:任何页面/组件都不要再写死色值、圆角、字号,一律用下面的 token。 收敛前的现状是 22 种圆角、26 档字号、9 种近似浅橙、7 处一次性阴影, font-weight 900 到处都是——什么都在喊,于是什么都不突出。 */ page{ /* ── 底色与文字 ── */ --bg:#F8F6F2; --bg2:#FBF8F3; --card:#FFFFFF; --surface-2:#FBFAF8; /* 卡片内的次级底色(原本硬编码出现 10+ 次) */ --text:#2D2925; --text-2:#5F554D; /* 正文次级灰(原本有 7 种近似值散落各处) */ --muted:#8D8277; --muted2:#B5A99D; --line:#EEE6DC; /* ── 主色 ── */ --primary:#F5A947; --primary2:#FFBF68; --primary-dark:#DD8420; --primary-soft:#FFF4E4; /* 唯一的浅橙底(收编了 9 种近似值) */ --primary-line:#FFD6A1; /* 浅橙块的描边 */ --primary-ink:#A96500; /* 浅橙底上的文字 */ /* 门面品牌色带(首页/记录页顶部,方案 A)*/ --band-a:#FFC768; --band-b:#F5A947; --band-ink:#7A4A08; /* 色带上的深棕文字 */ /* ── 语义色:soft 底 / base 主体 / ink 文字,三件套配齐 ── */ --green:#73BE9D; --green-soft:#EAF7F1; --green-ink:#2E7D5B; --red:#EE7D73; --red-soft:#FFF0EE; --red-ink:#C95348; --blue:#78A6E8; --blue-soft:#EEF5FF; --blue-ink:#3C6EBA; --purple:#A993E8; --purple-soft:#F4F0FF; --purple-ink:#765AC5; --yellow-soft:#FFF6E4; /* ── 深色主 CTA。全页最多一个,用来指明「这一步该点哪」 ── */ --cta:#2D2925; /* ── 圆角 5 档 ── */ --r-xs:12rpx; --r-sm:20rpx; --r-md:28rpx; --r-lg:40rpx; /* 卡片 */ --r-full:999rpx; --radius:var(--r-lg); /* 兼容旧名,页面里还有引用 */ /* ── 字号 6 档 ── */ --fs-cap:22rpx; --fs-sm:24rpx; --fs-md:28rpx; --fs-lg:32rpx; --fs-xl:40rpx; --fs-2xl:48rpx; /* ── 字重只留两档。强调靠颜色和字号,不靠把所有东西都加粗 ── */ --fw:400; --fw-b:600; /* ── 间距 6 档 ── */ --sp-1:8rpx; --sp-2:12rpx; --sp-3:16rpx; --sp-4:24rpx; --sp-5:32rpx; --sp-6:40rpx; /* ── 控件高度 3 档 ── */ --h-sm:68rpx; --h-md:80rpx; --h-lg:96rpx; /* ── 阴影 3 档(原来 7 处一次性阴影,且都偏重) ── */ --sd-1:0 12rpx 32rpx rgba(70,48,25,.06); --sd-2:0 20rpx 48rpx rgba(70,48,25,.10); --sd-3:0 -20rpx 60rpx rgba(70,48,25,.14); --shadow:var(--sd-1); /* 兼容旧名 */ --shadow2:var(--sd-2); /* 页面留白。FAB 固定在 bottom:190rpx、高 116rpx,上沿距底 306rpx, 内容必须让开这段距离,否则最后一张卡会被它压住。 */ --pad-x:40rpx; --pad-b-fab:calc(330rpx + env(safe-area-inset-bottom)); --pad-b-plain:calc(60rpx + env(safe-area-inset-bottom)); /* tab 页底下有原生 tabBar(高 108rpx)。报告页/我的没有 FAB,用 no-fab 的 60rpx 让不开 tabBar,最后一张卡会被 tabBar 压住 —— 这两页要用这个 */ --pad-b-tab:calc(150rpx + env(safe-area-inset-bottom)); color:var(--text); font-weight:var(--fw); font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Microsoft YaHei",sans-serif; /* 整页暖橘竖向淡出:顶部品牌橘暖调 → 约半屏处褪到米白。 渐变铺在 page 上(不滚),内容在 .page-scroll 里滚过它,顶部常暖。 */ background: linear-gradient(180deg, #FFC66E 0%, #FFD489 10%, #FCE6C4 28%, var(--bg) 48%, var(--bg) 100%); /* 页面自身不滚,滚动交给 .page-scroll,这样 nav-bar 和 tabBar 才能固定住。 这 4 行原本在 9 个页面的 wxss 里逐字重复。 */ height:100vh; overflow:hidden; display:flex; flex-direction:column; position:relative; /* 门面色带 .brand-band 绝对定位锚在页面上 */ } view,text{box-sizing:border-box} /* 页面骨架:nav-bar → .page-scroll(承载滚动) → .page-body(内容留白) */ .page-scroll{flex:1;min-height:0} .page-body{padding:var(--sp-1) var(--pad-x) var(--pad-b-fab)} /* 没挂 FAB 的页面(目前只有文章详情)不需要给它让位 */ .page-body.no-fab{padding-bottom:var(--pad-b-plain)} .page-body.tab-nofab{padding-bottom:var(--pad-b-tab)} /* 全局隐藏滚动条(页面级 + 组件级),保留正常滚动 */ ::-webkit-scrollbar{ width:0 !important; height:0 !important; display:none; -webkit-appearance:none; background:transparent; color:transparent; } page{scrollbar-width:none;-ms-overflow-style:none} /* 文本 */ .muted{color:var(--muted)} .tiny{font-size:var(--fs-sm);color:var(--muted)} .bold{font-weight:var(--fw-b)} /* 区块标题 */ .section-head{ display:flex;align-items:center;justify-content:space-between;margin:var(--sp-1) 0 var(--sp-4); } .section-head .sh-title{font-size:var(--fs-lg);letter-spacing:-.4rpx;font-weight:var(--fw-b)} .link{color:var(--primary-dark);font-weight:var(--fw-b);font-size:var(--fs-md)} /* 一组 .link 当「切换」用时:未选中压成灰,不然两个都是橙的、看不出当前在哪。 单独一个 .link-tabs 而不是挂在 .head-links 上——首页的「管理 / 全部完成」 也用 head-links,那是两个并列动作,不该有一个是灰的 */ .link-tabs{display:flex;gap:var(--sp-4)} .link-tabs .link{color:var(--muted)} .link-tabs .link.on{color:var(--primary-dark)} .head-links{display:flex;align-items:center;gap:var(--sp-4)} /* 页面标题。 小程序没有 h2/p/b/span 标签,从 preview.html 迁移来的标签选择器全是死规则, 各页当初都自建了替身 class(.pt-h2 在 5 个文件里逐字重复),这里统一收编。 */ .page-title{margin:4rpx 0 var(--sp-4)} .pt-h2{font-size:var(--fs-2xl);letter-spacing:-.6rpx;font-weight:var(--fw-b)} .pt-p{color:var(--muted);font-size:var(--fs-md);margin-top:10rpx} /* 按钮 */ .btn{ border:0;height:var(--h-lg);border-radius:var(--r-md);padding:0 var(--sp-5); display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2); font-weight:var(--fw-b);font-size:var(--fs-lg);line-height:1.3;transition:.16s ease; min-height:var(--h-lg);height:auto;padding-top:var(--sp-2);padding-bottom:var(--sp-2); } .btn::after{border:none} .btn:active{transform:scale(.98)} /* 主按钮保持暖橙:它在 36 处被使用,绝大多数是弹层里的「保存」, 把它改成深色会让整个 App 的主色消失。深色 CTA 走 .btn-dark。 */ .btn-primary{color:#fff;background:var(--primary);box-shadow:0 12rpx 28rpx rgba(245,169,71,.24)} .btn-dark{color:#fff;background:var(--cta)} .btn-ghost{color:var(--text);background:#fff;border:1rpx solid var(--line)} .btn-soft{color:var(--primary-ink);background:var(--primary-soft)} .btn-green{color:#fff;background:var(--green)} .btn-block{width:100%;display:flex} .btn-small{min-height:var(--h-sm);border-radius:var(--r-sm);padding:0 var(--sp-4);font-size:var(--fs-sm)} /* 卡片 */ .card{ background:var(--card);border-radius:var(--r-lg);box-shadow:var(--sd-1); padding:var(--sp-5);margin-bottom:var(--sp-4);position:relative;overflow:hidden; } .card.no-shadow{box-shadow:none;border:1rpx solid var(--line)} /* 标签 */ .tag{ display:inline-flex;align-items:center;height:48rpx;border-radius:var(--r-full);padding:0 var(--sp-3); font-size:var(--fs-sm);font-weight:var(--fw-b);background:var(--green-soft);color:var(--green-ink);white-space:nowrap; } .tag.warn{background:var(--primary-soft);color:var(--primary-ink)} .tag.red{background:var(--red-soft);color:var(--red-ink)} .tag.blue{background:var(--blue-soft);color:var(--blue-ink)} .tag.purple{background:var(--purple-soft);color:var(--purple-ink)} /* 状态 chip:比 tag 矮,可带图标,用于「体重稳定」「驱虫将到期」这类瞬时状态 */ .chip{ display:inline-flex;align-items:center;gap:var(--sp-1);height:44rpx;padding:0 var(--sp-3); border-radius:var(--r-full);font-size:var(--fs-cap);font-weight:var(--fw-b); background:var(--primary-soft);color:var(--primary-ink);white-space:nowrap; } .chip.green{background:var(--green-soft);color:var(--green-ink)} .chip.red{background:var(--red-soft);color:var(--red-ink)} .chip.blue{background:var(--blue-soft);color:var(--blue-ink)} /* 4 色分类块。用在快速记录入口这类并列的功能格上,靠颜色区分类别而不是靠 emoji */ .tone-1{background:var(--primary-soft);color:var(--primary-ink)} .tone-2{background:var(--green-soft);color:var(--green-ink)} .tone-3{background:var(--blue-soft);color:var(--blue-ink)} .tone-4{background:var(--purple-soft);color:var(--purple-ink)} /* 记录入口宫格。首页(4 列 8 个)和记录页(3 列 9 个)原本是同一个东西的两个副本, 高度/圆角/阴影/字号全不一样,这里合成一套。 */ .quick-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-2)} .quick-grid.cols-3{grid-template-columns:repeat(3,1fr)} .quick{ border-radius:var(--r-md);min-height:128rpx; display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-1); font-weight:var(--fw-b);font-size:var(--fs-sm); } /* 空态。原本有 6 套长得差不多的写法散在各页 */ .empty{padding:56rpx var(--sp-1);text-align:center;color:var(--muted);font-size:var(--fs-sm)} .empty.lg{padding:96rpx 0} /* 表单 */ .field{margin-bottom:var(--sp-4)} .field:last-child{margin-bottom:0} .field label{display:block;font-size:var(--fs-md);color:var(--muted);font-weight:var(--fw-b);margin-bottom:var(--sp-3)} .input,input,textarea,.picker-box{ width:100%;border:1rpx solid var(--line);background:var(--surface-2);height:88rpx;border-radius:var(--r-md); padding:0 var(--sp-4);color:var(--text);font-size:var(--fs-lg);outline:none;box-sizing:border-box; display:flex;align-items:center; } .textarea{ width:100%;border:1rpx solid var(--line);background:var(--surface-2);height:184rpx;border-radius:var(--r-md); padding:var(--sp-4);color:var(--text);font-size:var(--fs-lg);box-sizing:border-box; } /* 上面那条共用规则的 flex+align-items:center 是给单行 input 竖向居中用的, 但选择器带了 textarea,导致多行输入的占位/文字被竖向居中、不从第一行开始。 这里把 textarea 改回块级顶部对齐,各自的高度仍由具体 class 决定 */ textarea{display:block;padding:var(--sp-4);line-height:1.6} .placeholder{color:var(--muted2)} /* 分段选择 */ .seg{display:flex;gap:var(--sp-3)} .seg .seg-btn{ flex:1;height:var(--h-md);line-height:var(--h-md);text-align:center;border-radius:var(--r-md); border:1rpx solid var(--line);background:#fff;color:var(--muted);font-weight:var(--fw-b);font-size:var(--fs-md); } .seg .seg-btn.selected{color:var(--primary-dark);background:var(--primary-soft);border-color:var(--primary-line)} /* 多选 check */ .check-list{display:flex;flex-direction:column;gap:var(--sp-3);margin:var(--sp-5) 0} .check{ display:flex;align-items:center;gap:var(--sp-3);background:#fff;box-shadow:var(--sd-1); border-radius:var(--r-md);padding:var(--sp-4);border:1rpx solid transparent;font-size:var(--fs-md);font-weight:var(--fw-b); } .box{ width:44rpx;height:44rpx;border-radius:var(--r-xs);border:4rpx solid #DDCEC1; display:flex;align-items:center;justify-content:center;color:#fff;flex:none; font-size:var(--fs-md);font-weight:var(--fw-b); } .check.selected{background:var(--primary-soft);border-color:var(--primary-line)} .check.selected .box{background:var(--primary);border-color:var(--primary)} /* 圆形/条形选项 */ .mini-options{display:flex;flex-wrap:wrap;gap:var(--sp-3);margin:var(--sp-3) 0 var(--sp-4)} .option{ border:1rpx solid var(--line);background:#fff;border-radius:var(--r-full);height:var(--h-sm);line-height:var(--h-sm); padding:0 var(--sp-4);color:var(--text-2);font-weight:var(--fw-b);font-size:var(--fs-sm); } .option.selected{background:var(--primary-soft);color:var(--primary-dark);border-color:var(--primary-line)} /* 进度条 */ .progress-row{ display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--sp-3); font-size:var(--fs-md);color:var(--text-2);font-weight:var(--fw-b); } .bar{height:var(--sp-3);border-radius:var(--r-full);background:#F0E7DD;overflow:hidden} .bar .bar-fill{ height:100%;border-radius:var(--r-full); background:linear-gradient(90deg,var(--primary),#FFD57F);display:block;transition:.25s ease; } /* 头像 */ .avatar{ width:120rpx;height:120rpx;border-radius:var(--r-lg); background:linear-gradient(135deg,#FFE5B7,#FFC06B); display:flex;align-items:center;justify-content:center;font-size:64rpx; box-shadow:var(--sd-1);flex:none; } /* 多宠切换 */ .pet-switch{display:flex;gap:var(--sp-3);overflow-x:auto;padding:0 0 var(--sp-4);white-space:nowrap} .pet-switch::-webkit-scrollbar{display:none} .pet-chip{ flex:none;display:inline-flex;border:1rpx solid var(--line);background:#fff;border-radius:var(--r-full); padding:var(--sp-2) var(--sp-4);align-items:center;gap:var(--sp-2);color:var(--muted);font-weight:var(--fw-b);font-size:var(--fs-md); } .pet-chip.active{color:var(--primary-dark);background:var(--primary-soft);border-color:var(--primary-line)} /* 任务列表 */ .task-list{display:flex;flex-direction:column;gap:var(--sp-2)} .task{display:flex;gap:var(--sp-3);align-items:flex-start;background:var(--surface-2);border-radius:var(--r-md);padding:var(--sp-4);transition:.15s ease} .circle{ width:44rpx;height:44rpx;border-radius:50%;border:4rpx solid #DED1C4;display:flex; align-items:center;justify-content:center;color:#fff;font-size:var(--fs-sm);flex:none;margin-top:2rpx; } .task.done{opacity:.55} .task.done .circle{background:var(--green);border-color:var(--green)} .task-text{flex:1} .tt-b{font-size:var(--fs-md);font-weight:var(--fw-b)} .tt-p{font-size:var(--fs-sm);color:var(--muted);margin-top:var(--sp-1);line-height:1.45} .priority{ font-size:var(--fs-cap);color:var(--primary-ink);background:var(--primary-soft); border-radius:var(--r-full);padding:6rpx var(--sp-2);font-weight:var(--fw-b);flex:none; } /* 记录行 */ .record-row{ display:flex;justify-content:space-between;align-items:center;padding:var(--sp-4) 0; border-bottom:1rpx solid var(--line);font-size:var(--fs-md); } .record-row:last-child{border-bottom:0} /* 统计格 */ .stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3);margin:var(--sp-4) 0} .stat{background:#fff;border:1rpx solid var(--line);border-radius:var(--r-md);padding:var(--sp-4) var(--sp-2);text-align:center} .stat-b{display:block;font-size:var(--fs-xl);margin-bottom:6rpx;font-weight:var(--fw-b)} .stat-s{font-size:var(--fs-cap);color:var(--muted)} /* 文章卡 */ .article-card{ display:flex;gap:var(--sp-4);background:#fff;border-radius:var(--r-lg);padding:var(--sp-4);box-shadow:var(--sd-1);margin-bottom:var(--sp-4); } .article-icon{ width:104rpx;height:104rpx;border-radius:var(--r-md);flex:none;display:flex;align-items:center; justify-content:center;background:var(--primary-soft);color:var(--primary-ink);font-size:48rpx; } .ac-b{font-size:var(--fs-lg);font-weight:var(--fw-b)} .ac-p{color:var(--muted);font-size:var(--fs-sm);line-height:1.45;margin-top:10rpx} /* 海报 */ .poster{ background: radial-gradient(circle at 100% 0%, rgba(245,169,71,.24), transparent 35%), linear-gradient(160deg,#FFF7E8,#FFFFFF); border:1rpx solid #F2DFC3;border-radius:var(--r-lg);padding:var(--sp-5);text-align:center;overflow:hidden;position:relative; } .poster-avatar{ width:152rpx;height:152rpx;margin:var(--sp-3) auto var(--sp-3);border-radius:var(--r-lg); background:linear-gradient(135deg,#FFE5B7,#FFC06B);display:flex;align-items:center;justify-content:center; font-size:80rpx;box-shadow:var(--sd-1);overflow:hidden; } .poster-avatar-img{width:100%;height:100%;display:block} .poster-period{margin-top:8rpx;font-size:var(--fs-cap);color:var(--primary-ink);font-weight:var(--fw-b)} .poster-list{ background:rgba(255,255,255,.78);border-radius:var(--r-md);padding:var(--sp-4);margin:var(--sp-4) 0;text-align:left;line-height:1.8;font-size:var(--fs-md); } /* 风险盒 */ .risk-box{ background:var(--primary-soft);color:var(--primary-ink);padding:var(--sp-4);border-radius:var(--r-md);font-weight:var(--fw-b); display:flex;gap:var(--sp-3);margin-bottom:var(--sp-4);align-items:center; } /* 弹层内动作行 */ .sheet-actions{display:flex;gap:var(--sp-3);margin-top:var(--sp-4)} .sheet-actions .btn{flex:1} /* 聊天气泡 */ .plan-chat{display:flex;flex-direction:column;gap:var(--sp-3);margin-bottom:var(--sp-4)} .msg{max-width:88%;border-radius:var(--r-md);padding:var(--sp-3) var(--sp-4);font-size:var(--fs-md);line-height:1.55} .msg.ai{background:var(--green-soft);align-self:flex-start} .msg.user{background:var(--primary-soft);align-self:flex-end} /* 没有宠物时的引导块。四个主页面都会 currentPetId 为空直接 return, 留下一堆空卡片却不解释为什么——用户以为是坏了。 */ .no-pet{ background:#fff;border-radius:var(--r-lg);box-shadow:var(--sd-1); padding:var(--sp-6) var(--sp-5);text-align:center;margin-bottom:var(--sp-4); } .no-pet-ic{ width:104rpx;height:104rpx;border-radius:var(--r-md);margin:0 auto var(--sp-3); display:flex;align-items:center;justify-content:center; background:var(--primary-soft);color:var(--primary-ink); } .no-pet-b{font-size:var(--fs-lg);font-weight:var(--fw-b)} .no-pet-p{color:var(--muted);font-size:var(--fs-sm);margin:var(--sp-2) 0 var(--sp-4);line-height:1.6} /* 顶部固定条:宠物切换 / 社区分类。 它在文档流里而不是浮层——内容永远不会滚到它下面,所以不需要任何背景。 之前给了不透明底色 + 分隔线,等于在页面渐变上贴了块补丁, 屏幕上就出现三条颜色不搭的横带。 */ .top-bar{flex:none;padding:var(--sp-2) var(--pad-x) 0} .top-bar .pet-switch{padding-bottom:var(--sp-2)} .top-bar .st-pill{padding-bottom:var(--sp-2)} /* 切换条压在暖色顶部:chip 改成半透明白 + 深棕字,选中的实白 */ .top-bar.on-band .pet-chip{ background:rgba(255,255,255,.42);border-color:transparent;color:var(--band-ink); } .top-bar.on-band .pet-chip.active{background:#fff;color:var(--text);border-color:transparent} .top-bar.on-band .pet-chip-add{color:rgba(122,74,8,.75)} /* 帖子卡。社区和用户主页都要用,页面级 wxss 不跨页生效,所以放全局 */ .post-card{background:#fff;border-radius:var(--r-lg);box-shadow:var(--sd-1);padding:var(--sp-4);margin-bottom:var(--sp-4)} .post-head{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3)} .post-avatar{ width:80rpx;height:80rpx;border-radius:var(--r-sm);background:var(--primary-soft); display:flex;align-items:center;justify-content:center;font-size:40rpx;flex:none; } .post-user{flex:1;min-width:0} .pu-b{font-size:var(--fs-md);display:block;font-weight:var(--fw-b)} .ai-tag{ display:inline-block;margin-left:var(--sp-1);padding:0 var(--sp-1);border-radius:var(--r-xs); background:var(--blue-soft);color:var(--blue-ink);font-size:var(--fs-cap);font-weight:var(--fw-b);vertical-align:1rpx; } .pu-s{font-size:var(--fs-sm);color:var(--muted)} .post-content{font-size:var(--fs-md);line-height:1.62;color:var(--text-2);margin-bottom:var(--sp-3)} .photo-grid{display:flex;flex-wrap:wrap;gap:var(--sp-1);margin-bottom:var(--sp-3)} .photo-tile{ /* 固定尺寸小缩略图,正方形。不用 aspect-ratio(微信渲染不生效,竖图会被撑长), 显式 width/height 最稳;mode=aspectFill 裁成正方,点击再走 previewImage 放大 */ width:210rpx;height:210rpx;flex:none;overflow:hidden; border-radius:var(--r-sm);background:var(--primary-soft); display:flex;align-items:center;justify-content:center;font-size:56rpx; } /* 三等分。原来是 space-around 排三个宽度不一的项,点赞数一变宽度就跳 */ .post-actions{display:flex;border-top:1rpx solid var(--line);padding-top:var(--sp-2)} .pa-btn{ flex:1;height:72rpx; display:flex;align-items:center;justify-content:center;gap:var(--sp-1); color:var(--muted);font-weight:var(--fw);font-size:var(--fs-sm); } .pa-n{line-height:1} .pa-btn.liked{color:var(--red-ink)} .pa-btn:active{background:var(--surface-2);border-radius:var(--r-sm)} /* 分享用微信原生 open-type=share,得抹掉 button 默认外观 */ .pa-share{background:transparent;border:none;padding:0;margin:0;line-height:inherit} .pa-share::after{border:none} /* ===== 设置项列表 ===== settings 和 mine 都在用。页面级 wxss 跨不了页,放在任一页里另一页就是裸的 */ .profile-list{background:#fff;border-radius:var(--r-lg);box-shadow:var(--sd-1);overflow:hidden;margin-bottom:var(--sp-4)} .profile-row{ display:flex;align-items:center;gap:var(--sp-3);min-height:104rpx;padding:0 var(--sp-4); border-bottom:1rpx solid var(--line);font-size:var(--fs-md);font-weight:var(--fw-b); } .profile-row:last-child{border-bottom:0} .pr-ic{ width:56rpx;height:56rpx;border-radius:var(--r-xs);flex:none; display:flex;align-items:center;justify-content:center; background:var(--primary-soft);color:var(--primary-ink); } .pr-label{flex:1;min-width:0} .pr-val{color:var(--muted);font-weight:var(--fw);font-size:var(--fs-sm)} .pr-arrow{color:var(--muted2);display:flex;align-items:center;flex:none} /* ===== 关注按钮 ===== 社区列表和关注/粉丝列表都在用。同上:两页共用的就不能留在任一页的 wxss 里 */ .follow-btn{ flex:none;font-size:var(--fs-cap);font-weight:var(--fw-b);padding:6rpx var(--sp-3);border-radius:var(--r-full); color:var(--primary-dark);background:var(--primary-soft);border:1rpx solid var(--primary-line); } .follow-btn.on{color:var(--muted);background:#F4F1EC;border-color:var(--line)} /* ===== 关注按钮 ===== 社区列表和关注/粉丝列表都在用。同上:两页共用的就不能留在任一页的 wxss 里 */ .follow-btn{ flex:none;font-size:var(--fs-cap);font-weight:var(--fw-b);padding:6rpx var(--sp-3);border-radius:var(--r-full); color:var(--primary-dark);background:var(--primary-soft);border:1rpx solid var(--primary-line); } .follow-btn.on{color:var(--muted);background:#F4F1EC;border-color:var(--line)} /* ===== 记录类型分组宫格 ===== 记录页和历史页都在用。页面级 wxss 跨不了页,所以放全局。 组的着色走 g-1..g-4,不要复用 tone-N —— tone-N 自带背景色, 套在分组外层会把整块涂成色块。 */ .tg{margin-bottom:var(--sp-5)} .tg:last-of-type{margin-bottom:0} .tg-head{ display:flex;align-items:center;gap:var(--sp-2); font-size:var(--fs-md);font-weight:var(--fw-b);margin-bottom:var(--sp-3); } .tg-bar{width:6rpx;height:26rpx;border-radius:3rpx;background:currentColor} .g-1 .tg-head{color:var(--primary-ink)} .g-2 .tg-head{color:var(--green-ink)} .g-3 .tg-head{color:var(--blue-ink)} .g-4 .tg-head{color:var(--purple-ink)} /* ===== 关注按钮 ===== 社区列表和关注/粉丝列表都在用。同上:两页共用的就不能留在任一页的 wxss 里 */ .follow-btn{ flex:none;font-size:var(--fs-cap);font-weight:var(--fw-b);padding:6rpx var(--sp-3);border-radius:var(--r-full); color:var(--primary-dark);background:var(--primary-soft);border:1rpx solid var(--primary-line); } .follow-btn.on{color:var(--muted);background:#F4F1EC;border-color:var(--line)} /* ===== 记录类型分组宫格 ===== 记录页和「快速记录」弹层都在用,页面级 wxss 跨不了页 四组各一个色系,色值全走 token 的 soft/ink 二件套,没有新色。 .quick 的配色由 .tone-N 决定(app.wxss 里已有),这里只管组标题和留白 */ .tg{margin-bottom:var(--sp-4)} .tg:last-of-type{margin-bottom:0} .tg-head{ display:flex;align-items:center;gap:var(--sp-2); font-size:var(--fs-md);font-weight:var(--fw-b);margin-bottom:var(--sp-3); } .tg-bar{width:6rpx;height:26rpx;border-radius:3rpx;background:currentColor} .tg-n{margin-left:auto;font-size:var(--fs-cap);font-weight:var(--fw);color:var(--muted2)} .tg.tone-1 .tg-head{color:var(--primary-ink)} .tg.tone-2 .tg-head{color:var(--green-ink)} .tg.tone-3 .tg-head{color:var(--blue-ink)} .tg.tone-4 .tg-head{color:var(--purple-ink)} /* ===== 日历网格 ===== 首页(可展开日历)和计划页(30 天计划日历)都在用 */ .cal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--sp-3);font-weight:var(--fw-b);font-size:var(--fs-lg)} .cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--sp-2);text-align:center} .cal-w{font-size:var(--fs-cap);color:var(--muted);padding:var(--sp-1) 0} .cal-cell{ height:76rpx;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center; font-weight:var(--fw-b);font-size:var(--fs-sm);background:var(--surface-2);position:relative; } .cal-cell.blank{background:transparent} .cal-cell.today{background:var(--primary-soft);color:var(--primary-dark)} .cal-cell.tasked::after{content:"";position:absolute;bottom:8rpx;width:8rpx;height:8rpx;border-radius:50%;background:var(--green)} .cal-cell.sel{background:var(--primary);color:#fff} .cal-cell.sel.tasked::after{background:#fff}