@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,196 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
/* 16-Second Master Sequence for Idle Actions */
|
|
5
|
+
.action-body {
|
|
6
|
+
transform-origin: 7.5px 13px; /* Pivot at the base of the torso */
|
|
7
|
+
animation: action-body 16s infinite ease-in-out;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Continuous Subtle Breathing (Syncs exactly 5 times per 16s loop) */
|
|
11
|
+
.breathe-anim {
|
|
12
|
+
transform-origin: 7.5px 13px;
|
|
13
|
+
animation: breathe 3.2s infinite ease-in-out;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Shadow shrinking and shifting matching actions */
|
|
17
|
+
.shadow-anim {
|
|
18
|
+
transform-origin: 7.5px 15.5px;
|
|
19
|
+
animation: shadow-action 16s infinite ease-in-out;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Left Arm (Scratching and Yawn Stretching) */
|
|
23
|
+
.arm-l {
|
|
24
|
+
transform-origin: 1px 10px;
|
|
25
|
+
animation: arm-l-idle 16s infinite ease-in-out;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Right Arm (Yawn Stretching) */
|
|
29
|
+
.arm-r {
|
|
30
|
+
transform-origin: 14px 10px;
|
|
31
|
+
animation: arm-r-idle 16s infinite ease-in-out;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Eye Tracking (Looking around) */
|
|
35
|
+
.eyes-look {
|
|
36
|
+
animation: eye-track 16s infinite ease-in-out;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Occasional Blinks and shutting during Yawn */
|
|
40
|
+
.eyes-blink {
|
|
41
|
+
transform-origin: 7.5px 9px;
|
|
42
|
+
animation: eye-blink 16s infinite linear;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* Yawn Mouth Appearance */
|
|
46
|
+
.yawn-mouth {
|
|
47
|
+
transform-origin: 7.5px 11px;
|
|
48
|
+
animation: yawn-mouth-anim 16s infinite ease-in-out;
|
|
49
|
+
opacity: 0;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Tiny tear that appears during the big yawn */
|
|
53
|
+
.yawn-tear {
|
|
54
|
+
animation: tear-fall 16s infinite ease-in-out;
|
|
55
|
+
opacity: 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* --- Keyframes --- */
|
|
59
|
+
|
|
60
|
+
@keyframes breathe {
|
|
61
|
+
0%, 100% { transform: scale(1, 1) translate(0, 0); }
|
|
62
|
+
50% { transform: scale(1.02, 0.98) translate(0, 0.5px); }
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@keyframes action-body {
|
|
66
|
+
0%, 8%, 26%, 38%, 55%, 80%, 100% { transform: scale(1, 1) translate(0, 0); }
|
|
67
|
+
/* Look Right Tilt */
|
|
68
|
+
12%, 22% { transform: scale(1, 1) translate(1px, 0); }
|
|
69
|
+
/* Look Left Tilt */
|
|
70
|
+
42%, 50% { transform: scale(1, 1) translate(-1px, 0); }
|
|
71
|
+
/* Scratching Lean */
|
|
72
|
+
30%, 36% { transform: scale(1, 1) translate(0.5px, 0); }
|
|
73
|
+
/* Deep Yawn Stretch */
|
|
74
|
+
60% { transform: scale(0.95, 1.05) translate(0px, -1px); } /* Stretch up */
|
|
75
|
+
65% { transform: scale(0.9, 1.1) translate(0px, -2px); } /* Peak stretch */
|
|
76
|
+
72% { transform: scale(1.05, 0.95) translate(0px, 1px); } /* Heavy sigh / squash down */
|
|
77
|
+
76% { transform: scale(1, 1) translate(0px, 0px); } /* Recover */
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@keyframes shadow-action {
|
|
81
|
+
0%, 8%, 26%, 38%, 55%, 80%, 100% { transform: scaleX(1) translate(0, 0); opacity: 0.5; }
|
|
82
|
+
12%, 22% { transform: scaleX(1) translate(1px, 0); opacity: 0.5; }
|
|
83
|
+
42%, 50% { transform: scaleX(1) translate(-1px, 0); opacity: 0.5; }
|
|
84
|
+
30%, 36% { transform: scaleX(1) translate(0.5px, 0); opacity: 0.5; }
|
|
85
|
+
60% { transform: scaleX(0.95) translate(0, 0); opacity: 0.45; }
|
|
86
|
+
65% { transform: scaleX(0.9) translate(0, 0); opacity: 0.4; }
|
|
87
|
+
72% { transform: scaleX(1.05) translate(0, 0); opacity: 0.55; }
|
|
88
|
+
76% { transform: scaleX(1) translate(0, 0); opacity: 0.5; }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@keyframes eye-track {
|
|
92
|
+
0%, 10%, 25%, 38%, 52%, 58%, 80%, 100% { transform: translate(0px, 0px); }
|
|
93
|
+
12%, 22% { transform: translate(3px, 0px); } /* Look Right */
|
|
94
|
+
42%, 50% { transform: translate(-3px, 0px); } /* Look Left */
|
|
95
|
+
60%, 75% { transform: translate(0px, -1px); } /* Look slightly up during yawn */
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@keyframes eye-blink {
|
|
99
|
+
0%, 3%, 7%, 18%, 22%, 43%, 47%, 56%, 83%, 87%, 100% { transform: scaleY(1); }
|
|
100
|
+
5%, 20%, 45%, 85% { transform: scaleY(0.1); } /* Quick Blinks */
|
|
101
|
+
/* Yawn Closed Eyes */
|
|
102
|
+
60% { transform: scaleY(1); }
|
|
103
|
+
62%, 72% { transform: scaleY(0.1); } /* Eyes completely shut */
|
|
104
|
+
75% { transform: scaleY(1); }
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@keyframes arm-l-idle {
|
|
108
|
+
0%, 28% { transform: translate(0, 0) rotate(0deg); }
|
|
109
|
+
|
|
110
|
+
/* Occasional Scratching Sequence (Left Arm) */
|
|
111
|
+
30% { transform: translate(1px, -3px) rotate(15deg); }
|
|
112
|
+
31% { transform: translate(1.5px, -4px) rotate(35deg); } /* Up */
|
|
113
|
+
32% { transform: translate(0.5px, -2.5px) rotate(0deg); } /* Down */
|
|
114
|
+
33% { transform: translate(1.5px, -4px) rotate(35deg); }
|
|
115
|
+
34% { transform: translate(0.5px, -2.5px) rotate(0deg); }
|
|
116
|
+
35% { transform: translate(1.5px, -4px) rotate(35deg); }
|
|
117
|
+
36% { transform: translate(0.5px, -2.5px) rotate(0deg); }
|
|
118
|
+
|
|
119
|
+
38%, 58% { transform: translate(0, 0) rotate(0deg); }
|
|
120
|
+
|
|
121
|
+
/* Yawn Stretch */
|
|
122
|
+
62% { transform: translate(-1px, -2px) rotate(45deg); }
|
|
123
|
+
65% { transform: translate(-2px, -3px) rotate(80deg); } /* Full outward stretch */
|
|
124
|
+
72% { transform: translate(0px, 1px) rotate(-15deg); } /* Relax down */
|
|
125
|
+
76%, 100% { transform: translate(0, 0) rotate(0deg); }
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@keyframes arm-r-idle {
|
|
129
|
+
0%, 58% { transform: translate(0, 0) rotate(0deg); }
|
|
130
|
+
/* Yawn Stretch */
|
|
131
|
+
62% { transform: translate(1px, -2px) rotate(-45deg); }
|
|
132
|
+
65% { transform: translate(2px, -3px) rotate(-80deg); } /* Full outward stretch */
|
|
133
|
+
72% { transform: translate(0px, 1px) rotate(15deg); } /* Relax down */
|
|
134
|
+
76%, 100% { transform: translate(0, 0) rotate(0deg); }
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@keyframes yawn-mouth-anim {
|
|
138
|
+
0%, 58%, 76%, 100% { opacity: 0; transform: scale(0.1); }
|
|
139
|
+
60% { opacity: 1; transform: scale(0.5, 0.2); }
|
|
140
|
+
65% { opacity: 1; transform: scale(1.1, 1.4); } /* Wide Open */
|
|
141
|
+
72% { opacity: 1; transform: scale(0.6, 0.4); } /* Shrinking */
|
|
142
|
+
75% { opacity: 0; transform: scale(0.1); }
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@keyframes tear-fall {
|
|
146
|
+
0%, 64%, 80%, 100% { opacity: 0; transform: translateY(0); }
|
|
147
|
+
66% { opacity: 1; transform: translateY(0); } /* Appears at corner of eye */
|
|
148
|
+
72% { opacity: 1; transform: translateY(2.5px); } /* Slides down cheek */
|
|
149
|
+
75% { opacity: 0; transform: translateY(3px); } /* Fades out */
|
|
150
|
+
}
|
|
151
|
+
</style>
|
|
152
|
+
</defs>
|
|
153
|
+
|
|
154
|
+
<!-- Ground Shadow -->
|
|
155
|
+
<rect id="ground-shadow" class="shadow-anim" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
|
|
156
|
+
|
|
157
|
+
<!-- Static Character Legs (extended up to stay connected during yawn stretch) -->
|
|
158
|
+
<g id="legs" fill="#DE886D">
|
|
159
|
+
<rect id="outer-left-leg" x="3" y="12" width="1" height="3"/>
|
|
160
|
+
<rect id="inner-left-leg" x="5" y="12" width="1" height="3"/>
|
|
161
|
+
<rect id="inner-right-leg" x="9" y="12" width="1" height="3"/>
|
|
162
|
+
<rect id="outer-right-leg" x="11" y="12" width="1" height="3"/>
|
|
163
|
+
</g>
|
|
164
|
+
|
|
165
|
+
<!-- Animated Upper Body (Combines occasional actions + continuous breathing) -->
|
|
166
|
+
<g class="action-body">
|
|
167
|
+
<g class="breathe-anim">
|
|
168
|
+
|
|
169
|
+
<!-- Torso -->
|
|
170
|
+
<rect id="torso" x="2" y="6" width="11" height="7" fill="#DE886D"/>
|
|
171
|
+
|
|
172
|
+
<!-- Arms -->
|
|
173
|
+
<g class="arm-l">
|
|
174
|
+
<rect id="left-arm" x="0" y="9" width="2" height="2" fill="#DE886D"/>
|
|
175
|
+
</g>
|
|
176
|
+
<g class="arm-r">
|
|
177
|
+
<rect id="right-arm" x="13" y="9" width="2" height="2" fill="#DE886D"/>
|
|
178
|
+
</g>
|
|
179
|
+
|
|
180
|
+
<!-- Yawning Mouth (Hidden usually) -->
|
|
181
|
+
<rect class="yawn-mouth" x="6" y="10" width="3" height="2" fill="#000000"/>
|
|
182
|
+
|
|
183
|
+
<!-- Eyes Group -->
|
|
184
|
+
<g class="eyes-look" fill="#000000">
|
|
185
|
+
<g class="eyes-blink">
|
|
186
|
+
<rect id="left-eye" x="4" y="8" width="1" height="2"/>
|
|
187
|
+
<rect id="right-eye" x="10" y="8" width="1" height="2"/>
|
|
188
|
+
</g>
|
|
189
|
+
</g>
|
|
190
|
+
|
|
191
|
+
<!-- Yawn Tear Drop (A tiny detail for the big stretch) -->
|
|
192
|
+
<rect class="yawn-tear" x="3.5" y="10" width="1" height="1" fill="#40C4FF"/>
|
|
193
|
+
|
|
194
|
+
</g>
|
|
195
|
+
</g>
|
|
196
|
+
</svg>
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
/* 10-Second Idle Loop — Looking Around + Scratching (no yawn) */
|
|
5
|
+
.action-body {
|
|
6
|
+
transform-origin: 7.5px 13px;
|
|
7
|
+
animation: action-body 10s infinite ease-in-out;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.breathe-anim {
|
|
11
|
+
transform-origin: 7.5px 13px;
|
|
12
|
+
animation: breathe 3.2s infinite ease-in-out;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.shadow-anim {
|
|
16
|
+
transform-origin: 7.5px 15.5px;
|
|
17
|
+
animation: shadow-action 10s infinite ease-in-out;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.arm-l {
|
|
21
|
+
transform-origin: 1px 10px;
|
|
22
|
+
animation: arm-l-idle 10s infinite ease-in-out;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.eyes-look {
|
|
26
|
+
animation: eye-track 10s infinite ease-in-out;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.eyes-blink {
|
|
30
|
+
transform-origin: 7.5px 9px;
|
|
31
|
+
animation: eye-blink 10s infinite linear;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* --- Keyframes --- */
|
|
35
|
+
|
|
36
|
+
@keyframes breathe {
|
|
37
|
+
0%, 100% { transform: scale(1, 1) translate(0, 0); }
|
|
38
|
+
50% { transform: scale(1.02, 0.98) translate(0, 0.5px); }
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@keyframes action-body {
|
|
42
|
+
0%, 8%, 25%, 30%, 40%, 45%, 60%, 100% { transform: scale(1,1) translate(0,0); }
|
|
43
|
+
/* Look Right */
|
|
44
|
+
12%, 22% { transform: scale(1,1) translate(1px, 0); }
|
|
45
|
+
/* Look Left */
|
|
46
|
+
48%, 57% { transform: scale(1,1) translate(-1px, 0); }
|
|
47
|
+
/* Scratch Lean */
|
|
48
|
+
33%, 38% { transform: scale(1,1) translate(0.5px, 0); }
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@keyframes shadow-action {
|
|
52
|
+
0%, 8%, 25%, 30%, 40%, 45%, 60%, 100% { transform: scaleX(1) translate(0,0); opacity: 0.5; }
|
|
53
|
+
12%, 22% { transform: scaleX(1) translate(1px, 0); opacity: 0.5; }
|
|
54
|
+
48%, 57% { transform: scaleX(1) translate(-1px, 0); opacity: 0.5; }
|
|
55
|
+
33%, 38% { transform: scaleX(1) translate(0.5px, 0); opacity: 0.5; }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@keyframes eye-track {
|
|
59
|
+
0%, 10%, 25%, 43%, 60%, 100% { transform: translate(0, 0); }
|
|
60
|
+
12%, 22% { transform: translate(3px, 0); } /* Look Right */
|
|
61
|
+
48%, 57% { transform: translate(-3px, 0); } /* Look Left */
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@keyframes eye-blink {
|
|
65
|
+
0%, 3%, 7%, 18%, 22%, 47%, 51%, 78%, 82%, 100% { transform: scaleY(1); }
|
|
66
|
+
5%, 20%, 49%, 80% { transform: scaleY(0.1); }
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@keyframes arm-l-idle {
|
|
70
|
+
0%, 30% { transform: translate(0,0) rotate(0deg); }
|
|
71
|
+
/* Scratching Sequence */
|
|
72
|
+
33% { transform: translate(1px, -3px) rotate(15deg); }
|
|
73
|
+
34% { transform: translate(1.5px, -4px) rotate(35deg); }
|
|
74
|
+
35% { transform: translate(0.5px, -2.5px) rotate(0deg); }
|
|
75
|
+
36% { transform: translate(1.5px, -4px) rotate(35deg); }
|
|
76
|
+
37% { transform: translate(0.5px, -2.5px) rotate(0deg); }
|
|
77
|
+
38% { transform: translate(1.5px, -4px) rotate(35deg); }
|
|
78
|
+
39% { transform: translate(0.5px, -2.5px) rotate(0deg); }
|
|
79
|
+
42%, 100% { transform: translate(0,0) rotate(0deg); }
|
|
80
|
+
}
|
|
81
|
+
</style>
|
|
82
|
+
</defs>
|
|
83
|
+
|
|
84
|
+
<!-- Ground Shadow -->
|
|
85
|
+
<rect id="ground-shadow" class="shadow-anim" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
|
|
86
|
+
|
|
87
|
+
<!-- Static Legs -->
|
|
88
|
+
<g id="legs" fill="#DE886D">
|
|
89
|
+
<rect x="3" y="12" width="1" height="3"/>
|
|
90
|
+
<rect x="5" y="12" width="1" height="3"/>
|
|
91
|
+
<rect x="9" y="12" width="1" height="3"/>
|
|
92
|
+
<rect x="11" y="12" width="1" height="3"/>
|
|
93
|
+
</g>
|
|
94
|
+
|
|
95
|
+
<!-- Animated Upper Body -->
|
|
96
|
+
<g class="action-body">
|
|
97
|
+
<g class="breathe-anim">
|
|
98
|
+
<!-- Torso -->
|
|
99
|
+
<rect id="torso" x="2" y="6" width="11" height="7" fill="#DE886D"/>
|
|
100
|
+
<!-- Left Arm (scratches) -->
|
|
101
|
+
<g class="arm-l">
|
|
102
|
+
<rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
|
|
103
|
+
</g>
|
|
104
|
+
<!-- Right Arm (static) -->
|
|
105
|
+
<rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
|
|
106
|
+
<!-- Eyes -->
|
|
107
|
+
<g class="eyes-look" fill="#000000">
|
|
108
|
+
<g class="eyes-blink">
|
|
109
|
+
<rect x="4" y="8" width="1" height="2"/>
|
|
110
|
+
<rect x="10" y="8" width="1" height="2"/>
|
|
111
|
+
</g>
|
|
112
|
+
</g>
|
|
113
|
+
</g>
|
|
114
|
+
</g>
|
|
115
|
+
</svg>
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500" shape-rendering="crispEdges">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
/* ═══ 14s story: idle 挥手 → 抓书 + 戴眼镜 → 读 (眼镜下滑+推回) → 书+眼镜同步退场
|
|
5
|
+
在 clawd-idle-reading.svg 基础上加:
|
|
6
|
+
1. 圆框眼镜 (跟书同步 fade in/out + 读书慢下滑 + 推回过冲)
|
|
7
|
+
2. 双手 L 阴影 (clip 到 torso, 跟手 transform 同步, opacity 窗口对齐读书阶段)
|
|
8
|
+
3. z-order 重排: 手阴影 → 眼睛 → 眼镜 → 书 → 手
|
|
9
|
+
所有 wrapper 合并成单一 breathe 以方便理解 (原文件 3 个 breathe 效果等价) */
|
|
10
|
+
|
|
11
|
+
/* ── Independent loops ── */
|
|
12
|
+
|
|
13
|
+
.breathe {
|
|
14
|
+
transform-origin: 7.5px 13px;
|
|
15
|
+
animation: breathe 3.2s infinite ease-in-out;
|
|
16
|
+
}
|
|
17
|
+
@keyframes breathe {
|
|
18
|
+
0%, 100% { transform: scale(1, 1) translate(0, 0); }
|
|
19
|
+
50% { transform: scale(1.02, 0.98) translate(0, 0.5px); }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.blink {
|
|
23
|
+
transform-origin: 7.5px 9px;
|
|
24
|
+
animation: blink 5s infinite;
|
|
25
|
+
}
|
|
26
|
+
@keyframes blink {
|
|
27
|
+
0%, 6%, 100% { transform: scaleY(1); }
|
|
28
|
+
3% { transform: scaleY(0.1); }
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.shadow {
|
|
32
|
+
transform-origin: 7.5px 15.5px;
|
|
33
|
+
animation: shadow-breathe 3.2s infinite ease-in-out;
|
|
34
|
+
}
|
|
35
|
+
@keyframes shadow-breathe {
|
|
36
|
+
0%, 100% { transform: scaleX(1); opacity: 0.5; }
|
|
37
|
+
50% { transform: scaleX(1.03); opacity: 0.47; }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* ── Main 14s story ── */
|
|
41
|
+
|
|
42
|
+
.body-nod {
|
|
43
|
+
animation: body-nod 14s infinite ease-in-out;
|
|
44
|
+
}
|
|
45
|
+
@keyframes body-nod {
|
|
46
|
+
0%, 36%, 44%, 54%, 62%, 100% { transform: translateY(0); }
|
|
47
|
+
40% { transform: translateY(0.4px); }
|
|
48
|
+
58% { transform: translateY(0.4px); }
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.arm-l {
|
|
52
|
+
transform-origin: 2px 10px;
|
|
53
|
+
animation: arm-l-anim 14s infinite ease-in-out;
|
|
54
|
+
}
|
|
55
|
+
@keyframes arm-l-anim {
|
|
56
|
+
0% { transform: translate(0, 0) rotate(0deg); }
|
|
57
|
+
2.5% { transform: translate(-0.5px, 0) rotate(25deg); }
|
|
58
|
+
5% { transform: translate(0.3px, 0) rotate(-20deg); }
|
|
59
|
+
7.5% { transform: translate(-0.5px, 0) rotate(22deg); }
|
|
60
|
+
10% { transform: translate(0, 0) rotate(0deg); }
|
|
61
|
+
18% { transform: translate(-1px, -1px) rotate(15deg); }
|
|
62
|
+
26% { transform: translate(2px, 0) rotate(-5deg); }
|
|
63
|
+
76% { transform: translate(2px, 0) rotate(-5deg); }
|
|
64
|
+
84% { transform: translate(1px, 2px) rotate(0deg); }
|
|
65
|
+
92% { transform: translate(0, 0) rotate(0deg); }
|
|
66
|
+
100% { transform: translate(0, 0) rotate(0deg); }
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.arm-r {
|
|
70
|
+
animation: arm-r-anim 14s infinite ease-in-out;
|
|
71
|
+
}
|
|
72
|
+
@keyframes arm-r-anim {
|
|
73
|
+
0%, 22% { transform: translate(0, 0); }
|
|
74
|
+
28%, 76% { transform: translate(-1px, 0); }
|
|
75
|
+
84%, 100% { transform: translate(0, 0); }
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.book {
|
|
79
|
+
opacity: 0;
|
|
80
|
+
transform-origin: 7px 11.5px;
|
|
81
|
+
animation: book-anim 14s infinite ease-in-out;
|
|
82
|
+
}
|
|
83
|
+
@keyframes book-anim {
|
|
84
|
+
0%, 12% { opacity: 0; transform: translate(-5px, -2px) scaleX(0.5); }
|
|
85
|
+
18% { opacity: 1; transform: translate(-5px, -2px) scaleX(0.5); }
|
|
86
|
+
26% { opacity: 1; transform: translate(0, 0) scaleX(1); }
|
|
87
|
+
76% { opacity: 1; transform: translate(0, 0) scaleX(1); }
|
|
88
|
+
84% { opacity: 0; transform: translate(0, 4px) scaleX(0.8); }
|
|
89
|
+
100% { opacity: 0; transform: translate(0, 4px) scaleX(0.8); }
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.eyes-read {
|
|
93
|
+
animation: eyes-read 14s infinite ease-in-out;
|
|
94
|
+
}
|
|
95
|
+
@keyframes eyes-read {
|
|
96
|
+
0%, 22% { transform: translate(0, 0); }
|
|
97
|
+
30% { transform: translate(0, 0.5px); }
|
|
98
|
+
46% { transform: translate(-0.3px, 0.5px); }
|
|
99
|
+
60% { transform: translate(0.3px, 0.5px); }
|
|
100
|
+
70% { transform: translate(0, 0.5px); }
|
|
101
|
+
80%, 100% { transform: translate(0, 0); }
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* ── NEW: 圆框眼镜
|
|
105
|
+
- 0-12% 不可见 (idle 阶段, 还没戴)
|
|
106
|
+
- 12-18% fade in + 从额头位置 0.5px 上方滑到鼻梁 (跟书出场同步)
|
|
107
|
+
- 18-72% 戴好读书, 慢慢下滑 0.3px (读累了往鼻头下溜)
|
|
108
|
+
- 72-78% 推回 -0.1px 过冲 (顺手把眼镜推上去, 配合书要滑下的节点)
|
|
109
|
+
- 78-84% 稳住到 0
|
|
110
|
+
- 84-92% fade out + 滑回额头位置 (跟书退场同步) */
|
|
111
|
+
.glasses {
|
|
112
|
+
animation: glasses-anim 14s infinite ease-in-out;
|
|
113
|
+
}
|
|
114
|
+
@keyframes glasses-anim {
|
|
115
|
+
0%, 12% { opacity: 0; transform: translateY(-0.5px); }
|
|
116
|
+
18% { opacity: 1; transform: translateY(0); }
|
|
117
|
+
30% { opacity: 1; transform: translateY(0); }
|
|
118
|
+
72% { opacity: 1; transform: translateY(0.3px); }
|
|
119
|
+
78% { opacity: 1; transform: translateY(-0.1px); }
|
|
120
|
+
84% { opacity: 1; transform: translateY(0); }
|
|
121
|
+
92% { opacity: 0; transform: translateY(-0.5px); }
|
|
122
|
+
100% { opacity: 0; transform: translateY(-0.5px); }
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* ── NEW: 手阴影 opacity 窗口 (避免 idle 大挥时阴影闪烁)
|
|
126
|
+
- 左手 22% fade in (手快抓到书时), 84% fade out (随书下滑时)
|
|
127
|
+
- 右手 26% fade in (右手 nudge 进 torso 前), 84% fade out */
|
|
128
|
+
.shadow-l-fade {
|
|
129
|
+
animation: shadow-l-fade 14s infinite ease-in-out;
|
|
130
|
+
}
|
|
131
|
+
@keyframes shadow-l-fade {
|
|
132
|
+
0%, 20% { opacity: 0; }
|
|
133
|
+
26%, 78% { opacity: 1; }
|
|
134
|
+
84%, 100% { opacity: 0; }
|
|
135
|
+
}
|
|
136
|
+
.shadow-r-fade {
|
|
137
|
+
animation: shadow-r-fade 14s infinite ease-in-out;
|
|
138
|
+
}
|
|
139
|
+
@keyframes shadow-r-fade {
|
|
140
|
+
0%, 24% { opacity: 0; }
|
|
141
|
+
30%, 78% { opacity: 1; }
|
|
142
|
+
84%, 100% { opacity: 0; }
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* ── Thought particles ── */
|
|
146
|
+
.reading-fx {
|
|
147
|
+
animation: reading-fx-vis 14s infinite;
|
|
148
|
+
}
|
|
149
|
+
@keyframes reading-fx-vis {
|
|
150
|
+
0%, 27% { opacity: 0; }
|
|
151
|
+
32%, 75% { opacity: 1; }
|
|
152
|
+
78%, 100% { opacity: 0; }
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.thought-bit {
|
|
156
|
+
opacity: 0;
|
|
157
|
+
animation: float-thought 2.5s infinite linear;
|
|
158
|
+
}
|
|
159
|
+
.t1 { animation-delay: 0s; }
|
|
160
|
+
.t2 { animation-delay: -0.7s; }
|
|
161
|
+
.t3 { animation-delay: -1.4s; }
|
|
162
|
+
.t4 { animation-delay: -2.1s; }
|
|
163
|
+
|
|
164
|
+
@keyframes float-thought {
|
|
165
|
+
0% { transform: translateY(0); opacity: 0; }
|
|
166
|
+
10% { opacity: 0.6; }
|
|
167
|
+
100% { transform: translateY(-12px); opacity: 0; }
|
|
168
|
+
}
|
|
169
|
+
</style>
|
|
170
|
+
|
|
171
|
+
<clipPath id="inside-torso">
|
|
172
|
+
<rect x="2" y="6" width="11" height="7"/>
|
|
173
|
+
</clipPath>
|
|
174
|
+
</defs>
|
|
175
|
+
|
|
176
|
+
<!-- Ground shadow -->
|
|
177
|
+
<rect class="shadow" x="3" y="15" width="9" height="1" fill="#000"/>
|
|
178
|
+
|
|
179
|
+
<!-- Thought particles -->
|
|
180
|
+
<g class="reading-fx">
|
|
181
|
+
<rect class="thought-bit t1" x="2" y="4" width="2" height="2" fill="#40C4FF"/>
|
|
182
|
+
<rect class="thought-bit t2" x="8" y="3" width="1.5" height="1.5" fill="#B388FF"/>
|
|
183
|
+
<rect class="thought-bit t3" x="12" y="5" width="2" height="2" fill="#40C4FF"/>
|
|
184
|
+
<rect class="thought-bit t4" x="5" y="3" width="1.5" height="1.5" fill="#69F0AE"/>
|
|
185
|
+
</g>
|
|
186
|
+
|
|
187
|
+
<g class="body-nod">
|
|
188
|
+
<g class="breathe">
|
|
189
|
+
|
|
190
|
+
<!-- 腿 + torso -->
|
|
191
|
+
<g fill="#DE886D">
|
|
192
|
+
<rect x="3" y="11" width="1" height="4"/>
|
|
193
|
+
<rect x="5" y="11" width="1" height="4"/>
|
|
194
|
+
<rect x="9" y="11" width="1" height="4"/>
|
|
195
|
+
<rect x="11" y="11" width="1" height="4"/>
|
|
196
|
+
</g>
|
|
197
|
+
<rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
|
|
198
|
+
|
|
199
|
+
<!-- 手阴影 (clip 到 torso, opacity 窗口 + 跟手 transform 同步) -->
|
|
200
|
+
<g clip-path="url(#inside-torso)" fill="#A85A3A">
|
|
201
|
+
<g class="shadow-l-fade">
|
|
202
|
+
<g class="arm-l">
|
|
203
|
+
<rect x="0" y="9" width="2.4" height="2.4"/>
|
|
204
|
+
</g>
|
|
205
|
+
</g>
|
|
206
|
+
<g class="shadow-r-fade">
|
|
207
|
+
<g class="arm-r">
|
|
208
|
+
<rect x="12.6" y="9" width="2.4" height="2.4"/>
|
|
209
|
+
</g>
|
|
210
|
+
</g>
|
|
211
|
+
</g>
|
|
212
|
+
|
|
213
|
+
<!-- 眼睛 (跟 eyes-read 漂移 + blink 眨眼) -->
|
|
214
|
+
<g class="eyes-read">
|
|
215
|
+
<g class="blink" fill="#000">
|
|
216
|
+
<rect x="4" y="8" width="1" height="2"/>
|
|
217
|
+
<rect x="10" y="8" width="1" height="2"/>
|
|
218
|
+
</g>
|
|
219
|
+
</g>
|
|
220
|
+
|
|
221
|
+
<!-- 圆框眼镜 (不嵌 eyes-read/blink, 镜片固定眼球转) -->
|
|
222
|
+
<g class="glasses" shape-rendering="auto">
|
|
223
|
+
<g fill="none" stroke="#6B2522" stroke-width="0.56" stroke-linecap="round" stroke-linejoin="round">
|
|
224
|
+
<circle cx="4.415" cy="9" r="2.03"/>
|
|
225
|
+
<circle cx="10.585" cy="9" r="2.03"/>
|
|
226
|
+
<path d="M6.445 8.85 C7.036 8.35 7.964 8.35 8.555 8.85"/>
|
|
227
|
+
<path d="M2.426 8.45 C2.127 8.37 1.893 8.35 1.716 8.35"/>
|
|
228
|
+
<path d="M12.574 8.45 C12.873 8.37 13.107 8.35 13.284 8.35"/>
|
|
229
|
+
</g>
|
|
230
|
+
</g>
|
|
231
|
+
|
|
232
|
+
<!-- 书 (在脸之上, 手之下) -->
|
|
233
|
+
<g class="book">
|
|
234
|
+
<rect x="3" y="10" width="8" height="4" fill="#4A90D9"/>
|
|
235
|
+
<rect x="7" y="10" width="1" height="4" fill="#2E6AB0"/>
|
|
236
|
+
<rect x="3.9" y="9.7" width="6.5" height="0.3" fill="#FFFDE7"/>
|
|
237
|
+
<rect x="10.5" y="10.5" width="0.5" height="3" fill="#FFFDE7"/>
|
|
238
|
+
<rect x="4.5" y="10.5" width="5" height="1.5" fill="#E3F2FD" opacity="0.5"/>
|
|
239
|
+
<rect x="5" y="10.8" width="3" height="0.5" fill="#2E6AB0"/>
|
|
240
|
+
<rect x="5.5" y="11.5" width="2" height="0.3" fill="#2E6AB0" opacity="0.6"/>
|
|
241
|
+
<rect x="6" y="12.5" width="2" height="0.5" fill="#E3F2FD" opacity="0.4"/>
|
|
242
|
+
</g>
|
|
243
|
+
|
|
244
|
+
<!-- 双手 (最上层) -->
|
|
245
|
+
<g fill="#DE886D">
|
|
246
|
+
<g class="arm-l"><rect x="0" y="9" width="2" height="2"/></g>
|
|
247
|
+
<g class="arm-r"><rect x="13" y="9" width="2" height="2"/></g>
|
|
248
|
+
</g>
|
|
249
|
+
|
|
250
|
+
</g>
|
|
251
|
+
</g>
|
|
252
|
+
</svg>
|