clawd-desktop 1.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/LICENSE +21 -0
- package/README.md +58 -0
- package/assets/LICENSE-clawd +22 -0
- package/assets/gif/clawd-building.gif +0 -0
- package/assets/gif/clawd-carrying.gif +0 -0
- package/assets/gif/clawd-conducting.gif +0 -0
- package/assets/gif/clawd-debugger.gif +0 -0
- package/assets/gif/clawd-error.gif +0 -0
- package/assets/gif/clawd-happy.gif +0 -0
- package/assets/gif/clawd-idle-reading.gif +0 -0
- package/assets/gif/clawd-idle.gif +0 -0
- package/assets/gif/clawd-juggling.gif +0 -0
- package/assets/gif/clawd-notification.gif +0 -0
- package/assets/gif/clawd-react-annoyed.gif +0 -0
- package/assets/gif/clawd-react-double-jump.gif +0 -0
- package/assets/gif/clawd-sleeping.gif +0 -0
- package/assets/gif/clawd-sweeping.gif +0 -0
- package/assets/gif/clawd-thinking.gif +0 -0
- package/assets/gif/clawd-typing.gif +0 -0
- package/assets/svg/clawd-about-hero.svg +202 -0
- package/assets/svg/clawd-collapse-sleep.svg +247 -0
- package/assets/svg/clawd-error.svg +94 -0
- package/assets/svg/clawd-happy.svg +161 -0
- package/assets/svg/clawd-idle-collapse.svg +101 -0
- package/assets/svg/clawd-idle-doze.svg +72 -0
- package/assets/svg/clawd-idle-follow.svg +64 -0
- package/assets/svg/clawd-idle-living.svg +196 -0
- package/assets/svg/clawd-idle-look.svg +115 -0
- package/assets/svg/clawd-idle-reading.svg +201 -0
- package/assets/svg/clawd-idle-yawn.svg +158 -0
- package/assets/svg/clawd-mini-alert.svg +129 -0
- package/assets/svg/clawd-mini-crabwalk.svg +76 -0
- package/assets/svg/clawd-mini-enter-sleep.svg +65 -0
- package/assets/svg/clawd-mini-enter.svg +115 -0
- package/assets/svg/clawd-mini-happy.svg +124 -0
- package/assets/svg/clawd-mini-idle.svg +83 -0
- package/assets/svg/clawd-mini-peek.svg +82 -0
- package/assets/svg/clawd-mini-sleep.svg +112 -0
- package/assets/svg/clawd-mini-typing.svg +153 -0
- package/assets/svg/clawd-notification.svg +149 -0
- package/assets/svg/clawd-react-annoyed.svg +167 -0
- package/assets/svg/clawd-react-double-jump.svg +229 -0
- package/assets/svg/clawd-react-double.svg +108 -0
- package/assets/svg/clawd-react-drag.svg +102 -0
- package/assets/svg/clawd-react-left.svg +102 -0
- package/assets/svg/clawd-react-right.svg +102 -0
- package/assets/svg/clawd-sleeping.svg +118 -0
- package/assets/svg/clawd-static-base.svg +21 -0
- package/assets/svg/clawd-wake.svg +277 -0
- package/assets/svg/clawd-working-building.svg +329 -0
- package/assets/svg/clawd-working-carrying.svg +178 -0
- package/assets/svg/clawd-working-conducting.svg +220 -0
- package/assets/svg/clawd-working-debugger.svg +245 -0
- package/assets/svg/clawd-working-juggling.svg +183 -0
- package/assets/svg/clawd-working-sweeping.svg +248 -0
- package/assets/svg/clawd-working-thinking.svg +196 -0
- package/assets/svg/clawd-working-typing.svg +273 -0
- package/assets/svg/clawd-working-ultrathink.svg +166 -0
- package/assets/svg/clawd-working-wizard.svg +98 -0
- package/assets/tray-icon.ico +0 -0
- package/bin/claude-pet.js +6 -0
- package/main.js +86 -0
- package/package.json +38 -0
- package/preload.js +6 -0
- package/renderer/avatar.js +55 -0
- package/renderer/index.html +14 -0
- package/renderer/motion.js +24 -0
- package/renderer/style.css +104 -0
|
@@ -0,0 +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>
|
|
@@ -0,0 +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>
|
|
161
|
+
</svg>
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
/* 0.8s Collapse — One-shot transition from yawn-end to sploot */
|
|
5
|
+
.body-collapse {
|
|
6
|
+
transform-origin: 7.5px 13px;
|
|
7
|
+
animation: body-collapse 1s ease-in -0.2s forwards;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.shadow-collapse {
|
|
11
|
+
transform-origin: 7.5px 15.5px;
|
|
12
|
+
animation: shadow-collapse 1s ease-in -0.2s forwards;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.legs-collapse {
|
|
16
|
+
transform-origin: 7.5px 12px;
|
|
17
|
+
animation: legs-collapse 1s ease-in -0.2s forwards;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.arm-l-collapse {
|
|
21
|
+
transform-origin: 1px 10px;
|
|
22
|
+
animation: arm-l-collapse 1s ease-in -0.2s forwards;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.arm-r-collapse {
|
|
26
|
+
transform-origin: 14px 10px;
|
|
27
|
+
animation: arm-r-collapse 1s ease-in -0.2s forwards;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Eyes stay shut the entire time */
|
|
31
|
+
.eyes-shut {
|
|
32
|
+
transform-origin: 7.5px 9px;
|
|
33
|
+
transform: scaleY(0.1);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Body sinks and widens gently — closer to sleeping proportions */
|
|
37
|
+
@keyframes body-collapse {
|
|
38
|
+
0% { transform: scale(1.05, 0.95) translate(0, 1px); }
|
|
39
|
+
40% { transform: scale(1.08, 0.85) translate(0, 1.5px); }
|
|
40
|
+
70% { transform: scale(1.12, 0.75) translate(0, 2px); }
|
|
41
|
+
100% { transform: scale(1.15, 0.7) translate(0, 3px); }
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* Shadow widens to match sleeping shadow */
|
|
45
|
+
@keyframes shadow-collapse {
|
|
46
|
+
0% { transform: scaleX(1.05); opacity: 0.55; }
|
|
47
|
+
100% { transform: scaleX(1.3); opacity: 0.45; }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Legs hold still at first, then shrink into short stubs */
|
|
51
|
+
@keyframes legs-collapse {
|
|
52
|
+
0%, 40% { transform: translate(0, 0) scaleY(1); }
|
|
53
|
+
70% { transform: translate(0, -1px) scaleY(0.6); }
|
|
54
|
+
100% { transform: translate(0, -2px) scaleY(0.33); }
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Arms slide straight down, hugging body sides */
|
|
58
|
+
@keyframes arm-l-collapse {
|
|
59
|
+
0% { transform: translate(0, 1px) rotate(-15deg); }
|
|
60
|
+
50% { transform: translate(0, 2px) rotate(-5deg); }
|
|
61
|
+
100% { transform: translate(0, 3px) rotate(0deg); }
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@keyframes arm-r-collapse {
|
|
65
|
+
0% { transform: translate(0, 1px) rotate(15deg); }
|
|
66
|
+
50% { transform: translate(0, 2px) rotate(5deg); }
|
|
67
|
+
100% { transform: translate(0, 3px) rotate(0deg); }
|
|
68
|
+
}
|
|
69
|
+
</style>
|
|
70
|
+
</defs>
|
|
71
|
+
|
|
72
|
+
<!-- Ground Shadow -->
|
|
73
|
+
<rect class="shadow-collapse" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.55"/>
|
|
74
|
+
|
|
75
|
+
<!-- Legs (shrink upward into short stubs) -->
|
|
76
|
+
<g class="legs-collapse" fill="#DE886D">
|
|
77
|
+
<rect x="3" y="12" width="1" height="3"/>
|
|
78
|
+
<rect x="5" y="12" width="1" height="3"/>
|
|
79
|
+
<rect x="9" y="12" width="1" height="3"/>
|
|
80
|
+
<rect x="11" y="12" width="1" height="3"/>
|
|
81
|
+
</g>
|
|
82
|
+
|
|
83
|
+
<!-- Body (collapses/melts down) -->
|
|
84
|
+
<g class="body-collapse">
|
|
85
|
+
<!-- Torso -->
|
|
86
|
+
<rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
|
|
87
|
+
<!-- Left Arm -->
|
|
88
|
+
<g class="arm-l-collapse">
|
|
89
|
+
<rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
|
|
90
|
+
</g>
|
|
91
|
+
<!-- Right Arm -->
|
|
92
|
+
<g class="arm-r-collapse">
|
|
93
|
+
<rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
|
|
94
|
+
</g>
|
|
95
|
+
<!-- Eyes stay shut -->
|
|
96
|
+
<g class="eyes-shut" fill="#000000">
|
|
97
|
+
<rect x="4" y="8" width="1" height="2"/>
|
|
98
|
+
<rect x="10" y="8" width="1" height="2"/>
|
|
99
|
+
</g>
|
|
100
|
+
</g>
|
|
101
|
+
</svg>
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
/* Dozing — looping gentle breathing in yawn-end squashed pose, eyes shut */
|
|
5
|
+
.doze-body {
|
|
6
|
+
transform-origin: 7.5px 13px;
|
|
7
|
+
animation: doze-breathe 4s infinite ease-in-out;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.doze-shadow {
|
|
11
|
+
transform-origin: 7.5px 15.5px;
|
|
12
|
+
animation: doze-shadow 4s infinite ease-in-out;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.eyes-shut {
|
|
16
|
+
transform-origin: 7.5px 9px;
|
|
17
|
+
transform: scaleY(0.1);
|
|
18
|
+
transition: transform 0.3s ease-out;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.arm-l-doze {
|
|
22
|
+
transform-origin: 1px 10px;
|
|
23
|
+
transform: translate(0px, 1px) rotate(-15deg);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.arm-r-doze {
|
|
27
|
+
transform-origin: 14px 10px;
|
|
28
|
+
transform: translate(0px, 1px) rotate(15deg);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@keyframes doze-breathe {
|
|
32
|
+
0%, 100% { transform: scale(1.05, 0.95) translate(0, 1px); }
|
|
33
|
+
50% { transform: scale(1.08, 0.92) translate(0, 1.8px); }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@keyframes doze-shadow {
|
|
37
|
+
0%, 100% { transform: scaleX(1.05); opacity: 0.55; }
|
|
38
|
+
50% { transform: scaleX(1.08); opacity: 0.5; }
|
|
39
|
+
}
|
|
40
|
+
</style>
|
|
41
|
+
</defs>
|
|
42
|
+
|
|
43
|
+
<!-- Ground Shadow -->
|
|
44
|
+
<rect class="doze-shadow" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.55"/>
|
|
45
|
+
|
|
46
|
+
<!-- Static Legs -->
|
|
47
|
+
<g id="legs" fill="#DE886D">
|
|
48
|
+
<rect x="3" y="12" width="1" height="3"/>
|
|
49
|
+
<rect x="5" y="12" width="1" height="3"/>
|
|
50
|
+
<rect x="9" y="12" width="1" height="3"/>
|
|
51
|
+
<rect x="11" y="12" width="1" height="3"/>
|
|
52
|
+
</g>
|
|
53
|
+
|
|
54
|
+
<!-- Dozing Body (squashed yawn-end pose + gentle breathing) -->
|
|
55
|
+
<g class="doze-body">
|
|
56
|
+
<!-- Torso -->
|
|
57
|
+
<rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
|
|
58
|
+
<!-- Left Arm (relaxed down) -->
|
|
59
|
+
<g class="arm-l-doze">
|
|
60
|
+
<rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
|
|
61
|
+
</g>
|
|
62
|
+
<!-- Right Arm (relaxed down) -->
|
|
63
|
+
<g class="arm-r-doze">
|
|
64
|
+
<rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
|
|
65
|
+
</g>
|
|
66
|
+
<!-- Eyes shut (JS can open via style.transform override) -->
|
|
67
|
+
<g id="eyes-doze" class="eyes-shut" fill="#000000">
|
|
68
|
+
<rect x="4" y="8" width="1" height="2"/>
|
|
69
|
+
<rect x="10" y="8" width="1" height="2"/>
|
|
70
|
+
</g>
|
|
71
|
+
</g>
|
|
72
|
+
</svg>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.breathe-anim {
|
|
5
|
+
transform-origin: 7.5px 13px;
|
|
6
|
+
animation: breathe 3.2s infinite ease-in-out;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.eyes-blink {
|
|
10
|
+
transform-origin: 7.5px 9px;
|
|
11
|
+
animation: eye-blink 4s infinite ease-in-out;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
#eyes-js, #body-js, #shadow-js {
|
|
15
|
+
transition: transform 0.2s ease-out;
|
|
16
|
+
}
|
|
17
|
+
#shadow-js {
|
|
18
|
+
transform-origin: 7.5px 15px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@keyframes breathe {
|
|
22
|
+
0%, 100% { transform: scale(1, 1) translate(0, 0); }
|
|
23
|
+
50% { transform: scale(1.02, 0.98) translate(0, 0.5px); }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@keyframes eye-blink {
|
|
27
|
+
0%, 10%, 100% { transform: scaleY(1); }
|
|
28
|
+
5% { transform: scaleY(0.1); }
|
|
29
|
+
}
|
|
30
|
+
</style>
|
|
31
|
+
</defs>
|
|
32
|
+
|
|
33
|
+
<!-- Ground Shadow (JS-controlled horizontal shift) -->
|
|
34
|
+
<g id="shadow-js">
|
|
35
|
+
<rect x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
|
|
36
|
+
</g>
|
|
37
|
+
|
|
38
|
+
<!-- Static Legs (slightly taller for upward body shift) -->
|
|
39
|
+
<g id="legs" fill="#DE886D">
|
|
40
|
+
<rect x="3" y="11" width="1" height="4"/>
|
|
41
|
+
<rect x="5" y="11" width="1" height="4"/>
|
|
42
|
+
<rect x="9" y="11" width="1" height="4"/>
|
|
43
|
+
<rect x="11" y="11" width="1" height="4"/>
|
|
44
|
+
</g>
|
|
45
|
+
|
|
46
|
+
<!-- Upper Body (JS body-shift + CSS breathe) -->
|
|
47
|
+
<g id="body-js">
|
|
48
|
+
<g class="breathe-anim">
|
|
49
|
+
<!-- Torso -->
|
|
50
|
+
<rect id="torso" x="2" y="6" width="11" height="7" fill="#DE886D"/>
|
|
51
|
+
<!-- Left Arm -->
|
|
52
|
+
<rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
|
|
53
|
+
<!-- Right Arm -->
|
|
54
|
+
<rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
|
|
55
|
+
<!-- Eyes: JS translate wrapper + CSS blink -->
|
|
56
|
+
<g id="eyes-js" fill="#000000">
|
|
57
|
+
<g class="eyes-blink">
|
|
58
|
+
<rect x="4" y="8" width="1" height="2"/>
|
|
59
|
+
<rect x="10" y="8" width="1" height="2"/>
|
|
60
|
+
</g>
|
|
61
|
+
</g>
|
|
62
|
+
</g>
|
|
63
|
+
</g>
|
|
64
|
+
</svg>
|