阶段 0 起步:图标与环境自检脚手架

- assets/icons 全套图标:SVG 源文件 + maskable + 12 档 PNG
- favicon.ico / apple-touch-icon.png / site.webmanifest
- index.php 环境自检页(PHP 版本 / 必需扩展 / 配置 / 数据库连接),
  详情页默认不打印连接错误原文,避免泄露数据库账号名
- config.example.php:数据库与 app_key 的配置模板(config.php 不入库)
- README 补充项目定位与六阶段路线图;.gitignore 沿用既有约定
This commit is contained in:
2026-09-29 23:48:45 +08:00
parent d8914a6dfc
commit ecafa110f2
23 changed files with 350 additions and 1 deletions
+29
View File
@@ -0,0 +1,29 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="家书 FamilyBook">
<!--
maskable 版本:用于 Android 自适应图标 / PWA。
背景铺满整个方形(不裁圆角),主体按 0.7 缩放居中。
⚠️ 0.7 是按主体包围盒算出来的:主体 55×48.2,缩放后角点到中心约 25.6,
正好落在直径 80% 的圆形安全区边界上,再放大会被裁掉屋檐。
⚠️ 绘制顺序与主图标一致:墙压住屋顶底边 1px,避免出现抗锯齿缝隙。
-->
<rect width="64" height="64" fill="#F2E9D8"/>
<g transform="translate(32 32) scale(0.7) translate(-32 -32)">
<path d="M32 7 L4.5 34 H32 Z" fill="#A84A28"/>
<path d="M32 7 L59.5 34 H32 Z" fill="#C96F45"/>
<path d="M28 34 L32 25 L36 34 Z" fill="#F2E9D8"/>
<path d="M32 7 V25" stroke="#6E3820" stroke-width="2.4" fill="none"/>
<rect x="13" y="33" width="38" height="19" rx="3" fill="#FDFBF5"/>
<g stroke="#BD5C39" stroke-width="2.4" stroke-linecap="round" fill="none">
<path d="M18 40 H46"/>
<path d="M18 44.5 H46"/>
<path d="M18 48.5 H37"/>
</g>
<rect x="10.5" y="52" width="43" height="3.2" rx="1.6" fill="#7A3F2A"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+45
View File
@@ -0,0 +1,45 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="家书 FamilyBook">
<!--
家书 FamilyBook 图标
概念:这本书就是家。
· 屋顶 = 摊开的书:两片封面(左暗右亮),顶端的深色短脊线点明书脊,
底部中央一道 V 形沟口露出背景,是书页分开的地方
· 屋顶下是纸做的墙,墙上三行横线是这个家写下的日子
· 深褐地基收底
构图:主体横向占约 86%,四边留白收紧,小尺寸下更饱满。
⚠️ 绘制顺序不能改:墙在屋顶之后绘制,由墙压住屋顶底边 1px。
这样既不会出现抗锯齿缝隙,也不会让沟口在墙顶切出一道米色横缝。
配色:宣纸米 #F2E9D8 / 封面 #A84A28·#C96F45 / 书脊·地基 #6E3820·#7A3F2A / 纸白 #FDFBF5
-->
<defs>
<clipPath id="fb-clip">
<rect width="64" height="64" rx="14"/>
</clipPath>
</defs>
<g clip-path="url(#fb-clip)">
<!-- 宣纸底 -->
<rect width="64" height="64" fill="#F2E9D8"/>
<!-- 屋顶 = 摊开的书 -->
<path d="M32 7 L4.5 34 H32 Z" fill="#A84A28"/>
<path d="M32 7 L59.5 34 H32 Z" fill="#C96F45"/>
<path d="M28 34 L32 25 L36 34 Z" fill="#F2E9D8"/>
<!-- 书脊 -->
<path d="M32 7 V25" stroke="#6E3820" stroke-width="2.4" fill="none"/>
<!-- 纸做的墙:写下的岁月 -->
<rect x="13" y="33" width="38" height="19" rx="3" fill="#FDFBF5"/>
<g stroke="#BD5C39" stroke-width="2.4" stroke-linecap="round" fill="none">
<path d="M18 40 H46"/>
<path d="M18 44.5 H46"/>
<path d="M18 48.5 H37"/>
</g>
<!-- 地基 -->
<rect x="10.5" y="52" width="43" height="3.2" rx="1.6" fill="#7A3F2A"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB