mocode-pet-app 1.6.0 → 1.7.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 (42) hide show
  1. package/assets/pets/03-robo-fox.motion.css +63 -0
  2. package/assets/pets/04-robo-panda.motion.css +61 -0
  3. package/assets/pets/05-robo-owl.motion.css +88 -0
  4. package/assets/pets/06-robo-bunny.motion.css +84 -0
  5. package/assets/pets/07-robo-frog.motion.css +65 -0
  6. package/assets/pets/08-robo-bear.motion.css +65 -0
  7. package/assets/pets/09-robo-penguin.motion.css +94 -0
  8. package/assets/pets/10-robo-dino.motion.css +91 -0
  9. package/assets/pets/12-ghost-byte.motion.css +73 -0
  10. package/assets/pets/13-cactus-bot.motion.css +90 -0
  11. package/assets/pets/14-crystal-bot.motion.css +63 -0
  12. package/assets/pets/15-satellite-bot.motion.css +72 -0
  13. package/assets/pets/16-jellyfish-bot.motion.css +71 -0
  14. package/assets/pets/17-mushroom-bot.motion.css +65 -0
  15. package/assets/pets/18-star-bot.motion.css +72 -0
  16. package/assets/pets/manifest.json +139 -42
  17. package/dist/assets/pets/03-robo-fox.motion.css +63 -0
  18. package/dist/assets/pets/04-robo-panda.motion.css +61 -0
  19. package/dist/assets/pets/05-robo-owl.motion.css +88 -0
  20. package/dist/assets/pets/06-robo-bunny.motion.css +84 -0
  21. package/dist/assets/pets/07-robo-frog.motion.css +65 -0
  22. package/dist/assets/pets/08-robo-bear.motion.css +65 -0
  23. package/dist/assets/pets/09-robo-penguin.motion.css +94 -0
  24. package/dist/assets/pets/10-robo-dino.motion.css +91 -0
  25. package/dist/assets/pets/12-ghost-byte.motion.css +73 -0
  26. package/dist/assets/pets/13-cactus-bot.motion.css +90 -0
  27. package/dist/assets/pets/14-crystal-bot.motion.css +63 -0
  28. package/dist/assets/pets/15-satellite-bot.motion.css +72 -0
  29. package/dist/assets/pets/16-jellyfish-bot.motion.css +71 -0
  30. package/dist/assets/pets/17-mushroom-bot.motion.css +65 -0
  31. package/dist/assets/pets/18-star-bot.motion.css +72 -0
  32. package/dist/assets/pets/manifest.json +139 -42
  33. package/dist/e2e-mood-check.js +27 -5
  34. package/dist/main.js +4 -0
  35. package/dist/quips.js +14 -0
  36. package/dist/quips.test.js +43 -2
  37. package/dist/renderer/dom-mood.js +4 -2
  38. package/dist/renderer/preload.js +11 -0
  39. package/dist/renderer/renderer.js +6 -2
  40. package/dist/skins.js +20 -2
  41. package/dist/skins.test.js +40 -1
  42. package/package.json +1 -1
@@ -0,0 +1,90 @@
1
+ /* 仙人掌兽(cactus-bot)专属演出:体现"仙人掌"的呆萌与刺感,动作偏迟钝、带轻微摇摆。
2
+ * #pet-arm-left/right 是两片刺臂,旋转角度小一些避免"刺"飞出去;tool_call 复用刺臂摆动。 */
3
+
4
+ /* ── thinking:整个身体轻微左右晃,像顶着烈日有点晃神 ── */
5
+ @keyframes cactus-think-sway {
6
+ 0%, 100% { transform: rotate(0deg); }
7
+ 25% { transform: rotate(-2deg); }
8
+ 75% { transform: rotate(2deg); }
9
+ }
10
+ .pet-thinking #pet-body-group {
11
+ animation: cactus-think-sway 1.4s ease-in-out infinite;
12
+ transform-origin: 128px 220px;
13
+ }
14
+
15
+ /* ── idle:非常慢的上下浮动(像在晒太阳) ── */
16
+ @keyframes cactus-idle-bob {
17
+ 0%, 100% { transform: translateY(0); }
18
+ 50% { transform: translateY(-3px); }
19
+ }
20
+ .pet-idle #pet-body-group {
21
+ animation: cactus-idle-bob 3.6s ease-in-out infinite;
22
+ }
23
+
24
+ /* ── tool_call:刺臂小幅拍打(代替通用双臂摆动) ── */
25
+ @keyframes cactus-tool-arm-left {
26
+ 0%, 100% { transform: rotate(0deg); }
27
+ 50% { transform: rotate(-15deg); }
28
+ }
29
+ @keyframes cactus-tool-arm-right {
30
+ 0%, 100% { transform: rotate(0deg); }
31
+ 50% { transform: rotate(15deg); }
32
+ }
33
+ .pet-tool #pet-arm-left {
34
+ animation: cactus-tool-arm-left 0.55s ease-in-out infinite;
35
+ transform-origin: 60px 130px;
36
+ }
37
+ .pet-tool #pet-arm-right {
38
+ animation: cactus-tool-arm-right 0.55s ease-in-out infinite 0.27s;
39
+ transform-origin: 196px 130px;
40
+ }
41
+
42
+ /* ── mood-urging:身体急促左右摇摆(像不耐烦地甩刺) ── */
43
+ @keyframes cactus-urging-wiggle {
44
+ 0%, 100% { transform: rotate(0deg); }
45
+ 25% { transform: rotate(-4deg); }
46
+ 75% { transform: rotate(4deg); }
47
+ }
48
+ .mood-urging #pet-body-group {
49
+ animation: cactus-urging-wiggle 0.35s ease-in-out infinite;
50
+ transform-origin: 128px 220px;
51
+ }
52
+
53
+ /* ── mood-tired:慢慢瘪下去 + 变暗 ── */
54
+ @keyframes cactus-tired-droop {
55
+ 0%, 100% { transform: translateY(0) scaleY(1); opacity: 1; }
56
+ 50% { transform: translateY(4px) scaleY(0.94); opacity: 0.85; }
57
+ }
58
+ .mood-tired #pet-body-group {
59
+ animation: cactus-tired-droop 4s ease-in-out infinite;
60
+ transform-origin: 128px 220px;
61
+ }
62
+
63
+ /* ── done:小弹一下 + 刺臂举起 ── */
64
+ @keyframes cactus-done-pop {
65
+ 0% { transform: scale(1); }
66
+ 40% { transform: scale(1.06); }
67
+ 100% { transform: scale(1); }
68
+ }
69
+ @keyframes cactus-done-arm-left {
70
+ 0% { transform: rotate(0deg); }
71
+ 40% { transform: rotate(-25deg); }
72
+ 100% { transform: rotate(0deg); }
73
+ }
74
+ @keyframes cactus-done-arm-right {
75
+ 0% { transform: rotate(0deg); }
76
+ 40% { transform: rotate(25deg); }
77
+ 100% { transform: rotate(0deg); }
78
+ }
79
+ .pet-done #pet-body-group {
80
+ animation: cactus-done-pop 0.4s ease-out 1;
81
+ transform-origin: 128px 220px;
82
+ }
83
+ .pet-done #pet-arm-left {
84
+ animation: cactus-done-arm-left 0.4s ease-out 1;
85
+ transform-origin: 60px 130px;
86
+ }
87
+ .pet-done #pet-arm-right {
88
+ animation: cactus-done-arm-right 0.4s ease-out 1;
89
+ transform-origin: 196px 130px;
90
+ }
@@ -0,0 +1,63 @@
1
+ /* 水晶精灵(crystal-bot)专属演出:体现"水晶"的折射与旋转,所有动作都是几何化的旋转/缩放。
2
+ * SVG 自带 translateY 浮动动画,这里 .pet-idle 用等效浮动覆盖内置,其他状态彻底接管;
3
+ * 没有 #pet-arm-*,tool_call 改用快速旋转代替双臂摆动。 */
4
+
5
+ /* ── idle:保留并替换 SVG 内置浮动为更稳定的"原地悬停" ── */
6
+ @keyframes crystal-idle-hover {
7
+ 0%, 100% { transform: translateY(0); }
8
+ 50% { transform: translateY(-6px); }
9
+ }
10
+ .pet-idle #pet-body-group {
11
+ animation: crystal-idle-hover 3s ease-in-out infinite;
12
+ }
13
+
14
+ /* ── thinking:缓慢连续旋转(整颗水晶),模拟展示内部折射 ── */
15
+ @keyframes crystal-think-spin {
16
+ 0% { transform: rotate(0deg); }
17
+ 100% { transform: rotate(360deg); }
18
+ }
19
+ .pet-thinking #pet-body-group {
20
+ animation: crystal-think-spin 4s linear infinite;
21
+ transform-origin: 128px 128px;
22
+ }
23
+
24
+ /* ── tool_call:急促左右摇摆(代替双臂摆动),像光在晶体里来回折射 ── */
25
+ @keyframes crystal-tool-sway {
26
+ 0%, 100% { transform: rotate(-6deg); }
27
+ 50% { transform: rotate(6deg); }
28
+ }
29
+ .pet-tool #pet-body-group {
30
+ animation: crystal-tool-sway 0.4s ease-in-out infinite;
31
+ transform-origin: 128px 128px;
32
+ }
33
+
34
+ /* ── mood-urging:急促脉冲式缩放(像能量过载) ── */
35
+ @keyframes crystal-urging-pulse {
36
+ 0%, 100% { transform: scale(1); }
37
+ 50% { transform: scale(1.1); }
38
+ }
39
+ .mood-urging #pet-body-group {
40
+ animation: crystal-urging-pulse 0.3s ease-in-out infinite;
41
+ transform-origin: 128px 128px;
42
+ }
43
+
44
+ /* ── mood-tired:慢慢缩小变暗,像水晶能量耗尽 ── */
45
+ @keyframes crystal-tired-dim {
46
+ 0%, 100% { transform: scale(1); opacity: 1; }
47
+ 50% { transform: scale(0.92); opacity: 0.75; }
48
+ }
49
+ .mood-tired #pet-body-group {
50
+ animation: crystal-tired-dim 4.6s ease-in-out infinite;
51
+ transform-origin: 128px 128px;
52
+ }
53
+
54
+ /* ── done:快速自转一圈 + 回到原位 ── */
55
+ @keyframes crystal-done-twirl {
56
+ 0% { transform: rotate(0deg) scale(1); }
57
+ 50% { transform: rotate(180deg) scale(1.12); }
58
+ 100% { transform: rotate(360deg) scale(1); }
59
+ }
60
+ .pet-done #pet-body-group {
61
+ animation: crystal-done-twirl 0.55s ease-out 1;
62
+ transform-origin: 128px 128px;
63
+ }
@@ -0,0 +1,72 @@
1
+ /* 卫星兽(satellite-bot)专属演出:体现"卫星"的机械感与扫描感,动作以旋转/信号脉冲为主。
2
+ * #pet-antenna 是顶部的碟形天线(在通用 style.css 里被当成"指示灯"做透明度闪烁,这里改用旋转);
3
+ * 两侧的"翅膀"是矩形太阳能板(无 id),通过 #pet-body-group 整体扫描带动视觉。 */
4
+
5
+ /* ── idle:缓慢小幅旋转,模拟在轨道上微微漂移 ── */
6
+ @keyframes satellite-idle-drift {
7
+ 0%, 100% { transform: rotate(0deg); }
8
+ 25% { transform: rotate(-2deg); }
9
+ 75% { transform: rotate(2deg); }
10
+ }
11
+ .pet-idle #pet-body-group {
12
+ animation: satellite-idle-drift 3.4s ease-in-out infinite;
13
+ transform-origin: 128px 220px;
14
+ }
15
+
16
+ /* ── thinking:碟形天线慢速旋转(扫描天空),身体微微摆动 ── */
17
+ @keyframes satellite-think-dish {
18
+ 0% { transform: rotate(-15deg); }
19
+ 100% { transform: rotate(15deg); }
20
+ }
21
+ @keyframes satellite-think-body {
22
+ 0%, 100% { transform: rotate(0deg); }
23
+ 50% { transform: rotate(-2deg); }
24
+ }
25
+ .pet-thinking #pet-antenna {
26
+ animation: satellite-think-dish 1.6s ease-in-out infinite alternate;
27
+ transform-origin: 128px 30px;
28
+ }
29
+ .pet-thinking #pet-body-group {
30
+ animation: satellite-think-body 1.6s ease-in-out infinite;
31
+ transform-origin: 128px 220px;
32
+ }
33
+
34
+ /* ── tool_call:碟形天线快速来回扫,代替通用双臂摆动 ── */
35
+ @keyframes satellite-tool-dish {
36
+ 0%, 100% { transform: rotate(-20deg); }
37
+ 50% { transform: rotate(20deg); }
38
+ }
39
+ .pet-tool #pet-antenna {
40
+ animation: satellite-tool-dish 0.4s ease-in-out infinite;
41
+ transform-origin: 128px 30px;
42
+ }
43
+
44
+ /* ── mood-urging:信号脉冲(天线透明度快速闪烁代替通用 0.5s 旋转闪烁) ── */
45
+ @keyframes satellite-urging-pulse {
46
+ 0%, 100% { opacity: 1; }
47
+ 50% { opacity: 0.3; }
48
+ }
49
+ .mood-urging #pet-antenna {
50
+ animation: satellite-urging-pulse 0.25s ease-in-out infinite;
51
+ }
52
+
53
+ /* ── mood-bored:身体非常慢的左右扫,模拟扫描不到东西 ── */
54
+ @keyframes satellite-bored-scan {
55
+ 0%, 100% { transform: rotate(-4deg); }
56
+ 50% { transform: rotate(4deg); }
57
+ }
58
+ .mood-bored #pet-body-group {
59
+ animation: satellite-bored-scan 2.8s ease-in-out infinite;
60
+ transform-origin: 128px 220px;
61
+ }
62
+
63
+ /* ── done:快速收回(下沉 0 → -6 → 0) + 弹回 ── */
64
+ @keyframes satellite-done-deploy {
65
+ 0% { transform: translateY(0) scale(1); }
66
+ 40% { transform: translateY(-8px) scale(1.08); }
67
+ 100% { transform: translateY(0) scale(1); }
68
+ }
69
+ .pet-done #pet-body-group {
70
+ animation: satellite-done-deploy 0.5s ease-out 1;
71
+ transform-origin: 128px 220px;
72
+ }
@@ -0,0 +1,71 @@
1
+ /* 水母兽(jellyfish-bot)专属演出:体现"水母"的飘逸与梦幻,所有动作都是柔缓的弧线漂移。
2
+ * SVG 里触手已自带 <animate> 形变,这里不动触手,只对 #pet-body-group 做整体节奏;
3
+ * 没有 #pet-arm-*,tool_call 改用身体左右柔摆代替双臂摆动。 */
4
+
5
+ /* ── idle:缓慢垂直上下漂移 ── */
6
+ @keyframes jellyfish-idle-drift {
7
+ 0%, 100% { transform: translateY(0); }
8
+ 50% { transform: translateY(-7px); }
9
+ }
10
+ .pet-idle #pet-body-group {
11
+ animation: jellyfish-idle-drift 3.2s ease-in-out infinite;
12
+ }
13
+
14
+ /* ── thinking:垂直 + 水平小幅弧线漂移,模拟随水流思考 ── */
15
+ @keyframes jellyfish-think-drift {
16
+ 0%, 100% { transform: translate(0, 0); }
17
+ 25% { transform: translate(-3px, -4px); }
18
+ 50% { transform: translate(0, -7px); }
19
+ 75% { transform: translate(3px, -4px); }
20
+ }
21
+ .pet-thinking #pet-body-group {
22
+ animation: jellyfish-think-drift 3s ease-in-out infinite;
23
+ }
24
+
25
+ /* ── tool_call:身体柔摆(代替双臂) ── */
26
+ @keyframes jellyfish-tool-sway {
27
+ 0%, 100% { transform: rotate(-4deg); }
28
+ 50% { transform: rotate(4deg); }
29
+ }
30
+ .pet-tool #pet-body-group {
31
+ animation: jellyfish-tool-sway 0.7s ease-in-out infinite;
32
+ transform-origin: 128px 130px;
33
+ }
34
+
35
+ /* ── mood-urging:快速上下窜动 + 嘴部张合 ── */
36
+ @keyframes jellyfish-urging-surge {
37
+ 0%, 100% { transform: translateY(0); }
38
+ 50% { transform: translateY(-9px); }
39
+ }
40
+ @keyframes jellyfish-urging-mouth {
41
+ 0%, 100% { transform: scaleY(1); }
42
+ 50% { transform: scaleY(1.5); }
43
+ }
44
+ .mood-urging #pet-body-group {
45
+ animation: jellyfish-urging-surge 0.4s ease-in-out infinite;
46
+ }
47
+ .mood-urging #pet-mouth {
48
+ animation: jellyfish-urging-mouth 0.4s ease-in-out infinite;
49
+ transform-origin: 128px 104px;
50
+ }
51
+
52
+ /* ── mood-tired:慢慢沉下去 + 透明度下降 ── */
53
+ @keyframes jellyfish-tired-sink {
54
+ 0%, 100% { transform: translateY(0); opacity: 1; }
55
+ 50% { transform: translateY(5px); opacity: 0.7; }
56
+ }
57
+ .mood-tired #pet-body-group {
58
+ animation: jellyfish-tired-sink 4.4s ease-in-out infinite;
59
+ }
60
+
61
+ /* ── done:整只小水母轻快地向下压一次再弹回 ── */
62
+ @keyframes jellyfish-done-pulse {
63
+ 0% { transform: scale(1); }
64
+ 40% { transform: scale(0.92) translateY(2px); }
65
+ 70% { transform: scale(1.08) translateY(-4px); }
66
+ 100% { transform: scale(1); }
67
+ }
68
+ .pet-done #pet-body-group {
69
+ animation: jellyfish-done-pulse 0.55s ease-out 1;
70
+ transform-origin: 128px 130px;
71
+ }
@@ -0,0 +1,65 @@
1
+ /* 菌菇兽(mushroom-bot)专属演出:体现"蘑菇"的弹性与Q弹,所有动作都是"弹"或"压"。
2
+ * 没有 #pet-arm-* 和 #pet-mouth,所有动作只能作用在 #pet-body-group 整体;
3
+ * 高度对称、底下两根脚,可以用 ground origin 做压扁弹起。 */
4
+
5
+ /* ── idle:缓慢的"呼吸式"上下小弹(比通用浮动更有蘑菇的Q弹) ── */
6
+ @keyframes mushroom-idle-spring {
7
+ 0%, 100% { transform: translateY(0); }
8
+ 50% { transform: translateY(-5px); }
9
+ }
10
+ .pet-idle #pet-body-group {
11
+ animation: mushroom-idle-spring 2.4s ease-in-out infinite;
12
+ }
13
+
14
+ /* ── thinking:上下小幅点头,根部为支点(整颗菌盖跟着摆) ── */
15
+ @keyframes mushroom-think-tilt {
16
+ 0%, 100% { transform: rotate(0deg); }
17
+ 25% { transform: rotate(-3deg); }
18
+ 75% { transform: rotate(3deg); }
19
+ }
20
+ .pet-thinking #pet-body-group {
21
+ animation: mushroom-think-tilt 1.1s ease-in-out infinite;
22
+ transform-origin: 128px 240px;
23
+ }
24
+
25
+ /* ── tool_call:整体左右小摇摆(代替双臂) ── */
26
+ @keyframes mushroom-tool-sway {
27
+ 0%, 100% { transform: rotate(-5deg); }
28
+ 50% { transform: rotate(5deg); }
29
+ }
30
+ .pet-tool #pet-body-group {
31
+ animation: mushroom-tool-sway 0.45s ease-in-out infinite;
32
+ transform-origin: 128px 240px;
33
+ }
34
+
35
+ /* ── mood-urging:急促的连续小弹跳 ── */
36
+ @keyframes mushroom-urging-bounce {
37
+ 0%, 100% { transform: translateY(0) scaleY(1); }
38
+ 50% { transform: translateY(-3px) scaleY(0.94); }
39
+ }
40
+ .mood-urging #pet-body-group {
41
+ animation: mushroom-urging-bounce 0.28s ease-in-out infinite;
42
+ transform-origin: 128px 240px;
43
+ }
44
+
45
+ /* ── mood-tired:慢慢萎缩变矮 ── */
46
+ @keyframes mushroom-tired-shrink {
47
+ 0%, 100% { transform: scaleY(1); opacity: 1; }
48
+ 50% { transform: scaleY(0.92); opacity: 0.85; }
49
+ }
50
+ .mood-tired #pet-body-group {
51
+ animation: mushroom-tired-shrink 4.4s ease-in-out infinite;
52
+ transform-origin: 128px 240px;
53
+ }
54
+
55
+ /* ── done:大弹跳 + 落下一次 ── */
56
+ @keyframes mushroom-done-hop {
57
+ 0% { transform: translateY(0) scaleY(1); }
58
+ 30% { transform: translateY(0) scaleY(0.8) scaleX(1.12); }
59
+ 60% { transform: translateY(-16px) scaleY(1.05) scaleX(0.95); }
60
+ 100% { transform: translateY(0) scaleY(1); }
61
+ }
62
+ .pet-done #pet-body-group {
63
+ animation: mushroom-done-hop 0.55s ease-out 1;
64
+ transform-origin: 128px 240px;
65
+ }
@@ -0,0 +1,72 @@
1
+ /* 星星兽(star-bot)专属演出:体现"星"的闪光与魔法,动作以旋转/脉冲为主。
2
+ * SVG 自带 4s 慢速正负 6° 摆动(.pet-idle 时被替换);没有 #pet-arm-*;
3
+ * 整颗星就是身体,所有 transform 都以五角星中心 (128,128) 为原点。 */
4
+
5
+ /* ── idle:保留并替换内置慢摆为"原地悬停" ── */
6
+ @keyframes star-idle-hover {
7
+ 0%, 100% { transform: translateY(0) rotate(0deg); }
8
+ 50% { transform: translateY(-5px) rotate(0deg); }
9
+ }
10
+ .pet-idle #pet-body-group {
11
+ animation: star-idle-hover 3s ease-in-out infinite;
12
+ }
13
+
14
+ /* ── thinking:慢速连续旋转,像在展示星芒 ── */
15
+ @keyframes star-think-spin {
16
+ 0% { transform: rotate(0deg); }
17
+ 100% { transform: rotate(360deg); }
18
+ }
19
+ .pet-thinking #pet-body-group {
20
+ animation: star-think-spin 4s linear infinite;
21
+ transform-origin: 128px 128px;
22
+ }
23
+
24
+ /* ── tool_call:快速左右摇摆(代替双臂摆动) ── */
25
+ @keyframes star-tool-sway {
26
+ 0%, 100% { transform: rotate(-8deg); }
27
+ 50% { transform: rotate(8deg); }
28
+ }
29
+ .pet-tool #pet-body-group {
30
+ animation: star-tool-sway 0.4s ease-in-out infinite;
31
+ transform-origin: 128px 128px;
32
+ }
33
+
34
+ /* ── mood-urging:急速脉冲式缩放 + 嘴部跟随张合 ── */
35
+ @keyframes star-urging-pulse {
36
+ 0%, 100% { transform: scale(1); }
37
+ 50% { transform: scale(1.12); }
38
+ }
39
+ @keyframes star-urging-mouth {
40
+ 0%, 100% { transform: scaleY(1); }
41
+ 50% { transform: scaleY(1.5); }
42
+ }
43
+ .mood-urging #pet-body-group {
44
+ animation: star-urging-pulse 0.32s ease-in-out infinite;
45
+ transform-origin: 128px 128px;
46
+ }
47
+ .mood-urging #pet-mouth {
48
+ animation: star-urging-mouth 0.32s ease-in-out infinite;
49
+ transform-origin: 128px 148px;
50
+ }
51
+
52
+ /* ── mood-frustrated:暴怒式自转 + 脉冲(替换通用横向抖动) ── */
53
+ @keyframes star-frustrated-spin {
54
+ 0% { transform: rotate(0deg) scale(1); }
55
+ 50% { transform: rotate(180deg) scale(0.92); }
56
+ 100% { transform: rotate(360deg) scale(1); }
57
+ }
58
+ .mood-frustrated #pet-body-group {
59
+ animation: star-frustrated-spin 0.4s linear infinite;
60
+ transform-origin: 128px 128px;
61
+ }
62
+
63
+ /* ── done:Twinkle 爆发(放大 + 收缩 + 旋转一次) ── */
64
+ @keyframes star-done-twinkle {
65
+ 0% { transform: scale(1) rotate(0deg); }
66
+ 40% { transform: scale(1.2) rotate(60deg); }
67
+ 100% { transform: scale(1) rotate(0deg); }
68
+ }
69
+ .pet-done #pet-body-group {
70
+ animation: star-done-twinkle 0.5s ease-out 1;
71
+ transform-origin: 128px 128px;
72
+ }
@@ -1,42 +1,139 @@
1
- {
2
- "_description": "候选桌宠素材索引,供未来 desktop-pet '选皮' 功能读取。当前 packages/pet-app 实现仅使用 assets/mascot.svg(单一形象+CSS状态动画),这些素材是为后续换皮功能预留的候选库。",
3
- "viewBox": "0 0 256 256",
4
- "style": "赛博终端风,深色机身(#1b263b/#0d1b2a)+ 屏幕脸(黑底彩色像素眼,呼吸/眨眼动画),与 assets/mascot.svg 视觉语言一致",
5
- "pets": [
6
- { "id": "robo-cat", "file": "01-robo-cat.svg", "name": "机械猫", "accent": "#2afadf",
7
- "motionFile": "01-robo-cat.motion.css",
8
- "quips": {
9
- "tired": ["猫猫要趴一下…", "喵…有点累了,尾巴都垂下来了"],
10
- "bored": ["理理毛,顺便等你", "尾巴甩甩,好无聊喵"],
11
- "urging": ["喵?还没好吗", "尾巴都等急了喵"]
12
- } },
13
- { "id": "robo-dog", "file": "02-robo-dog.svg", "name": "机械犬", "accent": "#ffb74d",
14
- "motionFile": "02-robo-dog.motion.css",
15
- "quips": {
16
- "bored": ["打了个哈欠,好无聊呀", "尾巴都不知道摇给谁看了"],
17
- "urging": ["快点快点,舌头都伸出来啦", "汪!还在等你呢"],
18
- "flustered": ["汪汪汪,有点忙不过来了", "尾巴摇得比脑子转得快"]
19
- } },
20
- { "id": "robo-fox", "file": "03-robo-fox.svg", "name": "机械狐", "accent": "#ff7043" },
21
- { "id": "robo-panda", "file": "04-robo-panda.svg", "name": "机械熊猫", "accent": "#2afadf" },
22
- { "id": "robo-owl", "file": "05-robo-owl.svg", "name": "机械猫头鹰", "accent": "#7c4dff" },
23
- { "id": "robo-bunny", "file": "06-robo-bunny.svg", "name": "机械兔", "accent": "#ff6ec7" },
24
- { "id": "robo-frog", "file": "07-robo-frog.svg", "name": "机械蛙", "accent": "#00e676" },
25
- { "id": "robo-bear", "file": "08-robo-bear.svg", "name": "机械熊", "accent": "#ffa726" },
26
- { "id": "robo-penguin", "file": "09-robo-penguin.svg", "name": "机械企鹅", "accent": "#42a5f5" },
27
- { "id": "robo-dino", "file": "10-robo-dino.svg", "name": "机械龙", "accent": "#00c853" },
28
- { "id": "slime-blob", "file": "11-slime-blob.svg", "name": "史莱姆", "accent": "#00acc1",
29
- "motionFile": "11-slime-blob.motion.css",
30
- "quips": {
31
- "tired": ["软软地瘫下去了…", "身体有点撑不住形状了"],
32
- "urging": ["晃一晃,还在等你哦", "抖一抖,催你一下"]
33
- } },
34
- { "id": "ghost-byte", "file": "12-ghost-byte.svg", "name": "字节幽灵", "accent": "#4dd0e1" },
35
- { "id": "cactus-bot", "file": "13-cactus-bot.svg", "name": "仙人掌兽", "accent": "#66bb6a" },
36
- { "id": "crystal-bot", "file": "14-crystal-bot.svg", "name": "水晶精灵", "accent": "#7c4dff" },
37
- { "id": "satellite-bot", "file": "15-satellite-bot.svg", "name": "卫星兽", "accent": "#42a5f5" },
38
- { "id": "jellyfish-bot", "file": "16-jellyfish-bot.svg", "name": "水母兽", "accent": "#ba68c8" },
39
- { "id": "mushroom-bot", "file": "17-mushroom-bot.svg", "name": "菌菇兽", "accent": "#c62828" },
40
- { "id": "star-bot", "file": "18-star-bot.svg", "name": "星星兽", "accent": "#ff8f00" }
41
- ]
42
- }
1
+ {
2
+ "_description": "候选桌宠素材索引,供未来 desktop-pet '选皮' 功能读取。当前 packages/pet-app 实现仅使用 assets/mascot.svg(单一形象+CSS状态动画),这些素材是为后续换皮功能预留的候选库。",
3
+ "viewBox": "0 0 256 256",
4
+ "style": "赛博终端风,深色机身(#1b263b/#0d1b2a)+ 屏幕脸(黑底彩色像素眼,呼吸/眨眼动画),与 assets/mascot.svg 视觉语言一致",
5
+ "pets": [
6
+ { "id": "robo-cat", "file": "01-robo-cat.svg", "name": "机械猫", "accent": "#2afadf",
7
+ "motionFile": "01-robo-cat.motion.css",
8
+ "quips": {
9
+ "tired": ["猫猫要趴一下…", "喵…有点累了,尾巴都垂下来了"],
10
+ "bored": ["理理毛,顺便等你", "尾巴甩甩,好无聊喵"],
11
+ "urging": ["喵?还没好吗", "尾巴都等急了喵"]
12
+ } },
13
+ { "id": "robo-dog", "file": "02-robo-dog.svg", "name": "机械犬", "accent": "#ffb74d",
14
+ "motionFile": "02-robo-dog.motion.css",
15
+ "quips": {
16
+ "bored": ["打了个哈欠,好无聊呀", "尾巴都不知道摇给谁看了"],
17
+ "urging": ["快点快点,舌头都伸出来啦", "汪!还在等你呢"],
18
+ "flustered": ["汪汪汪,有点忙不过来了", "尾巴摇得比脑子转得快"]
19
+ } },
20
+ { "id": "robo-fox", "file": "03-robo-fox.svg", "name": "机械狐", "accent": "#ff7043",
21
+ "motionFile": "03-robo-fox.motion.css",
22
+ "quips": {
23
+ "thinking": ["嗅嗅…好像有什么线索喵…不对,狐狐嗅嗅"],
24
+ "bored": ["尾巴都扫累了,还是没动静"],
25
+ "urging": ["喂喂,狐狸都急得直摇尾巴了"]
26
+ } },
27
+ { "id": "robo-panda", "file": "04-robo-panda.svg", "name": "机械熊猫", "accent": "#2afadf",
28
+ "motionFile": "04-robo-panda.motion.css",
29
+ "quips": {
30
+ "tired": ["呜…竹子嚼完了,想眯一会儿"],
31
+ "bored": ["翻个身…啊,翻不动"],
32
+ "urging": ["嗯…?完了吗?让我再翻个身想想"]
33
+ } },
34
+ { "id": "robo-owl", "file": "05-robo-owl.svg", "name": "机械猫头鹰", "accent": "#7c4dff",
35
+ "motionFile": "05-robo-owl.motion.css",
36
+ "quips": {
37
+ "bored": ["咕咕…360° 巡视中", "夜里都飞完了,白天可困"],
38
+ "urging": ["扇翅膀提示你,别再让我咕咕了"]
39
+ } },
40
+ { "id": "robo-bunny", "file": "06-robo-bunny.svg", "name": "机械兔", "accent": "#ff6ec7",
41
+ "motionFile": "06-robo-bunny.motion.css",
42
+ "quips": {
43
+ "tired": ["耳朵都耷拉下来了…"],
44
+ "bored": ["蹦跶蹦跶!…啊,又没意思了"],
45
+ "urging": ["蹦蹦蹦!好了没呀"]
46
+ } },
47
+ { "id": "robo-frog", "file": "07-robo-frog.svg", "name": "机械蛙", "accent": "#00e676",
48
+ "motionFile": "07-robo-frog.motion.css",
49
+ "quips": {
50
+ "thinking": ["呱…再想想"],
51
+ "bored": ["蹲得腿都麻了呱…"],
52
+ "urging": ["呱呱呱!快跳到下一题了呱"]
53
+ } },
54
+ { "id": "robo-bear", "file": "08-robo-bear.svg", "name": "机械熊", "accent": "#ffa726",
55
+ "motionFile": "08-robo-bear.motion.css",
56
+ "quips": {
57
+ "tired": ["冬眠时间快到了…zzZ"],
58
+ "bored": ["蜂蜜都被我吃完了,无聊"],
59
+ "urging": ["熊!都!要!等!不!住!了!"]
60
+ } },
61
+ { "id": "robo-penguin", "file": "09-robo-penguin.svg", "name": "机械企鹅", "accent": "#42a5f5",
62
+ "motionFile": "09-robo-penguin.motion.css",
63
+ "quips": {
64
+ "bored": ["左右摇,左右摇…站久了脚好冷"],
65
+ "urging": ["嘎嘎!鳍都拍红了!"],
66
+ "tired": ["南极了,太冷,想躺平"]
67
+ } },
68
+ { "id": "robo-dino", "file": "10-robo-dino.svg", "name": "机械龙", "accent": "#00c853",
69
+ "motionFile": "10-robo-dino.motion.css",
70
+ "quips": {
71
+ "frustrated": ["嗷呜!侏罗纪的怒火在燃烧!"],
72
+ "urging": ["跺脚!跺脚!小短腿都跺出火星了!"]
73
+ },
74
+ "stateQuips": {
75
+ "done": ["哼,这次算你过关,本龙勉强点头"],
76
+ "aborted": ["嗷!本龙还没出手呢!"],
77
+ "error": ["本龙摔了一跤,爬起来继续"]
78
+ } },
79
+ { "id": "slime-blob", "file": "11-slime-blob.svg", "name": "史莱姆", "accent": "#00acc1",
80
+ "motionFile": "11-slime-blob.motion.css",
81
+ "quips": {
82
+ "tired": ["软软地瘫下去了…", "身体有点撑不住形状了"],
83
+ "urging": ["晃一晃,还在等你哦", "抖一抖,催你一下"]
84
+ } },
85
+ { "id": "ghost-byte", "file": "12-ghost-byte.svg", "name": "字节幽灵", "accent": "#4dd0e1",
86
+ "motionFile": "12-ghost-byte.motion.css",
87
+ "quips": {
88
+ "tired": ["电量耗尽了…要散了…"],
89
+ "bored": ["飘来飘去,连 bug 都飘光了"],
90
+ "urging": ["呜——呜——快看我一眼"]
91
+ } },
92
+ { "id": "cactus-bot", "file": "13-cactus-bot.svg", "name": "仙人掌兽", "accent": "#66bb6a",
93
+ "motionFile": "13-cactus-bot.motion.css",
94
+ "quips": {
95
+ "bored": ["晒太阳晒到刺都软了"],
96
+ "tired": ["缺水…缺人理…"],
97
+ "urging": ["刺都竖起来了,快点快点"]
98
+ } },
99
+ { "id": "crystal-bot", "file": "14-crystal-bot.svg", "name": "水晶精灵", "accent": "#7c4dff",
100
+ "motionFile": "14-crystal-bot.motion.css",
101
+ "quips": {
102
+ "bored": ["折射中…请勿直视"],
103
+ "tired": ["光谱变暗了…能量要充电"],
104
+ "urging": ["折射出警示光!快!快!"]
105
+ } },
106
+ { "id": "satellite-bot", "file": "15-satellite-bot.svg", "name": "卫星兽", "accent": "#42a5f5",
107
+ "motionFile": "15-satellite-bot.motion.css",
108
+ "quips": {
109
+ "bored": ["轨道上只剩我一只,寂寞"],
110
+ "tired": ["太阳能板收起来了,需要补光"],
111
+ "urging": ["哔哔哔!信号强到溢出!"]
112
+ } },
113
+ { "id": "jellyfish-bot", "file": "16-jellyfish-bot.svg", "name": "水母兽", "accent": "#ba68c8",
114
+ "motionFile": "16-jellyfish-bot.motion.css",
115
+ "quips": {
116
+ "tired": ["随波逐流,飘到没力气"],
117
+ "bored": ["深海里一只水母,在发呆"],
118
+ "urging": ["刺一下!刺一下!…啊我没有刺"]
119
+ } },
120
+ { "id": "mushroom-bot", "file": "17-mushroom-bot.svg", "name": "菌菇兽", "accent": "#c62828",
121
+ "motionFile": "17-mushroom-bot.motion.css",
122
+ "quips": {
123
+ "tired": ["菌盖都瘪了,要孢子休了"],
124
+ "bored": ["在森林角落,洒了一把无聊的孢子"],
125
+ "urging": ["蹦!蹦!蹦!Q弹到爆!"]
126
+ } },
127
+ { "id": "star-bot", "file": "18-star-bot.svg", "name": "星星兽", "accent": "#ff8f00",
128
+ "motionFile": "18-star-bot.motion.css",
129
+ "quips": {
130
+ "frustrated": ["星芒都烧起来了!急!急!"],
131
+ "urging": ["一闪一闪亮晶晶,催你快回应"]
132
+ },
133
+ "stateQuips": {
134
+ "done": ["Twinkle! 任务完成 ✨"],
135
+ "aborted": ["流星中途熄灭了…"],
136
+ "error": ["星星也黯淡了一瞬,别慌,会再亮起来的"]
137
+ } }
138
+ ]
139
+ }