@mumulinya167/ccm-pet-assets 2.0.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 (178) hide show
  1. package/README.md +4 -0
  2. package/assets/calico/calico-collapsing.apng +0 -0
  3. package/assets/calico/calico-dozing.apng +0 -0
  4. package/assets/calico/calico-error.apng +0 -0
  5. package/assets/calico/calico-happy.apng +0 -0
  6. package/assets/calico/calico-idle-follow.svg +324 -0
  7. package/assets/calico/calico-idle.apng +0 -0
  8. package/assets/calico/calico-mini-alert.apng +0 -0
  9. package/assets/calico/calico-mini-crabwalk.apng +0 -0
  10. package/assets/calico/calico-mini-enter.apng +0 -0
  11. package/assets/calico/calico-mini-happy.apng +0 -0
  12. package/assets/calico/calico-mini-idle.apng +0 -0
  13. package/assets/calico/calico-mini-peek.apng +0 -0
  14. package/assets/calico/calico-mini-sleep.apng +0 -0
  15. package/assets/calico/calico-notification.apng +0 -0
  16. package/assets/calico/calico-react-drag.apng +0 -0
  17. package/assets/calico/calico-react-left.apng +0 -0
  18. package/assets/calico/calico-react-poke.apng +0 -0
  19. package/assets/calico/calico-sleeping.apng +0 -0
  20. package/assets/calico/calico-thinking.apng +0 -0
  21. package/assets/calico/calico-waking.apng +0 -0
  22. package/assets/calico/calico-working-building.apng +0 -0
  23. package/assets/calico/calico-working-carrying.apng +0 -0
  24. package/assets/calico/calico-working-conducting.apng +0 -0
  25. package/assets/calico/calico-working-juggling.apng +0 -0
  26. package/assets/calico/calico-working-sweeping.apng +0 -0
  27. package/assets/calico/calico-working-typing.apng +0 -0
  28. package/assets/calico/calico-yawning.apng +0 -0
  29. package/assets/calico.svg +324 -0
  30. package/assets/clawd/LICENSE +22 -0
  31. package/assets/clawd/clawd-about-hero.svg +202 -0
  32. package/assets/clawd/clawd-collapse-sleep.svg +247 -0
  33. package/assets/clawd/clawd-error.svg +94 -0
  34. package/assets/clawd/clawd-happy.svg +161 -0
  35. package/assets/clawd/clawd-headphones-groove.svg +194 -0
  36. package/assets/clawd/clawd-idle-bubble.svg +180 -0
  37. package/assets/clawd/clawd-idle-collapse.svg +101 -0
  38. package/assets/clawd/clawd-idle-doze.svg +72 -0
  39. package/assets/clawd/clawd-idle-follow.svg +64 -0
  40. package/assets/clawd/clawd-idle-living.svg +196 -0
  41. package/assets/clawd/clawd-idle-look.svg +115 -0
  42. package/assets/clawd/clawd-idle-reading.svg +252 -0
  43. package/assets/clawd/clawd-idle-yawn.svg +158 -0
  44. package/assets/clawd/clawd-mini-alert.svg +129 -0
  45. package/assets/clawd/clawd-mini-crabwalk.svg +76 -0
  46. package/assets/clawd/clawd-mini-enter-sleep.svg +64 -0
  47. package/assets/clawd/clawd-mini-enter.svg +114 -0
  48. package/assets/clawd/clawd-mini-happy.svg +124 -0
  49. package/assets/clawd/clawd-mini-idle.svg +83 -0
  50. package/assets/clawd/clawd-mini-peek.svg +82 -0
  51. package/assets/clawd/clawd-mini-sleep.svg +112 -0
  52. package/assets/clawd/clawd-mini-typing.svg +153 -0
  53. package/assets/clawd/clawd-notification.svg +438 -0
  54. package/assets/clawd/clawd-react-annoyed.svg +167 -0
  55. package/assets/clawd/clawd-react-double-jump.svg +229 -0
  56. package/assets/clawd/clawd-react-double.svg +108 -0
  57. package/assets/clawd/clawd-react-drag.svg +102 -0
  58. package/assets/clawd/clawd-react-left.svg +102 -0
  59. package/assets/clawd/clawd-react-right.svg +102 -0
  60. package/assets/clawd/clawd-sleeping.svg +118 -0
  61. package/assets/clawd/clawd-static-base.svg +21 -0
  62. package/assets/clawd/clawd-wake.svg +277 -0
  63. package/assets/clawd/clawd-working-building.svg +329 -0
  64. package/assets/clawd/clawd-working-carrying.svg +178 -0
  65. package/assets/clawd/clawd-working-debugger.svg +245 -0
  66. package/assets/clawd/clawd-working-juggling.svg +183 -0
  67. package/assets/clawd/clawd-working-sweeping.svg +248 -0
  68. package/assets/clawd/clawd-working-thinking.svg +501 -0
  69. package/assets/clawd/clawd-working-typing-boss.svg +307 -0
  70. package/assets/clawd/clawd-working-typing.svg +273 -0
  71. package/assets/clawd/clawd-working-ultrathink.svg +166 -0
  72. package/assets/clawd/clawd-working-wizard.svg +356 -0
  73. package/assets/clawd.svg +64 -0
  74. package/assets/cloudling/cloudling/cloudling-attention.svg +380 -0
  75. package/assets/cloudling/cloudling/cloudling-building.svg +667 -0
  76. package/assets/cloudling/cloudling/cloudling-carrying.svg +604 -0
  77. package/assets/cloudling/cloudling/cloudling-conducting.svg +616 -0
  78. package/assets/cloudling/cloudling/cloudling-dozing-to-sleeping.svg +578 -0
  79. package/assets/cloudling/cloudling/cloudling-dozing.svg +358 -0
  80. package/assets/cloudling/cloudling/cloudling-error.svg +428 -0
  81. package/assets/cloudling/cloudling/cloudling-idle-reading.svg +658 -0
  82. package/assets/cloudling/cloudling/cloudling-idle-to-dozing.svg +568 -0
  83. package/assets/cloudling/cloudling/cloudling-idle-to-sleeping.svg +811 -0
  84. package/assets/cloudling/cloudling/cloudling-idle.svg +255 -0
  85. package/assets/cloudling/cloudling/cloudling-juggling.svg +648 -0
  86. package/assets/cloudling/cloudling/cloudling-mini-alert.svg +390 -0
  87. package/assets/cloudling/cloudling/cloudling-mini-crabwalk.svg +335 -0
  88. package/assets/cloudling/cloudling/cloudling-mini-enter-roll-in.svg +226 -0
  89. package/assets/cloudling/cloudling/cloudling-mini-enter-sleep.svg +232 -0
  90. package/assets/cloudling/cloudling/cloudling-mini-happy.svg +371 -0
  91. package/assets/cloudling/cloudling/cloudling-mini-idle.svg +279 -0
  92. package/assets/cloudling/cloudling/cloudling-mini-peek.svg +328 -0
  93. package/assets/cloudling/cloudling/cloudling-mini-sleep.svg +260 -0
  94. package/assets/cloudling/cloudling/cloudling-mini-typing.svg +692 -0
  95. package/assets/cloudling/cloudling/cloudling-notification.svg +494 -0
  96. package/assets/cloudling/cloudling/cloudling-react-drag.svg +83 -0
  97. package/assets/cloudling/cloudling/cloudling-sleeping-to-idle.svg +555 -0
  98. package/assets/cloudling/cloudling/cloudling-sleeping.svg +500 -0
  99. package/assets/cloudling/cloudling/cloudling-sweeping.svg +292 -0
  100. package/assets/cloudling/cloudling/cloudling-thinking.svg +720 -0
  101. package/assets/cloudling/cloudling/cloudling-typing.svg +354 -0
  102. package/assets/cloudling/cloudling-attention.svg +380 -0
  103. package/assets/cloudling/cloudling-building.svg +667 -0
  104. package/assets/cloudling/cloudling-carrying.svg +604 -0
  105. package/assets/cloudling/cloudling-conducting.svg +616 -0
  106. package/assets/cloudling/cloudling-dozing-to-sleeping.svg +578 -0
  107. package/assets/cloudling/cloudling-dozing.svg +358 -0
  108. package/assets/cloudling/cloudling-error.svg +428 -0
  109. package/assets/cloudling/cloudling-idle-reading.svg +658 -0
  110. package/assets/cloudling/cloudling-idle-to-dozing.svg +568 -0
  111. package/assets/cloudling/cloudling-idle-to-sleeping.svg +811 -0
  112. package/assets/cloudling/cloudling-idle.svg +255 -0
  113. package/assets/cloudling/cloudling-juggling.svg +648 -0
  114. package/assets/cloudling/cloudling-mini-alert.svg +390 -0
  115. package/assets/cloudling/cloudling-mini-crabwalk.svg +335 -0
  116. package/assets/cloudling/cloudling-mini-enter-roll-in.svg +226 -0
  117. package/assets/cloudling/cloudling-mini-enter-sleep.svg +232 -0
  118. package/assets/cloudling/cloudling-mini-happy.svg +371 -0
  119. package/assets/cloudling/cloudling-mini-idle.svg +279 -0
  120. package/assets/cloudling/cloudling-mini-peek.svg +328 -0
  121. package/assets/cloudling/cloudling-mini-sleep.svg +260 -0
  122. package/assets/cloudling/cloudling-mini-typing.svg +692 -0
  123. package/assets/cloudling/cloudling-notification.svg +494 -0
  124. package/assets/cloudling/cloudling-react-drag.svg +83 -0
  125. package/assets/cloudling/cloudling-sleeping-to-idle.svg +555 -0
  126. package/assets/cloudling/cloudling-sleeping.svg +500 -0
  127. package/assets/cloudling/cloudling-sweeping.svg +292 -0
  128. package/assets/cloudling/cloudling-thinking.svg +720 -0
  129. package/assets/cloudling/cloudling-typing.svg +354 -0
  130. package/assets/cloudling.svg +255 -0
  131. package/assets/ghost-attention.svg +19 -0
  132. package/assets/ghost-carrying.svg +19 -0
  133. package/assets/ghost-collapsing.svg +19 -0
  134. package/assets/ghost-dozing.svg +23 -0
  135. package/assets/ghost-error.svg +19 -0
  136. package/assets/ghost-happy.svg +23 -0
  137. package/assets/ghost-idle-action1.svg +19 -0
  138. package/assets/ghost-idle-action2.svg +19 -0
  139. package/assets/ghost-idle-action3.svg +19 -0
  140. package/assets/ghost-idle.svg +11 -0
  141. package/assets/ghost-juggling.svg +19 -0
  142. package/assets/ghost-notification.svg +19 -0
  143. package/assets/ghost-react-double.svg +23 -0
  144. package/assets/ghost-react-drag.svg +23 -0
  145. package/assets/ghost-react-left.svg +19 -0
  146. package/assets/ghost-react-right.svg +19 -0
  147. package/assets/ghost-sleeping.svg +19 -0
  148. package/assets/ghost-sweeping.svg +19 -0
  149. package/assets/ghost-thinking.svg +19 -0
  150. package/assets/ghost-waking.svg +19 -0
  151. package/assets/ghost-working.svg +19 -0
  152. package/assets/ghost-yawning.svg +23 -0
  153. package/assets/ghost.svg +11 -0
  154. package/assets/robot-attention.svg +19 -0
  155. package/assets/robot-carrying.svg +19 -0
  156. package/assets/robot-collapsing.svg +19 -0
  157. package/assets/robot-dozing.svg +23 -0
  158. package/assets/robot-error.svg +19 -0
  159. package/assets/robot-happy.svg +23 -0
  160. package/assets/robot-idle-action1.svg +19 -0
  161. package/assets/robot-idle-action2.svg +19 -0
  162. package/assets/robot-idle-action3.svg +19 -0
  163. package/assets/robot-idle.svg +11 -0
  164. package/assets/robot-juggling.svg +19 -0
  165. package/assets/robot-notification.svg +19 -0
  166. package/assets/robot-react-double.svg +23 -0
  167. package/assets/robot-react-drag.svg +23 -0
  168. package/assets/robot-react-left.svg +19 -0
  169. package/assets/robot-react-right.svg +19 -0
  170. package/assets/robot-sleeping.svg +19 -0
  171. package/assets/robot-sweeping.svg +19 -0
  172. package/assets/robot-thinking.svg +19 -0
  173. package/assets/robot-waking.svg +19 -0
  174. package/assets/robot-working.svg +19 -0
  175. package/assets/robot-yawning.svg +23 -0
  176. package/assets/robot.svg +11 -0
  177. package/manifest.json +889 -0
  178. package/package.json +18 -0
@@ -0,0 +1,194 @@
1
+ <!--
2
+ clawd-experiment-headphones-groove-v6.svg
3
+ v5 基础上鹿鹿两个微调:
4
+ 1. 眼睛 V 字 y +0.5 (顶 8->8.5 底 9->9.5) — v5 位置偏高
5
+ 2. 耳罩压缩 0.78 -> 0.85 (缩量 22%->15%), 过冲 1.04 -> 1.02 一起收 — v5 压太多
6
+ -->
7
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
8
+ <defs>
9
+ <style>
10
+ .shadow-sway {
11
+ transform-box: fill-box;
12
+ transform-origin: 50% 50%;
13
+ animation: shadow-sway 1.6s infinite ease-in-out;
14
+ }
15
+
16
+ .body-sway {
17
+ transform-origin: 7.5px 13px;
18
+ animation: body-sway 1.6s infinite ease-in-out;
19
+ }
20
+
21
+ .leg-left-inner,
22
+ .leg-left-outer,
23
+ .leg-right-inner,
24
+ .leg-right-outer {
25
+ transform-box: fill-box;
26
+ transform-origin: 50% 0%;
27
+ }
28
+ .leg-left-inner { animation: leg-left-inner 1.6s infinite ease-in-out; }
29
+ .leg-left-outer { animation: leg-left-outer 1.6s infinite ease-in-out; }
30
+ .leg-right-inner { animation: leg-right-inner 1.6s infinite ease-in-out; }
31
+ .leg-right-outer { animation: leg-right-outer 1.6s infinite ease-in-out; }
32
+
33
+ .arm-left-dance {
34
+ transform-box: fill-box;
35
+ transform-origin: 100% 0%;
36
+ animation: arm-left-dance 1.6s infinite ease-in-out;
37
+ }
38
+ .arm-right-dance {
39
+ transform-box: fill-box;
40
+ transform-origin: 0% 0%;
41
+ animation: arm-right-dance 1.6s infinite ease-in-out;
42
+ }
43
+
44
+ /* 耳罩 squeeze: 拍点挤压, 中性回弹过冲 */
45
+ .earcup-left {
46
+ transform-box: fill-box;
47
+ transform-origin: 100% 50%; /* 右边缘 = 内侧, 朝身体方向收 */
48
+ animation: earcup-squeeze 1.6s infinite ease-in-out;
49
+ }
50
+ .earcup-right {
51
+ transform-box: fill-box;
52
+ transform-origin: 0% 50%; /* 左边缘 = 内侧 */
53
+ animation: earcup-squeeze 1.6s infinite ease-in-out;
54
+ }
55
+
56
+ .note-left { animation: note-left 1.6s infinite ease-out; }
57
+ .note-right { animation: note-right 1.6s infinite ease-out; }
58
+
59
+ @keyframes shadow-sway {
60
+ 0%, 100% { transform: translateX(0) scaleX(1); opacity: 0.5; }
61
+ 22%, 30% { transform: translateX(-0.5px) scaleX(0.85); opacity: 0.45; }
62
+ 50% { transform: translateX(0) scaleX(1); opacity: 0.5; }
63
+ 70%, 78% { transform: translateX(0.5px) scaleX(0.85); opacity: 0.45; }
64
+ }
65
+
66
+ @keyframes body-sway {
67
+ 0%, 100% { transform: rotate(0deg) translateY(0); }
68
+ 22%, 30% { transform: rotate(-6deg) translateY(0.3px); }
69
+ 50% { transform: rotate(0deg) translateY(-0.2px); }
70
+ 70%, 78% { transform: rotate(6deg) translateY(0.3px); }
71
+ }
72
+
73
+ @keyframes leg-right-inner {
74
+ 0%, 100% { transform: rotate(0deg) translateY(0); }
75
+ 22%, 30% { transform: rotate(-12deg) translateY(-0.2px); }
76
+ 50%, 70%, 78% { transform: rotate(0deg) translateY(0); }
77
+ }
78
+ @keyframes leg-right-outer {
79
+ 0%, 100% { transform: rotate(0deg) translateY(0); }
80
+ 22%, 30% { transform: rotate(-22deg) translateY(-0.3px); }
81
+ 50%, 70%, 78% { transform: rotate(0deg) translateY(0); }
82
+ }
83
+ @keyframes leg-left-inner {
84
+ 0%, 22%, 30%, 50%, 100% { transform: rotate(0deg) translateY(0); }
85
+ 70%, 78% { transform: rotate(12deg) translateY(-0.2px); }
86
+ }
87
+ @keyframes leg-left-outer {
88
+ 0%, 22%, 30%, 50%, 100% { transform: rotate(0deg) translateY(0); }
89
+ 70%, 78% { transform: rotate(22deg) translateY(-0.3px); }
90
+ }
91
+
92
+ @keyframes arm-left-dance {
93
+ 0%, 100% { transform: rotate(0deg); }
94
+ 22%, 30% { transform: rotate(-30deg); }
95
+ 50% { transform: rotate(0deg); }
96
+ 70%, 78% { transform: rotate(20deg); }
97
+ }
98
+ @keyframes arm-right-dance {
99
+ 0%, 100% { transform: rotate(0deg); }
100
+ 22%, 30% { transform: rotate(-20deg); }
101
+ 50% { transform: rotate(0deg); }
102
+ 70%, 78% { transform: rotate(30deg); }
103
+ }
104
+
105
+ /* 耳罩: 拍点 (左压/右压) 都 squeeze 0.78, 中性 50% 回弹过冲 1.04 */
106
+ @keyframes earcup-squeeze {
107
+ 0%, 100% { transform: scaleX(1); }
108
+ 22%, 30% { transform: scaleX(0.85); }
109
+ 50% { transform: scaleX(1.02); }
110
+ 70%, 78% { transform: scaleX(0.85); }
111
+ }
112
+
113
+ @keyframes note-left {
114
+ 0%, 14%, 42%, 100% { opacity: 0; transform: translate(0, 0); }
115
+ 22% { opacity: 1; transform: translate(-0.4px, -1.2px); }
116
+ 38% { opacity: 0; transform: translate(-1.6px, -3.5px); }
117
+ }
118
+ @keyframes note-right {
119
+ 0%, 62%, 82%, 100% { opacity: 0; transform: translate(0, 0); }
120
+ 70% { opacity: 1; transform: translate(0.4px, -1.2px); }
121
+ 78% { opacity: 0; transform: translate(1.6px, -3.5px); }
122
+ }
123
+ </style>
124
+
125
+ <g id="music-note" fill="#FFE066">
126
+ <rect x="0" y="2" width="1" height="1"/>
127
+ <rect x="1" y="0" width="1" height="3"/>
128
+ <rect x="2" y="0" width="1" height="1"/>
129
+ </g>
130
+ </defs>
131
+
132
+ <rect class="shadow-sway" x="3" y="15" width="9" height="1" fill="#000000"/>
133
+
134
+ <g fill="#DE886D">
135
+ <rect class="leg-left-outer" x="3" y="13" width="1" height="2"/>
136
+ <rect class="leg-left-inner" x="5" y="13" width="1" height="2"/>
137
+ <rect class="leg-right-inner" x="9" y="13" width="1" height="2"/>
138
+ <rect class="leg-right-outer" x="11" y="13" width="1" height="2"/>
139
+ </g>
140
+
141
+ <g class="body-sway">
142
+ <rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
143
+
144
+ <!-- 头带 (不参与 squeeze, 只跟随 body-sway) -->
145
+ <g fill="#1D5C83">
146
+ <rect x="4.9" y="2.85" width="5.05" height="0.75"/>
147
+ <rect x="4.46" y="2.93" width="0.75" height="0.75"/>
148
+ <rect x="9.66" y="2.93" width="0.75" height="0.75"/>
149
+ <rect x="4.03" y="3.1" width="0.75" height="0.75"/>
150
+ <rect x="10.11" y="3.09" width="0.75" height="0.75"/>
151
+ <rect x="3.59" y="3.34" width="0.75" height="0.75"/>
152
+ <rect x="10.57" y="3.33" width="0.75" height="0.75"/>
153
+ <rect x="3.15" y="3.63" width="0.75" height="0.75"/>
154
+ <rect x="11.02" y="3.61" width="0.75" height="0.75"/>
155
+ <rect x="2.71" y="3.98" width="0.75" height="0.75"/>
156
+ <rect x="11.48" y="3.96" width="0.75" height="0.75"/>
157
+ <rect x="2.28" y="4.37" width="0.75" height="0.75"/>
158
+ <rect x="11.94" y="4.34" width="0.75" height="0.75"/>
159
+ <rect x="1.84" y="4.82" width="0.75" height="0.75"/>
160
+ <rect x="12.39" y="4.78" width="0.75" height="0.75"/>
161
+ <rect x="1.4" y="5.3" width="0.75" height="0.75"/>
162
+ <rect x="12.85" y="5.25" width="0.75" height="0.75"/>
163
+ </g>
164
+
165
+ <!-- 左耳罩 (三层) -->
166
+ <g class="earcup-left">
167
+ <rect x="0.2" y="7" width="0.6" height="2.4" fill="#1D5C83"/>
168
+ <rect x="0.8" y="6.5" width="0.6" height="3.25" fill="#256891"/>
169
+ <rect x="1.4" y="6" width="0.6" height="4.05" fill="#2E7AA8"/>
170
+ </g>
171
+
172
+ <!-- 右耳罩 (三层) -->
173
+ <g class="earcup-right">
174
+ <rect x="14.2" y="7" width="0.6" height="2.4" fill="#1D5C83"/>
175
+ <rect x="13.6" y="6.5" width="0.6" height="3.25" fill="#256891"/>
176
+ <rect x="13" y="6" width="0.6" height="4.05" fill="#2E7AA8"/>
177
+ </g>
178
+
179
+ <g class="arm-left-dance">
180
+ <rect x="-1" y="9" width="2" height="2" fill="#DE886D"/>
181
+ </g>
182
+ <g class="arm-right-dance">
183
+ <rect x="14" y="9" width="2" height="2" fill="#DE886D"/>
184
+ </g>
185
+
186
+ <g fill="none" stroke="#000000" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round">
187
+ <polyline points="3.5,8.5 4.5,9.5 5.5,8.5"/>
188
+ <polyline points="9.5,8.5 10.5,9.5 11.5,8.5"/>
189
+ </g>
190
+ </g>
191
+
192
+ <g transform="translate(-5 4)"><g class="note-left"><use href="#music-note"/></g></g>
193
+ <g transform="translate(15 4)"><g class="note-right"><use href="#music-note"/></g></g>
194
+ </svg>
@@ -0,0 +1,180 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500" shape-rendering="crispEdges">
2
+ <!-- 吹泡泡 v8
3
+ v7 反馈: 整体 ok, 但眼睛回到正中后再眨一次眼更好
4
+ v8 修正: eyes-anim 加一个 96% 眨眼帧 (在 (0, 0) 正中位置) -->
5
+
6
+ <style>
7
+ @keyframes body-squash {
8
+ 0%, 30% { transform: scaleY(1); }
9
+ 36% { transform: scaleY(0.93); }
10
+ 42% { transform: scaleY(1.05); }
11
+ 50%, 100% { transform: scaleY(1); }
12
+ }
13
+ .body-squash {
14
+ transform-origin: 7.5px 15px;
15
+ animation: body-squash 4.5s linear infinite;
16
+ }
17
+
18
+ /* === 眼睛: 复合 translate + scaleY, 含双眨眼 (88% pop 后 + 96% 回正后) === */
19
+ @keyframes eyes-anim {
20
+ 0%, 6% { transform: translate(0px, 0px) scaleY(1); }
21
+ 18%, 30% { transform: translate(1px, 0px) scaleY(1); }
22
+ 34% { transform: translate(1px, 0px) scaleY(0.5); } /* 鼓气眯眼 */
23
+ 42%, 46% { transform: translate(1px, 0px) scaleY(1); }
24
+ 66%, 86% { transform: translate(1.5px, -0.5px) scaleY(1); }/* 追随主泡 + 看副泡 pop */
25
+ 88% { transform: translate(1.5px, -0.5px) scaleY(0.1); }/* 第一次眨眼 (响应 pop) */
26
+ 90% { transform: translate(1.5px, -0.5px) scaleY(1); } /* 睁开 */
27
+ 94% { transform: translate(0px, 0px) scaleY(1); } /* 回到正中 */
28
+ 96% { transform: translate(0px, 0px) scaleY(0.1); } /* 第二次眨眼 (回正后) */
29
+ 98%, 100% { transform: translate(0px, 0px) scaleY(1); } /* 睁开 + hold to loop */
30
+ }
31
+ .eyes-anim {
32
+ transform-origin: 7.5px 9px;
33
+ animation: eyes-anim 4.5s linear infinite;
34
+ }
35
+
36
+ @keyframes arm-right-out {
37
+ 0%, 6% { transform: translate(0px, 0px); }
38
+ 18%, 86% { transform: translate(0.45px, 0.55px); }
39
+ 94%, 100% { transform: translate(0px, 0px); }
40
+ }
41
+ .arm-right-out { animation: arm-right-out 4.5s linear infinite; }
42
+
43
+ @keyframes arm-left-down {
44
+ 0%, 6% { transform: translate(0px, 0px); }
45
+ 18%, 86% { transform: translate(0px, 1px); }
46
+ 94%, 100% { transform: translate(0px, 0px); }
47
+ }
48
+ .arm-left-down { animation: arm-left-down 4.5s linear infinite; }
49
+
50
+ @keyframes wand-appear {
51
+ 0%, 16% { opacity: 0; transform: scale(0.5); }
52
+ 26%, 86% { opacity: 1; transform: scale(1); }
53
+ 92%, 100% { opacity: 0; transform: scale(0.5); }
54
+ }
55
+ .wand-appear { animation: wand-appear 4.5s linear infinite; }
56
+
57
+ @keyframes frame-puff {
58
+ 0%, 30% { transform: scale(1); }
59
+ 36% { transform: scale(1.08); }
60
+ 42% { transform: scale(0.95); }
61
+ 50%, 100% { transform: scale(1); }
62
+ }
63
+ .frame-puff { animation: frame-puff 4.5s linear infinite; }
64
+
65
+ @keyframes bubble1-life {
66
+ 0%, 42% { opacity: 0; transform: translate(0px, 0px) scale(0); }
67
+ 46% { opacity: 1; transform: translate(0px, -0.3px) scale(0.3); }
68
+ 52% { opacity: 1; transform: translate(0.5px, -1.5px) scale(0.5); }
69
+ 58% { opacity: 1; transform: translate(1.5px, -3.5px) scale(0.7); }
70
+ 64% { opacity: 1; transform: translate(3px, -6px) scale(0.92); }
71
+ 68% { opacity: 1; transform: translate(4.1px, -8.45px) scale(1); }
72
+ 70% { opacity: 0.6; transform: translate(4.1px, -8.45px) scale(1.2); }
73
+ 72%, 99% { opacity: 0; transform: translate(4.1px, -8.45px) scale(1.4); }
74
+ 100% { opacity: 0; transform: translate(0px, 0px) scale(0); }
75
+ }
76
+ .bubble1-life { animation: bubble1-life 4.5s linear infinite; }
77
+
78
+ @keyframes bubble2-life {
79
+ 0%, 58% { opacity: 0; transform: translate(0px, 0px) scale(0); }
80
+ 62% { opacity: 1; transform: translate(0px, -0.3px) scale(0.3); }
81
+ 68% { opacity: 1; transform: translate(0.8px, -1.3px) scale(0.5); }
82
+ 74% { opacity: 1; transform: translate(2.5px, -3px) scale(0.65); }
83
+ 80% { opacity: 1; transform: translate(5px, -4.8px) scale(0.85); }
84
+ 84% { opacity: 1; transform: translate(7.1px, -6.3px) scale(1); }
85
+ 86% { opacity: 0.5; transform: translate(7.1px, -6.3px) scale(1.2); }
86
+ 88%, 99% { opacity: 0; transform: translate(7.1px, -6.3px) scale(1.4); }
87
+ 100% { opacity: 0; transform: translate(0px, 0px) scale(0); }
88
+ }
89
+ .bubble2-life { animation: bubble2-life 4.5s linear infinite; }
90
+
91
+ @keyframes pop-flash1 {
92
+ 0%, 68% { opacity: 0; transform: scale(0); }
93
+ 70% { opacity: 1; transform: scale(1); }
94
+ 73%, 100% { opacity: 0; transform: scale(0); }
95
+ }
96
+ .pop-flash1 { animation: pop-flash1 4.5s linear infinite; }
97
+
98
+ @keyframes pop-flash2 {
99
+ 0%, 84% { opacity: 0; transform: scale(0); }
100
+ 86% { opacity: 1; transform: scale(1); }
101
+ 89%, 100% { opacity: 0; transform: scale(0); }
102
+ }
103
+ .pop-flash2 { animation: pop-flash2 4.5s linear infinite; }
104
+ </style>
105
+
106
+ <rect id="ground-shadow" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
107
+
108
+ <g id="master-group">
109
+ <g class="body-squash">
110
+ <g fill="#DE886D">
111
+ <rect x="2" y="6" width="11" height="7"/>
112
+ <rect class="arm-left-down" x="0" y="9" width="2" height="2"/>
113
+ <rect x="3" y="13" width="1" height="2"/>
114
+ <rect x="5" y="13" width="1" height="2"/>
115
+ <rect x="9" y="13" width="1" height="2"/>
116
+ <rect x="11" y="13" width="1" height="2"/>
117
+ </g>
118
+ <g class="eyes-anim" fill="#000000">
119
+ <rect x="4" y="8" width="1" height="2"/>
120
+ <rect x="10" y="8" width="1" height="2"/>
121
+ </g>
122
+ </g>
123
+
124
+ <g class="arm-right-out">
125
+ <rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
126
+ </g>
127
+
128
+ <g transform="translate(14.45 10.55)">
129
+ <g class="wand-appear">
130
+ <rect x="0.06" y="-2.075" width="0.8" height="2.6" rx="0.4" fill="#3A2926"/>
131
+ <g transform="translate(0.45 -3.3)" shape-rendering="auto">
132
+ <g class="frame-puff">
133
+ <rect x="-1.275" y="-1.275" width="2.55" height="2.55" rx="0.42"
134
+ fill="none" stroke="#3A2926" stroke-width="0.68" stroke-linejoin="round"/>
135
+ <rect x="-0.235" y="-0.645" width="0.82" height="0.82" rx="0.22"
136
+ fill="none" stroke="#E8D8CF" stroke-width="0.24" opacity="0.9"/>
137
+ </g>
138
+ </g>
139
+ </g>
140
+ </g>
141
+
142
+ <g transform="translate(14.9 7.25)" shape-rendering="auto">
143
+ <g class="bubble1-life">
144
+ <circle r="3.05" fill="#F7FFFF" fill-opacity="0.12" stroke="#C7E6E8" stroke-width="0.24"/>
145
+ <circle r="2.72" fill="none" stroke="#FFFDF6" stroke-width="0.16" opacity="0.58"/>
146
+ <rect x="-1.75" y="-1.75" width="0.85" height="0.85" fill="#FFFDF6" opacity="0.9" shape-rendering="crispEdges"/>
147
+ </g>
148
+ </g>
149
+
150
+ <g transform="translate(14.9 7.25)" shape-rendering="auto">
151
+ <g class="bubble2-life">
152
+ <circle r="1.55" fill="#FFF9F4" fill-opacity="0.13" stroke="#E4D2C8" stroke-width="0.2"/>
153
+ <circle r="1.32" fill="none" stroke="#FFFDF6" stroke-width="0.12" opacity="0.5"/>
154
+ <rect x="0.7" y="0.7" width="0.38" height="0.38" fill="#FFF7EF" opacity="0.7" shape-rendering="crispEdges"/>
155
+ </g>
156
+ </g>
157
+
158
+ <g transform="translate(19 -1.2)">
159
+ <g class="pop-flash1" fill="#FFFFFF" shape-rendering="crispEdges">
160
+ <rect x="-3.25" y="-0.25" width="0.5" height="0.5"/>
161
+ <rect x="2.75" y="-0.25" width="0.5" height="0.5"/>
162
+ <rect x="-0.25" y="-3.25" width="0.5" height="0.5"/>
163
+ <rect x="-0.25" y="2.75" width="0.5" height="0.5"/>
164
+ <rect x="-2.2" y="-2.2" width="0.4" height="0.4" opacity="0.7"/>
165
+ <rect x="1.8" y="-2.2" width="0.4" height="0.4" opacity="0.7"/>
166
+ <rect x="-2.2" y="1.8" width="0.4" height="0.4" opacity="0.7"/>
167
+ <rect x="1.8" y="1.8" width="0.4" height="0.4" opacity="0.7"/>
168
+ </g>
169
+ </g>
170
+
171
+ <g transform="translate(22 0.95)">
172
+ <g class="pop-flash2" fill="#FFFFFF" shape-rendering="crispEdges">
173
+ <rect x="-1.75" y="-0.2" width="0.4" height="0.4"/>
174
+ <rect x="1.35" y="-0.2" width="0.4" height="0.4"/>
175
+ <rect x="-0.2" y="-1.75" width="0.4" height="0.4"/>
176
+ <rect x="-0.2" y="1.35" width="0.4" height="0.4"/>
177
+ </g>
178
+ </g>
179
+ </g>
180
+ </svg>
@@ -0,0 +1,101 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ /* 0.8s Collapse — One-shot transition from yawn-end to sploot */
5
+ .body-collapse {
6
+ transform-origin: 7.5px 13px;
7
+ animation: body-collapse 1s ease-in -0.2s forwards;
8
+ }
9
+
10
+ .shadow-collapse {
11
+ transform-origin: 7.5px 15.5px;
12
+ animation: shadow-collapse 1s ease-in -0.2s forwards;
13
+ }
14
+
15
+ .legs-collapse {
16
+ transform-origin: 7.5px 12px;
17
+ animation: legs-collapse 1s ease-in -0.2s forwards;
18
+ }
19
+
20
+ .arm-l-collapse {
21
+ transform-origin: 1px 10px;
22
+ animation: arm-l-collapse 1s ease-in -0.2s forwards;
23
+ }
24
+
25
+ .arm-r-collapse {
26
+ transform-origin: 14px 10px;
27
+ animation: arm-r-collapse 1s ease-in -0.2s forwards;
28
+ }
29
+
30
+ /* Eyes stay shut the entire time */
31
+ .eyes-shut {
32
+ transform-origin: 7.5px 9px;
33
+ transform: scaleY(0.1);
34
+ }
35
+
36
+ /* Body sinks and widens gently — closer to sleeping proportions */
37
+ @keyframes body-collapse {
38
+ 0% { transform: scale(1.05, 0.95) translate(0, 1px); }
39
+ 40% { transform: scale(1.08, 0.85) translate(0, 1.5px); }
40
+ 70% { transform: scale(1.12, 0.75) translate(0, 2px); }
41
+ 100% { transform: scale(1.15, 0.7) translate(0, 3px); }
42
+ }
43
+
44
+ /* Shadow widens to match sleeping shadow */
45
+ @keyframes shadow-collapse {
46
+ 0% { transform: scaleX(1.05); opacity: 0.55; }
47
+ 100% { transform: scaleX(1.3); opacity: 0.45; }
48
+ }
49
+
50
+ /* Legs hold still at first, then shrink into short stubs */
51
+ @keyframes legs-collapse {
52
+ 0%, 40% { transform: translate(0, 0) scaleY(1); }
53
+ 70% { transform: translate(0, -1px) scaleY(0.6); }
54
+ 100% { transform: translate(0, -2px) scaleY(0.33); }
55
+ }
56
+
57
+ /* Arms slide straight down, hugging body sides */
58
+ @keyframes arm-l-collapse {
59
+ 0% { transform: translate(0, 1px) rotate(-15deg); }
60
+ 50% { transform: translate(0, 2px) rotate(-5deg); }
61
+ 100% { transform: translate(0, 3px) rotate(0deg); }
62
+ }
63
+
64
+ @keyframes arm-r-collapse {
65
+ 0% { transform: translate(0, 1px) rotate(15deg); }
66
+ 50% { transform: translate(0, 2px) rotate(5deg); }
67
+ 100% { transform: translate(0, 3px) rotate(0deg); }
68
+ }
69
+ </style>
70
+ </defs>
71
+
72
+ <!-- Ground Shadow -->
73
+ <rect class="shadow-collapse" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.55"/>
74
+
75
+ <!-- Legs (shrink upward into short stubs) -->
76
+ <g class="legs-collapse" fill="#DE886D">
77
+ <rect x="3" y="12" width="1" height="3"/>
78
+ <rect x="5" y="12" width="1" height="3"/>
79
+ <rect x="9" y="12" width="1" height="3"/>
80
+ <rect x="11" y="12" width="1" height="3"/>
81
+ </g>
82
+
83
+ <!-- Body (collapses/melts down) -->
84
+ <g class="body-collapse">
85
+ <!-- Torso -->
86
+ <rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
87
+ <!-- Left Arm -->
88
+ <g class="arm-l-collapse">
89
+ <rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
90
+ </g>
91
+ <!-- Right Arm -->
92
+ <g class="arm-r-collapse">
93
+ <rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
94
+ </g>
95
+ <!-- Eyes stay shut -->
96
+ <g class="eyes-shut" fill="#000000">
97
+ <rect x="4" y="8" width="1" height="2"/>
98
+ <rect x="10" y="8" width="1" height="2"/>
99
+ </g>
100
+ </g>
101
+ </svg>
@@ -0,0 +1,72 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ /* Dozing — looping gentle breathing in yawn-end squashed pose, eyes shut */
5
+ .doze-body {
6
+ transform-origin: 7.5px 13px;
7
+ animation: doze-breathe 4s infinite ease-in-out;
8
+ }
9
+
10
+ .doze-shadow {
11
+ transform-origin: 7.5px 15.5px;
12
+ animation: doze-shadow 4s infinite ease-in-out;
13
+ }
14
+
15
+ .eyes-shut {
16
+ transform-origin: 7.5px 9px;
17
+ transform: scaleY(0.1);
18
+ transition: transform 0.3s ease-out;
19
+ }
20
+
21
+ .arm-l-doze {
22
+ transform-origin: 1px 10px;
23
+ transform: translate(0px, 1px) rotate(-15deg);
24
+ }
25
+
26
+ .arm-r-doze {
27
+ transform-origin: 14px 10px;
28
+ transform: translate(0px, 1px) rotate(15deg);
29
+ }
30
+
31
+ @keyframes doze-breathe {
32
+ 0%, 100% { transform: scale(1.05, 0.95) translate(0, 1px); }
33
+ 50% { transform: scale(1.08, 0.92) translate(0, 1.8px); }
34
+ }
35
+
36
+ @keyframes doze-shadow {
37
+ 0%, 100% { transform: scaleX(1.05); opacity: 0.55; }
38
+ 50% { transform: scaleX(1.08); opacity: 0.5; }
39
+ }
40
+ </style>
41
+ </defs>
42
+
43
+ <!-- Ground Shadow -->
44
+ <rect class="doze-shadow" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.55"/>
45
+
46
+ <!-- Static Legs -->
47
+ <g id="legs" fill="#DE886D">
48
+ <rect x="3" y="12" width="1" height="3"/>
49
+ <rect x="5" y="12" width="1" height="3"/>
50
+ <rect x="9" y="12" width="1" height="3"/>
51
+ <rect x="11" y="12" width="1" height="3"/>
52
+ </g>
53
+
54
+ <!-- Dozing Body (squashed yawn-end pose + gentle breathing) -->
55
+ <g class="doze-body">
56
+ <!-- Torso -->
57
+ <rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
58
+ <!-- Left Arm (relaxed down) -->
59
+ <g class="arm-l-doze">
60
+ <rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
61
+ </g>
62
+ <!-- Right Arm (relaxed down) -->
63
+ <g class="arm-r-doze">
64
+ <rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
65
+ </g>
66
+ <!-- Eyes shut (JS can open via style.transform override) -->
67
+ <g id="eyes-doze" class="eyes-shut" fill="#000000">
68
+ <rect x="4" y="8" width="1" height="2"/>
69
+ <rect x="10" y="8" width="1" height="2"/>
70
+ </g>
71
+ </g>
72
+ </svg>
@@ -0,0 +1,64 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ .breathe-anim {
5
+ transform-origin: 7.5px 13px;
6
+ animation: breathe 3.2s infinite ease-in-out;
7
+ }
8
+
9
+ .eyes-blink {
10
+ transform-origin: 7.5px 9px;
11
+ animation: eye-blink 4s infinite ease-in-out;
12
+ }
13
+
14
+ #eyes-js, #body-js, #shadow-js {
15
+ transition: transform 0.2s ease-out;
16
+ }
17
+ #shadow-js {
18
+ transform-origin: 7.5px 15px;
19
+ }
20
+
21
+ @keyframes breathe {
22
+ 0%, 100% { transform: scale(1, 1) translate(0, 0); }
23
+ 50% { transform: scale(1.02, 0.98) translate(0, 0.5px); }
24
+ }
25
+
26
+ @keyframes eye-blink {
27
+ 0%, 10%, 100% { transform: scaleY(1); }
28
+ 5% { transform: scaleY(0.1); }
29
+ }
30
+ </style>
31
+ </defs>
32
+
33
+ <!-- Ground Shadow (JS-controlled horizontal shift) -->
34
+ <g id="shadow-js">
35
+ <rect x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
36
+ </g>
37
+
38
+ <!-- Static Legs (slightly taller for upward body shift) -->
39
+ <g id="legs" fill="#DE886D">
40
+ <rect x="3" y="11" width="1" height="4"/>
41
+ <rect x="5" y="11" width="1" height="4"/>
42
+ <rect x="9" y="11" width="1" height="4"/>
43
+ <rect x="11" y="11" width="1" height="4"/>
44
+ </g>
45
+
46
+ <!-- Upper Body (JS body-shift + CSS breathe) -->
47
+ <g id="body-js">
48
+ <g class="breathe-anim">
49
+ <!-- Torso -->
50
+ <rect id="torso" x="2" y="6" width="11" height="7" fill="#DE886D"/>
51
+ <!-- Left Arm -->
52
+ <rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
53
+ <!-- Right Arm -->
54
+ <rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
55
+ <!-- Eyes: JS translate wrapper + CSS blink -->
56
+ <g id="eyes-js" fill="#000000">
57
+ <g class="eyes-blink">
58
+ <rect x="4" y="8" width="1" height="2"/>
59
+ <rect x="10" y="8" width="1" height="2"/>
60
+ </g>
61
+ </g>
62
+ </g>
63
+ </g>
64
+ </svg>