@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.
- package/README.md +4 -0
- package/assets/calico/calico-collapsing.apng +0 -0
- package/assets/calico/calico-dozing.apng +0 -0
- package/assets/calico/calico-error.apng +0 -0
- package/assets/calico/calico-happy.apng +0 -0
- package/assets/calico/calico-idle-follow.svg +324 -0
- package/assets/calico/calico-idle.apng +0 -0
- package/assets/calico/calico-mini-alert.apng +0 -0
- package/assets/calico/calico-mini-crabwalk.apng +0 -0
- package/assets/calico/calico-mini-enter.apng +0 -0
- package/assets/calico/calico-mini-happy.apng +0 -0
- package/assets/calico/calico-mini-idle.apng +0 -0
- package/assets/calico/calico-mini-peek.apng +0 -0
- package/assets/calico/calico-mini-sleep.apng +0 -0
- package/assets/calico/calico-notification.apng +0 -0
- package/assets/calico/calico-react-drag.apng +0 -0
- package/assets/calico/calico-react-left.apng +0 -0
- package/assets/calico/calico-react-poke.apng +0 -0
- package/assets/calico/calico-sleeping.apng +0 -0
- package/assets/calico/calico-thinking.apng +0 -0
- package/assets/calico/calico-waking.apng +0 -0
- package/assets/calico/calico-working-building.apng +0 -0
- package/assets/calico/calico-working-carrying.apng +0 -0
- package/assets/calico/calico-working-conducting.apng +0 -0
- package/assets/calico/calico-working-juggling.apng +0 -0
- package/assets/calico/calico-working-sweeping.apng +0 -0
- package/assets/calico/calico-working-typing.apng +0 -0
- package/assets/calico/calico-yawning.apng +0 -0
- package/assets/calico.svg +324 -0
- package/assets/clawd/LICENSE +22 -0
- package/assets/clawd/clawd-about-hero.svg +202 -0
- package/assets/clawd/clawd-collapse-sleep.svg +247 -0
- package/assets/clawd/clawd-error.svg +94 -0
- package/assets/clawd/clawd-happy.svg +161 -0
- package/assets/clawd/clawd-headphones-groove.svg +194 -0
- package/assets/clawd/clawd-idle-bubble.svg +180 -0
- package/assets/clawd/clawd-idle-collapse.svg +101 -0
- package/assets/clawd/clawd-idle-doze.svg +72 -0
- package/assets/clawd/clawd-idle-follow.svg +64 -0
- package/assets/clawd/clawd-idle-living.svg +196 -0
- package/assets/clawd/clawd-idle-look.svg +115 -0
- package/assets/clawd/clawd-idle-reading.svg +252 -0
- package/assets/clawd/clawd-idle-yawn.svg +158 -0
- package/assets/clawd/clawd-mini-alert.svg +129 -0
- package/assets/clawd/clawd-mini-crabwalk.svg +76 -0
- package/assets/clawd/clawd-mini-enter-sleep.svg +64 -0
- package/assets/clawd/clawd-mini-enter.svg +114 -0
- package/assets/clawd/clawd-mini-happy.svg +124 -0
- package/assets/clawd/clawd-mini-idle.svg +83 -0
- package/assets/clawd/clawd-mini-peek.svg +82 -0
- package/assets/clawd/clawd-mini-sleep.svg +112 -0
- package/assets/clawd/clawd-mini-typing.svg +153 -0
- package/assets/clawd/clawd-notification.svg +438 -0
- package/assets/clawd/clawd-react-annoyed.svg +167 -0
- package/assets/clawd/clawd-react-double-jump.svg +229 -0
- package/assets/clawd/clawd-react-double.svg +108 -0
- package/assets/clawd/clawd-react-drag.svg +102 -0
- package/assets/clawd/clawd-react-left.svg +102 -0
- package/assets/clawd/clawd-react-right.svg +102 -0
- package/assets/clawd/clawd-sleeping.svg +118 -0
- package/assets/clawd/clawd-static-base.svg +21 -0
- package/assets/clawd/clawd-wake.svg +277 -0
- package/assets/clawd/clawd-working-building.svg +329 -0
- package/assets/clawd/clawd-working-carrying.svg +178 -0
- package/assets/clawd/clawd-working-debugger.svg +245 -0
- package/assets/clawd/clawd-working-juggling.svg +183 -0
- package/assets/clawd/clawd-working-sweeping.svg +248 -0
- package/assets/clawd/clawd-working-thinking.svg +501 -0
- package/assets/clawd/clawd-working-typing-boss.svg +307 -0
- package/assets/clawd/clawd-working-typing.svg +273 -0
- package/assets/clawd/clawd-working-ultrathink.svg +166 -0
- package/assets/clawd/clawd-working-wizard.svg +356 -0
- package/assets/clawd.svg +64 -0
- package/assets/cloudling/cloudling/cloudling-attention.svg +380 -0
- package/assets/cloudling/cloudling/cloudling-building.svg +667 -0
- package/assets/cloudling/cloudling/cloudling-carrying.svg +604 -0
- package/assets/cloudling/cloudling/cloudling-conducting.svg +616 -0
- package/assets/cloudling/cloudling/cloudling-dozing-to-sleeping.svg +578 -0
- package/assets/cloudling/cloudling/cloudling-dozing.svg +358 -0
- package/assets/cloudling/cloudling/cloudling-error.svg +428 -0
- package/assets/cloudling/cloudling/cloudling-idle-reading.svg +658 -0
- package/assets/cloudling/cloudling/cloudling-idle-to-dozing.svg +568 -0
- package/assets/cloudling/cloudling/cloudling-idle-to-sleeping.svg +811 -0
- package/assets/cloudling/cloudling/cloudling-idle.svg +255 -0
- package/assets/cloudling/cloudling/cloudling-juggling.svg +648 -0
- package/assets/cloudling/cloudling/cloudling-mini-alert.svg +390 -0
- package/assets/cloudling/cloudling/cloudling-mini-crabwalk.svg +335 -0
- package/assets/cloudling/cloudling/cloudling-mini-enter-roll-in.svg +226 -0
- package/assets/cloudling/cloudling/cloudling-mini-enter-sleep.svg +232 -0
- package/assets/cloudling/cloudling/cloudling-mini-happy.svg +371 -0
- package/assets/cloudling/cloudling/cloudling-mini-idle.svg +279 -0
- package/assets/cloudling/cloudling/cloudling-mini-peek.svg +328 -0
- package/assets/cloudling/cloudling/cloudling-mini-sleep.svg +260 -0
- package/assets/cloudling/cloudling/cloudling-mini-typing.svg +692 -0
- package/assets/cloudling/cloudling/cloudling-notification.svg +494 -0
- package/assets/cloudling/cloudling/cloudling-react-drag.svg +83 -0
- package/assets/cloudling/cloudling/cloudling-sleeping-to-idle.svg +555 -0
- package/assets/cloudling/cloudling/cloudling-sleeping.svg +500 -0
- package/assets/cloudling/cloudling/cloudling-sweeping.svg +292 -0
- package/assets/cloudling/cloudling/cloudling-thinking.svg +720 -0
- package/assets/cloudling/cloudling/cloudling-typing.svg +354 -0
- package/assets/cloudling/cloudling-attention.svg +380 -0
- package/assets/cloudling/cloudling-building.svg +667 -0
- package/assets/cloudling/cloudling-carrying.svg +604 -0
- package/assets/cloudling/cloudling-conducting.svg +616 -0
- package/assets/cloudling/cloudling-dozing-to-sleeping.svg +578 -0
- package/assets/cloudling/cloudling-dozing.svg +358 -0
- package/assets/cloudling/cloudling-error.svg +428 -0
- package/assets/cloudling/cloudling-idle-reading.svg +658 -0
- package/assets/cloudling/cloudling-idle-to-dozing.svg +568 -0
- package/assets/cloudling/cloudling-idle-to-sleeping.svg +811 -0
- package/assets/cloudling/cloudling-idle.svg +255 -0
- package/assets/cloudling/cloudling-juggling.svg +648 -0
- package/assets/cloudling/cloudling-mini-alert.svg +390 -0
- package/assets/cloudling/cloudling-mini-crabwalk.svg +335 -0
- package/assets/cloudling/cloudling-mini-enter-roll-in.svg +226 -0
- package/assets/cloudling/cloudling-mini-enter-sleep.svg +232 -0
- package/assets/cloudling/cloudling-mini-happy.svg +371 -0
- package/assets/cloudling/cloudling-mini-idle.svg +279 -0
- package/assets/cloudling/cloudling-mini-peek.svg +328 -0
- package/assets/cloudling/cloudling-mini-sleep.svg +260 -0
- package/assets/cloudling/cloudling-mini-typing.svg +692 -0
- package/assets/cloudling/cloudling-notification.svg +494 -0
- package/assets/cloudling/cloudling-react-drag.svg +83 -0
- package/assets/cloudling/cloudling-sleeping-to-idle.svg +555 -0
- package/assets/cloudling/cloudling-sleeping.svg +500 -0
- package/assets/cloudling/cloudling-sweeping.svg +292 -0
- package/assets/cloudling/cloudling-thinking.svg +720 -0
- package/assets/cloudling/cloudling-typing.svg +354 -0
- package/assets/cloudling.svg +255 -0
- package/assets/ghost-attention.svg +19 -0
- package/assets/ghost-carrying.svg +19 -0
- package/assets/ghost-collapsing.svg +19 -0
- package/assets/ghost-dozing.svg +23 -0
- package/assets/ghost-error.svg +19 -0
- package/assets/ghost-happy.svg +23 -0
- package/assets/ghost-idle-action1.svg +19 -0
- package/assets/ghost-idle-action2.svg +19 -0
- package/assets/ghost-idle-action3.svg +19 -0
- package/assets/ghost-idle.svg +11 -0
- package/assets/ghost-juggling.svg +19 -0
- package/assets/ghost-notification.svg +19 -0
- package/assets/ghost-react-double.svg +23 -0
- package/assets/ghost-react-drag.svg +23 -0
- package/assets/ghost-react-left.svg +19 -0
- package/assets/ghost-react-right.svg +19 -0
- package/assets/ghost-sleeping.svg +19 -0
- package/assets/ghost-sweeping.svg +19 -0
- package/assets/ghost-thinking.svg +19 -0
- package/assets/ghost-waking.svg +19 -0
- package/assets/ghost-working.svg +19 -0
- package/assets/ghost-yawning.svg +23 -0
- package/assets/ghost.svg +11 -0
- package/assets/robot-attention.svg +19 -0
- package/assets/robot-carrying.svg +19 -0
- package/assets/robot-collapsing.svg +19 -0
- package/assets/robot-dozing.svg +23 -0
- package/assets/robot-error.svg +19 -0
- package/assets/robot-happy.svg +23 -0
- package/assets/robot-idle-action1.svg +19 -0
- package/assets/robot-idle-action2.svg +19 -0
- package/assets/robot-idle-action3.svg +19 -0
- package/assets/robot-idle.svg +11 -0
- package/assets/robot-juggling.svg +19 -0
- package/assets/robot-notification.svg +19 -0
- package/assets/robot-react-double.svg +23 -0
- package/assets/robot-react-drag.svg +23 -0
- package/assets/robot-react-left.svg +19 -0
- package/assets/robot-react-right.svg +19 -0
- package/assets/robot-sleeping.svg +19 -0
- package/assets/robot-sweeping.svg +19 -0
- package/assets/robot-thinking.svg +19 -0
- package/assets/robot-waking.svg +19 -0
- package/assets/robot-working.svg +19 -0
- package/assets/robot-yawning.svg +23 -0
- package/assets/robot.svg +11 -0
- package/manifest.json +889 -0
- package/package.json +18 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
/* ═══ Independent animations (always running) ═══ */
|
|
5
|
+
|
|
6
|
+
.breathe {
|
|
7
|
+
transform-origin: 7.5px 13px;
|
|
8
|
+
animation: breathe 3.2s infinite ease-in-out;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.blink {
|
|
12
|
+
transform-origin: 7.5px 9px;
|
|
13
|
+
animation: blink 4s infinite linear;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.leg-a {
|
|
17
|
+
animation: sneak-a 0.5s infinite linear;
|
|
18
|
+
transform-origin: top center;
|
|
19
|
+
transform-box: fill-box;
|
|
20
|
+
}
|
|
21
|
+
.leg-b {
|
|
22
|
+
animation: sneak-b 0.5s infinite linear;
|
|
23
|
+
transform-origin: top center;
|
|
24
|
+
transform-box: fill-box;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.glass-wobble {
|
|
28
|
+
transform-origin: 14px 10px;
|
|
29
|
+
animation: glass-wobble 3s infinite ease-in-out;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* ═══ Main 14s timeline ═══ */
|
|
33
|
+
|
|
34
|
+
.body-main {
|
|
35
|
+
transform-origin: 7.5px 15px;
|
|
36
|
+
animation: body-main 14s infinite ease-in-out;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.shadow-main {
|
|
40
|
+
transform-origin: 7.5px 15.5px;
|
|
41
|
+
animation: shadow-main 14s infinite ease-in-out;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.arm-l {
|
|
45
|
+
transform-origin: 1px 10px;
|
|
46
|
+
animation: arm-l 14s infinite ease-in-out;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.arm-r {
|
|
50
|
+
transform-origin: 14px 10px;
|
|
51
|
+
animation: arm-r 14s infinite ease-in-out;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.glass-vis {
|
|
55
|
+
animation: glass-vis 14s infinite linear;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.eye-squint {
|
|
59
|
+
transform-origin: 4.5px 9px;
|
|
60
|
+
animation: eye-squint 14s infinite ease-in-out;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.legs-idle {
|
|
64
|
+
animation: legs-idle 14s infinite linear;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.legs-sneak {
|
|
68
|
+
animation: legs-sneak 14s infinite linear;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* ═══ Independent keyframes ═══ */
|
|
72
|
+
|
|
73
|
+
@keyframes breathe {
|
|
74
|
+
0%, 100% { transform: scale(1, 1) translate(0, 0); }
|
|
75
|
+
50% { transform: scale(1.02, 0.98) translate(0, 0.5px); }
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@keyframes blink {
|
|
79
|
+
0%, 10%, 100% { transform: scaleY(1); }
|
|
80
|
+
5% { transform: scaleY(0.1); }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@keyframes sneak-a {
|
|
84
|
+
0%, 100% { transform: rotate(0deg) scaleY(1); }
|
|
85
|
+
50% { transform: rotate(-25deg) scaleY(0.7); }
|
|
86
|
+
}
|
|
87
|
+
@keyframes sneak-b {
|
|
88
|
+
0%, 100% { transform: rotate(-25deg) scaleY(0.7); }
|
|
89
|
+
50% { transform: rotate(0deg) scaleY(1); }
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@keyframes glass-wobble {
|
|
93
|
+
0%, 100% { transform: rotate(0deg) scale(1); }
|
|
94
|
+
50% { transform: rotate(-3deg) scale(1.05); }
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* ═══ Main timeline keyframes (14s) ═══ */
|
|
98
|
+
|
|
99
|
+
/* Body: idle → hunch + patrol → idle (both idle phases trimmed) */
|
|
100
|
+
@keyframes body-main {
|
|
101
|
+
0%, 3% { transform: translate(0, 0) rotate(0deg); }
|
|
102
|
+
15% { transform: translate(0, 1px) rotate(2deg); }
|
|
103
|
+
22% { transform: translate(-2px, 1px) rotate(2deg); }
|
|
104
|
+
35% { transform: translate(3px, 1px) rotate(2deg); }
|
|
105
|
+
48% { transform: translate(-2px, 1px) rotate(2deg); }
|
|
106
|
+
61% { transform: translate(2px, 1px) rotate(2deg); }
|
|
107
|
+
78% { transform: translate(0, 1px) rotate(2deg); }
|
|
108
|
+
90% { transform: translate(0, 0) rotate(0deg); }
|
|
109
|
+
96%, 100% { transform: translate(0, 0) rotate(0deg); }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Shadow: follows body X, shrinks during detective */
|
|
113
|
+
@keyframes shadow-main {
|
|
114
|
+
0%, 3% { transform: scaleX(1) translate(0, 0); opacity: 0.5; }
|
|
115
|
+
15% { transform: scale(0.9) translate(0, 0); opacity: 0.4; }
|
|
116
|
+
22% { transform: scale(0.9) translate(-2px, 0); opacity: 0.4; }
|
|
117
|
+
35% { transform: scale(0.9) translate(3px, 0); opacity: 0.4; }
|
|
118
|
+
48% { transform: scale(0.9) translate(-2px, 0); opacity: 0.4; }
|
|
119
|
+
61% { transform: scale(0.9) translate(2px, 0); opacity: 0.4; }
|
|
120
|
+
78% { transform: scale(0.9) translate(0, 0); opacity: 0.4; }
|
|
121
|
+
90% { transform: scaleX(1) translate(0, 0); opacity: 0.5; }
|
|
122
|
+
96%, 100% { transform: scaleX(1) translate(0, 0); opacity: 0.5; }
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Left arm: normal → tucked behind → normal */
|
|
126
|
+
@keyframes arm-l {
|
|
127
|
+
0%, 5% { transform: translate(0, 0) rotate(0deg); }
|
|
128
|
+
15%, 78% { transform: translate(1px, -1px) rotate(15deg); }
|
|
129
|
+
90%, 100% { transform: translate(0, 0) rotate(0deg); }
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* Right arm: lifts briefly when glass appears/disappears */
|
|
133
|
+
@keyframes arm-r {
|
|
134
|
+
0%, 4% { transform: translate(0, 0); }
|
|
135
|
+
7%, 10% { transform: translate(0, -2px); }
|
|
136
|
+
13%, 80% { transform: translate(0, 0); }
|
|
137
|
+
83%, 86% { transform: translate(0, -2px); }
|
|
138
|
+
90%, 100% { transform: translate(0, 0); }
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* Magnifying glass: appears while arm is up, vanishes while arm is up */
|
|
142
|
+
@keyframes glass-vis {
|
|
143
|
+
0%, 8.9% { opacity: 0; }
|
|
144
|
+
9% { opacity: 1; }
|
|
145
|
+
83.9% { opacity: 1; }
|
|
146
|
+
84% { opacity: 0; }
|
|
147
|
+
100% { opacity: 0; }
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* Left eye: normal → squint → normal */
|
|
151
|
+
@keyframes eye-squint {
|
|
152
|
+
0%, 10% { transform: scaleY(1); }
|
|
153
|
+
15%, 78% { transform: scaleY(0.5); }
|
|
154
|
+
86%, 100% { transform: scaleY(1); }
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* Idle legs: visible in idle, hidden in detective */
|
|
158
|
+
@keyframes legs-idle {
|
|
159
|
+
0%, 13.9% { opacity: 1; }
|
|
160
|
+
14% { opacity: 0; }
|
|
161
|
+
85.9% { opacity: 0; }
|
|
162
|
+
86% { opacity: 1; }
|
|
163
|
+
100% { opacity: 1; }
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* Sneak legs: hidden in idle, visible in detective */
|
|
167
|
+
@keyframes legs-sneak {
|
|
168
|
+
0%, 13.9% { opacity: 0; }
|
|
169
|
+
14% { opacity: 1; }
|
|
170
|
+
85.9% { opacity: 1; }
|
|
171
|
+
86% { opacity: 0; }
|
|
172
|
+
100% { opacity: 0; }
|
|
173
|
+
}
|
|
174
|
+
</style>
|
|
175
|
+
</defs>
|
|
176
|
+
|
|
177
|
+
<!-- Ground Shadow -->
|
|
178
|
+
<g class="shadow-main">
|
|
179
|
+
<rect x="3" y="15" width="9" height="1" fill="#000000"/>
|
|
180
|
+
</g>
|
|
181
|
+
|
|
182
|
+
<!-- Static Legs (idle phases) -->
|
|
183
|
+
<g class="legs-idle" fill="#DE886D">
|
|
184
|
+
<rect x="3" y="12" width="1" height="3"/>
|
|
185
|
+
<rect x="5" y="12" width="1" height="3"/>
|
|
186
|
+
<rect x="9" y="12" width="1" height="3"/>
|
|
187
|
+
<rect x="11" y="12" width="1" height="3"/>
|
|
188
|
+
</g>
|
|
189
|
+
|
|
190
|
+
<!-- Body Group (main timeline: hunch + walk) -->
|
|
191
|
+
<g class="body-main">
|
|
192
|
+
|
|
193
|
+
<!-- Sneaking Legs (detective phase, inside body so they walk with it) -->
|
|
194
|
+
<g class="legs-sneak" fill="#DE886D" opacity="0">
|
|
195
|
+
<rect class="leg-a" x="3" y="13" width="1" height="2"/>
|
|
196
|
+
<rect class="leg-b" x="5" y="13" width="1" height="2"/>
|
|
197
|
+
<rect class="leg-a" x="9" y="13" width="1" height="2"/>
|
|
198
|
+
<rect class="leg-b" x="11" y="13" width="1" height="2"/>
|
|
199
|
+
</g>
|
|
200
|
+
|
|
201
|
+
<!-- Upper Body (breathing) -->
|
|
202
|
+
<g class="breathe">
|
|
203
|
+
<!-- Torso -->
|
|
204
|
+
<rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
|
|
205
|
+
|
|
206
|
+
<!-- Left Arm -->
|
|
207
|
+
<g class="arm-l">
|
|
208
|
+
<rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
|
|
209
|
+
</g>
|
|
210
|
+
|
|
211
|
+
<!-- Eyes -->
|
|
212
|
+
<g class="blink" fill="#000000">
|
|
213
|
+
<!-- Left Eye (squints during detective phase) -->
|
|
214
|
+
<g class="eye-squint">
|
|
215
|
+
<rect x="4" y="8" width="1" height="2"/>
|
|
216
|
+
</g>
|
|
217
|
+
<!-- Right Eye -->
|
|
218
|
+
<rect x="10" y="8" width="1" height="2"/>
|
|
219
|
+
</g>
|
|
220
|
+
|
|
221
|
+
<!-- Right Arm + Magnifying Glass (on top of eyes in z-order) -->
|
|
222
|
+
<g class="arm-r">
|
|
223
|
+
<rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
|
|
224
|
+
|
|
225
|
+
<!-- Magnifying Glass -->
|
|
226
|
+
<g class="glass-vis" opacity="0">
|
|
227
|
+
<g class="glass-wobble">
|
|
228
|
+
<g transform="translate(13.5, 9.5)">
|
|
229
|
+
<!-- Handle -->
|
|
230
|
+
<polygon points="0.5,1.5 1.5,0.5 -1,-2 -2,-1" fill="#795548"/>
|
|
231
|
+
<!-- Rim -->
|
|
232
|
+
<rect x="-6" y="-5" width="6" height="6" fill="#546E7A" rx="2"/>
|
|
233
|
+
<!-- Magnified Eye -->
|
|
234
|
+
<rect x="-4" y="-3.5" width="2" height="3" fill="#000000"/>
|
|
235
|
+
<!-- Lens -->
|
|
236
|
+
<rect x="-5.5" y="-4.5" width="5" height="5" fill="#E0F7FA" rx="1.5" opacity="0.6"/>
|
|
237
|
+
<!-- Glare -->
|
|
238
|
+
<rect x="-4.5" y="-3.5" width="1.5" height="1.5" fill="#FFFFFF" opacity="0.8"/>
|
|
239
|
+
</g>
|
|
240
|
+
</g>
|
|
241
|
+
</g>
|
|
242
|
+
</g>
|
|
243
|
+
</g>
|
|
244
|
+
</g>
|
|
245
|
+
</svg>
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
/* ===== Independent sub-animations ===== */
|
|
5
|
+
.breathe {
|
|
6
|
+
transform-origin: 7.5px 13px;
|
|
7
|
+
animation: breathe 3.2s infinite ease-in-out;
|
|
8
|
+
}
|
|
9
|
+
.blink {
|
|
10
|
+
transform-origin: 7.5px 9px;
|
|
11
|
+
animation: blink 4s infinite;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* ===== Body rock: left-right sway + micro-dip ===== */
|
|
15
|
+
.body-rock {
|
|
16
|
+
transform-origin: 7.5px 15px;
|
|
17
|
+
animation: rock 1.2s infinite ease-in-out;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* ===== Shadow ===== */
|
|
21
|
+
.shadow-anim {
|
|
22
|
+
transform-origin: 7.5px 15.5px;
|
|
23
|
+
animation: shadow-rock 1.2s infinite ease-in-out;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* ===== Arms: alternate catch/throw, synced with rock ===== */
|
|
27
|
+
.arm-juggle-l {
|
|
28
|
+
transform-origin: 1px 10px;
|
|
29
|
+
animation: arm-jl 1.2s infinite ease-in-out;
|
|
30
|
+
}
|
|
31
|
+
.arm-juggle-r {
|
|
32
|
+
transform-origin: 14px 10px;
|
|
33
|
+
animation: arm-jr 1.2s infinite ease-in-out;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* ===== Eyes: track balls ===== */
|
|
37
|
+
.eye-track {
|
|
38
|
+
animation: eye-track 2.4s infinite ease-in-out;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* ===== Juggling packets: parabolic arc ===== */
|
|
42
|
+
.packet {
|
|
43
|
+
animation: juggle 1.2s infinite;
|
|
44
|
+
}
|
|
45
|
+
.p1 { animation-delay: 0s; fill: #FF5252; }
|
|
46
|
+
.p2 { animation-delay: -0.4s; fill: #FFC107; }
|
|
47
|
+
.p3 { animation-delay: -0.8s; fill: #4CAF50; }
|
|
48
|
+
|
|
49
|
+
/* (no sweat — juggling is a steady state, not emergency) */
|
|
50
|
+
|
|
51
|
+
/* ===== Keyframes ===== */
|
|
52
|
+
|
|
53
|
+
@keyframes breathe {
|
|
54
|
+
0%, 100% { transform: scale(1, 1) translate(0, 0); }
|
|
55
|
+
50% { transform: scale(1.02, 0.98) translate(0, 0.5px); }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@keyframes blink {
|
|
59
|
+
0%, 10%, 100% { transform: scaleY(1); }
|
|
60
|
+
5% { transform: scaleY(0.1); }
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Body: center → left-dip → center → right-dip → center */
|
|
64
|
+
@keyframes rock {
|
|
65
|
+
0%, 50%, 100% { transform: rotate(0deg) translateY(0); }
|
|
66
|
+
25% { transform: rotate(-3deg) translateY(0.3px); }
|
|
67
|
+
75% { transform: rotate(3deg) translateY(0.3px); }
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Shadow: sway with body */
|
|
71
|
+
@keyframes shadow-rock {
|
|
72
|
+
0%, 50%, 100% { transform: scaleX(1); opacity: 0.5; }
|
|
73
|
+
25% { transform: scaleX(1.03) translateX(-0.3px); opacity: 0.52; }
|
|
74
|
+
75% { transform: scaleX(1.03) translateX(0.3px); opacity: 0.52; }
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Left arm: up at 25% (catch left), down at 75% */
|
|
78
|
+
@keyframes arm-jl {
|
|
79
|
+
0%, 50%, 100% { transform: rotate(20deg); }
|
|
80
|
+
25% { transform: rotate(35deg); }
|
|
81
|
+
75% { transform: rotate(5deg); }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* Right arm: down at 25%, up at 75% (catch right) */
|
|
85
|
+
@keyframes arm-jr {
|
|
86
|
+
0%, 50%, 100% { transform: rotate(-20deg); }
|
|
87
|
+
25% { transform: rotate(-5deg); }
|
|
88
|
+
75% { transform: rotate(-35deg); }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* Eyes: track ball arc left-right */
|
|
92
|
+
@keyframes eye-track {
|
|
93
|
+
0%, 100% { transform: translate(-1px, -1px); }
|
|
94
|
+
15% { transform: translate(0, -1.5px); }
|
|
95
|
+
30% { transform: translate(1px, -1px); }
|
|
96
|
+
45% { transform: translate(1px, 0.5px); }
|
|
97
|
+
50% { transform: translate(1px, -1px); }
|
|
98
|
+
65% { transform: translate(0, -1.5px); }
|
|
99
|
+
80% { transform: translate(-1px, -1px); }
|
|
100
|
+
90% { transform: translate(-1px, 0.5px); }
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* Juggle: parabolic arc between hands, hang at top
|
|
104
|
+
Packet origin is x=-1 y=-1 (2x2 rect center ~0,0)
|
|
105
|
+
Left hand: x~1, y~10 → translate(2, 10)
|
|
106
|
+
Right hand: x~14, y~10 → translate(14, 10)
|
|
107
|
+
Arc peak: y ~ -1 (well above head) */
|
|
108
|
+
@keyframes juggle {
|
|
109
|
+
0% { transform: translate(2px, 10px); }
|
|
110
|
+
8% { transform: translate(4px, 4px); }
|
|
111
|
+
18% { transform: translate(6px, 0px); }
|
|
112
|
+
30% { transform: translate(8px, -1px); }
|
|
113
|
+
42% { transform: translate(10px, 0px); }
|
|
114
|
+
50% { transform: translate(14px, 10px); }
|
|
115
|
+
58% { transform: translate(12px, 4px); }
|
|
116
|
+
68% { transform: translate(10px, 0px); }
|
|
117
|
+
80% { transform: translate(8px, -1px); }
|
|
118
|
+
92% { transform: translate(4px, 4px); }
|
|
119
|
+
100% { transform: translate(2px, 10px); }
|
|
120
|
+
}
|
|
121
|
+
</style>
|
|
122
|
+
</defs>
|
|
123
|
+
|
|
124
|
+
<!-- Ground Shadow -->
|
|
125
|
+
<rect class="shadow-anim" x="3" y="15" width="9" height="1" fill="#000" opacity="0.5"/>
|
|
126
|
+
|
|
127
|
+
<!-- Juggling Packets -->
|
|
128
|
+
<g>
|
|
129
|
+
<!-- Red ball -->
|
|
130
|
+
<g class="packet p1">
|
|
131
|
+
<circle cx="0" cy="0" r="1.2" fill="#FF5252"/>
|
|
132
|
+
<circle cx="-0.35" cy="-0.35" r="0.45" fill="#FF8A80" opacity="0.7"/>
|
|
133
|
+
<circle cx="0.3" cy="0.4" r="0.6" fill="#D32F2F" opacity="0.3"/>
|
|
134
|
+
</g>
|
|
135
|
+
<!-- Yellow ball -->
|
|
136
|
+
<g class="packet p2">
|
|
137
|
+
<circle cx="0" cy="0" r="1.2" fill="#FFC107"/>
|
|
138
|
+
<circle cx="-0.35" cy="-0.35" r="0.45" fill="#FFE082" opacity="0.7"/>
|
|
139
|
+
<circle cx="0.3" cy="0.4" r="0.6" fill="#FFA000" opacity="0.3"/>
|
|
140
|
+
</g>
|
|
141
|
+
<!-- Green ball -->
|
|
142
|
+
<g class="packet p3">
|
|
143
|
+
<circle cx="0" cy="0" r="1.2" fill="#4CAF50"/>
|
|
144
|
+
<circle cx="-0.35" cy="-0.35" r="0.45" fill="#81C784" opacity="0.7"/>
|
|
145
|
+
<circle cx="0.3" cy="0.4" r="0.6" fill="#388E3C" opacity="0.3"/>
|
|
146
|
+
</g>
|
|
147
|
+
</g>
|
|
148
|
+
|
|
149
|
+
<!-- Static Legs -->
|
|
150
|
+
<g fill="#DE886D">
|
|
151
|
+
<rect x="3" y="13" width="1" height="2"/>
|
|
152
|
+
<rect x="5" y="13" width="1" height="2"/>
|
|
153
|
+
<rect x="9" y="13" width="1" height="2"/>
|
|
154
|
+
<rect x="11" y="13" width="1" height="2"/>
|
|
155
|
+
</g>
|
|
156
|
+
|
|
157
|
+
<!-- Upper Body -->
|
|
158
|
+
<g class="body-rock">
|
|
159
|
+
<g class="breathe">
|
|
160
|
+
<!-- Torso -->
|
|
161
|
+
<rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
|
|
162
|
+
|
|
163
|
+
<!-- Left Arm -->
|
|
164
|
+
<g class="arm-juggle-l">
|
|
165
|
+
<rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
|
|
166
|
+
</g>
|
|
167
|
+
|
|
168
|
+
<!-- Right Arm -->
|
|
169
|
+
<g class="arm-juggle-r">
|
|
170
|
+
<rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
|
|
171
|
+
</g>
|
|
172
|
+
|
|
173
|
+
<!-- Eyes -->
|
|
174
|
+
<g class="eye-track" fill="#000">
|
|
175
|
+
<g class="blink">
|
|
176
|
+
<rect x="4" y="8" width="1" height="2"/>
|
|
177
|
+
<rect x="10" y="8" width="1" height="2"/>
|
|
178
|
+
</g>
|
|
179
|
+
</g>
|
|
180
|
+
|
|
181
|
+
</g>
|
|
182
|
+
</g>
|
|
183
|
+
</svg>
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
/* ===== Independent sub-animations ===== */
|
|
5
|
+
.breathe {
|
|
6
|
+
transform-origin: 7.5px 13px;
|
|
7
|
+
animation: breathe 3.2s infinite ease-in-out;
|
|
8
|
+
}
|
|
9
|
+
.blink {
|
|
10
|
+
transform-origin: 7.5px 9px;
|
|
11
|
+
animation: blink 4s infinite;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* ===== Main 10s story arc ===== */
|
|
15
|
+
.body-lean {
|
|
16
|
+
transform-origin: 7.5px 15px;
|
|
17
|
+
animation: body-lean 10s infinite ease-in-out;
|
|
18
|
+
}
|
|
19
|
+
.shadow-anim {
|
|
20
|
+
transform-origin: 7.5px 15.5px;
|
|
21
|
+
animation: shadow-anim 10s infinite ease-in-out;
|
|
22
|
+
}
|
|
23
|
+
.arm-r {
|
|
24
|
+
transform-origin: 14px 10px;
|
|
25
|
+
animation: arm-right 10s infinite ease-in-out;
|
|
26
|
+
}
|
|
27
|
+
.arm-l {
|
|
28
|
+
transform-origin: 1px 10px;
|
|
29
|
+
animation: arm-left 10s infinite ease-in-out;
|
|
30
|
+
}
|
|
31
|
+
.eyes-dir {
|
|
32
|
+
animation: eye-dir 10s infinite ease-in-out;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Dust particles */
|
|
36
|
+
.dust { opacity: 0; }
|
|
37
|
+
.dust-1 { animation: dust1 10s infinite; }
|
|
38
|
+
.dust-2 { animation: dust2 10s infinite; }
|
|
39
|
+
.dust-3 { animation: dust3 10s infinite; }
|
|
40
|
+
|
|
41
|
+
/* Sweat drops */
|
|
42
|
+
.sweat { opacity: 0; }
|
|
43
|
+
.sweat-1 { animation: sweat1 10s infinite; }
|
|
44
|
+
.sweat-2 { animation: sweat2 10s infinite; }
|
|
45
|
+
|
|
46
|
+
/* ===== Keyframes ===== */
|
|
47
|
+
@keyframes breathe {
|
|
48
|
+
0%, 100% { transform: scale(1, 1) translate(0, 0); }
|
|
49
|
+
50% { transform: scale(1.02, 0.98) translate(0, 0.5px); }
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@keyframes blink {
|
|
53
|
+
0%, 10%, 100% { transform: scaleY(1); }
|
|
54
|
+
5% { transform: scaleY(0.1); }
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Body: idle → lean → straighten → lean → return to idle */
|
|
58
|
+
@keyframes body-lean {
|
|
59
|
+
0%, 1% { transform: translate(0, 0) rotate(0deg); }
|
|
60
|
+
5%, 38% { transform: translate(1px, 0) rotate(6deg); }
|
|
61
|
+
43%, 57% { transform: translate(0, 0) rotate(2deg); }
|
|
62
|
+
62%, 85% { transform: translate(1px, 0) rotate(6deg); }
|
|
63
|
+
90% { transform: translate(0.5px, 0) rotate(3deg); }
|
|
64
|
+
100% { transform: translate(0, 0) rotate(0deg); }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@keyframes shadow-anim {
|
|
68
|
+
0%, 1% { transform: scaleX(1); opacity: 0.5; }
|
|
69
|
+
5%, 38% { transform: scaleX(1.08); opacity: 0.55; }
|
|
70
|
+
43%, 57% { transform: scaleX(1); opacity: 0.5; }
|
|
71
|
+
62%, 85% { transform: scaleX(1.08); opacity: 0.55; }
|
|
72
|
+
90% { transform: scaleX(1.03); opacity: 0.52; }
|
|
73
|
+
100% { transform: scaleX(1); opacity: 0.5; }
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* Right arm + broom: idle → 3 sweeps → relax → 3 sweeps → hold
|
|
77
|
+
Forward stroke (35 to -15) is faster than return (-15 to 35) */
|
|
78
|
+
@keyframes arm-right {
|
|
79
|
+
0%, 1% { transform: rotate(0deg); }
|
|
80
|
+
4% { transform: rotate(35deg); }
|
|
81
|
+
/* Phase A: stroke 1 */
|
|
82
|
+
7% { transform: rotate(35deg); }
|
|
83
|
+
10% { transform: rotate(-15deg); }
|
|
84
|
+
/* return */
|
|
85
|
+
15% { transform: rotate(35deg); }
|
|
86
|
+
/* stroke 2 */
|
|
87
|
+
18% { transform: rotate(-15deg); }
|
|
88
|
+
/* return */
|
|
89
|
+
23% { transform: rotate(35deg); }
|
|
90
|
+
/* stroke 3 */
|
|
91
|
+
26% { transform: rotate(-15deg); }
|
|
92
|
+
30% { transform: rotate(10deg); }
|
|
93
|
+
/* Pause: arm relaxed */
|
|
94
|
+
36%, 57% { transform: rotate(0deg); }
|
|
95
|
+
/* Phase B: stroke 1 */
|
|
96
|
+
61% { transform: rotate(35deg); }
|
|
97
|
+
64% { transform: rotate(-15deg); }
|
|
98
|
+
/* stroke 2 */
|
|
99
|
+
69% { transform: rotate(35deg); }
|
|
100
|
+
72% { transform: rotate(-15deg); }
|
|
101
|
+
/* stroke 3 */
|
|
102
|
+
77% { transform: rotate(35deg); }
|
|
103
|
+
80% { transform: rotate(-15deg); }
|
|
104
|
+
85% { transform: rotate(10deg); }
|
|
105
|
+
90% { transform: rotate(5deg); }
|
|
106
|
+
100% { transform: rotate(0deg); }
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* Left arm: idle → scratch head during pause → idle */
|
|
110
|
+
@keyframes arm-left {
|
|
111
|
+
0%, 41% { transform: translate(0, 0) rotate(0deg); }
|
|
112
|
+
44% { transform: translate(2px, -4px) rotate(35deg); }
|
|
113
|
+
46% { transform: translate(2.5px, -5px) rotate(50deg); }
|
|
114
|
+
48% { transform: translate(2px, -4px) rotate(35deg); }
|
|
115
|
+
50% { transform: translate(2.5px, -5px) rotate(50deg); }
|
|
116
|
+
52% { transform: translate(2px, -4px) rotate(35deg); }
|
|
117
|
+
55%, 100%{ transform: translate(0, 0) rotate(0deg); }
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* Eyes: ahead → look down → ahead (pause) → down → return to ahead */
|
|
121
|
+
@keyframes eye-dir {
|
|
122
|
+
0%, 2% { transform: translate(0, 0); }
|
|
123
|
+
5%, 38% { transform: translate(1px, 1px); }
|
|
124
|
+
43%, 57% { transform: translate(0, 0); }
|
|
125
|
+
62%, 85% { transform: translate(1px, 1px); }
|
|
126
|
+
90% { transform: translate(0.5px, 0.5px); }
|
|
127
|
+
100% { transform: translate(0, 0); }
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* Dust puffs at end of forward strokes */
|
|
131
|
+
@keyframes dust1 {
|
|
132
|
+
0%, 8% { opacity: 0; transform: translate(17px, 15px) scale(0); }
|
|
133
|
+
10% { opacity: 0.6; transform: translate(17px, 15px) scale(1); }
|
|
134
|
+
16% { opacity: 0; transform: translate(20px, 13.5px) scale(0.3); }
|
|
135
|
+
17%, 62% { opacity: 0; }
|
|
136
|
+
64% { opacity: 0.6; transform: translate(17px, 15px) scale(1); }
|
|
137
|
+
70% { opacity: 0; transform: translate(20px, 13.5px) scale(0.3); }
|
|
138
|
+
71%, 100%{ opacity: 0; }
|
|
139
|
+
}
|
|
140
|
+
@keyframes dust2 {
|
|
141
|
+
0%, 16% { opacity: 0; transform: translate(16px, 16px) scale(0); }
|
|
142
|
+
18% { opacity: 0.5; transform: translate(16px, 16px) scale(1); }
|
|
143
|
+
24% { opacity: 0; transform: translate(19px, 14.5px) scale(0.3); }
|
|
144
|
+
25%, 70% { opacity: 0; }
|
|
145
|
+
72% { opacity: 0.5; transform: translate(16px, 16px) scale(1); }
|
|
146
|
+
78% { opacity: 0; transform: translate(19px, 14.5px) scale(0.3); }
|
|
147
|
+
79%, 100%{ opacity: 0; }
|
|
148
|
+
}
|
|
149
|
+
@keyframes dust3 {
|
|
150
|
+
0%, 24% { opacity: 0; transform: translate(18px, 15.5px) scale(0); }
|
|
151
|
+
26% { opacity: 0.5; transform: translate(18px, 15.5px) scale(1); }
|
|
152
|
+
32% { opacity: 0; transform: translate(21px, 14px) scale(0.3); }
|
|
153
|
+
33%, 78% { opacity: 0; }
|
|
154
|
+
80% { opacity: 0.5; transform: translate(18px, 15.5px) scale(1); }
|
|
155
|
+
86% { opacity: 0; transform: translate(21px, 14px) scale(0.3); }
|
|
156
|
+
87%, 100%{ opacity: 0; }
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/* Sweat during Phase A sweeping */
|
|
160
|
+
@keyframes sweat1 {
|
|
161
|
+
0%, 8% { opacity: 0; transform: translate(0, 0) scale(0); }
|
|
162
|
+
10% { opacity: 1; transform: translate(0, 0) scale(1); }
|
|
163
|
+
20% { opacity: 0; transform: translate(-5px, -5px) scale(0.5); }
|
|
164
|
+
21%, 100%{ opacity: 0; }
|
|
165
|
+
}
|
|
166
|
+
@keyframes sweat2 {
|
|
167
|
+
0%, 16% { opacity: 0; transform: translate(0, 0) scale(0); }
|
|
168
|
+
18% { opacity: 1; transform: translate(0, 0) scale(1); }
|
|
169
|
+
28% { opacity: 0; transform: translate(-4px, -6px) scale(0.4); }
|
|
170
|
+
29%, 100%{ opacity: 0; }
|
|
171
|
+
}
|
|
172
|
+
</style>
|
|
173
|
+
</defs>
|
|
174
|
+
|
|
175
|
+
<!-- Mirrored: character faces left for visible broom -->
|
|
176
|
+
<g transform="translate(15, 0) scale(-1, 1)">
|
|
177
|
+
|
|
178
|
+
<!-- Ground Shadow -->
|
|
179
|
+
<rect class="shadow-anim" x="3" y="15" width="9" height="1" fill="#000" opacity="0.5"/>
|
|
180
|
+
|
|
181
|
+
<!-- Dust particles (ground level, outside body group) -->
|
|
182
|
+
<rect class="dust dust-1" x="0" y="0" width="1.5" height="1.5" fill="#9E9E9E"/>
|
|
183
|
+
<rect class="dust dust-2" x="0" y="0" width="1" height="1" fill="#B0BEC5"/>
|
|
184
|
+
<rect class="dust dust-3" x="0" y="0" width="1.2" height="1.2" fill="#9E9E9E"/>
|
|
185
|
+
|
|
186
|
+
<!-- Static Legs -->
|
|
187
|
+
<g fill="#DE886D">
|
|
188
|
+
<rect x="3" y="13" width="1" height="2"/>
|
|
189
|
+
<rect x="5" y="13" width="1" height="2"/>
|
|
190
|
+
<rect x="9" y="13" width="1" height="2"/>
|
|
191
|
+
<rect x="11" y="13" width="1" height="2"/>
|
|
192
|
+
</g>
|
|
193
|
+
|
|
194
|
+
<!-- Upper Body -->
|
|
195
|
+
<g class="body-lean">
|
|
196
|
+
|
|
197
|
+
<!-- Sweat drops (inside body group, move with lean) -->
|
|
198
|
+
<g transform="translate(1, 5)">
|
|
199
|
+
<g class="sweat sweat-1" fill="#40C4FF">
|
|
200
|
+
<rect x="0" y="1" width="1.5" height="1.5"/>
|
|
201
|
+
<rect x="0.25" y="0" width="1" height="1"/>
|
|
202
|
+
</g>
|
|
203
|
+
</g>
|
|
204
|
+
<g transform="translate(-0.5, 7)">
|
|
205
|
+
<g class="sweat sweat-2" fill="#40C4FF">
|
|
206
|
+
<rect x="0" y="0.5" width="1" height="1"/>
|
|
207
|
+
<rect x="0.15" y="0" width="0.7" height="0.7"/>
|
|
208
|
+
</g>
|
|
209
|
+
</g>
|
|
210
|
+
|
|
211
|
+
<!-- Breathing -->
|
|
212
|
+
<g class="breathe">
|
|
213
|
+
|
|
214
|
+
<!-- Torso -->
|
|
215
|
+
<rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
|
|
216
|
+
|
|
217
|
+
<!-- Left Arm (scratch head during pause) -->
|
|
218
|
+
<g class="arm-l">
|
|
219
|
+
<rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
|
|
220
|
+
</g>
|
|
221
|
+
|
|
222
|
+
<!-- Right Arm + Broom (attached, sweeps together) -->
|
|
223
|
+
<g class="arm-r">
|
|
224
|
+
<rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
|
|
225
|
+
<!-- Broom Handle -->
|
|
226
|
+
<rect x="13.5" y="11" width="1" height="3.5" fill="#795548"/>
|
|
227
|
+
<!-- Broom Bristles -->
|
|
228
|
+
<rect x="12" y="14.5" width="4" height="1.5" fill="#FFC107"/>
|
|
229
|
+
<!-- Bristle texture (vertical lines, bottom up, faint, gap at edges) -->
|
|
230
|
+
<rect x="12.5" y="14.85" width="0.35" height="0.8" fill="#C99700" opacity="0.3"/>
|
|
231
|
+
<rect x="13.2" y="14.8" width="0.3" height="0.9" fill="#C99700" opacity="0.35"/>
|
|
232
|
+
<rect x="13.8" y="14.85" width="0.35" height="0.8" fill="#C99700" opacity="0.3"/>
|
|
233
|
+
<rect x="14.5" y="14.8" width="0.3" height="0.85" fill="#C99700" opacity="0.35"/>
|
|
234
|
+
</g>
|
|
235
|
+
|
|
236
|
+
<!-- Eyes -->
|
|
237
|
+
<g class="eyes-dir" fill="#000">
|
|
238
|
+
<g class="blink">
|
|
239
|
+
<rect x="4" y="8" width="1" height="2"/>
|
|
240
|
+
<rect x="10" y="8" width="1" height="2"/>
|
|
241
|
+
</g>
|
|
242
|
+
</g>
|
|
243
|
+
|
|
244
|
+
</g>
|
|
245
|
+
</g>
|
|
246
|
+
|
|
247
|
+
</g>
|
|
248
|
+
</svg>
|