@ipv9/tokentracker-cli 0.39.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.
Files changed (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +464 -0
  3. package/README.ko.md +464 -0
  4. package/README.md +476 -0
  5. package/README.zh-CN.md +469 -0
  6. package/bin/tracker.js +52 -0
  7. package/dashboard/dist/app-icon.png +0 -0
  8. package/dashboard/dist/apple-touch-icon.png +0 -0
  9. package/dashboard/dist/assets/ActivityHeatmap-BxBGHY1z.js +42 -0
  10. package/dashboard/dist/assets/Card-GROxUc_6.js +1 -0
  11. package/dashboard/dist/assets/DashboardPage-BZ5VFoBk.js +19 -0
  12. package/dashboard/dist/assets/DevicePage-CQts7ivB.js +1 -0
  13. package/dashboard/dist/assets/DialogTitle-DqFsk26U.js +1 -0
  14. package/dashboard/dist/assets/FadeIn-HBBXW_3q.js +1 -0
  15. package/dashboard/dist/assets/HeaderGithubStar-COD2HfaF.js +1 -0
  16. package/dashboard/dist/assets/IpCheckPage-Cn0l8-BQ.js +15 -0
  17. package/dashboard/dist/assets/LandingPage-CmV1BMU4.js +4356 -0
  18. package/dashboard/dist/assets/LeaderboardAvatar-CiIpWZwb.js +1 -0
  19. package/dashboard/dist/assets/LeaderboardPage-BU0mlR3g.js +6 -0
  20. package/dashboard/dist/assets/LeaderboardProfileModal-C49_3Xm9.js +72 -0
  21. package/dashboard/dist/assets/LeaderboardProfilePage-Bh1n0BAM.js +1 -0
  22. package/dashboard/dist/assets/LimitsPage-fZAmwLWT.js +2 -0
  23. package/dashboard/dist/assets/LocalOnlyNotice-D3rQdA-P.js +1 -0
  24. package/dashboard/dist/assets/LoginPage-enO4XP-c.js +1 -0
  25. package/dashboard/dist/assets/PopoverPopup-pitJEpN1.js +1 -0
  26. package/dashboard/dist/assets/Select-tT9x4ntD.js +1 -0
  27. package/dashboard/dist/assets/SelectItemText-C7F7eIm0.js +1 -0
  28. package/dashboard/dist/assets/SettingsPage-pDasZNU2.js +1 -0
  29. package/dashboard/dist/assets/SkillsPage-DEu7FY-2.js +1 -0
  30. package/dashboard/dist/assets/WidgetsPage-DGcO7rbp.js +1 -0
  31. package/dashboard/dist/assets/WrappedPage-D_1ID213.js +1 -0
  32. package/dashboard/dist/assets/agent-logos-DXQVg1xy.js +1 -0
  33. package/dashboard/dist/assets/arrow-up-right-DNLo92Ba.js +1 -0
  34. package/dashboard/dist/assets/download-DbBBBpJF.js +1 -0
  35. package/dashboard/dist/assets/geist-mono-cyrillic-400-normal-BPBWmzPh.woff +0 -0
  36. package/dashboard/dist/assets/geist-mono-cyrillic-400-normal-Ce5q_31Z.woff2 +0 -0
  37. package/dashboard/dist/assets/geist-mono-cyrillic-500-normal-CJBLNVQT.woff2 +0 -0
  38. package/dashboard/dist/assets/geist-mono-cyrillic-500-normal-mNhfPmgl.woff +0 -0
  39. package/dashboard/dist/assets/geist-mono-cyrillic-700-normal-DH5Q319x.woff +0 -0
  40. package/dashboard/dist/assets/geist-mono-cyrillic-700-normal-VCNRadI3.woff2 +0 -0
  41. package/dashboard/dist/assets/geist-mono-cyrillic-900-normal-BKC3PZkM.woff +0 -0
  42. package/dashboard/dist/assets/geist-mono-cyrillic-900-normal-DdrQ8KBw.woff2 +0 -0
  43. package/dashboard/dist/assets/geist-mono-latin-400-normal-CoULgQGM.woff +0 -0
  44. package/dashboard/dist/assets/geist-mono-latin-400-normal-LC9RFr9I.woff2 +0 -0
  45. package/dashboard/dist/assets/geist-mono-latin-500-normal-D3o2eNa9.woff2 +0 -0
  46. package/dashboard/dist/assets/geist-mono-latin-500-normal-DOxI7kZ4.woff +0 -0
  47. package/dashboard/dist/assets/geist-mono-latin-700-normal-D6izGJRP.woff2 +0 -0
  48. package/dashboard/dist/assets/geist-mono-latin-700-normal-QGw08Lff.woff +0 -0
  49. package/dashboard/dist/assets/geist-mono-latin-900-normal-CmoKXrdK.woff +0 -0
  50. package/dashboard/dist/assets/geist-mono-latin-900-normal-Cu5MFKsu.woff2 +0 -0
  51. package/dashboard/dist/assets/geist-mono-latin-ext-400-normal-Cgks_Qgx.woff2 +0 -0
  52. package/dashboard/dist/assets/geist-mono-latin-ext-400-normal-CxNRRMGd.woff +0 -0
  53. package/dashboard/dist/assets/geist-mono-latin-ext-500-normal-CQcGuCNt.woff2 +0 -0
  54. package/dashboard/dist/assets/geist-mono-latin-ext-500-normal-diTenJ8L.woff +0 -0
  55. package/dashboard/dist/assets/geist-mono-latin-ext-700-normal-BX9f1BHp.woff +0 -0
  56. package/dashboard/dist/assets/geist-mono-latin-ext-700-normal-YOllDaLV.woff2 +0 -0
  57. package/dashboard/dist/assets/geist-mono-latin-ext-900-normal-Br6WNUGb.woff +0 -0
  58. package/dashboard/dist/assets/geist-mono-latin-ext-900-normal-CrmBTzU2.woff2 +0 -0
  59. package/dashboard/dist/assets/index-BeoRn2gJ.js +2 -0
  60. package/dashboard/dist/assets/info-Bh5qTz6k.js +1 -0
  61. package/dashboard/dist/assets/main-BIY3Nj6I.js +969 -0
  62. package/dashboard/dist/assets/main-G_F9Iu_x.css +1 -0
  63. package/dashboard/dist/assets/use-limits-display-prefs-B4iJ-bBc.js +1 -0
  64. package/dashboard/dist/assets/use-native-settings-DHjPFDv8.js +1 -0
  65. package/dashboard/dist/assets/use-usage-limits-odqe9OY7.js +1 -0
  66. package/dashboard/dist/assets/useCurrency-BsSZiZMP.js +1 -0
  67. package/dashboard/dist/assets/useOpenInteractionType-BQhgq4rv.js +12 -0
  68. package/dashboard/dist/brand-logos/antigravity.svg +1 -0
  69. package/dashboard/dist/brand-logos/claude-code.svg +1 -0
  70. package/dashboard/dist/brand-logos/codebuddy.svg +1 -0
  71. package/dashboard/dist/brand-logos/codex.svg +15 -0
  72. package/dashboard/dist/brand-logos/copilot.svg +1 -0
  73. package/dashboard/dist/brand-logos/cursor.svg +1 -0
  74. package/dashboard/dist/brand-logos/gemini.svg +1 -0
  75. package/dashboard/dist/brand-logos/grok.svg +1 -0
  76. package/dashboard/dist/brand-logos/hermes.svg +1 -0
  77. package/dashboard/dist/brand-logos/kilo.svg +4 -0
  78. package/dashboard/dist/brand-logos/kimi.svg +1 -0
  79. package/dashboard/dist/brand-logos/kiro.svg +1 -0
  80. package/dashboard/dist/brand-logos/openclaw.svg +22 -0
  81. package/dashboard/dist/brand-logos/opencode.svg +3 -0
  82. package/dashboard/dist/clawd/happy.svg +161 -0
  83. package/dashboard/dist/clawd/idle/collapse.svg +101 -0
  84. package/dashboard/dist/clawd/idle/doze.svg +72 -0
  85. package/dashboard/dist/clawd/idle/follow.svg +64 -0
  86. package/dashboard/dist/clawd/idle/living.svg +196 -0
  87. package/dashboard/dist/clawd/idle/look.svg +115 -0
  88. package/dashboard/dist/clawd/idle/yawn.svg +158 -0
  89. package/dashboard/dist/clawd/mini/alert.svg +129 -0
  90. package/dashboard/dist/clawd/mini/crabwalk.svg +76 -0
  91. package/dashboard/dist/clawd/mini/enter-sleep.svg +65 -0
  92. package/dashboard/dist/clawd/mini/enter.svg +115 -0
  93. package/dashboard/dist/clawd/mini/happy.svg +124 -0
  94. package/dashboard/dist/clawd/mini/idle-tight.svg +15 -0
  95. package/dashboard/dist/clawd/mini/idle.svg +83 -0
  96. package/dashboard/dist/clawd/mini/peek.svg +82 -0
  97. package/dashboard/dist/clawd/mini/sleep.svg +112 -0
  98. package/dashboard/dist/clawd/react/double.svg +108 -0
  99. package/dashboard/dist/clawd/react/drag.svg +102 -0
  100. package/dashboard/dist/clawd/react/left.svg +102 -0
  101. package/dashboard/dist/clawd/react/right.svg +102 -0
  102. package/dashboard/dist/clawd/sleep/collapse-sleep.svg +247 -0
  103. package/dashboard/dist/clawd/sleep/sleeping.svg +118 -0
  104. package/dashboard/dist/clawd/sleep/wake.svg +277 -0
  105. package/dashboard/dist/clawd/static-base.svg +21 -0
  106. package/dashboard/dist/clawd/status/disconnected.svg +136 -0
  107. package/dashboard/dist/clawd/status/error.svg +94 -0
  108. package/dashboard/dist/clawd/status/notification.svg +134 -0
  109. package/dashboard/dist/clawd/working/building.svg +231 -0
  110. package/dashboard/dist/clawd/working/carrying.svg +107 -0
  111. package/dashboard/dist/clawd/working/conducting.svg +118 -0
  112. package/dashboard/dist/clawd/working/confused.svg +113 -0
  113. package/dashboard/dist/clawd/working/debugger.svg +91 -0
  114. package/dashboard/dist/clawd/working/juggling.svg +82 -0
  115. package/dashboard/dist/clawd/working/overheated.svg +75 -0
  116. package/dashboard/dist/clawd/working/pushing.svg +125 -0
  117. package/dashboard/dist/clawd/working/sweeping.svg +79 -0
  118. package/dashboard/dist/clawd/working/thinking.svg +119 -0
  119. package/dashboard/dist/clawd/working/typing.svg +153 -0
  120. package/dashboard/dist/clawd/working/ultrathink.svg +166 -0
  121. package/dashboard/dist/clawd/working/wizard.svg +98 -0
  122. package/dashboard/dist/dashboard-dark.png +0 -0
  123. package/dashboard/dist/favicon-16.png +0 -0
  124. package/dashboard/dist/favicon-32.png +0 -0
  125. package/dashboard/dist/favicon.ico +0 -0
  126. package/dashboard/dist/feed.xml +34 -0
  127. package/dashboard/dist/icon-192.png +0 -0
  128. package/dashboard/dist/icon-512.png +0 -0
  129. package/dashboard/dist/index.html +355 -0
  130. package/dashboard/dist/llms.txt +53 -0
  131. package/dashboard/dist/neon_bg.png +0 -0
  132. package/dashboard/dist/robots.txt +7 -0
  133. package/dashboard/dist/share.html +140 -0
  134. package/dashboard/dist/sitemap.xml +27 -0
  135. package/dashboard/dist/widgets-overview.png +0 -0
  136. package/package.json +78 -0
  137. package/scripts/install-local-service.sh +140 -0
  138. package/scripts/uninstall-local-service.sh +21 -0
  139. package/src/cli.js +95 -0
  140. package/src/commands/device-login.js +161 -0
  141. package/src/commands/diagnostics.js +38 -0
  142. package/src/commands/doctor.js +96 -0
  143. package/src/commands/init.js +1195 -0
  144. package/src/commands/serve.js +351 -0
  145. package/src/commands/status.js +609 -0
  146. package/src/commands/sync.js +2285 -0
  147. package/src/commands/uninstall.js +189 -0
  148. package/src/commands/wrapped.js +150 -0
  149. package/src/lib/antigravity-paths.js +48 -0
  150. package/src/lib/browser-auth.js +281 -0
  151. package/src/lib/categorizer-utils.js +232 -0
  152. package/src/lib/claude-categorizer.js +1319 -0
  153. package/src/lib/claude-config.js +204 -0
  154. package/src/lib/cli-ui.js +179 -0
  155. package/src/lib/codex-config.js +350 -0
  156. package/src/lib/codex-context-breakdown.js +400 -0
  157. package/src/lib/codex-rollout-parser.js +623 -0
  158. package/src/lib/codex-token-refresh.js +112 -0
  159. package/src/lib/cursor-config.js +425 -0
  160. package/src/lib/debug-flags.js +7 -0
  161. package/src/lib/diagnostics.js +272 -0
  162. package/src/lib/doctor.js +338 -0
  163. package/src/lib/fs.js +91 -0
  164. package/src/lib/gemini-config.js +288 -0
  165. package/src/lib/grok-hook.js +351 -0
  166. package/src/lib/init-flow.js +42 -0
  167. package/src/lib/local-api.js +1861 -0
  168. package/src/lib/openclaw-hook.js +420 -0
  169. package/src/lib/openclaw-session-plugin.js +520 -0
  170. package/src/lib/opencode-config.js +99 -0
  171. package/src/lib/passive-mode.js +185 -0
  172. package/src/lib/pricing/curated-overrides.json +79 -0
  173. package/src/lib/pricing/index.js +143 -0
  174. package/src/lib/pricing/litellm-fetcher.js +172 -0
  175. package/src/lib/pricing/matcher.js +255 -0
  176. package/src/lib/pricing/seed-snapshot.json +1 -0
  177. package/src/lib/progress.js +76 -0
  178. package/src/lib/project-usage-purge.js +106 -0
  179. package/src/lib/prompt.js +24 -0
  180. package/src/lib/proxy-env.js +131 -0
  181. package/src/lib/rollout.js +8442 -0
  182. package/src/lib/runtime-config.js +122 -0
  183. package/src/lib/skill-usage.js +267 -0
  184. package/src/lib/skills-manager.js +1127 -0
  185. package/src/lib/source-metadata.js +48 -0
  186. package/src/lib/sqlite-reader.js +136 -0
  187. package/src/lib/static-server.js +59 -0
  188. package/src/lib/subscriptions.js +453 -0
  189. package/src/lib/tracker-paths.js +16 -0
  190. package/src/lib/upload-throttle.js +148 -0
  191. package/src/lib/usage-limits.js +1806 -0
  192. package/src/lib/wrapped-aggregator.js +225 -0
@@ -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>
@@ -0,0 +1,231 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ /* Heavy bouncing animation for the body */
5
+ .body-bounce {
6
+ transform-origin: 7.5px 15px;
7
+ animation: hammer-bounce 1s infinite;
8
+ }
9
+
10
+ /* Ground shadow pulsing on impact */
11
+ .shadow-pulse {
12
+ transform-origin: 7.5px 15.5px;
13
+ animation: shadow-impact 1s infinite;
14
+ }
15
+
16
+ /* Left arm resting with slight movement */
17
+ .arm-l-rest {
18
+ transform-origin: 2px 10px;
19
+ animation: arm-rest 1s infinite;
20
+ }
21
+
22
+ /* Right arm swinging the hammer */
23
+ .arm-hammer {
24
+ transform-origin: 14px 10px; /* Shoulder joint */
25
+ animation: hammer-swing 1s infinite;
26
+ }
27
+
28
+ /* Eyes squinting on impact */
29
+ .eyes-blink {
30
+ transform-origin: 7.5px 9px;
31
+ animation: hammer-eyes 1s infinite;
32
+ }
33
+
34
+ /* Spark particles */
35
+ .spark {
36
+ opacity: 0;
37
+ }
38
+ .s1 { animation: spark-1 1s infinite; }
39
+ .s2 { animation: spark-2 1s infinite; }
40
+ .s3 { animation: spark-3 1s infinite; }
41
+
42
+ /* Sweat drop flying off */
43
+ .sweat {
44
+ opacity: 0;
45
+ animation: sweat-fly 1s infinite cubic-bezier(.25,.1,.25,1);
46
+ }
47
+
48
+ /* Glowing hot metal cooling and heating up */
49
+ .hot-metal {
50
+ animation: metal-glow 1s infinite;
51
+ }
52
+
53
+ /* Keyframes */
54
+ @keyframes hammer-bounce {
55
+ 0%, 100% { transform: scale(1, 1) translateY(0); } /* Base */
56
+ 30% { transform: scale(0.95, 1.05) translateY(-2px); } /* Peak raise (anticipation) */
57
+ 45% { transform: scale(1, 1) translateY(0); } /* Falling */
58
+ 50% { transform: scale(1.15, 0.85) translateY(2px); } /* Hard impact squash */
59
+ 70% { transform: scale(1, 1) translateY(0); } /* Recover */
60
+ }
61
+
62
+ @keyframes shadow-impact {
63
+ 0%, 45%, 70%, 100% { transform: scale(1); opacity: 0.5; }
64
+ 30% { transform: scale(0.8); opacity: 0.3; } /* Lighter when raised */
65
+ 50% { transform: scale(1.3); opacity: 0.8; } /* Heavy and wide on impact */
66
+ }
67
+
68
+ @keyframes arm-rest {
69
+ 0%, 100% { transform: rotate(0deg); }
70
+ 30% { transform: rotate(15deg); }
71
+ 50% { transform: rotate(-5deg); }
72
+ }
73
+
74
+ @keyframes hammer-swing {
75
+ 0%, 100% { transform: rotate(15deg); }
76
+ 30% { transform: rotate(-45deg); } /* Arm raised back */
77
+ 45% { transform: rotate(40deg); } /* Swinging down fast */
78
+ 50% { transform: rotate(125deg); } /* Striking the anvil */
79
+ 70% { transform: rotate(15deg); }
80
+ }
81
+
82
+ @keyframes hammer-eyes {
83
+ 0%, 40% { transform: scaleY(1); } /* Open */
84
+ 48%, 60% { transform: scaleY(0.1); } /* Squeezed shut on impact */
85
+ 65%, 100% { transform: scaleY(1); } /* Open again */
86
+ }
87
+
88
+ @keyframes metal-glow {
89
+ 0%, 49% { fill: #FF5252; }
90
+ 50%, 60% { fill: #FFF59D; } /* Flashes white/yellow hot on hit */
91
+ 100% { fill: #FF5252; }
92
+ }
93
+
94
+ /* Sweat drop flies back and fades */
95
+ @keyframes sweat-fly {
96
+ 0% { transform: translate(0, 0) scale(0); opacity: 0; }
97
+ 30% { transform: translate(0, 0) scale(1); opacity: 1; }
98
+ 80% { transform: translate(-6px, -6px) scale(0.8); opacity: 0; }
99
+ 100% { opacity: 0; }
100
+ }
101
+
102
+ /* Sparks flying outwards from the impact zone */
103
+ @keyframes spark-1 {
104
+ 0%, 49% { transform: translate(0, 0) scale(0); opacity: 0; }
105
+ 50% { transform: translate(0, 0) scale(1); opacity: 1; }
106
+ 70% { transform: translate(4px, -6px) scale(0); opacity: 0; }
107
+ 100% { opacity: 0; }
108
+ }
109
+ @keyframes spark-2 {
110
+ 0%, 49% { transform: translate(0, 0) scale(0); opacity: 0; }
111
+ 50% { transform: translate(0, 0) scale(1); opacity: 1; }
112
+ 70% { transform: translate(7px, -1px) scale(0); opacity: 0; }
113
+ 100% { opacity: 0; }
114
+ }
115
+ @keyframes spark-3 {
116
+ 0%, 49% { transform: translate(0, 0) scale(0); opacity: 0; }
117
+ 50% { transform: translate(0, 0) scale(1); opacity: 1; }
118
+ 70% { transform: translate(3px, 3px) scale(0); opacity: 0; }
119
+ 100% { opacity: 0; }
120
+ }
121
+ </style>
122
+
123
+ <!-- Pixel Spark -->
124
+ <g id="pixel-spark">
125
+ <rect x="0" y="0" width="1" height="1" />
126
+ </g>
127
+ </defs>
128
+
129
+ <!-- Ground Shadows -->
130
+ <rect id="ground-shadow" class="shadow-pulse" x="3" y="15" width="9" height="1" fill="#000000"/>
131
+ <rect id="work-shadow" x="16" y="15" width="7" height="1" fill="#000000" opacity="0.4"/>
132
+
133
+ <!-- Metal Block / Anvil being hit -->
134
+ <g id="work-piece" transform="translate(17, 13)">
135
+ <!-- Base -->
136
+ <rect x="0" y="2" width="5" height="1" fill="#546E7A" />
137
+ <!-- Main block -->
138
+ <rect x="1" y="0" width="3" height="2" fill="#78909C" />
139
+ <!-- Glowing hot piece on top -->
140
+ <rect x="1.5" y="-0.5" width="2" height="1" class="hot-metal" />
141
+ </g>
142
+
143
+ <!-- Impact Sparks (Positioned near the hammer's strike point) -->
144
+ <g fill="#FFC107" transform="translate(19, 12.5)">
145
+ <use href="#pixel-spark" class="spark s1" />
146
+ <use href="#pixel-spark" class="spark s2" />
147
+ <use href="#pixel-spark" class="spark s3" />
148
+ </g>
149
+
150
+ <!-- Animated Character Body -->
151
+ <g class="body-bounce">
152
+
153
+ <!-- Sweat Drop (Positioned near the side of the head) -->
154
+ <g transform="translate(1, 8)">
155
+ <g class="sweat" fill="#40C4FF">
156
+ <rect x="0" y="1" width="1.5" height="1.5"/>
157
+ <rect x="0.25" y="0" width="1" height="1"/>
158
+ </g>
159
+ </g>
160
+
161
+ <!-- Hard Hat -->
162
+ <g id="hard-hat">
163
+ <!-- Ridges top (y=1) -->
164
+ <rect x="4" y="1" width="2" height="1" fill="#FBC02D"/>
165
+ <rect x="9" y="1" width="2" height="1" fill="#FBC02D"/>
166
+
167
+ <!-- Upper Dome (y=2) -->
168
+ <rect x="3" y="2" width="1" height="1" fill="#F9A825"/>
169
+ <rect x="4" y="2" width="2" height="1" fill="#FBC02D"/>
170
+ <rect x="6" y="2" width="1" height="1" fill="#F9A825"/>
171
+ <rect x="7" y="2" width="1" height="1" fill="#FBC02D"/>
172
+ <rect x="8" y="2" width="1" height="1" fill="#F9A825"/>
173
+ <rect x="9" y="2" width="2" height="1" fill="#FBC02D"/>
174
+ <rect x="11" y="2" width="1" height="1" fill="#F9A825"/>
175
+
176
+ <!-- Mid Dome (y=3) -->
177
+ <rect x="2" y="3" width="1" height="1" fill="#F9A825"/>
178
+ <rect x="3" y="3" width="3" height="1" fill="#FBC02D"/>
179
+ <rect x="6" y="3" width="1" height="1" fill="#F9A825"/>
180
+ <rect x="7" y="3" width="1" height="1" fill="#FBC02D"/>
181
+ <rect x="8" y="3" width="1" height="1" fill="#F9A825"/>
182
+ <rect x="9" y="3" width="3" height="1" fill="#FBC02D"/>
183
+ <rect x="12" y="3" width="1" height="1" fill="#F9A825"/>
184
+
185
+ <!-- Lower Dome / Brim top (y=4) -->
186
+ <rect x="1" y="4" width="2" height="1" fill="#F9A825"/>
187
+ <rect x="3" y="4" width="9" height="1" fill="#FBC02D"/>
188
+ <rect x="12" y="4" width="2" height="1" fill="#F9A825"/>
189
+
190
+ <!-- Bottom Band (y=5) -->
191
+ <rect x="0" y="5" width="15" height="1" fill="#F9A825"/>
192
+ </g>
193
+
194
+ <!-- Body Base Color Group -->
195
+ <g id="body-color-group" fill="#DE886D">
196
+ <!-- Static Legs -->
197
+ <rect id="outer-left-leg" x="3" y="13" width="1" height="2"/>
198
+ <rect id="inner-left-leg" x="5" y="13" width="1" height="2"/>
199
+ <rect id="inner-right-leg" x="9" y="13" width="1" height="2"/>
200
+ <rect id="outer-right-leg" x="11" y="13" width="1" height="2"/>
201
+
202
+ <!-- Main Torso -->
203
+ <rect id="torso" x="2" y="6" width="11" height="7"/>
204
+
205
+ <!-- Resting Left Arm -->
206
+ <g class="arm-l-rest">
207
+ <rect id="left-arm" x="0" y="9" width="2" height="2"/>
208
+ </g>
209
+
210
+ <!-- Hammer-Swinging Right Arm -->
211
+ <g class="arm-hammer">
212
+ <rect id="right-arm" x="13" y="9" width="2" height="2"/>
213
+
214
+ <!-- Tiny Pixel Hammer -->
215
+ <g id="hammer">
216
+ <!-- Handle -->
217
+ <rect x="13.5" y="4" width="1" height="6" fill="#795548" />
218
+ <!-- Head -->
219
+ <rect x="12.5" y="3" width="3" height="2" fill="#9E9E9E" />
220
+ </g>
221
+ </g>
222
+ </g>
223
+
224
+ <!-- Eyes Color Group (Determined / Straining) -->
225
+ <g class="eyes-blink" fill="#000000">
226
+ <rect id="left-eye" x="4" y="8.5" width="1.5" height="1.5"/>
227
+ <rect id="right-eye" x="9.5" y="8.5" width="1.5" height="1.5"/>
228
+ </g>
229
+
230
+ </g>
231
+ </svg>
@@ -0,0 +1,107 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ /* Straining body trembling and squashing under weight */
5
+ .body-carry {
6
+ transform-origin: 7.5px 15px; /* Pivot at the base of the feet */
7
+ animation: carry-strain 0.15s infinite alternate ease-in-out;
8
+ }
9
+
10
+ /* Heavy Data Block shaking */
11
+ .data-block {
12
+ animation: block-shake 0.15s infinite alternate ease-in-out;
13
+ }
14
+
15
+ /* Trembling legs */
16
+ .leg {
17
+ transform-box: fill-box;
18
+ transform-origin: top center;
19
+ }
20
+ .leg-1 { animation: tremble-1 0.1s infinite linear; }
21
+ .leg-2 { animation: tremble-2 0.1s infinite linear; }
22
+
23
+ /* Sweat drop flying off */
24
+ .sweat {
25
+ opacity: 0;
26
+ animation: sweat-fly 2s infinite cubic-bezier(.25,.1,.25,1);
27
+ }
28
+
29
+ /* Ground shadow shifting */
30
+ .shadow-carry {
31
+ transform-origin: 7.5px 15.5px;
32
+ animation: shadow-strain 0.15s infinite alternate ease-in-out;
33
+ }
34
+
35
+ /* Keyframes */
36
+ @keyframes carry-strain {
37
+ 0% { transform: translateY(1px) scale(1.05, 0.95); }
38
+ 100% { transform: translateY(2px) scale(1.08, 0.92); } /* Heavy squash */
39
+ }
40
+
41
+ @keyframes shadow-strain {
42
+ 0% { transform: scale(1.1); opacity: 0.6; }
43
+ 100% { transform: scale(1.15); opacity: 0.7; }
44
+ }
45
+
46
+ @keyframes block-shake {
47
+ 0% { transform: translate(0, 0) rotate(-0.5deg); }
48
+ 100% { transform: translate(0, 1px) rotate(0.5deg); }
49
+ }
50
+
51
+ /* Trembling legs under weight */
52
+ @keyframes tremble-1 {
53
+ 0%, 100% { transform: translateX(0); }
54
+ 50% { transform: translateX(-0.5px); }
55
+ }
56
+ @keyframes tremble-2 {
57
+ 0%, 100% { transform: translateX(0); }
58
+ 50% { transform: translateX(0.5px); }
59
+ }
60
+
61
+ /* Sweat drop flies back and fades */
62
+ @keyframes sweat-fly {
63
+ 0% { transform: translate(0, 0) scale(0); opacity: 0; }
64
+ 10% { transform: translate(0, 0) scale(1); opacity: 1; }
65
+ 40% { transform: translate(-8px, -4px) scale(0.8); opacity: 0; }
66
+ 100% { opacity: 0; }
67
+ }
68
+ </style>
69
+ </defs>
70
+
71
+ <!-- Mirrored: entire scene flipped -->
72
+ <g transform="translate(15, 0) scale(-1, 1)">
73
+ <rect id="ground-shadow" class="shadow-carry" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
74
+
75
+ <g class="body-carry">
76
+ <g class="data-block" transform="translate(1, -5)">
77
+ <rect x="0" y="0" width="13" height="9" fill="#90A4AE"/>
78
+ <rect x="1" y="1" width="11" height="7" fill="#CFD8DC"/>
79
+ <rect x="2" y="2" width="2" height="2" fill="#0082FC"/>
80
+ <rect x="9" y="2" width="2" height="2" fill="#FFC107"/>
81
+ <rect x="3" y="5" width="7" height="2" fill="#B0BEC5"/>
82
+ </g>
83
+
84
+ <g transform="translate(-1, 5)">
85
+ <g class="sweat" fill="#40C4FF">
86
+ <rect x="0" y="1" width="1.5" height="1.5"/>
87
+ <rect x="0.25" y="0" width="1" height="1"/>
88
+ </g>
89
+ </g>
90
+
91
+ <g id="body-color-group" fill="#DE886D">
92
+ <rect id="outer-left-leg" class="leg leg-1" x="3" y="13" width="1" height="2"/>
93
+ <rect id="inner-left-leg" class="leg leg-2" x="5" y="13" width="1" height="2"/>
94
+ <rect id="inner-right-leg" class="leg leg-1" x="9" y="13" width="1" height="2"/>
95
+ <rect id="outer-right-leg" class="leg leg-2" x="11" y="13" width="1" height="2"/>
96
+ <rect id="torso" x="2" y="6" width="11" height="7"/>
97
+ <rect id="left-arm" x="0" y="4" width="2" height="4" />
98
+ <rect id="right-arm" x="13" y="4" width="2" height="4" />
99
+ </g>
100
+
101
+ <g fill="#000000">
102
+ <rect id="left-eye" x="4" y="6.5" width="1" height="1"/>
103
+ <rect id="right-eye" x="10" y="6" width="1" height="2"/>
104
+ </g>
105
+ </g>
106
+ </g>
107
+ </svg>
@@ -0,0 +1,118 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -25 45 45" width="500" height="500">
2
+ <defs>
3
+ <style>
4
+ /* Smooth, graceful body bobbing */
5
+ .body-bob {
6
+ transform-origin: 7.5px 15px; /* Pivot at the base of the feet */
7
+ animation: bob 2s infinite ease-in-out;
8
+ }
9
+
10
+ /* Ground shadow pulsing softly */
11
+ .shadow-bob {
12
+ transform-origin: 7.5px 15.5px;
13
+ animation: shadow-soft 2s infinite ease-in-out;
14
+ }
15
+
16
+ /* Conductor arms waving smoothly */
17
+ .arm-l-conduct {
18
+ transform-origin: 1px 10px; /* Shoulder joint */
19
+ animation: conduct-l 2s infinite ease-in-out;
20
+ }
21
+ .arm-r-conduct {
22
+ transform-origin: 14px 10px; /* Shoulder joint */
23
+ animation: conduct-r 2s infinite ease-in-out;
24
+ }
25
+
26
+ /* Flowing data stream */
27
+ .pixel-stream {
28
+ opacity: 0;
29
+ animation: stream-flow 2s infinite linear;
30
+ }
31
+ .p1 { animation-delay: 0s; color: #0082FC; }
32
+ .p2 { animation-delay: 0.4s; color: #FFC107; }
33
+ .p3 { animation-delay: 0.8s; color: #FF5252; }
34
+ .p4 { animation-delay: 1.2s; color: #4CAF50; }
35
+ .p5 { animation-delay: 1.6s; color: #9C27B0; }
36
+
37
+ /* Keyframes */
38
+ @keyframes bob {
39
+ 0%, 100% { transform: translateY(0) scale(1, 1); }
40
+ 50% { transform: translateY(1.5px) scale(1.02, 0.98); } /* Gentle squash */
41
+ }
42
+
43
+ @keyframes shadow-soft {
44
+ 0%, 100% { transform: scale(1); opacity: 0.4; }
45
+ 50% { transform: scale(1.05); opacity: 0.5; }
46
+ }
47
+
48
+ /* Left arm swoops up, then down */
49
+ @keyframes conduct-l {
50
+ 0%, 100% { transform: rotate(15deg); }
51
+ 50% { transform: rotate(85deg); }
52
+ }
53
+
54
+ /* Right arm swoops down, then up (out of phase) */
55
+ @keyframes conduct-r {
56
+ 0%, 100% { transform: rotate(-85deg); }
57
+ 50% { transform: rotate(-15deg); }
58
+ }
59
+
60
+ /* Data pixels flow in an arc over the head */
61
+ @keyframes stream-flow {
62
+ 0% { transform: translate(-2px, 6px) scale(0); opacity: 0; }
63
+ 15% { transform: translate(0px, 1px) scale(1); opacity: 1; }
64
+ 50% { transform: translate(7.5px, -3px) scale(1.5); opacity: 1; } /* Peak of arc */
65
+ 85% { transform: translate(15px, 1px) scale(1); opacity: 1; }
66
+ 100% { transform: translate(17px, 6px) scale(0); opacity: 0; }
67
+ }
68
+ </style>
69
+
70
+ <!-- Data Pixel -->
71
+ <g id="data-pixel">
72
+ <rect x="0" y="0" width="1.5" height="1.5" fill="currentColor"/>
73
+ </g>
74
+ </defs>
75
+
76
+ <!-- Ground Shadow -->
77
+ <rect id="ground-shadow" class="shadow-bob" x="3" y="15" width="9" height="1" fill="#000000"/>
78
+
79
+ <!-- Data Stream Arc -->
80
+ <g>
81
+ <use href="#data-pixel" class="pixel-stream p1" />
82
+ <use href="#data-pixel" class="pixel-stream p2" />
83
+ <use href="#data-pixel" class="pixel-stream p3" />
84
+ <use href="#data-pixel" class="pixel-stream p4" />
85
+ <use href="#data-pixel" class="pixel-stream p5" />
86
+ </g>
87
+
88
+ <!-- Animated Character Body -->
89
+ <g class="body-bob">
90
+
91
+ <!-- Body Base Color Group -->
92
+ <g id="body-color-group" fill="#DE886D">
93
+ <!-- Static Legs -->
94
+ <rect id="outer-left-leg" x="3" y="13" width="1" height="2"/>
95
+ <rect id="inner-left-leg" x="5" y="13" width="1" height="2"/>
96
+ <rect id="inner-right-leg" x="9" y="13" width="1" height="2"/>
97
+ <rect id="outer-right-leg" x="11" y="13" width="1" height="2"/>
98
+
99
+ <!-- Main Torso -->
100
+ <rect id="torso" x="2" y="6" width="11" height="7"/>
101
+
102
+ <!-- Waving Arms -->
103
+ <g class="arm-l-conduct">
104
+ <rect id="left-arm" x="0" y="9" width="2" height="2"/>
105
+ </g>
106
+ <g class="arm-r-conduct">
107
+ <rect id="right-arm" x="13" y="9" width="2" height="2"/>
108
+ </g>
109
+ </g>
110
+
111
+ <!-- Eyes Color Group (Happily closed / smiling) -->
112
+ <g fill="#000000">
113
+ <rect id="left-eye-happy" x="3.5" y="8.5" width="2" height="0.5"/>
114
+ <rect id="right-eye-happy" x="9.5" y="8.5" width="2" height="0.5"/>
115
+ </g>
116
+
117
+ </g>
118
+ </svg>