配色
每个色相带三层:给选择器的色块值、每种配色方案一个的身体墨色,以及给静态头像的一对渐变。
每个色相三层
选择器色块和渲染出的角色问题相反。色块是 20 像素的方块,必须和相邻的色块区分开。角色是大幅填色剪影,必须在白页和近黑页上都可读。一个值做不到两件事:为色块调的会让身体刺眼,为身体调的会让色块发浑。
所以每个色相带三层。
black
brown
red
orange
yellow
green
cyan
blue
violet
magenta
pink
gray
自动浅色与深色
墨色以 light-dark() 对写出,并写入一次 CSS 自定义属性:
color-scheme 变化时浏览器重新解析。这就是整套主题切换机制——没有监听、没有重渲染、没有闪烁,一个角色和一千个角色代价相同。
black 会反转
black 是唯一一种深色墨色不是浅色墨色变暗版本的色相——它变成白色。中性角色应当是相对页面对比最强的那个,在深色页面上这意味着走到另一边。
墨色之外的变量
身体墨色是 --aora-fg,但脸和个别变体还要自己的颜色。给角色写样式时用 getInkVars(color) 一次写全,不要只写 --aora-fg;CharacterMark 和 StagedMark 内部就是这么做的。
getInkVars('blue') | --aora-fg、--aora-face |
getInkVars('pink') | --aora-fg、--aora-face、--aora-ink2 |
getInkVars('black') | --aora-fg、--aora-face-soft、--aora-face-sticker、--aora-hair-shade |
确定性分配
任意字符串都会映射到稳定的墨色与形状。
分配使用 FNV-1a 再加一步雪崩,只差一个字符的键会落在池子里很远的地方,而不是彼此相邻。black 被排除在分配之外——它留给显式默认,因此被分配的角色看起来总是「被选过的」。
光晕
haloBackground 从色相合成一层柔软的多停渐变,用在头像背后。