设计风格 · ledger-glass · v1.0.0
Ledger Glass 账本玻璃
安静的暖纸色内容面 + 只给浮层用的液态玻璃。中文优先、移动端优先、数字等宽,适合记账、看板、工具类产品。
抽象自 ledger.robby.wang(旅行账本,classic (default)),2026-10-29
概述
Ledger Glass(账本玻璃) 抽象自 ledger.robby.wang 旅行账本的默认 classic 主题与 liquid-glass 材质层。
一句话:内容安静,浮层带玻璃。 页面是一张暖纸色的底,四角各有一团很淡的雾色光(暖金、灰蓝、沙色);承载数据的卡片是半透明的“柔光面”,不做背景模糊;只有真正浮在内容之上的东西——底部 Tab Dock、输入胶囊、弹出菜单、对话框——才用 backdrop-filter 做成玻璃。
产品气质:私人、克制、可信。像一本好用的随身账本,而不是一块花哨的仪表盘。中文优先,移动端优先,单手操作优先;数字永远等宽对齐。
颜色
点击复制浅色
深色
人员色
两套配色(light / dark)一一对应,全部通过 CSS 变量切换,跟随 prefers-color-scheme。
- 底色
bg(#f3f0e9 / #161914):暖纸色。暗色模式不是纯黑,而是带一点橄榄绿的墨色。 - 正文
text(#302c24) 与 次要muted(#726754):暖褐灰,不用纯黑纯灰。 - 强调
accent(#89661f) /accent-strong(#624613):旧金/铜色,全站唯一的交互色。主按钮背景、选中 Tab 文字、焦点环都用它;暗色模式变为香槟金 (#d5b66f / #f2d48b)。 - 语义色:
positive(#26785a) 只用于“应收/结算完成/成功提示”;danger(#a0443e) 只用于删除与错误。两者都偏低饱和。 - 分隔线
line/line-strong:带绿调的极淡透明线(11% / 22%),绝不用实心灰线。 - **玻璃色
glass-***:白色半透明叠层,glass-surface74% 用于内容卡,glass-field66% 用于输入框和数字块,glass-inset是 5.5% 的绿灰凹陷,用于分段控件底和次按钮。glass-rim是卡片上沿的高光描边。 - **人员色
people.***:8 个柔和色(金、海蓝、蕨绿、雪山蓝、珊瑚、紫罗兰、岩灰、天空蓝),只以小圆点、选中芯片底色(13% 混色)和边框(65% 混色)出现,从不做大面积填充。
强调色混色规则:选中/高亮背景一律 color-mix(in srgb, var(--accent) 10–14%, transparent),焦点环 0 0 0 3px 14% 混色。
字体
-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif
display · 40px / 650 / -0.045em
title · 20px / 650 / -0.025em
heading · 18px / 600
subheading · 15px / 600
body · 16px / 400
label · 13px / 400
caption · 12px / 400
amount · 20px / 600 / -0.025em
只用系统字体栈:-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif,不引 Web 字体。
- 字重只用 400 / 500 / 600 / 650 四档。标题 600–650,大数字 650。
- 标题与大数字使用负字距(-0.025em ~ -0.045em),正文不加字距。
- 所有金额、时间、汇率都加
font-variant-numeric: tabular-nums。 - 输入框字号不小于 16px(防 iOS 缩放)。
- 层级靠字号与
muted颜色区分,而不是加粗一切:标签 13px muted,说明 12px muted,正文 15–16px。 - 典型屏幕:页面标题 20px/650,汇总大数字 30–40px/650,分项金额 20px/600,列表金额 17px/600。
布局
- 内容最大宽度 920px,居中;移动端左右边距 12px,桌面 20px。 - 间距基于 4px:4 / 8 / 12 / 16 / 20 / 24。卡片之间 12px,卡片内边距 16px(汇总卡 14px 16px)。 - 最小点击区 44px,主要控件高度 48px。 - 主导航是底部浮动 Dock:距底 10px + safe-area,左右 12px,最大宽 760px;页面底部要预留 Dock 高度的内边距。 - 移动端一屏只讲一件事:顶部紧凑标题行(标题 + 下拉箭头 + 右侧头像),下面依次是卡片。 - 网格:汇总数字 4 列 → 700px 以下 2 列 → 480px 以下表单单列。
层级与材质
0 3px 8px rgba(36,65,52,.025), 0 14px 40px rgba(36,65,52,.055)0 8px 28px rgba(31,62,49,.10), 0 2px 6px rgba(31,62,49,.045)0 14px 32px rgba(22,42,31,.15), 0 4px 10px rgba(22,42,31,.06)三种材质,界限分明:
- 柔光面(content surface):
glass-surface底 + 145° 从glass-field到透明的渐变 + 1pxglass-rim描边 +inset 0 1px 0 glass-glint上沿高光 + 很浅的双层阴影surface。不加 backdrop-filter,长列表和图表上做模糊会卡顿且显脏。 - 常规玻璃(menu glass):弹出菜单、排序、导出、对话框。
glass-menu93% 底 +blur(26px) saturate(1.5)+float阴影。 - 透明玻璃(dock glass):底部 Dock 与输入胶囊。几乎透明的
dock-tint(12%),靠blur(8px) saturate(1.25)、高光 rim、内阴影和第二道细轮廓线读出玻璃边缘,不把中间刷白。
页面背景用 body::before 固定三团径向雾光(右上暖、左中蓝、右下沙),整个页面只此一处装饰。
形状
8px12px14px16px22px28px34px999px圆角随层级递增:标签/小按钮 8–12px → 输入框 13px → 主按钮/分段 15px → 数字块 16px → 菜单 20px → 内容卡 22px → 对话框 28px → Dock 34px → 头像/胶囊全圆。
嵌套圆角保持同心:外层圆角 = 内层圆角 + 内边距(分段控件 15px 外 / 11px 内,3px 内边距)。
组件
.rs-page
页面底:暖纸色 + 三团雾光
.rs-note
说明 / 次要文字
.rs-surface
内容卡片:安静、不模糊
.rs-stat
汇总数字块
.rs-button-primary
主操作,每屏最多一个
.rs-button-secondary
次操作(实现上是 glass-inset 叠在页面底色上,视觉约等于 bg-soft)
.rs-button-text
行内文字操作
.rs-field
输入框 / 下拉 / 多行
.rs-segmented
分段切换(全部/今日、已支出/待收款)
.rs-chip
可选人员/筛选,用个人颜色着色
.rs-list-row
长列表行:只用顶部分隔线,不加卡片
.rs-menu
弹出菜单/弹窗:常规玻璃
.rs-dock
底部浮动 Tab 栏 + 输入胶囊:透明玻璃
.rs-composer
Dock 内的输入胶囊
.rs-positive
应收 / 成功 / 结算金额
.rs-danger
删除 / 错误
所有组件类名统一前缀 rs-(Robby Style),同一套类名在不同风格间可互换。完整实现见 style.css,示例页见 example.html。
- rs-surface:内容卡片。标题行用
rs-section-heading(左标题、右文字按钮)。 - rs-stat:汇总数字块,左上小圆点+名字,下方大数字,再下方 muted 原币明细。
- rs-button --primary / --secondary / --text:主按钮是 170° 的微渐变金铜色,带 1px 深色描边与内高光;按下
scale(.98)。 - rs-field:输入、下拉、多行。下拉箭头用 CSS 渐变画,不用图片。焦点时边框变强调色并加 3px 光环。
- rs-segmented:凹陷底 + 选中项浮起(玻璃高光 + 1px 阴影 + 强调色文字 600)。
- rs-chip:人员/筛选多选,
--person-color驱动选中底色与边框。 - rs-list / rs-list-row:长列表不做卡片,行间只有顶部 1px
line,左信息、右等宽金额。 - rs-menu:弹出层,内部选项 14px 圆角,hover 用
glass-selected。 - rs-dock:底部浮动 Tab,4 个等宽按钮(图标 23px + 12px 文字),选中项有一块滑动的半透明底板(320ms),文字变
accent-strong。 - rs-composer:Dock 上方的输入胶囊:左图片按钮、中间输入、右麦克风,全高 54px。
该做 / 不该做
Do
- 先用 CSS 变量,再写组件;暗色模式只换变量。
- 让数据卡片安静:柔光面、无模糊、阴影极浅。
- 玻璃只给浮层(Dock、菜单、对话框)。
- 金额、日期统一等宽数字;货币符号前置(≈ ¥200.00),原币明细放在下方 muted 小字。
- 点击区 ≥ 44px,输入框字号 ≥ 16px,支持 safe-area、
prefers-reduced-motion、prefers-contrast: more、forced-colors。 - 文案简短直接的中文,按钮用动词(保存、记一笔、全选)。
Don't
- 不要给长列表、图表、整页加
backdrop-filter。 - 不要使用纯黑 #000、纯白大底或冷灰;不要第二个强调色。
- 不要大面积使用人员色或语义色;红绿只表达状态。
- 不要粗重投影、霓虹渐变、拟物纹理、Emoji 装饰标题。
- 不要在 hover 时改变文字或点击区尺寸(反馈要“安静、本地”)。
- 不要引入 Web 字体或图标字体;图标用 1.8px 描边的内联 SVG。