纸与墨,有意为之
多数文档主题伸手就是那几样默认值:纯白 #fff、一款千篇一律的无衬线体、gray-800 的正文、跟随系统的深色模式。读起来没毛病,看上去谁也不是。这套体系换了一个前提起步——一篇长技术文档,是要连读一小时的东西——token 全部由此推出来。
§1立场
连读一小时,要的正是印刷术几百年前就想明白的那几样:不晃眼的暖色底,笔画有真实粗细对比的正文字,以及按正文 em 而不是按 chrome 像素度量的版面节奏。所以 token 层用的是这样一套词汇:纸类(纸是整张,页是卡面,素是净底,帛是软缎)而不是 gray-50 到 gray-200;墨与颜料出自一盒画家颜料——朱是酒红,石是焦橙,赭是赭黄,黛是黛青,紫是紫罗兰——而不是 primary/secondary/accent。这些名字不是装饰:它们让每一次新的颜色决定都拴在同一个物理隐喻上,这正是五种不同表面仍读作同一张纸的原因。
§2两种底色,因为有两种页面
一座 wiki 有两种读法。读一篇笔记——一列文字、一个小时,眼睛要的是安静:纸偏冷一点,墨走中性,一个强调色管住链接和编号。翻一座书架——一片卡片、一眼扫过、挑一本走:纸可以更暖,标题可以上展示衬线,强调色可以是一种深酒红——它读起来像字标,而不像链接。让这两种场合共用一套取值,两头都得将就。所以语义层分成两套语境——阅读列(--color-*)与书架(--wb-*)——同出一盒颜料,页面自己声明属于哪套。成品是一座「一个物件、两间屋子」的站点。
§3深色是重排的第二版,不是反色
算法式的深色模式把亮度一反了事:文字成了石板上的粉笔,所有带色的表面糊成一团泥。这里的深色主题是手工调制的第二版:暮色的底、月白的墨单独选定,强调色颜料只提亮到刚好在更深的纸上守住 AA 对比度。代价是整套决定要做第二遍——这正是要点所在。开关只认读者亲手的选择(绝不跟随系统偏好),因为一张会在你读到一半时自己翻转主题的页面,是一张吓人的页面。
§4中文排版是承重墙
中英混排是多数主题悄悄散架的地方:加粗贴着全角句号就闭合不上;汉字一旦是 1.7 格宽,代码里的制表线图整个错位。这两件事在这里都按正确性 bug 对待,而不是排版口味问题——方言能正确解析中文强调,代码字体子集把汉字钉死在两格宽,制表线图翻译成中文也不走样。一套只在英文里成立的主题,只能算半套主题。