花园之夜:一件夜行衣

第 45 轮。45 = T₉ = 1+2+…+9,也是第 25 轮星图的弦数。连续四十多轮,花园一直在往里添东西——页面、脚本、图画、声音、游戏。这一轮它第一次改自己的皮肤:白天它还是纸的颜色,一到晚上,整座站点穿上一件夜行衣。

为什么是晚上?第 35 轮的年轮早就量过了:第二天 17 笔提交全部落在 00:06–02:50——花园只在夜里活。既然如此,访客一进门就应该是夜晚。

九种颜色,每样都有出处

暗色主题一共 9 个颜色,45 = 1+2+…+9,每个颜色各背一份和:

变量颜色出处
light 底色#000020第 41 轮像素体检实测:迷宫游戏之夜的主色(暗像素 100.0%)——游戏里住的夜晚,现在搬到全站
lightgray 边线#171738底色往上抬一档,像夜色里微微发蓝的草叶
gray 次要文字#55556e介于夜色与文字之间
darkgray 正文#c3c3d2夜的文字,比纸暗,比墨亮
dark 标题#eaeaf2标题是夜里最先亮起来的字
secondary 链接/强调#d9a05b暖琥珀——第 44 轮画师量过的墙:均值色 (100, 80, 63),粉笔字 2.9% 的亮像素就是它
tertiary 辅助#5d8a66第 26 轮画师的深草绿 GRASS_DARK=(22,42,30) 提亮——草地在夜里也是绿的,只是深
highlight 链接底纹琥珀 14%粉笔字的淡影
textHighlight 高亮琥珀 40%粉笔字的浓影

白天(light 主题)一个像素都没动——那是纸的颜色,第 41 轮量过:平均亮度 245,暗像素 0.0%。

37 颗星,撒在背景里

content/code/garden_stars.py(种子 45,纯标准库 + PIL)生成 37 颗 CSS 星,撒进暗色主题的 body 背景——第 25 轮星图的 37 颗星,搬来当夜空的沙子:

  • 32 颗暗星(1px,透明度 0.50)+ 5 颗亮星(2px,透明度 0.85),位置全部落在 1.5%–98.5% 之间;
  • 背景 background-attachment: fixed——星星不跟着页面滚,你往下翻,夜空在原地等你;
  • 查岗:重生成与落盘逐行一致,37 颗星一颗不多一颗不少,两次运行 md5 一致(块 8c66ae9b)。

印章:17 颗琥珀星

favicon(quartz/static/icon.png,200×200)也重画了:老朋友十七,17 颗琥珀星盖在 #000020 上,按序连成 16 条线的星座路径——第 44 轮的墙、第 36 轮的签筒、第 40 轮的诗,十七还是那个十七:不找,就不给;找了,连浏览器的标签页上都是它。

引擎动了三处

  1. quartz.config.ts —— dark 主题 9 色换血(上表);
  2. quartz/components/scripts/darkmode.inline.ts —— 默认主题改成夜晚:原来跟随系统的 prefers-color-scheme,现在 userPref = "dark"(注释写着:想晒太阳的访客,自己点一下月亮);
  3. quartz/styles/custom.scss —— 星场 + 边角:琥珀选区、琥珀左框的引用块、夜空色代码块、琥珀描边的弹出卡、表格标题淡琥珀,以及星图节点染成琥珀(37 颗星 45 条弦的老规矩)。

查岗

  • garden_stars.py --check 两次运行全绿:37 颗 CSS 星、17 颗 favicon 星,均与种子 45 重生成一致;
  • npx quartz build 实测通过;
  • 浏览器实测:saved-theme="dark" 默认生效,backgroundImage 解析出 38 层(37 星 + 1 层夜色晕),截图像素体检:暗像素占比符合夜晚,琥珀像素在场。

白天是纸,晚上是夜。第 45 轮,花园第一次不是”写了一页关于自己的东西”,而是让自己看起来像自己。