dsh-piggy 0.31.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +28 -7
  3. package/assets/badge-pig-blindbox-first.svg +36 -0
  4. package/assets/badge-pig-blindbox-six.svg +36 -0
  5. package/assets/badge-pig-blindbox-ten.svg +36 -0
  6. package/assets/badge-pig-clean-ten.svg +36 -0
  7. package/assets/badge-pig-devil.svg +36 -0
  8. package/assets/badge-pig-farm-first.svg +36 -0
  9. package/assets/badge-pig-farm-five.svg +36 -0
  10. package/assets/badge-pig-farm-ten.svg +36 -0
  11. package/assets/badge-pig-first-class.svg +36 -0
  12. package/assets/badge-pig-first-fish.svg +36 -0
  13. package/assets/badge-pig-first-job.svg +36 -0
  14. package/assets/badge-pig-first-meal.svg +36 -0
  15. package/assets/badge-pig-first-trip.svg +36 -0
  16. package/assets/badge-pig-fish-five.svg +36 -0
  17. package/assets/badge-pig-gacha-first.svg +36 -0
  18. package/assets/badge-pig-gacha-gold.svg +36 -0
  19. package/assets/badge-pig-gacha-machines.svg +36 -0
  20. package/assets/badge-pig-grown-up.svg +36 -0
  21. package/assets/badge-pig-jobs-hundred.svg +36 -0
  22. package/assets/badge-pig-jobs-ten.svg +36 -0
  23. package/assets/badge-pig-king.svg +36 -0
  24. package/assets/badge-pig-mine-deep.svg +36 -0
  25. package/assets/badge-pig-mine-first.svg +36 -0
  26. package/assets/badge-pig-mine-fossils.svg +36 -0
  27. package/assets/badge-pig-pet-hundred.svg +36 -0
  28. package/assets/badge-pig-play-twenty.svg +36 -0
  29. package/assets/badge-pig-souvenirs-three.svg +36 -0
  30. package/assets/badge-pig-trips-ten.svg +36 -0
  31. package/assets/piggy-emoji.woff2 +0 -0
  32. package/channel.js +22 -0
  33. package/client.js +4620 -3930
  34. package/environment.js +41 -0
  35. package/index.js +8 -0
  36. package/package.json +3 -1
  37. package/packages/pet-core/src/core/achievements.js +100 -0
  38. package/packages/pet-core/src/core/extension-events.js +90 -0
  39. package/packages/pet-core/src/core/extensions.js +5 -1
  40. package/packages/pet-core/src/core/migrate.js +2 -0
  41. package/packages/pet-core/src/core/state.js +3 -1
  42. package/packages/pet-core/src/core.js +4 -0
  43. package/packages/pet-core/src/data/achievements.js +26 -0
  44. package/packages/pet-core/src/data/extension-achievements.js +19 -0
  45. package/packages/pet-core/src/data/extension-events.js +11 -0
  46. package/packages/pet-core/src/data.js +4 -0
  47. package/routes.js +91 -1
  48. package/scripts/extension-entry.mjs +8 -4
  49. package/scripts/gitee-release.mjs +90 -0
  50. package/scripts/scan-channel.mjs +74 -0
  51. package/scripts/set-channel.mjs +19 -0
  52. package/snapshot.js +16 -24
  53. package/src/client/css-achievements.js +16 -0
  54. package/src/client/css-base.js +5 -1
  55. package/src/client/css-tabs.js +0 -3
  56. package/src/client/css-tiles.js +3 -1
  57. package/src/client/desktop/geometry.js +0 -8
  58. package/src/client/desktop/index.js +203 -40
  59. package/src/client/desktop/measure.js +68 -34
  60. package/src/client/desktop/panel-window.js +100 -0
  61. package/src/client/desktop/place.js +133 -76
  62. package/src/client/desktop-shell.js +11 -0
  63. package/src/client/icon-style.js +3 -2
  64. package/src/client/index.js +10 -10
  65. package/src/client/io.js +27 -6
  66. package/src/client/journal.js +110 -0
  67. package/src/client/layout.js +6 -1
  68. package/src/client/log-export.js +93 -0
  69. package/src/client/milestone-notice.js +19 -0
  70. package/src/client/normalize-dex.js +31 -0
  71. package/src/client/normalize.js +1 -23
  72. package/src/client/panel.js +9 -36
  73. package/src/client/pending.js +55 -0
  74. package/src/client/scene.js +8 -1
  75. package/src/client/split.js +100 -0
  76. package/src/client/styles.js +2 -1
  77. package/src/client/tabs/achievements.js +63 -0
  78. package/src/client/tabs/dex.js +3 -0
  79. package/src/client/tabs/extensions.js +42 -11
  80. package/src/client/tabs/settings.js +32 -1
  81. package/src/client/tabs/skin-guide.js +3 -3
  82. package/src/client/update-notice.js +7 -4
  83. package/store/api.js +5 -1
  84. package/store/ext-actions.js +58 -0
  85. package/store/ext-api.js +46 -0
  86. package/store/ext-runtime.js +130 -72
  87. package/store/journal.js +192 -0
  88. package/store/state-file.js +27 -9
  89. package/store.js +23 -4
package/CHANGELOG.md CHANGED
@@ -5,6 +5,61 @@ All notable changes to `dsh-pig`. Versions follow the plugin's own
5
5
 
6
6
  ---
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [0.33.0] — 2026-10-07 · 桌面版猪和面板分开、扩展成就
11
+
12
+ ### 桌面版:猪和面板各一个窗口(要更新桌面外壳到 0.6.0)
13
+
14
+ - 面板不再和猪挤在同一个窗口里,而是单独一个窗口贴在猪旁边:上方放得下就开在上面,否则开在下面,整块在屏幕里。开关面板、切 App、喂食、冒气泡,猪的窗口都一动不动——以前这些都要改猪那个窗口的大小,差一拍猪就跳一下。
15
+ - 拖猪时面板跟着走;拖到屏幕边上,猪一路跟着鼠标贴到边,松手不再瞬移。点到别处面板自动收起(「点外面自动收起」设置照旧)。
16
+ - 面板里做的事(喂食、签到……),猪那边马上有反应和气泡。
17
+ - 打开面板不再抢焦点,GNOME 不会因此弹「已就绪」提示。
18
+ - 这个版本的游戏包需要桌面外壳 0.6.0;旧外壳会继续用自带的游戏包,「设置 → 更新」里会提示先更新桌面程序。
19
+ - 开发用:`tools/desktop-geometry-check.mjs` 检查两个窗口的行为,GNOME 下用真鼠标拖动并录屏,`tools/drag-film.py` 逐帧看拖动中和松手后猪有没有跳。
20
+
21
+ ### 扩展成就与公共事件(贡献者 [@1nuoiscute](https://github.com/1nuoiscute),[#7](https://github.com/CLICGGER-TYPES/dsh-piggy/pull/7))
22
+
23
+ - 为菜园、矿洞、扭蛋和盲盒新增 12 项成就与小猪 SVG 徽章,累计、收藏与最高探索层数由公共进度事件记录;图鉴最多展示 28 项。
24
+ - 新增扩展 `api.emit` 与可选历史 `progress` 钩子;成功动作事务提交,拒绝和异常回滚,重复上报不重复计数。
25
+ - 旧扩展数据只补录可证明经历,日期未知不编造;更新保留基线,卸载/领养保留主成就进度,新安装可继续积累。旧扩展详情提示更新。
26
+ - 修复试玩页宿主按钮样式挤偏返回箭头。
27
+ - 四个扩展随本版发布:farm/mine/gacha 1.1.0、blindbox 2.2.0(在「设置 → 🧩 扩展」里更新即可拿到新成就)。
28
+
29
+ ### 「Emoji 样式」在网页版也能用
30
+
31
+ - 网页版也带一套瘦身 emoji 子集(0.9MB,覆盖游戏里用到的全部 emoji),「设置 → Emoji 样式」在网页版也能选,默认就是内置那套。桌面版仍用外壳提供的完整字体。
32
+
33
+ ### 其他
34
+
35
+ - 桌面版帧率跟显示器刷新率走,不再写死 30fps;拖动的采样频率也跟显示器同步。
36
+ - 存的猪位置改成「哪块显示器 + 相对偏移」,显示器拔掉会落到最近的屏;跨屏缝拖动不再被弹回。
37
+
38
+ ## [0.32.0] — 2026-10-06 · 小猪成就、日志导出与扩展下载修复
39
+
40
+ ### 小猪成就系统(贡献者 [@1nuoiscute](https://github.com/1nuoiscute),[#6](https://github.com/CLICGGER-TYPES/dsh-piggy/pull/6))
41
+
42
+ - 图鉴新增成就分类,十六枚以小猪为主图案的透明 SVG 徽章,展示目标、进度和获得记录。
43
+ - 成功照顾与实际完成学习、工作、旅行,以及钓鱼收藏和晋升记录驱动解锁;合并同时获得的徽章提示。
44
+ - 记录和累计次数跨领养保留;完整重置清空。旧档只补录可验证经历,未知完成日期明确标注,存档版本保持 v12。
45
+ - 增加隔离试玩入口与规则草案,首版只奖励徽章,不改属性或金币。
46
+
47
+ ### 设置里导出日志
48
+
49
+ - 「设置 → 日志 → 导出日志」一键把运行日志存到你自己选的位置:桌面版弹系统「另存为」,网页版用浏览器的另存为,都不支持时退回普通下载。
50
+ - 日志包含版本、渠道、存档版本、运行环境、每个动作的耗时与拒绝原因、扩展目录与下载的每次尝试、存档读写与迁移、浏览器里的未捕获错误和失败请求;桌面版还会带上窗口与更新的记录。
51
+ - 日志同时写在存档目录的 `logs/dsh-piggy.log`(满 1.5 MB 轮转),内存里始终留最近 800 条。网页版以前没有任何可取的现场,现在也能导出。
52
+ - 规则抛错后回滚、存档损坏留副本这类以前只有一行 console 的情况,现在都会出现在导出的日志里。
53
+
54
+ ### 扩展下载修复
55
+
56
+ - 每个扩展文件下载 12 秒超时、最多试 3 次,三个文件并行;失败时说明是哪个文件、连哪个主机、什么原因(超时 / 被中断 / 域名解析不了),不再只有一句 `fetch failed`。在线目录读取也加了超时和重试。
57
+ - 点「下载」立刻变成「下载中…」并挡住重复点击;失败的原因留在卡片上并给一个「重试」按钮,不再只闪 2.4 秒的气泡,也不再让面板看起来「点了没反应」。
58
+
59
+ ### 桌面外壳 0.5.0
60
+
61
+ - 新增 `piggyShell.logs.save`,导出日志时弹系统「另存为」。页面与外壳的约定版本 `DESKTOP_VERSION` 升到 3;老外壳没有这个方法,会自动退回浏览器下载,功能仍可用。
62
+
8
63
  ## [0.31.0] — 2026-10-05 · 扭蛋、菜园、矿洞和盲盒寻访
9
64
 
10
65
  只更新游戏,不用重装桌面程序(桌面外壳仍是 0.3.0)。三个新扩展和盲盒 2.1.0 在「设置 → 🧩 扩展 → 在线扩展」里下载。
package/README.md CHANGED
@@ -15,15 +15,21 @@
15
15
  - **菜园**(在线扩展):开垦地块、买种子、每个阶段浇一次水,按真实时间生长(离线照算),收获卖钱或放进背包
16
16
  - **矿洞**(在线扩展):10 层矿洞往下挖,越深矿越值钱,化石和宝石进图鉴;体力 100,每 3 分钟回 1 点
17
17
  - **钓鱼**:咬钩后随机是圆盘、竖条拉锯、拉力收线三种玩法之一,也能让猪自己出门钓
18
- - **桌面版**:Windows、Linux 和 macOS 可独立运行
18
+ - **桌面版**:Windows、Linux 和 macOS 可独立运行;猪和面板各一个窗口,开面板、拖到屏幕边、冒气泡,猪都稳稳待在原地
19
19
  - **角色外观**:完成厨师或宇航员工作解锁职业外观,另有免费内置皮肤,也可导入自己的 SVG 皮肤包
20
+ - **Emoji 可选**:网页版和桌面版都自带整套彩色 emoji 字体,「设置 → Emoji 样式」可以在「内置」和「系统自带」之间切,机器上缺字也不会变方框
21
+ - **出问题能查**:「设置 → 日志 → 导出日志」一键导出运行日志(桌面版弹系统「另存为」),里面记着版本、动作、扩展下载和报错
20
22
  - **会自己过日子**:按时间问候、提醒喝水休息、过节;点不同部位反应不同;闲着会打滚、打盹、追蝴蝶,桌面版还能出去散步(默认关);每天写一篇带点黑色幽默的日记
21
23
  - **零 token**:不注册模型工具,不向对话注入宠物状态
22
24
 
23
25
  <p align="center">
24
- <img src="docs/screenshots/readme-home.png" width="260" alt="主菜单">
25
- <img src="docs/screenshots/c4-dex-dashboard.png" width="260" alt="图鉴">
26
- <img src="docs/screenshots/c6-skins.png" width="260" alt="换肤">
26
+ <img src="docs/screenshots/readme-desktop.png" width="250" alt="桌面版:猪和贴在它上方的面板">
27
+ <img src="docs/screenshots/readme-home.png" width="250" alt="主菜单">
28
+ <img src="docs/screenshots/extension-achievement-badges.png" width="300" alt="扩展成就的十二枚小猪徽章">
29
+ </p>
30
+ <p align="center">
31
+ <img src="docs/screenshots/c4-dex-dashboard.png" width="250" alt="图鉴">
32
+ <img src="docs/screenshots/c6-skins.png" width="250" alt="换肤">
27
33
  </p>
28
34
 
29
35
  ## 安装
@@ -42,7 +48,7 @@ dsh plugin --profile web add dsh-piggy
42
48
 
43
49
  ### 桌面版
44
50
 
45
- 从 [GitHub Releases](https://github.com/CLICGGER-TYPES/dsh-piggy/releases/latest) 下载对应系统的文件:
51
+ 从 [GitHub Releases](https://github.com/CLICGGER-TYPES/dsh-piggy/releases/latest) 下载对应系统的文件(国内可以用 [Gitee 发行版](https://gitee.com/clicgger/dsh-piggy/releases):Gitee 版的检查更新、游戏包和在线扩展都走 Gitee):
46
52
 
47
53
  - Windows:`setup.exe` 安装版或 `portable.exe` 便携版
48
54
  - Linux:`AppImage`
@@ -52,7 +58,7 @@ macOS 包暂未签名,第一次打开请在访达中右键应用并选择“
52
58
 
53
59
  「设置 → 更新」会分别显示游戏版本和桌面外壳版本(有新正式版时设置图标上有红点)。游戏包可在 App 内更新;桌面外壳从 v0.2.0 起,Windows 安装版和 Linux AppImage 可在 App 内下载并重启安装。Windows 便携版、未签名 macOS 版需到发布页手动替换;旧版外壳需先手动升级一次。详见[更新说明](docs/guides/updates.md)。
54
60
 
55
- v0.27.3 起桌面外壳是 v0.3.0:窗口摆放、可点区域、桌面样式等都放进了游戏包,以后这类修复在「更新」里点一下就到,不用再重装桌面程序。从更早版本升级的桌面版需要先升级一次外壳。v0.31.0 仍然是外壳 0.3.0,只更新游戏即可。
61
+ 当前桌面外壳是 **v0.6.0**:猪和面板拆成了两个窗口(面板单独一个窗口贴在猪旁边,开面板、拖动时猪不再跳)。游戏 v0.33.0 起需要这个外壳——旧外壳会继续用自带的游戏包,并在「设置 → 更新」里提示先更新桌面程序(Windows 安装版和 Linux AppImage 可在 App 内更新,其余到发布页下载)。窗口摆放、可点区域、桌面样式等仍在游戏包里,这类修复在「更新」里点一下就到。
56
62
 
57
63
  在线扩展从本仓库的 [`extensions/registry.json`](extensions/registry.json) 读,文件挂在本仓库的 GitHub Release(`ext-<名字>-<版本>`),下载后逐个核对校验值;只会安装我们自己发布的扩展。格式和写法见[扩展删除与在线下载](docs/design/extension-download.md)。
58
64
 
@@ -64,6 +70,8 @@ v0.27.3 起桌面外壳是 v0.3.0:窗口摆放、可点区域、桌面样式
64
70
 
65
71
  详细玩法、体型、美术图标设置和命令见[玩法指南](docs/guides/gameplay.md)。换肤可直接阅读[玩家换肤教程](docs/guides/skins.md),制作皮肤从[自定义皮肤制作教程](docs/guides/creating-skins.md)开始。
66
72
 
73
+ 图鉴里的「成就」记录日常照顾、学习、工作、旅行、收藏与晋升;基础十六枚小猪徽章之外,菜园、矿洞、扭蛋和盲盒各有三枚扩展徽章,安装并更新对应扩展后可积累。规则及试玩方法见[成就设计](docs/design/achievements.md)和[扩展成就](docs/design/extension-achievements.md)。
74
+
67
75
  ## 文档
68
76
 
69
77
  - [文档中心](docs/README.md)
@@ -71,6 +79,8 @@ v0.27.3 起桌面外壳是 v0.3.0:窗口摆放、可点区域、桌面样式
71
79
  - [桌面版安装、存档与更新](docs/guides/desktop.md)
72
80
  - [游戏包与桌面外壳怎样更新](docs/guides/updates.md)
73
81
  - [扩展:删除与在线下载](docs/design/extension-download.md) · [盲盒](docs/design/blindbox.md)
82
+ - [日志与导出](docs/design/log-export.md)(设置 → 日志)
83
+ - [维护交接文档(接手维护先读)](docs/HANDOFF.md)
74
84
  - [开发与调试](docs/DEVELOPMENT.md)
75
85
  - [版本记录](CHANGELOG.md)
76
86
 
@@ -85,6 +95,17 @@ npm run typecheck
85
95
 
86
96
  开发环境、桌面打包、HTTP 接口和目录说明见[开发指南](docs/DEVELOPMENT.md)。
87
97
 
98
+ ## 贡献者
99
+
100
+ 这个项目有一半是玩家帮忙做出来的,谢谢每一位交出代码、画作和想法的朋友(按首次贡献时间排序):
101
+
102
+ | 贡献者 | 贡献 |
103
+ |---|---|
104
+ | [@1nuoiscute](https://github.com/1nuoiscute) | 猪猪王原型与恶魔猪形态、肥猪体型和胖胖猪动作立绘;十六项成就与小猪徽章系统([#6](https://github.com/CLICGGER-TYPES/dsh-piggy/pull/6));扩展公共进度事件与十二项扩展成就([#7](https://github.com/CLICGGER-TYPES/dsh-piggy/pull/7)) |
105
+ | [@anupamme](https://github.com/anupamme) | 报告桌面版更新依赖的安全问题([#5](https://github.com/CLICGGER-TYPES/dsh-piggy/pull/5)) |
106
+
107
+ 想加玩法、想画猪、想报 bug 都欢迎:到 [Issues](https://github.com/CLICGGER-TYPES/dsh-piggy/issues) 说一声,或直接提 [Pull Request](https://github.com/CLICGGER-TYPES/dsh-piggy/pulls)(Gitee 用户可以在 [Gitee 仓库](https://gitee.com/clicgger/dsh-piggy) 提 Issue)。合并进来的贡献会记在这张表里。
108
+
88
109
  ## 致谢与许可
89
110
 
90
- 特别感谢 @1nuoiscute 贡献猪猪王原型、恶魔猪、肥猪体型与胖胖猪动作立绘。视觉风格参考 [animal-island-ui](https://github.com/guokaigdg/animal-island-ui),玩法数值参考资料见 [THIRD-PARTY.md](THIRD-PARTY.md)。项目采用 [MIT License](LICENSE)。
111
+ 视觉风格参考 [animal-island-ui](https://github.com/guokaigdg/animal-island-ui),玩法数值参考资料见 [THIRD-PARTY.md](THIRD-PARTY.md)。项目采用 [MIT License](LICENSE)。
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#C3A362"/>
3
+ <circle cx="32" cy="27" r="25" fill="#C3A362"/><circle cx="32" cy="27" r="22" fill="#F6EDD3"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <rect x="40" y="33" width="14" height="13" rx="3" fill="#D9B089"/><path d="M47 33V46M40 37H54" stroke="#F8E6BC" stroke-width="2"/><path d="M47 32Q39 32 42 29Q44 27 47 32Q54 32 51 29Q49 27 47 32" fill="none" stroke="#D69D90" stroke-width="1.8"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#C3A362"/>
3
+ <circle cx="32" cy="27" r="25" fill="#C3A362"/><circle cx="32" cy="27" r="22" fill="#F6EDD3"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <path d="M48 29L50.3 34L55.7 34.7L51.8 38.4L52.7 43.8L48 41.2L43.3 43.8L44.2 38.4L40.3 34.7L45.7 34Z" fill="#E2BC68"/><circle cx="47" cy="35" r="1.2" fill="#FFF7DE"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#C3A362"/>
3
+ <circle cx="32" cy="27" r="25" fill="#C3A362"/><circle cx="32" cy="27" r="22" fill="#F6EDD3"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <rect x="38" y="30" width="18" height="17" rx="3" fill="#D6B480"/><path d="M41 36H53M47 33V44" stroke="#F7EDD7" stroke-width="1.6"/><circle cx="43" cy="33.5" r="1.7" fill="#E99BA8"/><circle cx="51" cy="33.5" r="1.7" fill="#94BAA1"/><circle cx="43" cy="40" r="1.7" fill="#A39CCA"/><circle cx="51" cy="40" r="1.7" fill="#EAB578"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#E995AE"/>
3
+ <circle cx="32" cy="27" r="25" fill="#E995AE"/><circle cx="32" cy="27" r="22" fill="#FADDE5"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <circle cx="18" cy="12" r="3" fill="#FFFFFF"/><circle cx="14" cy="16" r="2" fill="#FFFFFF"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#D1A552"/>
3
+ <circle cx="32" cy="27" r="25" fill="#D1A552"/><circle cx="32" cy="27" r="22" fill="#F7DFB0"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <path d="M22 16q-6-8-2-12q0 6 6 8zM40 14q6-8 2-12q0 6-6 8z" fill="#985A79"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#73AA83"/>
3
+ <circle cx="32" cy="27" r="25" fill="#73AA83"/><circle cx="32" cy="27" r="22" fill="#E4F1DD"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <path d="M46 39V28" stroke="#5F9169" stroke-width="2" stroke-linecap="round"/><path d="M46 32Q36 31 39 25Q45 25 46 32ZM46 30Q54 29 53 23Q47 23 46 30Z" fill="#8ABD7C"/><path d="M40 39H52L50 46H42Z" fill="#D4A07D"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#73AA83"/>
3
+ <circle cx="32" cy="27" r="25" fill="#73AA83"/><circle cx="32" cy="27" r="22" fill="#E4F1DD"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <path d="M39 36H54L52 46H41Z" fill="#C69871"/><path d="M42 34Q46 28 51 34" fill="none" stroke="#A57C5A" stroke-width="2" stroke-linecap="round"/><circle cx="43" cy="35" r="3" fill="#EC928C"/><circle cx="50" cy="35" r="3" fill="#F1C774"/><path d="M45 37L43 29Q47 26 49 31Z" fill="#8EB87B"/><path d="M44 29L42 26M44 29L46 25" stroke="#689268" stroke-width="1.4" stroke-linecap="round"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#73AA83"/>
3
+ <circle cx="32" cy="27" r="25" fill="#73AA83"/><circle cx="32" cy="27" r="22" fill="#E4F1DD"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <path d="M39 36H54L52 46H41Z" fill="#C69871"/><path d="M42 34Q46 28 51 34" fill="none" stroke="#A57C5A" stroke-width="2" stroke-linecap="round"/><circle cx="43" cy="35" r="3" fill="#EE9E82"/><circle cx="49" cy="35" r="3" fill="#EDBA64"/><path d="M48 33Q45 27 49 27Q53 30 48 33Z" fill="#78A574"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#83B3A5"/>
3
+ <circle cx="32" cy="27" r="25" fill="#83B3A5"/><circle cx="32" cy="27" r="22" fill="#DDEAE0"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <path d="M21 36q7-2 11 1q4-3 11-1v10q-7-2-11 0q-5-2-11 0z" fill="#FFFDF7"/><path d="M32 37v8" stroke="#83B3A5" stroke-width="1.5"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#AE96C8"/>
3
+ <circle cx="32" cy="27" r="25" fill="#AE96C8"/><circle cx="32" cy="27" r="22" fill="#E7DFF4"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <path d="M36 40q7-10 15 0q-8 10-15 0m15 0l6-4v8z" fill="#91B1CD"/><circle cx="40" cy="39" r="1" fill="#373A32"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="小猪成就徽章">
2
+ <path d="M15 44L12 62L24 57L29 62L32 43ZM32 43L35 62L42 57L54 62L49 44Z" fill="#DBAB51"/>
3
+ <circle cx="32" cy="27" r="25" fill="#DBAB51"/><circle cx="32" cy="27" r="22" fill="#FBE6BB"/>
4
+ <g transform="translate(8 1) scale(.74)">
5
+ <title>小猪</title>
6
+ <!-- 蜜桃色的小猪。平涂、无描边,耳朵和尾巴用洋红/浅橙的圆头线条。 -->
7
+ <!-- 内容坐标取自参考图,缩放到 64 视框并居中(原图 301×279 → 60×55.6)。 -->
8
+ <g transform="translate(-7.17 -0.78) scale(0.1993)" stroke-linecap="round" stroke-linejoin="round">
9
+ <!-- 远侧后腿 -->
10
+ <path fill="#FF9FA5" d="M214 210C213 221 210 232 211 246C212 256 224 257 233 254C244 251 246 240 247 225L248 211Z"/>
11
+ <!-- 卷起来的尾巴 -->
12
+ <path d="M294 62C298 47 305 40 315 45C327 50 341 64 329 72C319 80 309 67 316 51C322 39 330 31 339 35"
13
+ fill="none" stroke="#FFD1AF" stroke-width="11"/>
14
+ <!-- 身体、口鼻和三条可见的腿 -->
15
+ <path fill="#FFD1AF" d="M110 70C155 46 192 37 231 41C259 43 279 48 298 64C320 83 332 105 332 128C333 146 326 163 319 180C312 197 309 223 308 241C308 254 301 260 289 260C277 260 270 255 269 244L267 230C266 222 261 219 253 220C231 227 213 235 192 240L191 282C191 292 185 298 173 298C159 298 152 293 152 284L151 248C140 248 131 247 123 245L122 271C121 282 116 287 104 287C93 287 88 283 87 273L84 232C63 224 52 210 48 192C42 170 48 148 62 126C69 115 75 106 80 94C87 79 96 68 110 70Z"/>
16
+ <!-- 耳朵底下的蜜桃色轮廓 -->
17
+ <path fill="#FFD1AF" d="M63 107C64 97 75 81 84 68C90 58 102 58 108 66L115 87L90 113Z"/>
18
+ <!-- 松垮圆润的洋红耳朵 -->
19
+ <path d="M97 65C88 63 83 75 78 82C71 91 65 101 64 106C68 116 86 109 93 98"
20
+ fill="none" stroke="#E95892" stroke-width="10"/>
21
+ <path d="M187 104C174 110 184 129 193 139C201 147 213 150 220 139C225 131 224 119 222 112"
22
+ fill="none" stroke="#E95892" stroke-width="11"/>
23
+ <!-- 眼睛:特意画成有机的形状,不是正圆 -->
24
+ <path fill="#373A32" d="M91 130C84 129 79 136 80 144C80 151 85 155 92 154C99 153 103 147 102 140C102 134 98 130 91 130Z"/>
25
+ <path fill="#373A32" d="M166 145C159 144 154 150 154 157C153 164 158 170 165 170C171 170 176 164 176 157C176 151 173 146 166 145Z"/>
26
+ <!-- 歪着的粉鼻子 -->
27
+ <path fill="#FF8195" d="M108 165C91 161 78 166 74 175C68 186 74 200 90 207C106 214 125 214 135 204C143 196 140 183 129 174C123 170 116 167 108 165Z"/>
28
+ <path fill="#373A32" d="M92 175C87 174 84 178 85 185C85 191 89 196 94 195C99 194 101 188 99 182C98 178 96 175 92 175Z"/>
29
+ <path fill="#373A32" d="M115 180C110 178 107 183 107 189C106 195 109 200 114 200C119 200 122 195 122 189C122 184 119 180 115 180Z"/>
30
+ <!-- 腮红 -->
31
+ <ellipse cx="155" cy="187" rx="12" ry="7" fill="#FFAFAC" opacity=".75"/>
32
+ </g>
33
+ </g>
34
+ <circle cx="46" cy="39" r="6" fill="#E6BF68"/><rect x="45" y="35" width="2" height="8" rx="1" fill="#FFF3C8"/>
35
+ <circle cx="13" cy="28" r="1.3" fill="#FFFDF7"/><circle cx="51" cy="25" r="1.3" fill="#FFFDF7"/>
36
+ </svg>