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,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>
@@ -0,0 +1,196 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ /* 16-Second Master Sequence for Idle Actions */
5
+ .action-body {
6
+ transform-origin: 7.5px 13px; /* Pivot at the base of the torso */
7
+ animation: action-body 16s infinite ease-in-out;
8
+ }
9
+
10
+ /* Continuous Subtle Breathing (Syncs exactly 5 times per 16s loop) */
11
+ .breathe-anim {
12
+ transform-origin: 7.5px 13px;
13
+ animation: breathe 3.2s infinite ease-in-out;
14
+ }
15
+
16
+ /* Shadow shrinking and shifting matching actions */
17
+ .shadow-anim {
18
+ transform-origin: 7.5px 15.5px;
19
+ animation: shadow-action 16s infinite ease-in-out;
20
+ }
21
+
22
+ /* Left Arm (Scratching and Yawn Stretching) */
23
+ .arm-l {
24
+ transform-origin: 1px 10px;
25
+ animation: arm-l-idle 16s infinite ease-in-out;
26
+ }
27
+
28
+ /* Right Arm (Yawn Stretching) */
29
+ .arm-r {
30
+ transform-origin: 14px 10px;
31
+ animation: arm-r-idle 16s infinite ease-in-out;
32
+ }
33
+
34
+ /* Eye Tracking (Looking around) */
35
+ .eyes-look {
36
+ animation: eye-track 16s infinite ease-in-out;
37
+ }
38
+
39
+ /* Occasional Blinks and shutting during Yawn */
40
+ .eyes-blink {
41
+ transform-origin: 7.5px 9px;
42
+ animation: eye-blink 16s infinite linear;
43
+ }
44
+
45
+ /* Yawn Mouth Appearance */
46
+ .yawn-mouth {
47
+ transform-origin: 7.5px 11px;
48
+ animation: yawn-mouth-anim 16s infinite ease-in-out;
49
+ opacity: 0;
50
+ }
51
+
52
+ /* Tiny tear that appears during the big yawn */
53
+ .yawn-tear {
54
+ animation: tear-fall 16s infinite ease-in-out;
55
+ opacity: 0;
56
+ }
57
+
58
+ /* --- Keyframes --- */
59
+
60
+ @keyframes breathe {
61
+ 0%, 100% { transform: scale(1, 1) translate(0, 0); }
62
+ 50% { transform: scale(1.02, 0.98) translate(0, 0.5px); }
63
+ }
64
+
65
+ @keyframes action-body {
66
+ 0%, 8%, 26%, 38%, 55%, 80%, 100% { transform: scale(1, 1) translate(0, 0); }
67
+ /* Look Right Tilt */
68
+ 12%, 22% { transform: scale(1, 1) translate(1px, 0); }
69
+ /* Look Left Tilt */
70
+ 42%, 50% { transform: scale(1, 1) translate(-1px, 0); }
71
+ /* Scratching Lean */
72
+ 30%, 36% { transform: scale(1, 1) translate(0.5px, 0); }
73
+ /* Deep Yawn Stretch */
74
+ 60% { transform: scale(0.95, 1.05) translate(0px, -1px); } /* Stretch up */
75
+ 65% { transform: scale(0.9, 1.1) translate(0px, -2px); } /* Peak stretch */
76
+ 72% { transform: scale(1.05, 0.95) translate(0px, 1px); } /* Heavy sigh / squash down */
77
+ 76% { transform: scale(1, 1) translate(0px, 0px); } /* Recover */
78
+ }
79
+
80
+ @keyframes shadow-action {
81
+ 0%, 8%, 26%, 38%, 55%, 80%, 100% { transform: scaleX(1) translate(0, 0); opacity: 0.5; }
82
+ 12%, 22% { transform: scaleX(1) translate(1px, 0); opacity: 0.5; }
83
+ 42%, 50% { transform: scaleX(1) translate(-1px, 0); opacity: 0.5; }
84
+ 30%, 36% { transform: scaleX(1) translate(0.5px, 0); opacity: 0.5; }
85
+ 60% { transform: scaleX(0.95) translate(0, 0); opacity: 0.45; }
86
+ 65% { transform: scaleX(0.9) translate(0, 0); opacity: 0.4; }
87
+ 72% { transform: scaleX(1.05) translate(0, 0); opacity: 0.55; }
88
+ 76% { transform: scaleX(1) translate(0, 0); opacity: 0.5; }
89
+ }
90
+
91
+ @keyframes eye-track {
92
+ 0%, 10%, 25%, 38%, 52%, 58%, 80%, 100% { transform: translate(0px, 0px); }
93
+ 12%, 22% { transform: translate(3px, 0px); } /* Look Right */
94
+ 42%, 50% { transform: translate(-3px, 0px); } /* Look Left */
95
+ 60%, 75% { transform: translate(0px, -1px); } /* Look slightly up during yawn */
96
+ }
97
+
98
+ @keyframes eye-blink {
99
+ 0%, 3%, 7%, 18%, 22%, 43%, 47%, 56%, 83%, 87%, 100% { transform: scaleY(1); }
100
+ 5%, 20%, 45%, 85% { transform: scaleY(0.1); } /* Quick Blinks */
101
+ /* Yawn Closed Eyes */
102
+ 60% { transform: scaleY(1); }
103
+ 62%, 72% { transform: scaleY(0.1); } /* Eyes completely shut */
104
+ 75% { transform: scaleY(1); }
105
+ }
106
+
107
+ @keyframes arm-l-idle {
108
+ 0%, 28% { transform: translate(0, 0) rotate(0deg); }
109
+
110
+ /* Occasional Scratching Sequence (Left Arm) */
111
+ 30% { transform: translate(1px, -3px) rotate(15deg); }
112
+ 31% { transform: translate(1.5px, -4px) rotate(35deg); } /* Up */
113
+ 32% { transform: translate(0.5px, -2.5px) rotate(0deg); } /* Down */
114
+ 33% { transform: translate(1.5px, -4px) rotate(35deg); }
115
+ 34% { transform: translate(0.5px, -2.5px) rotate(0deg); }
116
+ 35% { transform: translate(1.5px, -4px) rotate(35deg); }
117
+ 36% { transform: translate(0.5px, -2.5px) rotate(0deg); }
118
+
119
+ 38%, 58% { transform: translate(0, 0) rotate(0deg); }
120
+
121
+ /* Yawn Stretch */
122
+ 62% { transform: translate(-1px, -2px) rotate(45deg); }
123
+ 65% { transform: translate(-2px, -3px) rotate(80deg); } /* Full outward stretch */
124
+ 72% { transform: translate(0px, 1px) rotate(-15deg); } /* Relax down */
125
+ 76%, 100% { transform: translate(0, 0) rotate(0deg); }
126
+ }
127
+
128
+ @keyframes arm-r-idle {
129
+ 0%, 58% { transform: translate(0, 0) rotate(0deg); }
130
+ /* Yawn Stretch */
131
+ 62% { transform: translate(1px, -2px) rotate(-45deg); }
132
+ 65% { transform: translate(2px, -3px) rotate(-80deg); } /* Full outward stretch */
133
+ 72% { transform: translate(0px, 1px) rotate(15deg); } /* Relax down */
134
+ 76%, 100% { transform: translate(0, 0) rotate(0deg); }
135
+ }
136
+
137
+ @keyframes yawn-mouth-anim {
138
+ 0%, 58%, 76%, 100% { opacity: 0; transform: scale(0.1); }
139
+ 60% { opacity: 1; transform: scale(0.5, 0.2); }
140
+ 65% { opacity: 1; transform: scale(1.1, 1.4); } /* Wide Open */
141
+ 72% { opacity: 1; transform: scale(0.6, 0.4); } /* Shrinking */
142
+ 75% { opacity: 0; transform: scale(0.1); }
143
+ }
144
+
145
+ @keyframes tear-fall {
146
+ 0%, 64%, 80%, 100% { opacity: 0; transform: translateY(0); }
147
+ 66% { opacity: 1; transform: translateY(0); } /* Appears at corner of eye */
148
+ 72% { opacity: 1; transform: translateY(2.5px); } /* Slides down cheek */
149
+ 75% { opacity: 0; transform: translateY(3px); } /* Fades out */
150
+ }
151
+ </style>
152
+ </defs>
153
+
154
+ <!-- Ground Shadow -->
155
+ <rect id="ground-shadow" class="shadow-anim" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
156
+
157
+ <!-- Static Character Legs (extended up to stay connected during yawn stretch) -->
158
+ <g id="legs" fill="#DE886D">
159
+ <rect id="outer-left-leg" x="3" y="12" width="1" height="3"/>
160
+ <rect id="inner-left-leg" x="5" y="12" width="1" height="3"/>
161
+ <rect id="inner-right-leg" x="9" y="12" width="1" height="3"/>
162
+ <rect id="outer-right-leg" x="11" y="12" width="1" height="3"/>
163
+ </g>
164
+
165
+ <!-- Animated Upper Body (Combines occasional actions + continuous breathing) -->
166
+ <g class="action-body">
167
+ <g class="breathe-anim">
168
+
169
+ <!-- Torso -->
170
+ <rect id="torso" x="2" y="6" width="11" height="7" fill="#DE886D"/>
171
+
172
+ <!-- Arms -->
173
+ <g class="arm-l">
174
+ <rect id="left-arm" x="0" y="9" width="2" height="2" fill="#DE886D"/>
175
+ </g>
176
+ <g class="arm-r">
177
+ <rect id="right-arm" x="13" y="9" width="2" height="2" fill="#DE886D"/>
178
+ </g>
179
+
180
+ <!-- Yawning Mouth (Hidden usually) -->
181
+ <rect class="yawn-mouth" x="6" y="10" width="3" height="2" fill="#000000"/>
182
+
183
+ <!-- Eyes Group -->
184
+ <g class="eyes-look" fill="#000000">
185
+ <g class="eyes-blink">
186
+ <rect id="left-eye" x="4" y="8" width="1" height="2"/>
187
+ <rect id="right-eye" x="10" y="8" width="1" height="2"/>
188
+ </g>
189
+ </g>
190
+
191
+ <!-- Yawn Tear Drop (A tiny detail for the big stretch) -->
192
+ <rect class="yawn-tear" x="3.5" y="10" width="1" height="1" fill="#40C4FF"/>
193
+
194
+ </g>
195
+ </g>
196
+ </svg>