tokentracker-cli 0.5.9 → 0.5.12

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.
Files changed (51) hide show
  1. package/dashboard/dist/assets/DashboardPage-CRoqVbH0.js +12 -0
  2. package/dashboard/dist/assets/{LeaderboardPage-BaHIGvSw.js → LeaderboardPage-B3ZnlNgw.js} +1 -1
  3. package/dashboard/dist/assets/{LeaderboardProfilePage-BCvKUQ4z.js → LeaderboardProfilePage-Cq17bu0k.js} +1 -1
  4. package/dashboard/dist/assets/{ThemeToggle-BVMjkcsk.js → ThemeToggle-D2rifL57.js} +1 -1
  5. package/dashboard/dist/assets/{leaderboard-columns-BvsbuvV1.js → leaderboard-columns-DQnk56C_.js} +1 -1
  6. package/dashboard/dist/assets/{main-Cs8rK2ak.js → main-wolIKQH9.js} +3 -3
  7. package/dashboard/dist/clawd/happy.svg +161 -0
  8. package/dashboard/dist/clawd/idle/collapse.svg +101 -0
  9. package/dashboard/dist/clawd/idle/doze.svg +72 -0
  10. package/dashboard/dist/clawd/idle/follow.svg +64 -0
  11. package/dashboard/dist/clawd/idle/living.svg +196 -0
  12. package/dashboard/dist/clawd/idle/look.svg +115 -0
  13. package/dashboard/dist/clawd/idle/yawn.svg +158 -0
  14. package/dashboard/dist/clawd/mini/alert.svg +129 -0
  15. package/dashboard/dist/clawd/mini/crabwalk.svg +76 -0
  16. package/dashboard/dist/clawd/mini/enter-sleep.svg +65 -0
  17. package/dashboard/dist/clawd/mini/enter.svg +115 -0
  18. package/dashboard/dist/clawd/mini/happy.svg +124 -0
  19. package/dashboard/dist/clawd/mini/idle.svg +83 -0
  20. package/dashboard/dist/clawd/mini/peek.svg +82 -0
  21. package/dashboard/dist/clawd/mini/sleep.svg +112 -0
  22. package/dashboard/dist/clawd/react/double.svg +108 -0
  23. package/dashboard/dist/clawd/react/drag.svg +102 -0
  24. package/dashboard/dist/clawd/react/left.svg +102 -0
  25. package/dashboard/dist/clawd/react/right.svg +102 -0
  26. package/dashboard/dist/clawd/sleep/collapse-sleep.svg +247 -0
  27. package/dashboard/dist/clawd/sleep/sleeping.svg +118 -0
  28. package/dashboard/dist/clawd/sleep/wake.svg +277 -0
  29. package/dashboard/dist/clawd/static-base.svg +21 -0
  30. package/dashboard/dist/clawd/status/disconnected.svg +136 -0
  31. package/dashboard/dist/clawd/status/error.svg +94 -0
  32. package/dashboard/dist/clawd/status/notification.svg +134 -0
  33. package/dashboard/dist/clawd/working/building.svg +231 -0
  34. package/dashboard/dist/clawd/working/carrying.svg +107 -0
  35. package/dashboard/dist/clawd/working/conducting.svg +118 -0
  36. package/dashboard/dist/clawd/working/confused.svg +113 -0
  37. package/dashboard/dist/clawd/working/debugger.svg +91 -0
  38. package/dashboard/dist/clawd/working/juggling.svg +82 -0
  39. package/dashboard/dist/clawd/working/overheated.svg +75 -0
  40. package/dashboard/dist/clawd/working/pushing.svg +125 -0
  41. package/dashboard/dist/clawd/working/sweeping.svg +79 -0
  42. package/dashboard/dist/clawd/working/thinking.svg +119 -0
  43. package/dashboard/dist/clawd/working/typing.svg +153 -0
  44. package/dashboard/dist/clawd/working/ultrathink.svg +166 -0
  45. package/dashboard/dist/clawd/working/wizard.svg +98 -0
  46. package/dashboard/dist/index.html +1 -1
  47. package/dashboard/dist/llms.txt +9 -12
  48. package/dashboard/dist/share.html +1 -1
  49. package/package.json +1 -1
  50. package/src/commands/serve.js +12 -0
  51. package/dashboard/dist/assets/DashboardPage-DEZCzCqB.js +0 -12
@@ -0,0 +1,277 @@
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
+ .once {
5
+ animation-duration: 1.5s;
6
+ animation-fill-mode: forwards;
7
+ animation-iteration-count: 1;
8
+ }
9
+
10
+ .scale-top-left {
11
+ transform-box: fill-box;
12
+ transform-origin: top left;
13
+ }
14
+
15
+ .shadow {
16
+ transform-origin: 7.5px 15.5px;
17
+ animation-name: shadow-wake;
18
+ animation-timing-function: linear;
19
+ }
20
+
21
+ .body-motion {
22
+ transform-origin: 7.5px 15px;
23
+ animation-name: body-motion;
24
+ animation-timing-function: cubic-bezier(0.24, 0.8, 0.24, 1);
25
+ }
26
+
27
+ .torso-shift {
28
+ animation: torso-shift 1.5s linear forwards;
29
+ }
30
+
31
+ .torso-shape {
32
+ animation: torso-shape 1.5s linear forwards;
33
+ }
34
+
35
+ .arm-left {
36
+ animation: arm-left 1.5s linear forwards;
37
+ }
38
+
39
+ .arm-right {
40
+ animation: arm-right 1.5s linear forwards;
41
+ }
42
+
43
+ .leg-shift {
44
+ animation: leg-shift 1.5s linear forwards;
45
+ }
46
+
47
+ .leg-grow {
48
+ animation: leg-grow 1.5s linear forwards;
49
+ }
50
+
51
+ .eye-shift {
52
+ animation: eye-shift 1.5s linear forwards;
53
+ }
54
+
55
+ .eye-shape {
56
+ animation: eye-shape 1.5s linear forwards;
57
+ }
58
+
59
+ @keyframes shadow-wake {
60
+ 0% {
61
+ opacity: 0.4;
62
+ transform: scaleX(1);
63
+ }
64
+ 20% {
65
+ opacity: 0.47;
66
+ transform: scaleX(0.56);
67
+ }
68
+ 33.333% {
69
+ opacity: 0.54;
70
+ transform: scaleX(0.42);
71
+ }
72
+ 46.667% {
73
+ opacity: 0.48;
74
+ transform: scaleX(0.48);
75
+ }
76
+ 56% {
77
+ opacity: 0.52;
78
+ transform: scaleX(0.56);
79
+ }
80
+ 66.667%, 100% {
81
+ opacity: 0.5;
82
+ transform: scaleX(0.5294);
83
+ }
84
+ }
85
+
86
+ @keyframes body-motion {
87
+ 0% {
88
+ transform: translate(0, 0) scale(1, 1) rotate(0deg);
89
+ }
90
+ 6.667% {
91
+ transform: translate(0, 0.35px) scale(1.03, 0.96) rotate(0deg);
92
+ }
93
+ 20% {
94
+ transform: translate(0, -2.6px) scale(0.98, 1.04) rotate(-6deg);
95
+ }
96
+ 33.333% {
97
+ transform: translate(0, -4.1px) scale(0.9, 1.22) rotate(2deg);
98
+ }
99
+ 46.667% {
100
+ transform: translate(0, -2px) scale(0.95, 1.11) rotate(0deg);
101
+ }
102
+ 54% {
103
+ transform: translate(0, -0.55px) scale(1.02, 0.98) rotate(-4deg);
104
+ }
105
+ 60% {
106
+ transform: translate(0, -0.2px) scale(0.99, 1.02) rotate(2.5deg);
107
+ }
108
+ 66.667%, 100% {
109
+ transform: translate(0, 0) scale(1, 1) rotate(0deg);
110
+ }
111
+ }
112
+
113
+ @keyframes torso-shift {
114
+ 0% {
115
+ transform: translate(-1px, 4px);
116
+ }
117
+ 8% {
118
+ transform: translate(-0.82px, 3.4px);
119
+ }
120
+ 20%, 100% {
121
+ transform: translate(0, 0);
122
+ }
123
+ }
124
+
125
+ @keyframes torso-shape {
126
+ 0% {
127
+ transform: scale(1.1818, 0.7143);
128
+ }
129
+ 8% {
130
+ transform: scale(1.14, 0.76);
131
+ }
132
+ 20%, 100% {
133
+ transform: scale(1, 1);
134
+ }
135
+ }
136
+
137
+ @keyframes arm-left {
138
+ 0% {
139
+ transform: translate(-1px, 4px);
140
+ }
141
+ 8% {
142
+ transform: translate(-0.8px, 3.4px);
143
+ }
144
+ 20%, 100% {
145
+ transform: translate(0, 0);
146
+ }
147
+ }
148
+
149
+ @keyframes arm-right {
150
+ 0% {
151
+ transform: translate(1px, 4px);
152
+ }
153
+ 8% {
154
+ transform: translate(0.8px, 3.4px);
155
+ }
156
+ 20%, 100% {
157
+ transform: translate(0, 0);
158
+ }
159
+ }
160
+
161
+ @keyframes leg-shift {
162
+ 0% {
163
+ transform: translate(0, -2px);
164
+ }
165
+ 8% {
166
+ transform: translate(0, -1.5px);
167
+ }
168
+ 20%, 100% {
169
+ transform: translate(0, 0);
170
+ }
171
+ }
172
+
173
+ @keyframes leg-grow {
174
+ 0% {
175
+ transform: scale(1, 0.25);
176
+ }
177
+ 8% {
178
+ transform: scale(1, 0.45);
179
+ }
180
+ 20%, 100% {
181
+ transform: scale(1, 1);
182
+ }
183
+ }
184
+
185
+ @keyframes eye-shift {
186
+ 0% {
187
+ transform: translate(-0.5px, 4.5px);
188
+ }
189
+ 6.667% {
190
+ transform: translate(-0.5px, 4.15px);
191
+ }
192
+ 10% {
193
+ transform: translate(-0.2px, 1px);
194
+ }
195
+ 14% {
196
+ transform: translate(-0.06px, 0.2px);
197
+ }
198
+ 20%, 54% {
199
+ transform: translate(0, 0);
200
+ }
201
+ 58% {
202
+ transform: translate(0, 0.5px);
203
+ }
204
+ 62%, 100% {
205
+ transform: translate(0, 0);
206
+ }
207
+ }
208
+
209
+ @keyframes eye-shape {
210
+ 0% {
211
+ transform: scale(2, 0.2);
212
+ }
213
+ 6.667% {
214
+ transform: scale(2.12, 0.12);
215
+ }
216
+ 10% {
217
+ transform: scale(1.45, 1.8);
218
+ }
219
+ 14% {
220
+ transform: scale(0.92, 1.08);
221
+ }
222
+ 20%, 54% {
223
+ transform: scale(1, 1);
224
+ }
225
+ 58% {
226
+ transform: scale(1, 0.08);
227
+ }
228
+ 62% {
229
+ transform: scale(1, 1.08);
230
+ }
231
+ 66.667%, 100% {
232
+ transform: scale(1, 1);
233
+ }
234
+ }
235
+ </style>
236
+ </defs>
237
+
238
+ <rect class="once shadow" x="-1" y="15" width="17" height="1" fill="#000000" opacity="0.4"/>
239
+
240
+ <g class="once body-motion">
241
+ <g fill="#DE886D">
242
+ <g class="once leg-shift">
243
+ <rect class="once scale-top-left leg-grow" x="3" y="11" width="1" height="4"/>
244
+ </g>
245
+ <g class="once leg-shift">
246
+ <rect class="once scale-top-left leg-grow" x="5" y="11" width="1" height="4"/>
247
+ </g>
248
+ <g class="once leg-shift">
249
+ <rect class="once scale-top-left leg-grow" x="9" y="11" width="1" height="4"/>
250
+ </g>
251
+ <g class="once leg-shift">
252
+ <rect class="once scale-top-left leg-grow" x="11" y="11" width="1" height="4"/>
253
+ </g>
254
+ </g>
255
+
256
+ <g class="once torso-shift">
257
+ <rect class="once scale-top-left torso-shape" x="2" y="6" width="11" height="7" fill="#DE886D"/>
258
+ </g>
259
+
260
+ <g class="once arm-left">
261
+ <rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
262
+ </g>
263
+
264
+ <g class="once arm-right">
265
+ <rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
266
+ </g>
267
+
268
+ <g fill="#000000">
269
+ <g class="once eye-shift">
270
+ <rect class="once scale-top-left eye-shape" x="4" y="8" width="1" height="2"/>
271
+ </g>
272
+ <g class="once eye-shift">
273
+ <rect class="once scale-top-left eye-shape" x="10" y="8" width="1" height="2"/>
274
+ </g>
275
+ </g>
276
+ </g>
277
+ </svg>
@@ -0,0 +1,21 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 16" width="300" height="320">
2
+ <rect id="ground-shadow" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
3
+
4
+ <g id="master-group">
5
+ <g id="body-color-group" fill="#DE886D">
6
+ <rect id="torso" x="2" y="6" width="11" height="7"/>
7
+ <rect id="left-arm" x="0" y="9" width="2" height="2"/>
8
+ <rect id="right-arm" x="13" y="9" width="2" height="2"/>
9
+
10
+ <rect id="outer-left-leg" x="3" y="13" width="1" height="2"/>
11
+ <rect id="inner-left-leg" x="5" y="13" width="1" height="2"/>
12
+ <rect id="inner-right-leg" x="9" y="13" width="1" height="2"/>
13
+ <rect id="outer-right-leg" x="11" y="13" width="1" height="2"/>
14
+ </g>
15
+
16
+ <g id="eyes-color-group" fill="#000000">
17
+ <rect id="left-eye" x="4" y="8" width="1" height="2"/>
18
+ <rect id="right-eye" x="10" y="8" width="1" height="2"/>
19
+ </g>
20
+ </g>
21
+ </svg>
@@ -0,0 +1,136 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ .body-anim {
5
+ animation: body-move 6s infinite ease-in-out;
6
+ }
7
+ .eyes-anim {
8
+ animation: eyes-move 6s infinite ease-in-out;
9
+ }
10
+ .eyes-blink {
11
+ transform-origin: 7.5px 9px;
12
+ animation: blink 6s infinite linear;
13
+ }
14
+ .question-mark {
15
+ transform-origin: center;
16
+ animation: question-fade 6s infinite ease-in-out;
17
+ }
18
+ .exclamation-mark {
19
+ transform-origin: center;
20
+ animation: exclamation-fade 6s infinite ease-in-out;
21
+ }
22
+ .ble-icon-group {
23
+ animation: ble-float 3s infinite ease-in-out;
24
+ }
25
+ .ble-shadow {
26
+ transform-origin: 26px 15.5px;
27
+ animation: ble-shadow-pulse 3s infinite ease-in-out;
28
+ }
29
+ .glow-pulse {
30
+ transform-origin: 0px 0px;
31
+ animation: glow 3s infinite ease-in-out;
32
+ }
33
+
34
+ /* Character Upper Body Movement (Simulates Side-to-Side Head/Torso Tilt) */
35
+ @keyframes body-move {
36
+ 0%, 5% { transform: translate(0px, 0px); }
37
+ 12%, 22% { transform: translate(-1px, 0px); } /* Looks left */
38
+ 29%, 39% { transform: translate(1px, 0px); } /* Looks right */
39
+ 44% { transform: translate(-1px, 0px); } /* Quick look left */
40
+ 49% { transform: translate(1px, 0px); } /* Quick look right */
41
+ 56%, 88% { transform: translate(1px, -1px); } /* Stares up-right */
42
+ 95%, 100% { transform: translate(0px, 0px); }
43
+ }
44
+
45
+ /* Eye Movement for Parallax Directional Looking */
46
+ @keyframes eyes-move {
47
+ 0%, 5% { transform: translate(0px, 0px); }
48
+ 12%, 22% { transform: translate(-2px, 0px); }
49
+ 29%, 39% { transform: translate(2px, 0px); }
50
+ 44% { transform: translate(-2px, 0px); }
51
+ 49% { transform: translate(2px, 0px); }
52
+ 56%, 88% { transform: translate(3px, -2px); }
53
+ 95%, 100% { transform: translate(0px, 0px); }
54
+ }
55
+
56
+ /* Occasional Blinking */
57
+ @keyframes blink {
58
+ 0%, 20%, 24%, 60%, 64%, 80%, 84%, 100% { transform: scaleY(1); }
59
+ 22%, 62%, 82% { transform: scaleY(0.1); }
60
+ }
61
+
62
+ /* Confused Question Mark Animation */
63
+ @keyframes question-fade {
64
+ 0%, 5% { opacity: 0; transform: translate(-4px, 4px) scale(0.5); }
65
+ 12%, 46% { opacity: 1; transform: translate(-4px, 0px) scale(1); }
66
+ 50%, 100% { opacity: 0; transform: translate(-4px, -4px) scale(1.2); }
67
+ }
68
+
69
+ /* Exclamation Mark Animation (Spotting the BLE Icon) */
70
+ @keyframes exclamation-fade {
71
+ 0%, 50% { opacity: 0; transform: translate(6px, 0px) scale(0.5); }
72
+ 56%, 85% { opacity: 1; transform: translate(6px, -4px) scale(1); }
73
+ 90%, 100% { opacity: 0; transform: translate(6px, -8px) scale(1.2); }
74
+ }
75
+
76
+ /* Floating BLE Icon */
77
+ @keyframes ble-float {
78
+ 0%, 100% { transform: translate(26px, -3px); }
79
+ 50% { transform: translate(26px, -6px); }
80
+ }
81
+
82
+ /* Floating BLE Shadow */
83
+ @keyframes ble-shadow-pulse {
84
+ 0%, 100% { transform: scale(1); opacity: 0.3; }
85
+ 50% { transform: scale(0.8); opacity: 0.15; }
86
+ }
87
+
88
+ /* BLE Glow Pulse */
89
+ @keyframes glow {
90
+ 0%, 100% { transform: scale(1); opacity: 0.4; }
91
+ 50% { transform: scale(1.3); opacity: 0.1; }
92
+ }
93
+ </style>
94
+ </defs>
95
+
96
+ <!-- Mirrored: entire scene flipped -->
97
+ <g transform="translate(15, 0) scale(-1, 1)">
98
+ <rect id="ground-shadow" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
99
+
100
+ <g id="legs" fill="#DE886D">
101
+ <rect id="outer-left-leg" x="3" y="12" width="1" height="3"/>
102
+ <rect id="inner-left-leg" x="5" y="12" width="1" height="3"/>
103
+ <rect id="inner-right-leg" x="9" y="12" width="1" height="3"/>
104
+ <rect id="outer-right-leg" x="11" y="12" width="1" height="3"/>
105
+ </g>
106
+
107
+ <g class="body-anim">
108
+ <g fill="#DE886D">
109
+ <rect id="torso" x="2" y="6" width="11" height="7"/>
110
+ <rect id="left-arm" x="0" y="9" width="2" height="2"/>
111
+ <rect id="right-arm" x="13" y="9" width="2" height="2"/>
112
+ </g>
113
+ <g class="eyes-anim">
114
+ <g class="eyes-blink" fill="#000000">
115
+ <rect id="left-eye" x="4" y="8" width="1" height="2"/>
116
+ <rect id="right-eye" x="10" y="8" width="1" height="2"/>
117
+ </g>
118
+ </g>
119
+ </g>
120
+
121
+ <g class="question-mark" fill="#FFFFFF" opacity="0">
122
+ <rect x="1" y="0" width="2" height="1"/>
123
+ <rect x="3" y="1" width="1" height="1"/>
124
+ <rect x="0" y="1" width="1" height="2"/>
125
+ <rect x="1" y="3" width="1" height="1"/>
126
+ <rect x="2" y="4" width="1" height="1"/>
127
+ <rect x="2" y="6" width="1" height="1"/>
128
+ </g>
129
+
130
+ <g class="exclamation-mark" fill="#0082FC" opacity="0">
131
+ <rect x="1" y="0" width="1" height="4"/>
132
+ <rect x="1" y="5" width="1" height="1"/>
133
+ </g>
134
+ </g>
135
+
136
+ </svg>
@@ -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,134 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ /* Main body jump and squash/stretch sequence */
5
+ .body-anim {
6
+ transform-origin: 7.5px 15px; /* Pivot at the base of the feet */
7
+ animation: attention-jump 4s infinite ease-in-out;
8
+ }
9
+
10
+ /* Shadow pulsing with jumps */
11
+ .shadow-anim {
12
+ transform-origin: 7.5px 15.5px;
13
+ animation: shadow-pulse 4s infinite ease-in-out;
14
+ }
15
+
16
+ /* Eye movement (looking right, then front, blinking) */
17
+ .eyes-look {
18
+ transform-origin: 7.5px 9px;
19
+ animation: eye-track 4s infinite ease-in-out;
20
+ }
21
+
22
+ /* Arm flapping/waving */
23
+ .arm-l {
24
+ transform-origin: 1px 10px; /* Left shoulder */
25
+ animation: arm-wave-l 4s infinite ease-in-out;
26
+ }
27
+ .arm-r {
28
+ transform-origin: 14px 10px; /* Right shoulder */
29
+ animation: arm-wave-r 4s infinite ease-in-out;
30
+ }
31
+
32
+ /* Notification startle pop */
33
+ .alert-pop {
34
+ transform-origin: 15px 0px;
35
+ animation: alert-flash 4s infinite ease-in-out;
36
+ opacity: 0;
37
+ }
38
+
39
+ /* --- Keyframes --- */
40
+
41
+ /* 4 Second Loop Sequence */
42
+ @keyframes attention-jump {
43
+ 0%, 12% { transform: translate(0px, 0px) scale(1, 1); }
44
+ /* Startle (Look right, recoil slightly) */
45
+ 14%, 22% { transform: translate(-1.5px, 0px) scale(1, 1); }
46
+ /* Turn front, squash down to prepare jump */
47
+ 26% { transform: translate(0px, 2px) scale(1.1, 0.9); }
48
+ /* Rapid Jumps to get attention */
49
+ 30% { transform: translate(0px, -10px) scale(0.95, 1.05); } /* Jump 1 */
50
+ 34% { transform: translate(0px, 2px) scale(1.1, 0.9); } /* Land 1 */
51
+ 38% { transform: translate(0px, -10px) scale(0.95, 1.05); } /* Jump 2 */
52
+ 42% { transform: translate(0px, 2px) scale(1.1, 0.9); } /* Land 2 */
53
+ 46% { transform: translate(0px, -10px) scale(0.95, 1.05); } /* Jump 3 */
54
+ 50% { transform: translate(0px, 2px) scale(1.1, 0.9); } /* Land 3 */
55
+ 54% { transform: translate(0px, -10px) scale(0.95, 1.05); } /* Jump 4 */
56
+ 58% { transform: translate(0px, 2px) scale(1.1, 0.9); } /* Land 4 */
57
+ 62% { transform: translate(0px, -10px) scale(0.95, 1.05); } /* Jump 5 */
58
+ 66% { transform: translate(0px, 2px) scale(1.1, 0.9); } /* Land 5 */
59
+ 70% { transform: translate(0px, -10px) scale(0.95, 1.05); } /* Jump 6 */
60
+ 74% { transform: translate(0px, 2px) scale(1.1, 0.9); } /* Land 6 */
61
+ /* Recover */
62
+ 80%, 100% { transform: translate(0px, 0px) scale(1, 1); }
63
+ }
64
+
65
+ @keyframes shadow-pulse {
66
+ 0%, 12%, 80%, 100% { transform: scale(1); opacity: 0.5; }
67
+ 14%, 22% { transform: translate(-1.5px, 0px) scale(1); opacity: 0.5; }
68
+ 26%, 34%, 42%, 50%, 58%, 66%, 74% { transform: scale(1.15); opacity: 0.6; } /* Landing wide */
69
+ 30%, 38%, 46%, 54%, 62%, 70% { transform: scale(0.6); opacity: 0.15; } /* Jumping high */
70
+ }
71
+
72
+ @keyframes eye-track {
73
+ 0%, 12% { transform: translate(0px, 0px); }
74
+ 14%, 22% { transform: translate(4px, 0px); } /* Sharp look right */
75
+ 26%, 100% { transform: translate(0px, 0px); } /* Look at camera */
76
+ }
77
+
78
+ @keyframes arm-wave-l {
79
+ 0%, 12% { transform: rotate(0deg); }
80
+ 14%, 22% { transform: rotate(-15deg); } /* Slight recoil tuck */
81
+ 26% { transform: rotate(30deg); } /* Wind up */
82
+ 30%, 38%, 46%, 54%, 62%, 70% { transform: rotate(155deg); } /* Arms up and out! */
83
+ 34%, 42%, 50%, 58%, 66%, 74% { transform: rotate(115deg); } /* Flap inwards */
84
+ 80%, 100% { transform: rotate(0deg); }
85
+ }
86
+
87
+ @keyframes arm-wave-r {
88
+ 0%, 12% { transform: rotate(0deg); }
89
+ 14%, 22% { transform: rotate(-25deg); } /* Slight recoil tuck */
90
+ 26% { transform: rotate(-30deg); } /* Wind up */
91
+ 30%, 38%, 46%, 54%, 62%, 70% { transform: rotate(-155deg); } /* Arms up and out! */
92
+ 34%, 42%, 50%, 58%, 66%, 74% { transform: rotate(-115deg); } /* Flap inwards */
93
+ 80%, 100% { transform: rotate(0deg); }
94
+ }
95
+
96
+ @keyframes alert-flash {
97
+ 0%, 12% { opacity: 0; transform: translate(15px, 0px) scale(0.5); }
98
+ 14% { opacity: 1; transform: translate(15px, -4px) scale(1.2); }
99
+ 22% { opacity: 1; transform: translate(15px, -4px) scale(1); }
100
+ 26%, 100% { opacity: 0; transform: translate(15px, -8px) scale(0.8); }
101
+ }
102
+ </style>
103
+ </defs>
104
+
105
+ <!-- Mirrored: entire scene flipped -->
106
+ <g transform="translate(15, 0) scale(-1, 1)">
107
+ <rect id="ground-shadow" class="shadow-anim" x="3" y="15" width="9" height="1" fill="#000000"/>
108
+
109
+ <g class="alert-pop" fill="#FF3D00">
110
+ <rect x="0" y="0" width="2" height="4" />
111
+ <rect x="0" y="5" width="2" height="2" />
112
+ </g>
113
+
114
+ <g class="body-anim">
115
+ <g id="body-color-group" fill="#DE886D">
116
+ <rect id="outer-left-leg" x="3" y="13" width="1" height="2"/>
117
+ <rect id="inner-left-leg" x="5" y="13" width="1" height="2"/>
118
+ <rect id="inner-right-leg" x="9" y="13" width="1" height="2"/>
119
+ <rect id="outer-right-leg" x="11" y="13" width="1" height="2"/>
120
+ <rect id="torso" x="2" y="6" width="11" height="7"/>
121
+ <g class="arm-l">
122
+ <rect id="left-arm" x="0" y="9" width="2" height="2"/>
123
+ </g>
124
+ <g class="arm-r">
125
+ <rect id="right-arm" x="13" y="9" width="2" height="2"/>
126
+ </g>
127
+ </g>
128
+ <g class="eyes-look" fill="#000000">
129
+ <rect id="left-eye" x="4" y="8" width="1" height="2"/>
130
+ <rect id="right-eye" x="10" y="8" width="1" height="2"/>
131
+ </g>
132
+ </g>
133
+ </g>
134
+ </svg>