@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,329 @@
1
+ <!--
2
+ clawd-experiment-working-building-helmet-v1.svg (2026-04-24)
3
+ 基础 = D:\animation\assets\svg\clawd-working-building.svg
4
+ 改动 = 把原黄色安全帽 (#FBC02D/#F9A825) 换成 helmet-tryon-v1 的三色橙帽 (#EFA74A/#B7782E/#FAB253)
5
+ 帽子仍放在 body-squash 组内, 跟随锤击 squash; z-order: torso → helmet → eyes (helmet 不遮眼, 无视觉冲突)
6
+ -->
7
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500" shape-rendering="crispEdges">
8
+ <defs>
9
+ <style>
10
+ /* ===== Independent sub-animations ===== */
11
+
12
+ /* Breathe 3.2s */
13
+ .breathe {
14
+ transform-origin: 7.5px 13px;
15
+ animation: breathe 3.2s infinite ease-in-out;
16
+ }
17
+
18
+ /* Blink 4s */
19
+ .blink {
20
+ transform-origin: 7.5px 9px;
21
+ animation: blink 4s infinite;
22
+ }
23
+
24
+ /* ===== Hammer cycle 1.2s ===== */
25
+
26
+ /* Body bounce: up-down motion (shared by body + arms) */
27
+ .body-bounce {
28
+ transform-origin: 7.5px 15px;
29
+ animation: body-bounce 1.2s infinite;
30
+ }
31
+
32
+ /* Body squash: scale only (torso + hat + eyes, arms excluded) */
33
+ .body-squash {
34
+ transform-origin: 7.5px 15px;
35
+ animation: body-squash 1.2s infinite;
36
+ }
37
+
38
+ /* Right arm hammer swing */
39
+ .arm-hammer {
40
+ transform-origin: 14px 10px;
41
+ animation: hammer-swing 1.2s infinite;
42
+ }
43
+
44
+ /* Left arm counter-motion */
45
+ .arm-l-rest {
46
+ transform-origin: 2px 10px;
47
+ animation: arm-l-rest 1.2s infinite;
48
+ }
49
+
50
+ /* Shadow synced with bounce */
51
+ .shadow-anim {
52
+ transform-origin: 7.5px 15.5px;
53
+ animation: shadow-bounce 1.2s infinite;
54
+ }
55
+
56
+ /* Hot metal flash */
57
+ .hot-metal {
58
+ animation: metal-glow 1.2s infinite;
59
+ }
60
+
61
+ /* Sparks */
62
+ .spark { opacity: 0; }
63
+ .s1 { animation: spark-1 1.2s infinite; }
64
+ .s2 { animation: spark-2 1.2s infinite; }
65
+ .s3 { animation: spark-3 1.2s infinite; }
66
+
67
+ /* ===== Eyes 5s ===== */
68
+ .eyes-look {
69
+ animation: eyes-look 5s infinite ease-in-out;
70
+ }
71
+
72
+ /* ===== Sweat 6s ===== */
73
+ .sweat {
74
+ opacity: 0;
75
+ animation: sweat-fly 6s infinite;
76
+ }
77
+
78
+ /* ==================== Keyframes ==================== */
79
+
80
+ @keyframes breathe {
81
+ 0%, 100% { transform: scale(1, 1) translate(0, 0); }
82
+ 50% { transform: scale(1.02, 0.98) translate(0, 0.5px); }
83
+ }
84
+
85
+ @keyframes blink {
86
+ 0%, 10%, 100% { transform: scaleY(1); }
87
+ 5% { transform: scaleY(0.1); }
88
+ }
89
+
90
+ /* Body bounce: translateY only (arms share this, stay clean) */
91
+ @keyframes body-bounce {
92
+ 0%, 100% { transform: translateY(0); }
93
+ 30% { transform: translateY(-2px); }
94
+ 45% { transform: translateY(0); }
95
+ 50% { transform: translateY(2px); }
96
+ 70% { transform: translateY(0); }
97
+ }
98
+
99
+ /* Body squash: scale only (torso+hat+eyes, not arms) */
100
+ @keyframes body-squash {
101
+ 0%, 100% { transform: scale(1, 1); }
102
+ 30% { transform: scale(0.95, 1.05); }
103
+ 45% { transform: scale(1, 1); }
104
+ 50% { transform: scale(1.15, 0.85); }
105
+ 70% { transform: scale(1, 1); }
106
+ }
107
+
108
+ /* Shadow: lighter on rise, heavier on impact */
109
+ @keyframes shadow-bounce {
110
+ 0%, 45%, 70%, 100% { transform: scaleX(1); opacity: 0.5; }
111
+ 30% { transform: scaleX(0.92); opacity: 0.42; }
112
+ 50% { transform: scaleX(1.08); opacity: 0.58; }
113
+ }
114
+
115
+ /* Hammer swing: original angles preserved */
116
+ @keyframes hammer-swing {
117
+ 0%, 100% { transform: rotate(15deg); }
118
+ 30% { transform: rotate(-45deg); }
119
+ 45% { transform: rotate(40deg); }
120
+ 50% { transform: rotate(125deg); }
121
+ 70% { transform: rotate(15deg); }
122
+ }
123
+
124
+ /* Left arm: reacts to hammer rhythm */
125
+ @keyframes arm-l-rest {
126
+ 0%, 100% { transform: rotate(0deg); }
127
+ 30% { transform: rotate(15deg); }
128
+ 50% { transform: rotate(-5deg); }
129
+ }
130
+
131
+ /* Hot metal glow on impact */
132
+ @keyframes metal-glow {
133
+ 0%, 49% { fill: #FF5252; }
134
+ 50%, 60% { fill: #FFF59D; }
135
+ 100% { fill: #FF5252; }
136
+ }
137
+
138
+ /* Eyes: mostly watch anvil, occasional glance at hammer */
139
+ @keyframes eyes-look {
140
+ 0%, 100% { transform: translate(1.5px, 0.5px); }
141
+ 20% { transform: translate(1.5px, 0.5px); }
142
+ 25% { transform: translate(1px, -0.5px); }
143
+ 35% { transform: translate(1px, -0.5px); }
144
+ 40% { transform: translate(1.5px, 0.5px); }
145
+ 70% { transform: translate(0.3px, 0); }
146
+ 80% { transform: translate(1.5px, 0.5px); }
147
+ }
148
+
149
+ /* Sparks: appear at impact, scatter outward */
150
+ @keyframes spark-1 {
151
+ 0%, 49% { opacity: 0; transform: translate(0, 0) scale(0); }
152
+ 50% { opacity: 1; transform: translate(0, 0) scale(1); }
153
+ 70% { opacity: 0; transform: translate(4px, -6px) scale(0); }
154
+ 71%, 100% { opacity: 0; transform: translate(0, 0) scale(0); }
155
+ }
156
+ @keyframes spark-2 {
157
+ 0%, 49% { opacity: 0; transform: translate(0, 0) scale(0); }
158
+ 50% { opacity: 1; transform: translate(0, 0) scale(1); }
159
+ 70% { opacity: 0; transform: translate(7px, -1px) scale(0); }
160
+ 71%, 100% { opacity: 0; transform: translate(0, 0) scale(0); }
161
+ }
162
+ @keyframes spark-3 {
163
+ 0%, 49% { opacity: 0; transform: translate(0, 0) scale(0); }
164
+ 50% { opacity: 1; transform: translate(0, 0) scale(1); }
165
+ 70% { opacity: 0; transform: translate(3px, 3px) scale(0); }
166
+ 71%, 100% { opacity: 0; transform: translate(0, 0) scale(0); }
167
+ }
168
+
169
+ /* Sweat: one drop every 6s */
170
+ @keyframes sweat-fly {
171
+ 0%, 55% { opacity: 0; transform: translate(0, 0) scale(0); }
172
+ 60% { opacity: 1; transform: translate(0, 0) scale(1); }
173
+ 80% { opacity: 0; transform: translate(-6px, -6px) scale(0.5); }
174
+ 100% { opacity: 0; }
175
+ }
176
+ </style>
177
+
178
+ <!-- Pixel Spark -->
179
+ <g id="pixel-spark">
180
+ <rect x="0" y="0" width="1" height="1"/>
181
+ </g>
182
+ </defs>
183
+
184
+ <!-- Ground Shadows -->
185
+ <rect class="shadow-anim" x="3" y="15" width="9" height="1" fill="#000000"/>
186
+ <rect x="16" y="15" width="7" height="1" fill="#000000" opacity="0.4"/>
187
+
188
+ <!-- Metal Block / Anvil -->
189
+ <g transform="translate(17, 13)">
190
+ <rect x="0" y="2" width="5" height="1" fill="#546E7A"/>
191
+ <rect x="1" y="0" width="3" height="2" fill="#78909C"/>
192
+ <rect x="1.5" y="-0.5" width="2" height="1" class="hot-metal"/>
193
+ </g>
194
+
195
+ <!-- Impact Sparks -->
196
+ <g fill="#FFC107" transform="translate(19, 12.5)">
197
+ <use href="#pixel-spark" class="spark s1"/>
198
+ <use href="#pixel-spark" class="spark s2"/>
199
+ <use href="#pixel-spark" class="spark s3"/>
200
+ </g>
201
+
202
+ <!-- Legs (bounce with body, no squash) -->
203
+ <g class="body-bounce" fill="#DE886D">
204
+ <rect x="3" y="13" width="1" height="2"/>
205
+ <rect x="5" y="13" width="1" height="2"/>
206
+ <rect x="9" y="13" width="1" height="2"/>
207
+ <rect x="11" y="13" width="1" height="2"/>
208
+ </g>
209
+
210
+ <!-- Body group [bounce > breathe] -->
211
+ <g class="body-bounce">
212
+ <g class="breathe">
213
+
214
+ <!-- Sweat (bounces + breathes, outside squash) -->
215
+ <g transform="translate(1, 8)">
216
+ <g class="sweat" fill="#40C4FF">
217
+ <rect x="0" y="1" width="1.5" height="1.5"/>
218
+ <rect x="0.25" y="0" width="1" height="1"/>
219
+ </g>
220
+ </g>
221
+
222
+ <!-- Body core [squash] — only torso + hat + eyes get squashed -->
223
+ <g class="body-squash">
224
+
225
+ <!-- Torso -->
226
+ <rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
227
+
228
+ <!-- Eyes [look 5s > blink 4s] — 放在 helmet 之前, 让帽子压过眼睛 -->
229
+ <g class="eyes-look">
230
+ <g class="blink" fill="#000">
231
+ <rect x="4" y="8" width="1" height="2"/>
232
+ <rect x="10" y="8" width="1" height="2"/>
233
+ </g>
234
+ </g>
235
+
236
+ <!-- Helmet (from helmet-tryon-v1: 三色橙, translate(0.5 1) scale(0.7) — v1 下移 1 格戴更低) -->
237
+ <g id="helmet" transform="translate(0.5 1) scale(0.7)">
238
+ <g fill="#EFA74A">
239
+ <rect x="7" y="0" width="6" height="1"/>
240
+ <rect x="7" y="1" width="6" height="1"/>
241
+ <rect x="14" y="1" width="2" height="1"/>
242
+ <rect x="2" y="2" width="3" height="1"/>
243
+ <rect x="7" y="2" width="2" height="1"/>
244
+ <rect x="11" y="2" width="2" height="1"/>
245
+ <rect x="14" y="2" width="4" height="1"/>
246
+ <rect x="2" y="3" width="3" height="1"/>
247
+ <rect x="7" y="3" width="1" height="1"/>
248
+ <rect x="14" y="3" width="4" height="1"/>
249
+ <rect x="1" y="4" width="4" height="1"/>
250
+ <rect x="7" y="4" width="1" height="1"/>
251
+ <rect x="14" y="4" width="5" height="1"/>
252
+ <rect x="1" y="5" width="4" height="1"/>
253
+ <rect x="7" y="5" width="1" height="1"/>
254
+ <rect x="12" y="5" width="1" height="1"/>
255
+ <rect x="14" y="5" width="5" height="1"/>
256
+ <rect x="1" y="6" width="4" height="1"/>
257
+ <rect x="8" y="6" width="1" height="1"/>
258
+ <rect x="11" y="6" width="1" height="1"/>
259
+ <rect x="14" y="6" width="5" height="1"/>
260
+ <rect x="1" y="7" width="1" height="1"/>
261
+ <rect x="0" y="9" width="20" height="1"/>
262
+ </g>
263
+ <g fill="#B7782E">
264
+ <rect x="6" y="1" width="1" height="1"/>
265
+ <rect x="13" y="1" width="1" height="1"/>
266
+ <rect x="6" y="2" width="1" height="1"/>
267
+ <rect x="9" y="2" width="2" height="1"/>
268
+ <rect x="13" y="2" width="1" height="1"/>
269
+ <rect x="6" y="3" width="1" height="1"/>
270
+ <rect x="8" y="3" width="4" height="1"/>
271
+ <rect x="13" y="3" width="1" height="1"/>
272
+ <rect x="6" y="4" width="1" height="1"/>
273
+ <rect x="8" y="4" width="4" height="1"/>
274
+ <rect x="13" y="4" width="1" height="1"/>
275
+ <rect x="6" y="5" width="1" height="1"/>
276
+ <rect x="9" y="5" width="2" height="1"/>
277
+ <rect x="13" y="5" width="1" height="1"/>
278
+ <rect x="6" y="6" width="1" height="1"/>
279
+ <rect x="9" y="6" width="2" height="1"/>
280
+ <rect x="13" y="6" width="1" height="1"/>
281
+ <rect x="7" y="7" width="1" height="1"/>
282
+ <rect x="12" y="7" width="1" height="1"/>
283
+ <rect x="1" y="8" width="18" height="1"/>
284
+ </g>
285
+ <g fill="#FAB253">
286
+ <rect x="5" y="1" width="1" height="1"/>
287
+ <rect x="5" y="2" width="1" height="1"/>
288
+ <rect x="5" y="3" width="1" height="1"/>
289
+ <rect x="12" y="3" width="1" height="1"/>
290
+ <rect x="5" y="4" width="1" height="1"/>
291
+ <rect x="12" y="4" width="1" height="1"/>
292
+ <rect x="5" y="5" width="1" height="1"/>
293
+ <rect x="8" y="5" width="1" height="1"/>
294
+ <rect x="11" y="5" width="1" height="1"/>
295
+ <rect x="5" y="6" width="1" height="1"/>
296
+ <rect x="7" y="6" width="1" height="1"/>
297
+ <rect x="12" y="6" width="1" height="1"/>
298
+ <rect x="2" y="7" width="5" height="1"/>
299
+ <rect x="8" y="7" width="4" height="1"/>
300
+ <rect x="13" y="7" width="6" height="1"/>
301
+ </g>
302
+ </g>
303
+
304
+ </g>
305
+
306
+ <!-- Left arm (bounces + breathes, NO squash) -->
307
+ <g class="arm-l-rest">
308
+ <rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
309
+ </g>
310
+
311
+ </g>
312
+ </g>
313
+
314
+ <!-- Right arm + hammer [bounce > breathe] (separate group, same classes = auto sync) -->
315
+ <g class="body-bounce">
316
+ <g class="breathe">
317
+ <g class="arm-hammer">
318
+ <rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
319
+ <!-- Hammer -->
320
+ <g>
321
+ <!-- Handle -->
322
+ <rect x="13.5" y="4" width="1" height="6" fill="#795548"/>
323
+ <!-- Head -->
324
+ <rect x="12.5" y="3" width="3" height="2" fill="#9E9E9E"/>
325
+ </g>
326
+ </g>
327
+ </g>
328
+ </g>
329
+ </svg>
@@ -0,0 +1,178 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ .body-walk {
5
+ transform-origin: 7.5px 15px;
6
+ animation: walk-bounce 0.4s infinite ease-in-out;
7
+ }
8
+ .step-a { animation: step 0.4s infinite ease-in-out; }
9
+ .step-b { animation: step 0.4s infinite ease-in-out; animation-delay: -0.2s; }
10
+ .pack-swing {
11
+ transform-origin: 13px 8px;
12
+ animation: pack-swing 0.4s infinite alternate ease-in-out;
13
+ }
14
+ .arm-swing-l {
15
+ transform-origin: 2px 9px;
16
+ animation: arm-swing 0.4s infinite alternate ease-in-out;
17
+ }
18
+ .cap-sway {
19
+ transform-origin: 6px 6.5px;
20
+ animation: cap-sway 0.8s infinite alternate ease-in-out;
21
+ }
22
+ .shadow-walk {
23
+ transform-origin: 7.5px 15.5px;
24
+ animation: shadow-walk 0.4s infinite ease-in-out;
25
+ }
26
+
27
+ /* Eyes three-layer */
28
+ .eyes-gaze { animation: eyes-gaze 2.5s infinite; }
29
+ .eyes-rect {
30
+ transform-origin: 7.5px 9px;
31
+ animation: eyes-blink-rush 2.5s infinite, rect-vis 2.5s infinite step-end;
32
+ }
33
+ .eyes-xmark {
34
+ visibility: hidden;
35
+ animation: xmark-vis 2.5s infinite step-end;
36
+ }
37
+
38
+ /* Sweat: only during xmark period */
39
+ .sweat-1 { animation: sweat1-fly 2.5s infinite; }
40
+ .sweat-2 { animation: sweat2-fly 2.5s infinite; }
41
+
42
+ @keyframes walk-bounce {
43
+ 0%, 50%, 100% { transform: translateY(1px); }
44
+ 25%, 75% { transform: translateY(0); }
45
+ }
46
+ @keyframes step {
47
+ 0%, 100% { transform: translateY(0); }
48
+ 50% { transform: translateY(-1px); }
49
+ }
50
+ @keyframes pack-swing {
51
+ 0% { transform: rotate(3deg); }
52
+ 100% { transform: rotate(-3deg); }
53
+ }
54
+ @keyframes arm-swing {
55
+ 0% { transform: rotate(-8deg); }
56
+ 100% { transform: rotate(8deg); }
57
+ }
58
+ @keyframes cap-sway {
59
+ 0% { transform: rotate(-3deg); }
60
+ 100% { transform: rotate(3deg); }
61
+ }
62
+ @keyframes shadow-walk {
63
+ 0%, 50%, 100% { transform: scale(1.03); opacity: 0.55; }
64
+ 25%, 75% { transform: scale(1); opacity: 0.5; }
65
+ }
66
+
67
+ /* Gaze: left while rushing, center during xmark */
68
+ @keyframes eyes-gaze {
69
+ 0%, 15%, 88%, 100% { transform: translate(-1px, 0); }
70
+ 25%, 80% { transform: translate(0, 0); }
71
+ }
72
+ /* Rect blink + gate at 28% and 78% */
73
+ @keyframes eyes-blink-rush {
74
+ 0%, 4%, 100% { transform: scaleY(1); }
75
+ 6% { transform: scaleY(0.1); }
76
+ 8% { transform: scaleY(1); }
77
+ 28% { transform: scaleY(0.1); }
78
+ 31%, 76% { transform: scaleY(1); }
79
+ 78% { transform: scaleY(0.1); }
80
+ 83% { transform: scaleY(1); }
81
+ }
82
+ /* Rect hidden during xmark */
83
+ @keyframes rect-vis {
84
+ 0% { visibility: visible; }
85
+ 29% { visibility: hidden; }
86
+ 79% { visibility: visible; }
87
+ }
88
+ /* Xmark shown during xmark */
89
+ @keyframes xmark-vis {
90
+ 0% { visibility: hidden; }
91
+ 29% { visibility: visible; }
92
+ 79% { visibility: hidden; }
93
+ }
94
+
95
+ /* Sweat only during xmark (synced to 2.5s) */
96
+ @keyframes sweat1-fly {
97
+ 0%, 27% { transform: translate(0, 0); opacity: 0; }
98
+ 31% { transform: translate(0, 0); opacity: 1; }
99
+ 55% { transform: translate(4px, -3px); opacity: 0; }
100
+ 100% { opacity: 0; }
101
+ }
102
+ @keyframes sweat2-fly {
103
+ 0%, 37% { transform: translate(0, 0); opacity: 0; }
104
+ 41% { transform: translate(0, 0); opacity: 1; }
105
+ 65% { transform: translate(2px, -5px); opacity: 0; }
106
+ 100% { opacity: 0; }
107
+ }
108
+ </style>
109
+ </defs>
110
+
111
+ <rect class="shadow-walk" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
112
+
113
+ <g transform="rotate(-2, 7.5, 15)">
114
+ <g class="body-walk">
115
+ <!-- Backpack -->
116
+ <g class="pack-swing">
117
+ <rect x="13" y="7" width="4" height="6" fill="#5C9CE6"/>
118
+ <rect x="12" y="8" width="5" height="4" fill="#5C9CE6"/>
119
+ <rect x="13" y="7" width="4" height="2" fill="#3D7AC7"/>
120
+ <rect x="13" y="10" width="4" height="1" fill="#3D7AC7"/>
121
+ <rect x="13" y="12" width="4" height="1" fill="#2D5FA5"/>
122
+ <rect x="15" y="9" width="1" height="1" fill="#FFD54F"/>
123
+ </g>
124
+
125
+ <!-- Legs -->
126
+ <g fill="#DE886D">
127
+ <rect class="step-a" x="3" y="13" width="1" height="2"/>
128
+ <rect class="step-b" x="5" y="13" width="1" height="2"/>
129
+ <rect class="step-b" x="9" y="13" width="1" height="2"/>
130
+ <rect class="step-a" x="11" y="13" width="1" height="2"/>
131
+ </g>
132
+
133
+ <!-- Body -->
134
+ <rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
135
+
136
+ <!-- Arms -->
137
+ <g class="arm-swing-l" fill="#DE886D">
138
+ <rect x="0" y="9" width="3" height="2"/>
139
+ </g>
140
+ <rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
141
+
142
+ <!-- Right strap -->
143
+ <rect x="13" y="7" width="1" height="4" fill="#3D7AC7"/>
144
+
145
+ <!-- Eyes: gaze + rect/xmark toggle -->
146
+ <g class="eyes-gaze">
147
+ <g class="eyes-rect" fill="#000000">
148
+ <rect x="4" y="8" width="1" height="2"/>
149
+ <rect x="10" y="8" width="1" height="2"/>
150
+ </g>
151
+ <g class="eyes-xmark" fill="none" stroke="#000000"
152
+ stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round">
153
+ <polyline points="4,8 5.5,9 4,10"/>
154
+ <polyline points="11,8 9.5,9 11,10"/>
155
+ </g>
156
+ </g>
157
+
158
+ <!-- Sweat: 2 drops only during xmark -->
159
+ <g class="sweat-1" fill="#40C4FF">
160
+ <rect x="14" y="5" width="1" height="1.5"/>
161
+ <rect x="14.25" y="4.5" width="0.5" height="0.5"/>
162
+ </g>
163
+ <g class="sweat-2" fill="#40C4FF">
164
+ <rect x="16" y="4" width="1" height="1.5"/>
165
+ <rect x="16.25" y="3.5" width="0.5" height="0.5"/>
166
+ </g>
167
+
168
+ <!-- Tilted cap -->
169
+ <g class="cap-sway">
170
+ <g transform="rotate(-15, 6, 6.5)">
171
+ <rect x="1" y="4.5" width="7" height="2" fill="#5C9CE6"/>
172
+ <rect x="-1" y="5.5" width="4" height="1" fill="#3D7AC7"/>
173
+ <rect x="4" y="4.5" width="1" height="1" fill="#FFD54F"/>
174
+ </g>
175
+ </g>
176
+ </g>
177
+ </g>
178
+ </svg>