Skip to content

docs/brand/ — 品牌母图与派生关系

🔒 母图只有这里一份。 其余每一处品牌图标都是从这两个 SVG 派生出来的, 不是平级的另一份资产 —— 改 logo 时从母图重新派生,别就地改派生物。

这页的存在理由:派生链此前只写在 docs/plans/rename-plan.md 里。那是一次性计划,归档后这条链就从活跃视野消失,而三个端仍在依赖它 (同 CLAUDE.md §4「约束不能只住在 plan 里」的判据,只是这条不是红线)。

母图

文件说明
lampio-icon.svg应用图标母图(词点亮内核 · 绿底 + 琥珀点亮词)
lampio-mark.svg文字/标记版

派生落点(三条链,各自的生成方式不同)

落点关系怎么再生成
public/favicon.svglampio-icon.svg 的逐字节拷贝(2026-08-31 实测 md5 相同),被 index.html 引用cp docs/brand/lampio-icon.svg public/favicon.svg
src-tauri/icons/*(17 个 png/ico/icns)Tauri 桌面端图标母图 → 1024 PNG → pnpm tauri icon
rvh/branding/*(4 个 svg/png)Android/iOS:lampio-icon-fullbleed.svg(rx=0)+ lampio-icon-foreground.svg(adaptive 前景,16% inset)母图 → 上述两个变体 → rsvg-convert 1024 PNG → dart run flutter_launcher_icons(配置在 rvh/pubspec.yaml,背景色 #1f4e3d

⚠️ rvh/branding/ 那两个 SVG 与母图内容不同是正常的 —— 它们是构图变体(满幅 / 前景层), 不是副本,所以既不能 symlink 也不该拿去和母图比字节。三条链里只有 public/favicon.svg 是真拷贝;它 1.5 KB,刻意保持拷贝而不做 symlink(Vite 静态目录跟随 symlink 的行为不值得赌)。

admin/ 当前没有品牌图标资产(admin/public/ 只有 Next 脚手架自带的几个 svg)—— 要加时从母图派生,别从上面任何一处拷。

⚠️ landing/app/icon.svg 是第三份逐字节拷贝(2026-08-31 用「同 blob 多路径」扫描 当场撞出来的;此处原先写着「landing 没有品牌图标」,是错的)。它走 Next.js App Router 的 icon.svg 约定(放在 app/ 下、由框架生成 <link rel=icon>,不经 public/), 所以不是多余的一份,只是没人记得它在。连它一共 3 处真拷贝public/favicon.svg · landing/app/icon.svg · 母图自己。改母图时这两处要一起 cp

一次性复查命令(不是常设闸门,理由见下):

bash
git ls-files -s | awk '$1!="120000" {print $2, $4}' \
  | sort | awk '{h[$1]=h[$1]" "$2; c[$1]++} END {for(k in c) if(c[k]>1) print c[k]"×", h[k]}' | sort -rn

⚠️ 它不适合当 CI 门:实测 28 组重复里绝大多数是合法的 —— Flutter 生成的 android/ios 多倍率图标与 splash(同一张图按 dpi 复制)、空文件、 两个 MCP 子项目各自的 tsconfig.json;更有一组**「相同即是结论」**的 (docs/cross-end/{rb,rvh}.csv 两端归一化输出逐字节相同 = 无漂移的证据本身, 该目录 README 明写「别拆别删」)。豁免名单会比它抓到的东西还长。