@mumulinya167/ccm-pet-assets 2.0.0 → 2.0.2
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/assets/calico/calico-idle-follow.svg +324 -324
- package/assets/calico.svg +324 -324
- package/assets/clawd/LICENSE +22 -22
- package/assets/clawd/clawd-about-hero.svg +202 -202
- package/assets/clawd/clawd-collapse-sleep.svg +247 -247
- package/assets/clawd/clawd-error.svg +94 -94
- package/assets/clawd/clawd-happy.svg +160 -160
- package/assets/clawd/clawd-headphones-groove.svg +194 -194
- package/assets/clawd/clawd-idle-bubble.svg +180 -180
- package/assets/clawd/clawd-idle-collapse.svg +101 -101
- package/assets/clawd/clawd-idle-doze.svg +72 -72
- package/assets/clawd/clawd-idle-follow.svg +64 -64
- package/assets/clawd/clawd-idle-living.svg +195 -195
- package/assets/clawd/clawd-idle-look.svg +115 -115
- package/assets/clawd/clawd-idle-reading.svg +252 -252
- package/assets/clawd/clawd-idle-yawn.svg +158 -158
- package/assets/clawd/clawd-mini-alert.svg +129 -129
- package/assets/clawd/clawd-mini-crabwalk.svg +76 -76
- package/assets/clawd/clawd-mini-enter-sleep.svg +64 -64
- package/assets/clawd/clawd-mini-enter.svg +114 -114
- package/assets/clawd/clawd-mini-happy.svg +124 -124
- package/assets/clawd/clawd-mini-idle.svg +83 -83
- package/assets/clawd/clawd-mini-peek.svg +82 -82
- package/assets/clawd/clawd-mini-sleep.svg +112 -112
- package/assets/clawd/clawd-mini-typing.svg +153 -153
- package/assets/clawd/clawd-notification.svg +438 -438
- package/assets/clawd/clawd-react-annoyed.svg +167 -167
- package/assets/clawd/clawd-react-double-jump.svg +229 -229
- package/assets/clawd/clawd-react-double.svg +108 -108
- package/assets/clawd/clawd-react-drag.svg +102 -102
- package/assets/clawd/clawd-react-left.svg +102 -102
- package/assets/clawd/clawd-react-right.svg +102 -102
- package/assets/clawd/clawd-sleeping.svg +117 -117
- package/assets/clawd/clawd-static-base.svg +20 -20
- package/assets/clawd/clawd-wake.svg +277 -277
- package/assets/clawd/clawd-working-building.svg +329 -329
- package/assets/clawd/clawd-working-carrying.svg +178 -178
- package/assets/clawd/clawd-working-debugger.svg +245 -245
- package/assets/clawd/clawd-working-juggling.svg +183 -183
- package/assets/clawd/clawd-working-sweeping.svg +248 -248
- package/assets/clawd/clawd-working-thinking.svg +501 -501
- package/assets/clawd/clawd-working-typing-boss.svg +307 -307
- package/assets/clawd/clawd-working-typing.svg +273 -273
- package/assets/clawd/clawd-working-ultrathink.svg +166 -166
- package/assets/clawd/clawd-working-wizard.svg +356 -356
- package/assets/clawd.svg +64 -64
- package/assets/cloudling/cloudling/cloudling-attention.svg +379 -379
- package/assets/cloudling/cloudling/cloudling-building.svg +667 -667
- package/assets/cloudling/cloudling/cloudling-carrying.svg +604 -604
- package/assets/cloudling/cloudling/cloudling-conducting.svg +616 -616
- package/assets/cloudling/cloudling/cloudling-dozing-to-sleeping.svg +578 -578
- package/assets/cloudling/cloudling/cloudling-dozing.svg +358 -358
- package/assets/cloudling/cloudling/cloudling-error.svg +428 -428
- package/assets/cloudling/cloudling/cloudling-idle-reading.svg +658 -658
- package/assets/cloudling/cloudling/cloudling-idle-to-dozing.svg +568 -568
- package/assets/cloudling/cloudling/cloudling-idle-to-sleeping.svg +811 -811
- package/assets/cloudling/cloudling/cloudling-idle.svg +255 -255
- package/assets/cloudling/cloudling/cloudling-juggling.svg +648 -648
- package/assets/cloudling/cloudling/cloudling-mini-alert.svg +389 -389
- package/assets/cloudling/cloudling/cloudling-mini-crabwalk.svg +335 -335
- package/assets/cloudling/cloudling/cloudling-mini-enter-roll-in.svg +225 -225
- package/assets/cloudling/cloudling/cloudling-mini-enter-sleep.svg +231 -231
- package/assets/cloudling/cloudling/cloudling-mini-happy.svg +370 -370
- package/assets/cloudling/cloudling/cloudling-mini-idle.svg +279 -279
- package/assets/cloudling/cloudling/cloudling-mini-peek.svg +327 -327
- package/assets/cloudling/cloudling/cloudling-mini-sleep.svg +260 -260
- package/assets/cloudling/cloudling/cloudling-mini-typing.svg +691 -691
- package/assets/cloudling/cloudling/cloudling-notification.svg +493 -493
- package/assets/cloudling/cloudling/cloudling-react-drag.svg +83 -83
- package/assets/cloudling/cloudling/cloudling-sleeping-to-idle.svg +555 -555
- package/assets/cloudling/cloudling/cloudling-sleeping.svg +500 -500
- package/assets/cloudling/cloudling/cloudling-sweeping.svg +292 -292
- package/assets/cloudling/cloudling/cloudling-thinking.svg +719 -719
- package/assets/cloudling/cloudling/cloudling-typing.svg +354 -354
- package/assets/cloudling/cloudling-attention.svg +379 -379
- package/assets/cloudling/cloudling-building.svg +667 -667
- package/assets/cloudling/cloudling-carrying.svg +604 -604
- package/assets/cloudling/cloudling-conducting.svg +616 -616
- package/assets/cloudling/cloudling-dozing-to-sleeping.svg +578 -578
- package/assets/cloudling/cloudling-dozing.svg +358 -358
- package/assets/cloudling/cloudling-error.svg +428 -428
- package/assets/cloudling/cloudling-idle-reading.svg +658 -658
- package/assets/cloudling/cloudling-idle-to-dozing.svg +568 -568
- package/assets/cloudling/cloudling-idle-to-sleeping.svg +811 -811
- package/assets/cloudling/cloudling-idle.svg +255 -255
- package/assets/cloudling/cloudling-juggling.svg +648 -648
- package/assets/cloudling/cloudling-mini-alert.svg +389 -389
- package/assets/cloudling/cloudling-mini-crabwalk.svg +335 -335
- package/assets/cloudling/cloudling-mini-enter-roll-in.svg +225 -225
- package/assets/cloudling/cloudling-mini-enter-sleep.svg +231 -231
- package/assets/cloudling/cloudling-mini-happy.svg +370 -370
- package/assets/cloudling/cloudling-mini-idle.svg +279 -279
- package/assets/cloudling/cloudling-mini-peek.svg +327 -327
- package/assets/cloudling/cloudling-mini-sleep.svg +260 -260
- package/assets/cloudling/cloudling-mini-typing.svg +691 -691
- package/assets/cloudling/cloudling-notification.svg +493 -493
- package/assets/cloudling/cloudling-react-drag.svg +83 -83
- package/assets/cloudling/cloudling-sleeping-to-idle.svg +555 -555
- package/assets/cloudling/cloudling-sleeping.svg +500 -500
- package/assets/cloudling/cloudling-sweeping.svg +292 -292
- package/assets/cloudling/cloudling-thinking.svg +719 -719
- package/assets/cloudling/cloudling-typing.svg +354 -354
- package/assets/cloudling.svg +255 -255
- package/assets/ghost-attention.svg +19 -19
- package/assets/ghost-carrying.svg +19 -19
- package/assets/ghost-collapsing.svg +19 -19
- package/assets/ghost-dozing.svg +23 -23
- package/assets/ghost-error.svg +19 -19
- package/assets/ghost-happy.svg +23 -23
- package/assets/ghost-idle.svg +11 -11
- package/assets/ghost-juggling.svg +19 -19
- package/assets/ghost-notification.svg +19 -19
- package/assets/ghost-react-double.svg +23 -23
- package/assets/ghost-react-drag.svg +23 -23
- package/assets/ghost-react-left.svg +19 -19
- package/assets/ghost-react-right.svg +19 -19
- package/assets/ghost-sleeping.svg +19 -19
- package/assets/ghost-sweeping.svg +19 -19
- package/assets/ghost-waking.svg +19 -19
- package/assets/ghost-yawning.svg +23 -23
- package/assets/ghost.svg +11 -11
- package/assets/robot-attention.svg +19 -19
- package/assets/robot-carrying.svg +19 -19
- package/assets/robot-collapsing.svg +19 -19
- package/assets/robot-dozing.svg +23 -23
- package/assets/robot-error.svg +19 -19
- package/assets/robot-happy.svg +23 -23
- package/assets/robot-idle.svg +11 -11
- package/assets/robot-juggling.svg +19 -19
- package/assets/robot-notification.svg +19 -19
- package/assets/robot-react-double.svg +23 -23
- package/assets/robot-react-drag.svg +23 -23
- package/assets/robot-react-left.svg +19 -19
- package/assets/robot-react-right.svg +19 -19
- package/assets/robot-sleeping.svg +19 -19
- package/assets/robot-sweeping.svg +19 -19
- package/assets/robot-waking.svg +19 -19
- package/assets/robot-yawning.svg +23 -23
- package/assets/robot.svg +11 -11
- package/manifest.json +280 -280
- package/package.json +1 -1
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
-
<defs>
|
|
3
|
-
<style>
|
|
4
|
-
.body-exhausted {
|
|
5
|
-
transform-origin: 7.5px 15px;
|
|
6
|
-
animation: heavy-breathe 2.5s infinite ease-in-out;
|
|
7
|
-
}
|
|
8
|
-
.arm-fan {
|
|
9
|
-
transform-origin: 14px 10px;
|
|
10
|
-
animation: fan-self 0.4s infinite alternate ease-in-out;
|
|
11
|
-
}
|
|
12
|
-
.smoke {
|
|
13
|
-
opacity: 0;
|
|
14
|
-
animation: puff-smoke 3s infinite ease-out;
|
|
15
|
-
}
|
|
16
|
-
.sm1 { animation-delay: 0s; }
|
|
17
|
-
.sm2 { animation-delay: 1s; }
|
|
18
|
-
.sm3 { animation-delay: 2s; }
|
|
19
|
-
|
|
20
|
-
/* Error warning flash */
|
|
21
|
-
.error-warning {
|
|
22
|
-
animation: error-flash 0.8s infinite ease-in-out;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
@keyframes heavy-breathe {
|
|
26
|
-
0%, 100% { transform: scale(1, 1) translateY(0); }
|
|
27
|
-
50% { transform: scale(1.05, 0.9) translateY(1.5px); }
|
|
28
|
-
}
|
|
29
|
-
@keyframes fan-self {
|
|
30
|
-
0% { transform: rotate(0deg); }
|
|
31
|
-
100% { transform: rotate(-60deg); }
|
|
32
|
-
}
|
|
33
|
-
@keyframes puff-smoke {
|
|
34
|
-
0% { transform: translate(7.5px, 6px) scale(0.5); opacity: 0; }
|
|
35
|
-
20% { opacity: 0.6; }
|
|
36
|
-
100% { transform: translate(7.5px, -15px) scale(2); opacity: 0; }
|
|
37
|
-
}
|
|
38
|
-
@keyframes error-flash {
|
|
39
|
-
0%, 100% { opacity: 1; }
|
|
40
|
-
50% { opacity: 0.15; }
|
|
41
|
-
}
|
|
42
|
-
</style>
|
|
43
|
-
<g id="smoke-puff">
|
|
44
|
-
<rect x="-1" y="-1" width="2" height="2" fill="#B0BEC5" rx="0.5"/>
|
|
45
|
-
<rect x="0" y="-2" width="2" height="2" fill="#CFD8DC" rx="0.5"/>
|
|
46
|
-
</g>
|
|
47
|
-
</defs>
|
|
48
|
-
|
|
49
|
-
<rect id="ground-shadow" x="-1" y="15" width="17" height="1" fill="#000000" opacity="0.5"/>
|
|
50
|
-
|
|
51
|
-
<!-- Smoke -->
|
|
52
|
-
<g>
|
|
53
|
-
<use href="#smoke-puff" class="smoke sm1"/>
|
|
54
|
-
<use href="#smoke-puff" class="smoke sm2" transform="translate(-2, 0)"/>
|
|
55
|
-
<use href="#smoke-puff" class="smoke sm3" transform="translate(2, 0)"/>
|
|
56
|
-
</g>
|
|
57
|
-
|
|
58
|
-
<g class="body-exhausted">
|
|
59
|
-
<!-- Sploot Legs -->
|
|
60
|
-
<g fill="#DE886D">
|
|
61
|
-
<rect x="3" y="9" width="1" height="1"/>
|
|
62
|
-
<rect x="5" y="9" width="1" height="1"/>
|
|
63
|
-
<rect x="9" y="9" width="1" height="1"/>
|
|
64
|
-
<rect x="11" y="9" width="1" height="1"/>
|
|
65
|
-
</g>
|
|
66
|
-
|
|
67
|
-
<!-- Torso Sploot -->
|
|
68
|
-
<g fill="#DE886D">
|
|
69
|
-
<rect x="1" y="10" width="13" height="5"/>
|
|
70
|
-
<rect x="-1" y="13" width="2" height="2"/>
|
|
71
|
-
</g>
|
|
72
|
-
|
|
73
|
-
<!-- Fanning Arm (closer to body) -->
|
|
74
|
-
<g class="arm-fan">
|
|
75
|
-
<rect x="13" y="11" width="2" height="2" fill="#DE886D"/>
|
|
76
|
-
</g>
|
|
77
|
-
|
|
78
|
-
<!-- XX Eyes -->
|
|
79
|
-
<g fill="#000000">
|
|
80
|
-
<!-- Left X -->
|
|
81
|
-
<rect x="3" y="12" width="0.6" height="2.2" transform="rotate(45 3.3 13.1)"/>
|
|
82
|
-
<rect x="3" y="12" width="0.6" height="2.2" transform="rotate(-45 3.3 13.1)"/>
|
|
83
|
-
<!-- Right X -->
|
|
84
|
-
<rect x="10" y="12" width="0.6" height="2.2" transform="rotate(45 10.3 13.1)"/>
|
|
85
|
-
<rect x="10" y="12" width="0.6" height="2.2" transform="rotate(-45 10.3 13.1)"/>
|
|
86
|
-
</g>
|
|
87
|
-
</g>
|
|
88
|
-
|
|
89
|
-
<!-- Error Warning (flashing) -->
|
|
90
|
-
<g class="error-warning">
|
|
91
|
-
<!-- Error text only -->
|
|
92
|
-
<text x="7.5" y="6" text-anchor="middle" font-family="'Söhne', 'Helvetica Neue', Arial, sans-serif" font-size="3.5" font-weight="700" fill="#FF3B30">ERROR</text>
|
|
93
|
-
</g>
|
|
94
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.body-exhausted {
|
|
5
|
+
transform-origin: 7.5px 15px;
|
|
6
|
+
animation: heavy-breathe 2.5s infinite ease-in-out;
|
|
7
|
+
}
|
|
8
|
+
.arm-fan {
|
|
9
|
+
transform-origin: 14px 10px;
|
|
10
|
+
animation: fan-self 0.4s infinite alternate ease-in-out;
|
|
11
|
+
}
|
|
12
|
+
.smoke {
|
|
13
|
+
opacity: 0;
|
|
14
|
+
animation: puff-smoke 3s infinite ease-out;
|
|
15
|
+
}
|
|
16
|
+
.sm1 { animation-delay: 0s; }
|
|
17
|
+
.sm2 { animation-delay: 1s; }
|
|
18
|
+
.sm3 { animation-delay: 2s; }
|
|
19
|
+
|
|
20
|
+
/* Error warning flash */
|
|
21
|
+
.error-warning {
|
|
22
|
+
animation: error-flash 0.8s infinite ease-in-out;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@keyframes heavy-breathe {
|
|
26
|
+
0%, 100% { transform: scale(1, 1) translateY(0); }
|
|
27
|
+
50% { transform: scale(1.05, 0.9) translateY(1.5px); }
|
|
28
|
+
}
|
|
29
|
+
@keyframes fan-self {
|
|
30
|
+
0% { transform: rotate(0deg); }
|
|
31
|
+
100% { transform: rotate(-60deg); }
|
|
32
|
+
}
|
|
33
|
+
@keyframes puff-smoke {
|
|
34
|
+
0% { transform: translate(7.5px, 6px) scale(0.5); opacity: 0; }
|
|
35
|
+
20% { opacity: 0.6; }
|
|
36
|
+
100% { transform: translate(7.5px, -15px) scale(2); opacity: 0; }
|
|
37
|
+
}
|
|
38
|
+
@keyframes error-flash {
|
|
39
|
+
0%, 100% { opacity: 1; }
|
|
40
|
+
50% { opacity: 0.15; }
|
|
41
|
+
}
|
|
42
|
+
</style>
|
|
43
|
+
<g id="smoke-puff">
|
|
44
|
+
<rect x="-1" y="-1" width="2" height="2" fill="#B0BEC5" rx="0.5"/>
|
|
45
|
+
<rect x="0" y="-2" width="2" height="2" fill="#CFD8DC" rx="0.5"/>
|
|
46
|
+
</g>
|
|
47
|
+
</defs>
|
|
48
|
+
|
|
49
|
+
<rect id="ground-shadow" x="-1" y="15" width="17" height="1" fill="#000000" opacity="0.5"/>
|
|
50
|
+
|
|
51
|
+
<!-- Smoke -->
|
|
52
|
+
<g>
|
|
53
|
+
<use href="#smoke-puff" class="smoke sm1"/>
|
|
54
|
+
<use href="#smoke-puff" class="smoke sm2" transform="translate(-2, 0)"/>
|
|
55
|
+
<use href="#smoke-puff" class="smoke sm3" transform="translate(2, 0)"/>
|
|
56
|
+
</g>
|
|
57
|
+
|
|
58
|
+
<g class="body-exhausted">
|
|
59
|
+
<!-- Sploot Legs -->
|
|
60
|
+
<g fill="#DE886D">
|
|
61
|
+
<rect x="3" y="9" width="1" height="1"/>
|
|
62
|
+
<rect x="5" y="9" width="1" height="1"/>
|
|
63
|
+
<rect x="9" y="9" width="1" height="1"/>
|
|
64
|
+
<rect x="11" y="9" width="1" height="1"/>
|
|
65
|
+
</g>
|
|
66
|
+
|
|
67
|
+
<!-- Torso Sploot -->
|
|
68
|
+
<g fill="#DE886D">
|
|
69
|
+
<rect x="1" y="10" width="13" height="5"/>
|
|
70
|
+
<rect x="-1" y="13" width="2" height="2"/>
|
|
71
|
+
</g>
|
|
72
|
+
|
|
73
|
+
<!-- Fanning Arm (closer to body) -->
|
|
74
|
+
<g class="arm-fan">
|
|
75
|
+
<rect x="13" y="11" width="2" height="2" fill="#DE886D"/>
|
|
76
|
+
</g>
|
|
77
|
+
|
|
78
|
+
<!-- XX Eyes -->
|
|
79
|
+
<g fill="#000000">
|
|
80
|
+
<!-- Left X -->
|
|
81
|
+
<rect x="3" y="12" width="0.6" height="2.2" transform="rotate(45 3.3 13.1)"/>
|
|
82
|
+
<rect x="3" y="12" width="0.6" height="2.2" transform="rotate(-45 3.3 13.1)"/>
|
|
83
|
+
<!-- Right X -->
|
|
84
|
+
<rect x="10" y="12" width="0.6" height="2.2" transform="rotate(45 10.3 13.1)"/>
|
|
85
|
+
<rect x="10" y="12" width="0.6" height="2.2" transform="rotate(-45 10.3 13.1)"/>
|
|
86
|
+
</g>
|
|
87
|
+
</g>
|
|
88
|
+
|
|
89
|
+
<!-- Error Warning (flashing) -->
|
|
90
|
+
<g class="error-warning">
|
|
91
|
+
<!-- Error text only -->
|
|
92
|
+
<text x="7.5" y="6" text-anchor="middle" font-family="'Söhne', 'Helvetica Neue', Arial, sans-serif" font-size="3.5" font-weight="700" fill="#FF3B30">ERROR</text>
|
|
93
|
+
</g>
|
|
94
|
+
</svg>
|
|
@@ -1,161 +1,161 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
-
<defs>
|
|
3
|
-
<style>
|
|
4
|
-
/* Bouncing Character Body */
|
|
5
|
-
.bounce-anim {
|
|
6
|
-
transform-box: fill-box;
|
|
7
|
-
transform-origin: 50% 100%; /* Base of the feet */
|
|
8
|
-
animation: bounce 1s infinite ease-in-out;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/* Ground Shadow Pulse */
|
|
12
|
-
.shadow-anim {
|
|
13
|
-
transform-box: fill-box;
|
|
14
|
-
transform-origin: 50% 50%;
|
|
15
|
-
animation: shadow 1s infinite ease-in-out;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/* Enthusiastic Waving Arms */
|
|
19
|
-
.arm-l {
|
|
20
|
-
transform-box: fill-box;
|
|
21
|
-
transform-origin: 100% 50%; /* Shoulder joint */
|
|
22
|
-
animation: wave-l 0.15s infinite alternate ease-in-out;
|
|
23
|
-
}
|
|
24
|
-
.arm-r {
|
|
25
|
-
transform-box: fill-box;
|
|
26
|
-
transform-origin: 0% 50%; /* Shoulder joint */
|
|
27
|
-
animation: wave-r 0.15s infinite alternate ease-in-out;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/* Happy Blinking Eyes */
|
|
31
|
-
.eyes-blink {
|
|
32
|
-
transform-box: fill-box;
|
|
33
|
-
transform-origin: 50% 50%;
|
|
34
|
-
animation: blink 2s infinite linear;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/* Pixel-Art Sparkle Animations (Frame-by-frame style) */
|
|
38
|
-
.spark-center {
|
|
39
|
-
opacity: 0;
|
|
40
|
-
animation: flash-center 1.5s infinite step-end;
|
|
41
|
-
animation-delay: var(--delay, 0s);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.spark-outer {
|
|
45
|
-
opacity: 0;
|
|
46
|
-
animation: flash-outer 1.5s infinite step-end;
|
|
47
|
-
animation-delay: var(--delay, 0s);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/* Character Keyframes */
|
|
51
|
-
@keyframes bounce {
|
|
52
|
-
0%, 15%, 100% { transform: translateY(0) scaleY(1); }
|
|
53
|
-
20% { transform: translateY(0) scaleY(0.85); } /* Anticipation squash */
|
|
54
|
-
40% { transform: translateY(-10px) scaleY(1.05); } /* Fast up + stretch */
|
|
55
|
-
50% { transform: translateY(-12px) scaleY(1); } /* Hangtime peak */
|
|
56
|
-
60% { transform: translateY(-10px) scaleY(1.05); } /* Fast fall + stretch */
|
|
57
|
-
80% { transform: translateY(0) scaleY(0.85); } /* Landing squash */
|
|
58
|
-
85% { transform: translateY(0) scaleY(1); } /* Recover */
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
@keyframes shadow {
|
|
62
|
-
0%, 15%, 100% { transform: scale(1); opacity: 0.5; }
|
|
63
|
-
20% { transform: scale(1.1); opacity: 0.6; }
|
|
64
|
-
40% { transform: scale(0.6); opacity: 0.2; }
|
|
65
|
-
50% { transform: scale(0.5); opacity: 0.15; }
|
|
66
|
-
60% { transform: scale(0.6); opacity: 0.2; }
|
|
67
|
-
80% { transform: scale(1.1); opacity: 0.6; }
|
|
68
|
-
85% { transform: scale(1); opacity: 0.5; }
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
@keyframes wave-l {
|
|
72
|
-
0% { transform: rotate(45deg); }
|
|
73
|
-
100% { transform: rotate(85deg); }
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
@keyframes wave-r {
|
|
77
|
-
0% { transform: rotate(-45deg); }
|
|
78
|
-
100% { transform: rotate(-85deg); }
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@keyframes blink {
|
|
82
|
-
0%, 46%, 54%, 100% { transform: scaleY(1); }
|
|
83
|
-
50% { transform: scaleY(0.1); }
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/*
|
|
87
|
-
True 8-Bit Sparkle Timeline:
|
|
88
|
-
1. Small center dot appears
|
|
89
|
-
2. Outer arms appear (Full Star)
|
|
90
|
-
3. Center dot disappears (Hollow Ring)
|
|
91
|
-
4. Everything disappears
|
|
92
|
-
*/
|
|
93
|
-
@keyframes flash-center {
|
|
94
|
-
0% { opacity: 0; }
|
|
95
|
-
10% { opacity: 1; } /* Small dot */
|
|
96
|
-
30% { opacity: 0; } /* Disappears, leaving hollow star */
|
|
97
|
-
100%{ opacity: 0; }
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
@keyframes flash-outer {
|
|
101
|
-
0% { opacity: 0; }
|
|
102
|
-
20% { opacity: 1; } /* Outer arms appear to complete the star */
|
|
103
|
-
40% { opacity: 0; } /* Entire star disappears */
|
|
104
|
-
100%{ opacity: 0; }
|
|
105
|
-
}
|
|
106
|
-
</style>
|
|
107
|
-
|
|
108
|
-
<!-- Reusable Pixel Art Sparkle Definition -->
|
|
109
|
-
<g id="px-sparkle">
|
|
110
|
-
<!-- Center pixel -->
|
|
111
|
-
<rect class="spark-center" x="-0.5" y="-0.5" width="1" height="1" />
|
|
112
|
-
<!-- Outer 4 pixels forming the cross -->
|
|
113
|
-
<path class="spark-outer" d="M -0.5,-1.5 h1 v1 h-1 z
|
|
114
|
-
M -0.5,0.5 h1 v1 h-1 z
|
|
115
|
-
M -1.5,-0.5 h1 v1 h-1 z
|
|
116
|
-
M 0.5,-0.5 h1 v1 h-1 z" />
|
|
117
|
-
</g>
|
|
118
|
-
</defs>
|
|
119
|
-
|
|
120
|
-
<!-- Ground Shadow -->
|
|
121
|
-
<rect id="ground-shadow" class="shadow-anim" x="3" y="15" width="9" height="1" fill="#000000"/>
|
|
122
|
-
|
|
123
|
-
<!-- Pixel-Art Sparkle Particles Group -->
|
|
124
|
-
<g class="sparkles">
|
|
125
|
-
<use href="#px-sparkle" x="-4" y="-2" fill="#FFD700" style="--delay: 0.0s"/>
|
|
126
|
-
<use href="#px-sparkle" x="18" y="-4" fill="#FFA000" style="--delay: 0.3s"/>
|
|
127
|
-
<use href="#px-sparkle" x="20" y="10" fill="#FFF59D" style="--delay: 0.6s"/>
|
|
128
|
-
<use href="#px-sparkle" x="-6" y="12" fill="#FFC107" style="--delay: 0.9s"/>
|
|
129
|
-
<use href="#px-sparkle" x="7" y="-8" fill="#FFF59D" style="--delay: 1.2s"/>
|
|
130
|
-
<use href="#px-sparkle" x="-2" y="6" fill="#FFD700" style="--delay: 0.7s"/>
|
|
131
|
-
</g>
|
|
132
|
-
|
|
133
|
-
<!-- Main Animated Character -->
|
|
134
|
-
<g class="bounce-anim">
|
|
135
|
-
<!-- Body Color Group -->
|
|
136
|
-
<g id="body-color-group" fill="#DE886D">
|
|
137
|
-
<!-- Legs (Move and squash with the body naturally) -->
|
|
138
|
-
<rect id="outer-left-leg" x="3" y="13" width="1" height="2"/>
|
|
139
|
-
<rect id="inner-left-leg" x="5" y="13" width="1" height="2"/>
|
|
140
|
-
<rect id="inner-right-leg" x="9" y="13" width="1" height="2"/>
|
|
141
|
-
<rect id="outer-right-leg" x="11" y="13" width="1" height="2"/>
|
|
142
|
-
|
|
143
|
-
<!-- Main Torso -->
|
|
144
|
-
<rect id="torso" x="2" y="6" width="11" height="7"/>
|
|
145
|
-
|
|
146
|
-
<!-- Waving Arms -->
|
|
147
|
-
<g class="arm-l">
|
|
148
|
-
<rect id="left-arm" x="0" y="9" width="2" height="2"/>
|
|
149
|
-
</g>
|
|
150
|
-
<g class="arm-r">
|
|
151
|
-
<rect id="right-arm" x="13" y="9" width="2" height="2"/>
|
|
152
|
-
</g>
|
|
153
|
-
</g>
|
|
154
|
-
|
|
155
|
-
<!-- Eyes Color Group -->
|
|
156
|
-
<g class="eyes-blink" fill="#000000">
|
|
157
|
-
<rect id="left-eye" x="4" y="8" width="1" height="2"/>
|
|
158
|
-
<rect id="right-eye" x="10" y="8" width="1" height="2"/>
|
|
159
|
-
</g>
|
|
160
|
-
</g>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
/* Bouncing Character Body */
|
|
5
|
+
.bounce-anim {
|
|
6
|
+
transform-box: fill-box;
|
|
7
|
+
transform-origin: 50% 100%; /* Base of the feet */
|
|
8
|
+
animation: bounce 1s infinite ease-in-out;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/* Ground Shadow Pulse */
|
|
12
|
+
.shadow-anim {
|
|
13
|
+
transform-box: fill-box;
|
|
14
|
+
transform-origin: 50% 50%;
|
|
15
|
+
animation: shadow 1s infinite ease-in-out;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* Enthusiastic Waving Arms */
|
|
19
|
+
.arm-l {
|
|
20
|
+
transform-box: fill-box;
|
|
21
|
+
transform-origin: 100% 50%; /* Shoulder joint */
|
|
22
|
+
animation: wave-l 0.15s infinite alternate ease-in-out;
|
|
23
|
+
}
|
|
24
|
+
.arm-r {
|
|
25
|
+
transform-box: fill-box;
|
|
26
|
+
transform-origin: 0% 50%; /* Shoulder joint */
|
|
27
|
+
animation: wave-r 0.15s infinite alternate ease-in-out;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Happy Blinking Eyes */
|
|
31
|
+
.eyes-blink {
|
|
32
|
+
transform-box: fill-box;
|
|
33
|
+
transform-origin: 50% 50%;
|
|
34
|
+
animation: blink 2s infinite linear;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Pixel-Art Sparkle Animations (Frame-by-frame style) */
|
|
38
|
+
.spark-center {
|
|
39
|
+
opacity: 0;
|
|
40
|
+
animation: flash-center 1.5s infinite step-end;
|
|
41
|
+
animation-delay: var(--delay, 0s);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.spark-outer {
|
|
45
|
+
opacity: 0;
|
|
46
|
+
animation: flash-outer 1.5s infinite step-end;
|
|
47
|
+
animation-delay: var(--delay, 0s);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Character Keyframes */
|
|
51
|
+
@keyframes bounce {
|
|
52
|
+
0%, 15%, 100% { transform: translateY(0) scaleY(1); }
|
|
53
|
+
20% { transform: translateY(0) scaleY(0.85); } /* Anticipation squash */
|
|
54
|
+
40% { transform: translateY(-10px) scaleY(1.05); } /* Fast up + stretch */
|
|
55
|
+
50% { transform: translateY(-12px) scaleY(1); } /* Hangtime peak */
|
|
56
|
+
60% { transform: translateY(-10px) scaleY(1.05); } /* Fast fall + stretch */
|
|
57
|
+
80% { transform: translateY(0) scaleY(0.85); } /* Landing squash */
|
|
58
|
+
85% { transform: translateY(0) scaleY(1); } /* Recover */
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@keyframes shadow {
|
|
62
|
+
0%, 15%, 100% { transform: scale(1); opacity: 0.5; }
|
|
63
|
+
20% { transform: scale(1.1); opacity: 0.6; }
|
|
64
|
+
40% { transform: scale(0.6); opacity: 0.2; }
|
|
65
|
+
50% { transform: scale(0.5); opacity: 0.15; }
|
|
66
|
+
60% { transform: scale(0.6); opacity: 0.2; }
|
|
67
|
+
80% { transform: scale(1.1); opacity: 0.6; }
|
|
68
|
+
85% { transform: scale(1); opacity: 0.5; }
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@keyframes wave-l {
|
|
72
|
+
0% { transform: rotate(45deg); }
|
|
73
|
+
100% { transform: rotate(85deg); }
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@keyframes wave-r {
|
|
77
|
+
0% { transform: rotate(-45deg); }
|
|
78
|
+
100% { transform: rotate(-85deg); }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@keyframes blink {
|
|
82
|
+
0%, 46%, 54%, 100% { transform: scaleY(1); }
|
|
83
|
+
50% { transform: scaleY(0.1); }
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/*
|
|
87
|
+
True 8-Bit Sparkle Timeline:
|
|
88
|
+
1. Small center dot appears
|
|
89
|
+
2. Outer arms appear (Full Star)
|
|
90
|
+
3. Center dot disappears (Hollow Ring)
|
|
91
|
+
4. Everything disappears
|
|
92
|
+
*/
|
|
93
|
+
@keyframes flash-center {
|
|
94
|
+
0% { opacity: 0; }
|
|
95
|
+
10% { opacity: 1; } /* Small dot */
|
|
96
|
+
30% { opacity: 0; } /* Disappears, leaving hollow star */
|
|
97
|
+
100%{ opacity: 0; }
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@keyframes flash-outer {
|
|
101
|
+
0% { opacity: 0; }
|
|
102
|
+
20% { opacity: 1; } /* Outer arms appear to complete the star */
|
|
103
|
+
40% { opacity: 0; } /* Entire star disappears */
|
|
104
|
+
100%{ opacity: 0; }
|
|
105
|
+
}
|
|
106
|
+
</style>
|
|
107
|
+
|
|
108
|
+
<!-- Reusable Pixel Art Sparkle Definition -->
|
|
109
|
+
<g id="px-sparkle">
|
|
110
|
+
<!-- Center pixel -->
|
|
111
|
+
<rect class="spark-center" x="-0.5" y="-0.5" width="1" height="1" />
|
|
112
|
+
<!-- Outer 4 pixels forming the cross -->
|
|
113
|
+
<path class="spark-outer" d="M -0.5,-1.5 h1 v1 h-1 z
|
|
114
|
+
M -0.5,0.5 h1 v1 h-1 z
|
|
115
|
+
M -1.5,-0.5 h1 v1 h-1 z
|
|
116
|
+
M 0.5,-0.5 h1 v1 h-1 z" />
|
|
117
|
+
</g>
|
|
118
|
+
</defs>
|
|
119
|
+
|
|
120
|
+
<!-- Ground Shadow -->
|
|
121
|
+
<rect id="ground-shadow" class="shadow-anim" x="3" y="15" width="9" height="1" fill="#000000"/>
|
|
122
|
+
|
|
123
|
+
<!-- Pixel-Art Sparkle Particles Group -->
|
|
124
|
+
<g class="sparkles">
|
|
125
|
+
<use href="#px-sparkle" x="-4" y="-2" fill="#FFD700" style="--delay: 0.0s"/>
|
|
126
|
+
<use href="#px-sparkle" x="18" y="-4" fill="#FFA000" style="--delay: 0.3s"/>
|
|
127
|
+
<use href="#px-sparkle" x="20" y="10" fill="#FFF59D" style="--delay: 0.6s"/>
|
|
128
|
+
<use href="#px-sparkle" x="-6" y="12" fill="#FFC107" style="--delay: 0.9s"/>
|
|
129
|
+
<use href="#px-sparkle" x="7" y="-8" fill="#FFF59D" style="--delay: 1.2s"/>
|
|
130
|
+
<use href="#px-sparkle" x="-2" y="6" fill="#FFD700" style="--delay: 0.7s"/>
|
|
131
|
+
</g>
|
|
132
|
+
|
|
133
|
+
<!-- Main Animated Character -->
|
|
134
|
+
<g class="bounce-anim">
|
|
135
|
+
<!-- Body Color Group -->
|
|
136
|
+
<g id="body-color-group" fill="#DE886D">
|
|
137
|
+
<!-- Legs (Move and squash with the body naturally) -->
|
|
138
|
+
<rect id="outer-left-leg" x="3" y="13" width="1" height="2"/>
|
|
139
|
+
<rect id="inner-left-leg" x="5" y="13" width="1" height="2"/>
|
|
140
|
+
<rect id="inner-right-leg" x="9" y="13" width="1" height="2"/>
|
|
141
|
+
<rect id="outer-right-leg" x="11" y="13" width="1" height="2"/>
|
|
142
|
+
|
|
143
|
+
<!-- Main Torso -->
|
|
144
|
+
<rect id="torso" x="2" y="6" width="11" height="7"/>
|
|
145
|
+
|
|
146
|
+
<!-- Waving Arms -->
|
|
147
|
+
<g class="arm-l">
|
|
148
|
+
<rect id="left-arm" x="0" y="9" width="2" height="2"/>
|
|
149
|
+
</g>
|
|
150
|
+
<g class="arm-r">
|
|
151
|
+
<rect id="right-arm" x="13" y="9" width="2" height="2"/>
|
|
152
|
+
</g>
|
|
153
|
+
</g>
|
|
154
|
+
|
|
155
|
+
<!-- Eyes Color Group -->
|
|
156
|
+
<g class="eyes-blink" fill="#000000">
|
|
157
|
+
<rect id="left-eye" x="4" y="8" width="1" height="2"/>
|
|
158
|
+
<rect id="right-eye" x="10" y="8" width="1" height="2"/>
|
|
159
|
+
</g>
|
|
160
|
+
</g>
|
|
161
161
|
</svg>
|