mocode-pet-app 0.1.0 → 1.1.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/assets/mascot.svg +3 -5
- package/assets/pets/01-robo-cat.svg +56 -0
- package/assets/pets/02-robo-dog.svg +53 -0
- package/assets/pets/03-robo-fox.svg +53 -0
- package/assets/pets/04-robo-panda.svg +52 -0
- package/assets/pets/05-robo-owl.svg +46 -0
- package/assets/pets/06-robo-bunny.svg +57 -0
- package/assets/pets/07-robo-frog.svg +39 -0
- package/assets/pets/08-robo-bear.svg +48 -0
- package/assets/pets/09-robo-penguin.svg +49 -0
- package/assets/pets/10-robo-dino.svg +58 -0
- package/assets/pets/11-slime-blob.svg +43 -0
- package/assets/pets/12-ghost-byte.svg +41 -0
- package/assets/pets/13-cactus-bot.svg +52 -0
- package/assets/pets/14-crystal-bot.svg +32 -0
- package/assets/pets/15-satellite-bot.svg +55 -0
- package/assets/pets/16-jellyfish-bot.svg +47 -0
- package/assets/pets/17-mushroom-bot.svg +47 -0
- package/assets/pets/18-star-bot.svg +45 -0
- package/assets/pets/manifest.json +25 -0
- package/assets/signal-light.svg +55 -0
- package/assets/tray-icon.png +0 -0
- package/dist/assets/mascot.svg +3 -5
- package/dist/assets/pets/01-robo-cat.svg +56 -0
- package/dist/assets/pets/02-robo-dog.svg +53 -0
- package/dist/assets/pets/03-robo-fox.svg +53 -0
- package/dist/assets/pets/04-robo-panda.svg +52 -0
- package/dist/assets/pets/05-robo-owl.svg +46 -0
- package/dist/assets/pets/06-robo-bunny.svg +57 -0
- package/dist/assets/pets/07-robo-frog.svg +39 -0
- package/dist/assets/pets/08-robo-bear.svg +48 -0
- package/dist/assets/pets/09-robo-penguin.svg +49 -0
- package/dist/assets/pets/10-robo-dino.svg +58 -0
- package/dist/assets/pets/11-slime-blob.svg +43 -0
- package/dist/assets/pets/12-ghost-byte.svg +41 -0
- package/dist/assets/pets/13-cactus-bot.svg +52 -0
- package/dist/assets/pets/14-crystal-bot.svg +32 -0
- package/dist/assets/pets/15-satellite-bot.svg +55 -0
- package/dist/assets/pets/16-jellyfish-bot.svg +47 -0
- package/dist/assets/pets/17-mushroom-bot.svg +47 -0
- package/dist/assets/pets/18-star-bot.svg +45 -0
- package/dist/assets/pets/manifest.json +25 -0
- package/dist/assets/signal-light.svg +55 -0
- package/dist/assets/tray-icon.png +0 -0
- package/dist/config.js +42 -0
- package/dist/main.js +158 -16
- package/dist/protocol.js +25 -0
- package/dist/renderer/index.html +4 -1
- package/dist/renderer/preload.js +32 -3
- package/dist/renderer/renderer.js +74 -10
- package/dist/renderer/style.css +116 -11
- package/dist/skins.js +55 -0
- package/package.json +2 -2
package/assets/mascot.svg
CHANGED
|
@@ -46,13 +46,11 @@
|
|
|
46
46
|
<rect id="pet-mouth" x="112" y="147" width="32" height="6" rx="3" fill="#2afadf" fill-opacity="0.8" filter="url(#glow)"/>
|
|
47
47
|
</g>
|
|
48
48
|
|
|
49
|
-
<!-- Arms(id 供 tool_call
|
|
50
|
-
<
|
|
51
|
-
<
|
|
49
|
+
<!-- Arms(id 供 tool_call 状态的摆动动画;与 legs 同款风格的圆球——机身色填充 + 青色描边,不额外画手臂连接件) -->
|
|
50
|
+
<circle id="pet-arm-left" cx="34" cy="128" r="14" fill="url(#bodyGrad)" stroke="url(#cyanGrad)" stroke-width="2.5"/>
|
|
51
|
+
<circle id="pet-arm-right" cx="222" cy="128" r="14" fill="url(#bodyGrad)" stroke="url(#cyanGrad)" stroke-width="2.5"/>
|
|
52
52
|
|
|
53
53
|
<!-- Legs / feet -->
|
|
54
54
|
<rect x="76" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#cyanGrad)" stroke-width="2.5"/>
|
|
55
55
|
<rect x="160" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#cyanGrad)" stroke-width="2.5"/>
|
|
56
|
-
<rect x="66" y="222" width="40" height="10" rx="5" fill="#2afadf" fill-opacity="0.6"/>
|
|
57
|
-
<rect x="150" y="222" width="40" height="10" rx="5" fill="#2afadf" fill-opacity="0.6"/>
|
|
58
56
|
</svg>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bodyGrad" x1="48" y1="48" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#1b263b"/>
|
|
5
|
+
<stop offset="1" stop-color="#0d1b2a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accentGrad" x1="60" y1="90" x2="196" y2="170" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="#2afadf"/>
|
|
9
|
+
<stop offset="1" stop-color="#42a5f5"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
12
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="pet-body-group">
|
|
17
|
+
|
|
18
|
+
<!-- Ears -->
|
|
19
|
+
<path d="M52 62 L34 24 L78 48 Z" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
20
|
+
<path d="M204 62 L222 24 L178 48 Z" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
21
|
+
|
|
22
|
+
<!-- Body / head -->
|
|
23
|
+
<rect x="40" y="50" width="176" height="150" rx="28" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
24
|
+
|
|
25
|
+
<!-- Screen face -->
|
|
26
|
+
<rect x="60" y="72" width="136" height="90" rx="14" fill="#0a1420" stroke="#2afadf" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
27
|
+
|
|
28
|
+
<!-- Eyes -->
|
|
29
|
+
<g filter="url(#glow)">
|
|
30
|
+
<rect x="86" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
31
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
32
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
33
|
+
</rect>
|
|
34
|
+
<rect x="156" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
35
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
36
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
37
|
+
</rect>
|
|
38
|
+
</g>
|
|
39
|
+
|
|
40
|
+
<!-- Cat mouth -->
|
|
41
|
+
<path d="M118 148 L128 156 L138 148" stroke="#2afadf" stroke-width="4" fill="none" stroke-linecap="round" filter="url(#glow)"/>
|
|
42
|
+
|
|
43
|
+
<!-- Whiskers -->
|
|
44
|
+
<line x1="46" y1="128" x2="76" y2="124" stroke="url(#accentGrad)" stroke-width="2" stroke-linecap="round"/>
|
|
45
|
+
<line x1="46" y1="140" x2="76" y2="140" stroke="url(#accentGrad)" stroke-width="2" stroke-linecap="round"/>
|
|
46
|
+
<line x1="210" y1="128" x2="180" y2="124" stroke="url(#accentGrad)" stroke-width="2" stroke-linecap="round"/>
|
|
47
|
+
<line x1="210" y1="140" x2="180" y2="140" stroke="url(#accentGrad)" stroke-width="2" stroke-linecap="round"/>
|
|
48
|
+
|
|
49
|
+
<!-- Legs / feet -->
|
|
50
|
+
<rect x="76" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
51
|
+
<rect x="160" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
52
|
+
|
|
53
|
+
<!-- Tail -->
|
|
54
|
+
<path d="M216 180 Q246 190 240 150" stroke="url(#accentGrad)" stroke-width="8" stroke-linecap="round" fill="none"/>
|
|
55
|
+
</g>
|
|
56
|
+
</svg>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bodyGrad" x1="48" y1="48" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#1b263b"/>
|
|
5
|
+
<stop offset="1" stop-color="#0d1b2a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accentGrad" x1="60" y1="90" x2="196" y2="170" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="#ffb74d"/>
|
|
9
|
+
<stop offset="1" stop-color="#ff8a65"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
12
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="pet-body-group">
|
|
17
|
+
|
|
18
|
+
<!-- Floppy ears -->
|
|
19
|
+
<path d="M50 68 Q16 88 26 142 Q42 152 58 122 Z" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
20
|
+
<path d="M206 68 Q240 88 230 142 Q214 152 198 122 Z" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
21
|
+
|
|
22
|
+
<!-- Body / head -->
|
|
23
|
+
<rect x="40" y="50" width="176" height="150" rx="28" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
24
|
+
|
|
25
|
+
<!-- Screen face -->
|
|
26
|
+
<rect x="60" y="72" width="136" height="90" rx="14" fill="#0a1420" stroke="#ffb74d" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
27
|
+
|
|
28
|
+
<!-- Eyes -->
|
|
29
|
+
<g filter="url(#glow)">
|
|
30
|
+
<rect x="86" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
31
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
32
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
33
|
+
</rect>
|
|
34
|
+
<rect x="156" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
35
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
36
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
37
|
+
</rect>
|
|
38
|
+
</g>
|
|
39
|
+
|
|
40
|
+
<!-- Nose + tongue -->
|
|
41
|
+
<ellipse cx="128" cy="145" rx="9" ry="6" fill="#ff8a65" filter="url(#glow)"/>
|
|
42
|
+
<rect x="120" y="153" width="16" height="14" rx="6" fill="#ff8fa3"/>
|
|
43
|
+
|
|
44
|
+
<!-- Legs / feet -->
|
|
45
|
+
<rect x="76" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
46
|
+
<rect x="160" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
47
|
+
|
|
48
|
+
<!-- Wagging tail -->
|
|
49
|
+
<path d="M216 178 Q250 168 244 138" stroke="url(#accentGrad)" stroke-width="8" stroke-linecap="round" fill="none">
|
|
50
|
+
<animateTransform attributeName="transform" type="rotate" values="0 216 178;18 216 178;0 216 178" dur="0.8s" repeatCount="indefinite"/>
|
|
51
|
+
</path>
|
|
52
|
+
</g>
|
|
53
|
+
</svg>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bodyGrad" x1="48" y1="48" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#1b263b"/>
|
|
5
|
+
<stop offset="1" stop-color="#0d1b2a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accentGrad" x1="60" y1="90" x2="196" y2="170" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="#ff7043"/>
|
|
9
|
+
<stop offset="1" stop-color="#ffab91"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
12
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="pet-body-group">
|
|
17
|
+
|
|
18
|
+
<!-- Pointed ears with white tips -->
|
|
19
|
+
<path d="M56 60 L30 18 L82 46 Z" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
20
|
+
<path d="M200 60 L226 18 L174 46 Z" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
21
|
+
<circle cx="34" cy="24" r="4" fill="#fff" fill-opacity="0.85"/>
|
|
22
|
+
<circle cx="222" cy="24" r="4" fill="#fff" fill-opacity="0.85"/>
|
|
23
|
+
|
|
24
|
+
<!-- Body / head -->
|
|
25
|
+
<rect x="40" y="50" width="176" height="150" rx="28" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
26
|
+
|
|
27
|
+
<!-- Screen face -->
|
|
28
|
+
<rect x="60" y="72" width="136" height="90" rx="14" fill="#0a1420" stroke="#ff7043" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
29
|
+
|
|
30
|
+
<!-- Eyes -->
|
|
31
|
+
<g filter="url(#glow)">
|
|
32
|
+
<rect x="86" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
33
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
34
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
35
|
+
</rect>
|
|
36
|
+
<rect x="156" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
37
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
38
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
39
|
+
</rect>
|
|
40
|
+
</g>
|
|
41
|
+
|
|
42
|
+
<!-- Sharp muzzle line -->
|
|
43
|
+
<path d="M112 150 L128 158 L144 150" stroke="#ff7043" stroke-width="4" fill="none" stroke-linecap="round" filter="url(#glow)"/>
|
|
44
|
+
|
|
45
|
+
<!-- Legs / feet -->
|
|
46
|
+
<rect x="76" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
47
|
+
<rect x="160" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
48
|
+
|
|
49
|
+
<!-- Bushy tail with white tip -->
|
|
50
|
+
<path d="M216 180 Q252 186 248 142 Q244 120 220 128" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
51
|
+
<circle cx="230" cy="132" r="10" fill="#fff" fill-opacity="0.85"/>
|
|
52
|
+
</g>
|
|
53
|
+
</svg>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bodyGrad" x1="48" y1="48" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#eef2f6"/>
|
|
5
|
+
<stop offset="1" stop-color="#cbd5e0"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accentGrad" x1="60" y1="90" x2="196" y2="170" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="#2afadf"/>
|
|
9
|
+
<stop offset="1" stop-color="#42a5f5"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
12
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="pet-body-group">
|
|
17
|
+
|
|
18
|
+
<!-- Round black ears -->
|
|
19
|
+
<circle cx="58" cy="42" r="26" fill="#161a1e" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
20
|
+
<circle cx="198" cy="42" r="26" fill="#161a1e" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
21
|
+
|
|
22
|
+
<!-- Body / head -->
|
|
23
|
+
<rect x="40" y="50" width="176" height="150" rx="28" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
24
|
+
|
|
25
|
+
<!-- Black eye patches -->
|
|
26
|
+
<ellipse cx="93" cy="112" rx="22" ry="28" fill="#161a1e"/>
|
|
27
|
+
<ellipse cx="163" cy="112" rx="22" ry="28" fill="#161a1e"/>
|
|
28
|
+
|
|
29
|
+
<!-- Screen face -->
|
|
30
|
+
<rect x="60" y="72" width="136" height="90" rx="14" fill="#0a1420" stroke="#2afadf" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
31
|
+
|
|
32
|
+
<!-- Eyes -->
|
|
33
|
+
<g filter="url(#glow)">
|
|
34
|
+
<rect x="86" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
35
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
36
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
37
|
+
</rect>
|
|
38
|
+
<rect x="156" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
39
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
40
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
41
|
+
</rect>
|
|
42
|
+
</g>
|
|
43
|
+
|
|
44
|
+
<!-- Nose + mouth -->
|
|
45
|
+
<ellipse cx="128" cy="142" rx="8" ry="6" fill="#161a1e"/>
|
|
46
|
+
<rect x="112" y="150" width="32" height="5" rx="2.5" fill="#161a1e" fill-opacity="0.7"/>
|
|
47
|
+
|
|
48
|
+
<!-- Legs / feet -->
|
|
49
|
+
<rect x="76" y="200" width="20" height="26" rx="8" fill="#161a1e" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
50
|
+
<rect x="160" y="200" width="20" height="26" rx="8" fill="#161a1e" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
51
|
+
</g>
|
|
52
|
+
</svg>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bodyGrad" x1="48" y1="48" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#1b263b"/>
|
|
5
|
+
<stop offset="1" stop-color="#0d1b2a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accentGrad" x1="60" y1="90" x2="196" y2="170" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="#b388ff"/>
|
|
9
|
+
<stop offset="1" stop-color="#7c4dff"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
12
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="pet-body-group">
|
|
17
|
+
|
|
18
|
+
<!-- Ear tufts -->
|
|
19
|
+
<path d="M60 58 L50 26 L76 46 Z" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
20
|
+
<path d="M196 58 L206 26 L180 46 Z" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
21
|
+
|
|
22
|
+
<!-- Body / head -->
|
|
23
|
+
<rect x="40" y="50" width="176" height="150" rx="40" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
24
|
+
|
|
25
|
+
<!-- Big round eyes -->
|
|
26
|
+
<circle cx="93" cy="118" r="30" fill="#0a1420" stroke="url(#accentGrad)" stroke-width="2"/>
|
|
27
|
+
<circle cx="163" cy="118" r="30" fill="#0a1420" stroke="url(#accentGrad)" stroke-width="2"/>
|
|
28
|
+
<circle cx="93" cy="118" r="13" fill="url(#accentGrad)" filter="url(#glow)">
|
|
29
|
+
<animate attributeName="r" values="13;3;13" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
30
|
+
</circle>
|
|
31
|
+
<circle cx="163" cy="118" r="13" fill="url(#accentGrad)" filter="url(#glow)">
|
|
32
|
+
<animate attributeName="r" values="13;3;13" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
33
|
+
</circle>
|
|
34
|
+
|
|
35
|
+
<!-- Beak -->
|
|
36
|
+
<path d="M120 156 L128 172 L136 156 Z" fill="#ffb74d"/>
|
|
37
|
+
|
|
38
|
+
<!-- Folded wing arms(填充块面而非线条,末端贴身收圆) -->
|
|
39
|
+
<ellipse cx="26" cy="160" rx="14" ry="30" transform="rotate(-12 26 160)" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
40
|
+
<ellipse cx="230" cy="160" rx="14" ry="30" transform="rotate(12 230 160)" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
41
|
+
|
|
42
|
+
<!-- Feet / talons -->
|
|
43
|
+
<rect x="76" y="200" width="20" height="24" rx="6" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
44
|
+
<rect x="160" y="200" width="20" height="24" rx="6" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
45
|
+
</g>
|
|
46
|
+
</svg>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bodyGrad" x1="48" y1="48" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#1b263b"/>
|
|
5
|
+
<stop offset="1" stop-color="#0d1b2a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accentGrad" x1="60" y1="90" x2="196" y2="170" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="#ff6ec7"/>
|
|
9
|
+
<stop offset="1" stop-color="#f48fb1"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
12
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="pet-body-group">
|
|
17
|
+
|
|
18
|
+
<!-- Long ears (top kept at y=12 to leave clearance for the idle float animation's -6px translateY, so ear tips don't get clipped by the viewBox edge) -->
|
|
19
|
+
<rect x="66" y="12" width="22" height="54" rx="11" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
20
|
+
<rect x="168" y="12" width="22" height="54" rx="11" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
21
|
+
<rect x="72" y="20" width="10" height="30" rx="5" fill="#ff6ec7" fill-opacity="0.5"/>
|
|
22
|
+
<rect x="174" y="20" width="10" height="30" rx="5" fill="#ff6ec7" fill-opacity="0.5"/>
|
|
23
|
+
|
|
24
|
+
<!-- Body / head -->
|
|
25
|
+
<rect x="40" y="50" width="176" height="150" rx="30" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
26
|
+
|
|
27
|
+
<!-- Screen face -->
|
|
28
|
+
<rect x="60" y="72" width="136" height="90" rx="14" fill="#0a1420" stroke="#ff6ec7" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
29
|
+
|
|
30
|
+
<!-- Eyes -->
|
|
31
|
+
<g filter="url(#glow)">
|
|
32
|
+
<rect x="86" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
33
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
34
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
35
|
+
</rect>
|
|
36
|
+
<rect x="156" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
37
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
38
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
39
|
+
</rect>
|
|
40
|
+
</g>
|
|
41
|
+
|
|
42
|
+
<!-- Nose -->
|
|
43
|
+
<path d="M122 148 L128 156 L134 148 Z" fill="#ff6ec7" filter="url(#glow)"/>
|
|
44
|
+
|
|
45
|
+
<!-- Arms (gentle wave) -->
|
|
46
|
+
<ellipse cx="34" cy="150" rx="12" ry="22" transform="rotate(-18 34 130)" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5">
|
|
47
|
+
<animateTransform attributeName="transform" type="rotate" values="-18 34 130;-30 34 130;-18 34 130;-6 34 130;-18 34 130" keyTimes="0;0.25;0.5;0.75;1" dur="2.6s" repeatCount="indefinite"/>
|
|
48
|
+
</ellipse>
|
|
49
|
+
<ellipse cx="222" cy="150" rx="12" ry="22" transform="rotate(18 222 130)" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5">
|
|
50
|
+
<animateTransform attributeName="transform" type="rotate" values="18 222 130;30 222 130;18 222 130;6 222 130;18 222 130" keyTimes="0;0.25;0.5;0.75;1" dur="2.6s" repeatCount="indefinite"/>
|
|
51
|
+
</ellipse>
|
|
52
|
+
|
|
53
|
+
<!-- Legs / feet -->
|
|
54
|
+
<rect x="76" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
55
|
+
<rect x="160" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
56
|
+
</g>
|
|
57
|
+
</svg>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bodyGrad" x1="48" y1="48" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#1b263b"/>
|
|
5
|
+
<stop offset="1" stop-color="#0d1b2a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accentGrad" x1="60" y1="90" x2="196" y2="170" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="#69f0ae"/>
|
|
9
|
+
<stop offset="1" stop-color="#00e676"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
12
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="pet-body-group">
|
|
17
|
+
|
|
18
|
+
<!-- Body / head (wide, squat) -->
|
|
19
|
+
<rect x="34" y="66" width="188" height="134" rx="36" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
20
|
+
|
|
21
|
+
<!-- Bulging top eyes -->
|
|
22
|
+
<circle cx="88" cy="60" r="26" fill="#0a1420" stroke="url(#accentGrad)" stroke-width="2"/>
|
|
23
|
+
<circle cx="168" cy="60" r="26" fill="#0a1420" stroke="url(#accentGrad)" stroke-width="2"/>
|
|
24
|
+
<circle cx="88" cy="60" r="11" fill="url(#accentGrad)" filter="url(#glow)">
|
|
25
|
+
<animate attributeName="r" values="11;2;11" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
26
|
+
</circle>
|
|
27
|
+
<circle cx="168" cy="60" r="11" fill="url(#accentGrad)" filter="url(#glow)">
|
|
28
|
+
<animate attributeName="r" values="11;2;11" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
29
|
+
</circle>
|
|
30
|
+
|
|
31
|
+
<!-- Screen mouth panel -->
|
|
32
|
+
<rect x="60" y="110" width="136" height="72" rx="14" fill="#0a1420" stroke="#69f0ae" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
33
|
+
<path d="M76 150 Q128 176 180 150" stroke="url(#accentGrad)" stroke-width="5" fill="none" stroke-linecap="round" filter="url(#glow)"/>
|
|
34
|
+
|
|
35
|
+
<!-- Bent frog legs -->
|
|
36
|
+
<path d="M50 176 Q20 190 30 224 Q46 236 56 214" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
37
|
+
<path d="M206 176 Q236 190 226 224 Q210 236 200 214" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
38
|
+
</g>
|
|
39
|
+
</svg>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bodyGrad" x1="48" y1="48" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#1b263b"/>
|
|
5
|
+
<stop offset="1" stop-color="#0d1b2a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accentGrad" x1="60" y1="90" x2="196" y2="170" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="#ffb74d"/>
|
|
9
|
+
<stop offset="1" stop-color="#ffa726"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
12
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="pet-body-group">
|
|
17
|
+
|
|
18
|
+
<!-- Round ears -->
|
|
19
|
+
<circle cx="56" cy="46" r="24" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
20
|
+
<circle cx="200" cy="46" r="24" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
21
|
+
|
|
22
|
+
<!-- Body / head -->
|
|
23
|
+
<rect x="40" y="50" width="176" height="150" rx="30" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
24
|
+
|
|
25
|
+
<!-- Screen face -->
|
|
26
|
+
<rect x="60" y="72" width="136" height="90" rx="14" fill="#0a1420" stroke="#ffb74d" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
27
|
+
|
|
28
|
+
<!-- Eyes -->
|
|
29
|
+
<g filter="url(#glow)">
|
|
30
|
+
<rect x="86" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
31
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
32
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
33
|
+
</rect>
|
|
34
|
+
<rect x="156" y="104" width="14" height="26" rx="6" fill="url(#accentGrad)">
|
|
35
|
+
<animate attributeName="height" values="26;2;26" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
36
|
+
<animate attributeName="y" values="104;117;104" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
37
|
+
</rect>
|
|
38
|
+
</g>
|
|
39
|
+
|
|
40
|
+
<!-- Round snout patch -->
|
|
41
|
+
<ellipse cx="128" cy="148" rx="26" ry="18" fill="#0a1420" stroke="#ffb74d" stroke-opacity="0.5" stroke-width="1.5"/>
|
|
42
|
+
<ellipse cx="128" cy="142" rx="6" ry="5" fill="#ffb74d"/>
|
|
43
|
+
|
|
44
|
+
<!-- Legs / feet -->
|
|
45
|
+
<rect x="72" y="200" width="24" height="26" rx="9" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
46
|
+
<rect x="160" y="200" width="24" height="26" rx="9" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
47
|
+
</g>
|
|
48
|
+
</svg>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bodyGrad" x1="48" y1="48" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#1b263b"/>
|
|
5
|
+
<stop offset="1" stop-color="#0d1b2a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accentGrad" x1="60" y1="90" x2="196" y2="170" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="#2afadf"/>
|
|
9
|
+
<stop offset="1" stop-color="#42a5f5"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
12
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="pet-body-group">
|
|
17
|
+
|
|
18
|
+
<!-- Body (oval) -->
|
|
19
|
+
<ellipse cx="128" cy="140" rx="88" ry="100" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
20
|
+
<!-- Belly patch -->
|
|
21
|
+
<ellipse cx="128" cy="156" rx="52" ry="66" fill="#eef2f6"/>
|
|
22
|
+
|
|
23
|
+
<!-- Screen face -->
|
|
24
|
+
<rect x="76" y="86" width="104" height="62" rx="14" fill="#0a1420" stroke="#2afadf" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
25
|
+
|
|
26
|
+
<!-- Eyes -->
|
|
27
|
+
<g filter="url(#glow)">
|
|
28
|
+
<rect x="98" y="108" width="12" height="20" rx="5" fill="url(#accentGrad)">
|
|
29
|
+
<animate attributeName="height" values="20;2;20" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
30
|
+
<animate attributeName="y" values="108;117;108" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
31
|
+
</rect>
|
|
32
|
+
<rect x="146" y="108" width="12" height="20" rx="5" fill="url(#accentGrad)">
|
|
33
|
+
<animate attributeName="height" values="20;2;20" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
34
|
+
<animate attributeName="y" values="108;117;108" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
35
|
+
</rect>
|
|
36
|
+
</g>
|
|
37
|
+
|
|
38
|
+
<!-- Beak -->
|
|
39
|
+
<path d="M116 156 L128 172 L140 156 Z" fill="#ffb74d"/>
|
|
40
|
+
|
|
41
|
+
<!-- Flipper arms(填充块面而非线条,贴身收成圆润小翼) -->
|
|
42
|
+
<path d="M42 146 Q16 162 22 190 Q26 204 42 202 Q50 200 46 188 Q40 168 46 150 Z" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2"/>
|
|
43
|
+
<path d="M214 146 Q240 162 234 190 Q230 204 214 202 Q206 200 210 188 Q216 168 210 150 Z" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2"/>
|
|
44
|
+
|
|
45
|
+
<!-- Feet -->
|
|
46
|
+
<ellipse cx="104" cy="234" rx="16" ry="8" fill="#ffb74d"/>
|
|
47
|
+
<ellipse cx="152" cy="234" rx="16" ry="8" fill="#ffb74d"/>
|
|
48
|
+
</g>
|
|
49
|
+
</svg>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bodyGrad" x1="48" y1="48" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#1b263b"/>
|
|
5
|
+
<stop offset="1" stop-color="#0d1b2a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="accentGrad" x1="60" y1="90" x2="196" y2="170" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="#69f0ae"/>
|
|
9
|
+
<stop offset="1" stop-color="#00c853"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
12
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="pet-body-group">
|
|
17
|
+
|
|
18
|
+
<!-- Back spikes -->
|
|
19
|
+
<path d="M64 52 L76 24 L90 52 Z" fill="url(#accentGrad)"/>
|
|
20
|
+
<path d="M110 46 L122 16 L136 46 Z" fill="url(#accentGrad)"/>
|
|
21
|
+
<path d="M156 52 L168 24 L182 52 Z" fill="url(#accentGrad)"/>
|
|
22
|
+
|
|
23
|
+
<!-- Body / head -->
|
|
24
|
+
<rect x="40" y="50" width="176" height="150" rx="24" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="3"/>
|
|
25
|
+
|
|
26
|
+
<!-- Screen face -->
|
|
27
|
+
<rect x="60" y="76" width="136" height="86" rx="14" fill="#0a1420" stroke="#69f0ae" stroke-opacity="0.4" stroke-width="1.5"/>
|
|
28
|
+
|
|
29
|
+
<!-- Red eyes -->
|
|
30
|
+
<g filter="url(#glow)">
|
|
31
|
+
<rect x="86" y="106" width="14" height="24" rx="6" fill="#ff5252">
|
|
32
|
+
<animate attributeName="height" values="24;2;24" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
33
|
+
<animate attributeName="y" values="106;118;106" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
34
|
+
</rect>
|
|
35
|
+
<rect x="156" y="106" width="14" height="24" rx="6" fill="#ff5252">
|
|
36
|
+
<animate attributeName="height" values="24;2;24" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
37
|
+
<animate attributeName="y" values="106;118;106" keyTimes="0;0.5;1" dur="3.2s" repeatCount="indefinite"/>
|
|
38
|
+
</rect>
|
|
39
|
+
</g>
|
|
40
|
+
|
|
41
|
+
<!-- Jagged mouth -->
|
|
42
|
+
<path d="M108 148 L118 156 L128 148 L138 156 L148 148" stroke="#69f0ae" stroke-width="4" fill="none" stroke-linecap="round" filter="url(#glow)"/>
|
|
43
|
+
|
|
44
|
+
<!-- Small arms(填充块面而非线条,末端一颗圆球小手) -->
|
|
45
|
+
<ellipse cx="31" cy="142" rx="5.5" ry="15" fill="url(#accentGrad)" transform="rotate(-34 31 142)"/>
|
|
46
|
+
<circle cx="25" cy="156" r="5" fill="url(#accentGrad)"/>
|
|
47
|
+
<ellipse cx="223" cy="142" rx="5.5" ry="15" fill="url(#accentGrad)" transform="rotate(34 223 142)"/>
|
|
48
|
+
<circle cx="231" cy="156" r="5" fill="url(#accentGrad)"/>
|
|
49
|
+
|
|
50
|
+
<!-- Legs / feet -->
|
|
51
|
+
<rect x="76" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
52
|
+
<rect x="160" y="200" width="20" height="26" rx="8" fill="url(#bodyGrad)" stroke="url(#accentGrad)" stroke-width="2.5"/>
|
|
53
|
+
|
|
54
|
+
<!-- Spiky tail -->
|
|
55
|
+
<path d="M216 176 Q248 178 244 150" stroke="url(#accentGrad)" stroke-width="8" stroke-linecap="round" fill="none"/>
|
|
56
|
+
<path d="M240 150 L248 138 L252 154 Z" fill="url(#accentGrad)"/>
|
|
57
|
+
</g>
|
|
58
|
+
</svg>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<svg width="256" height="256" viewBox="0 0 256 256" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="blobGrad" x1="48" y1="60" x2="208" y2="220" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#26c6da" stop-opacity="0.9"/>
|
|
5
|
+
<stop offset="1" stop-color="#00acc1" stop-opacity="0.75"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<filter id="glow" x="-30%" y="-30%" width="160%" height="160%">
|
|
8
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
9
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
10
|
+
</filter>
|
|
11
|
+
</defs>
|
|
12
|
+
<g id="pet-body-group">
|
|
13
|
+
|
|
14
|
+
<!-- Blob body -->
|
|
15
|
+
<path d="M128 40
|
|
16
|
+
C182 40 214 78 210 128
|
|
17
|
+
C232 150 224 190 198 202
|
|
18
|
+
C210 224 176 232 158 216
|
|
19
|
+
C132 236 96 234 78 214
|
|
20
|
+
C50 224 34 196 48 176
|
|
21
|
+
C24 158 30 118 62 96
|
|
22
|
+
C64 62 96 40 128 40 Z"
|
|
23
|
+
fill="url(#blobGrad)" stroke="#4dd0e1" stroke-width="2.5"/>
|
|
24
|
+
|
|
25
|
+
<!-- Eyes -->
|
|
26
|
+
<g filter="url(#glow)">
|
|
27
|
+
<circle cx="102" cy="132" r="9" fill="#0a1420"/>
|
|
28
|
+
<circle cx="154" cy="132" r="9" fill="#0a1420"/>
|
|
29
|
+
<circle cx="105" cy="129" r="2.5" fill="#e0fbff"/>
|
|
30
|
+
<circle cx="157" cy="129" r="2.5" fill="#e0fbff"/>
|
|
31
|
+
</g>
|
|
32
|
+
|
|
33
|
+
<!-- Smile -->
|
|
34
|
+
<path d="M110 156 Q128 170 146 156" stroke="#0a1420" stroke-width="3.5" fill="none" stroke-linecap="round"/>
|
|
35
|
+
|
|
36
|
+
<!-- Drips -->
|
|
37
|
+
<path d="M84 216 Q84 232 92 232 Q100 232 96 216 Z" fill="url(#blobGrad)"/>
|
|
38
|
+
<path d="M160 220 Q160 236 168 236 Q176 236 172 220 Z" fill="url(#blobGrad)"/>
|
|
39
|
+
|
|
40
|
+
<!-- Highlight -->
|
|
41
|
+
<ellipse cx="92" cy="86" rx="18" ry="10" fill="#ffffff" fill-opacity="0.25"/>
|
|
42
|
+
</g>
|
|
43
|
+
</svg>
|