@mumulinya167/ccm-pet-assets 2.0.0 → 2.0.2

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 (141) hide show
  1. package/assets/calico/calico-idle-follow.svg +324 -324
  2. package/assets/calico.svg +324 -324
  3. package/assets/clawd/LICENSE +22 -22
  4. package/assets/clawd/clawd-about-hero.svg +202 -202
  5. package/assets/clawd/clawd-collapse-sleep.svg +247 -247
  6. package/assets/clawd/clawd-error.svg +94 -94
  7. package/assets/clawd/clawd-happy.svg +160 -160
  8. package/assets/clawd/clawd-headphones-groove.svg +194 -194
  9. package/assets/clawd/clawd-idle-bubble.svg +180 -180
  10. package/assets/clawd/clawd-idle-collapse.svg +101 -101
  11. package/assets/clawd/clawd-idle-doze.svg +72 -72
  12. package/assets/clawd/clawd-idle-follow.svg +64 -64
  13. package/assets/clawd/clawd-idle-living.svg +195 -195
  14. package/assets/clawd/clawd-idle-look.svg +115 -115
  15. package/assets/clawd/clawd-idle-reading.svg +252 -252
  16. package/assets/clawd/clawd-idle-yawn.svg +158 -158
  17. package/assets/clawd/clawd-mini-alert.svg +129 -129
  18. package/assets/clawd/clawd-mini-crabwalk.svg +76 -76
  19. package/assets/clawd/clawd-mini-enter-sleep.svg +64 -64
  20. package/assets/clawd/clawd-mini-enter.svg +114 -114
  21. package/assets/clawd/clawd-mini-happy.svg +124 -124
  22. package/assets/clawd/clawd-mini-idle.svg +83 -83
  23. package/assets/clawd/clawd-mini-peek.svg +82 -82
  24. package/assets/clawd/clawd-mini-sleep.svg +112 -112
  25. package/assets/clawd/clawd-mini-typing.svg +153 -153
  26. package/assets/clawd/clawd-notification.svg +438 -438
  27. package/assets/clawd/clawd-react-annoyed.svg +167 -167
  28. package/assets/clawd/clawd-react-double-jump.svg +229 -229
  29. package/assets/clawd/clawd-react-double.svg +108 -108
  30. package/assets/clawd/clawd-react-drag.svg +102 -102
  31. package/assets/clawd/clawd-react-left.svg +102 -102
  32. package/assets/clawd/clawd-react-right.svg +102 -102
  33. package/assets/clawd/clawd-sleeping.svg +117 -117
  34. package/assets/clawd/clawd-static-base.svg +20 -20
  35. package/assets/clawd/clawd-wake.svg +277 -277
  36. package/assets/clawd/clawd-working-building.svg +329 -329
  37. package/assets/clawd/clawd-working-carrying.svg +178 -178
  38. package/assets/clawd/clawd-working-debugger.svg +245 -245
  39. package/assets/clawd/clawd-working-juggling.svg +183 -183
  40. package/assets/clawd/clawd-working-sweeping.svg +248 -248
  41. package/assets/clawd/clawd-working-thinking.svg +501 -501
  42. package/assets/clawd/clawd-working-typing-boss.svg +307 -307
  43. package/assets/clawd/clawd-working-typing.svg +273 -273
  44. package/assets/clawd/clawd-working-ultrathink.svg +166 -166
  45. package/assets/clawd/clawd-working-wizard.svg +356 -356
  46. package/assets/clawd.svg +64 -64
  47. package/assets/cloudling/cloudling/cloudling-attention.svg +379 -379
  48. package/assets/cloudling/cloudling/cloudling-building.svg +667 -667
  49. package/assets/cloudling/cloudling/cloudling-carrying.svg +604 -604
  50. package/assets/cloudling/cloudling/cloudling-conducting.svg +616 -616
  51. package/assets/cloudling/cloudling/cloudling-dozing-to-sleeping.svg +578 -578
  52. package/assets/cloudling/cloudling/cloudling-dozing.svg +358 -358
  53. package/assets/cloudling/cloudling/cloudling-error.svg +428 -428
  54. package/assets/cloudling/cloudling/cloudling-idle-reading.svg +658 -658
  55. package/assets/cloudling/cloudling/cloudling-idle-to-dozing.svg +568 -568
  56. package/assets/cloudling/cloudling/cloudling-idle-to-sleeping.svg +811 -811
  57. package/assets/cloudling/cloudling/cloudling-idle.svg +255 -255
  58. package/assets/cloudling/cloudling/cloudling-juggling.svg +648 -648
  59. package/assets/cloudling/cloudling/cloudling-mini-alert.svg +389 -389
  60. package/assets/cloudling/cloudling/cloudling-mini-crabwalk.svg +335 -335
  61. package/assets/cloudling/cloudling/cloudling-mini-enter-roll-in.svg +225 -225
  62. package/assets/cloudling/cloudling/cloudling-mini-enter-sleep.svg +231 -231
  63. package/assets/cloudling/cloudling/cloudling-mini-happy.svg +370 -370
  64. package/assets/cloudling/cloudling/cloudling-mini-idle.svg +279 -279
  65. package/assets/cloudling/cloudling/cloudling-mini-peek.svg +327 -327
  66. package/assets/cloudling/cloudling/cloudling-mini-sleep.svg +260 -260
  67. package/assets/cloudling/cloudling/cloudling-mini-typing.svg +691 -691
  68. package/assets/cloudling/cloudling/cloudling-notification.svg +493 -493
  69. package/assets/cloudling/cloudling/cloudling-react-drag.svg +83 -83
  70. package/assets/cloudling/cloudling/cloudling-sleeping-to-idle.svg +555 -555
  71. package/assets/cloudling/cloudling/cloudling-sleeping.svg +500 -500
  72. package/assets/cloudling/cloudling/cloudling-sweeping.svg +292 -292
  73. package/assets/cloudling/cloudling/cloudling-thinking.svg +719 -719
  74. package/assets/cloudling/cloudling/cloudling-typing.svg +354 -354
  75. package/assets/cloudling/cloudling-attention.svg +379 -379
  76. package/assets/cloudling/cloudling-building.svg +667 -667
  77. package/assets/cloudling/cloudling-carrying.svg +604 -604
  78. package/assets/cloudling/cloudling-conducting.svg +616 -616
  79. package/assets/cloudling/cloudling-dozing-to-sleeping.svg +578 -578
  80. package/assets/cloudling/cloudling-dozing.svg +358 -358
  81. package/assets/cloudling/cloudling-error.svg +428 -428
  82. package/assets/cloudling/cloudling-idle-reading.svg +658 -658
  83. package/assets/cloudling/cloudling-idle-to-dozing.svg +568 -568
  84. package/assets/cloudling/cloudling-idle-to-sleeping.svg +811 -811
  85. package/assets/cloudling/cloudling-idle.svg +255 -255
  86. package/assets/cloudling/cloudling-juggling.svg +648 -648
  87. package/assets/cloudling/cloudling-mini-alert.svg +389 -389
  88. package/assets/cloudling/cloudling-mini-crabwalk.svg +335 -335
  89. package/assets/cloudling/cloudling-mini-enter-roll-in.svg +225 -225
  90. package/assets/cloudling/cloudling-mini-enter-sleep.svg +231 -231
  91. package/assets/cloudling/cloudling-mini-happy.svg +370 -370
  92. package/assets/cloudling/cloudling-mini-idle.svg +279 -279
  93. package/assets/cloudling/cloudling-mini-peek.svg +327 -327
  94. package/assets/cloudling/cloudling-mini-sleep.svg +260 -260
  95. package/assets/cloudling/cloudling-mini-typing.svg +691 -691
  96. package/assets/cloudling/cloudling-notification.svg +493 -493
  97. package/assets/cloudling/cloudling-react-drag.svg +83 -83
  98. package/assets/cloudling/cloudling-sleeping-to-idle.svg +555 -555
  99. package/assets/cloudling/cloudling-sleeping.svg +500 -500
  100. package/assets/cloudling/cloudling-sweeping.svg +292 -292
  101. package/assets/cloudling/cloudling-thinking.svg +719 -719
  102. package/assets/cloudling/cloudling-typing.svg +354 -354
  103. package/assets/cloudling.svg +255 -255
  104. package/assets/ghost-attention.svg +19 -19
  105. package/assets/ghost-carrying.svg +19 -19
  106. package/assets/ghost-collapsing.svg +19 -19
  107. package/assets/ghost-dozing.svg +23 -23
  108. package/assets/ghost-error.svg +19 -19
  109. package/assets/ghost-happy.svg +23 -23
  110. package/assets/ghost-idle.svg +11 -11
  111. package/assets/ghost-juggling.svg +19 -19
  112. package/assets/ghost-notification.svg +19 -19
  113. package/assets/ghost-react-double.svg +23 -23
  114. package/assets/ghost-react-drag.svg +23 -23
  115. package/assets/ghost-react-left.svg +19 -19
  116. package/assets/ghost-react-right.svg +19 -19
  117. package/assets/ghost-sleeping.svg +19 -19
  118. package/assets/ghost-sweeping.svg +19 -19
  119. package/assets/ghost-waking.svg +19 -19
  120. package/assets/ghost-yawning.svg +23 -23
  121. package/assets/ghost.svg +11 -11
  122. package/assets/robot-attention.svg +19 -19
  123. package/assets/robot-carrying.svg +19 -19
  124. package/assets/robot-collapsing.svg +19 -19
  125. package/assets/robot-dozing.svg +23 -23
  126. package/assets/robot-error.svg +19 -19
  127. package/assets/robot-happy.svg +23 -23
  128. package/assets/robot-idle.svg +11 -11
  129. package/assets/robot-juggling.svg +19 -19
  130. package/assets/robot-notification.svg +19 -19
  131. package/assets/robot-react-double.svg +23 -23
  132. package/assets/robot-react-drag.svg +23 -23
  133. package/assets/robot-react-left.svg +19 -19
  134. package/assets/robot-react-right.svg +19 -19
  135. package/assets/robot-sleeping.svg +19 -19
  136. package/assets/robot-sweeping.svg +19 -19
  137. package/assets/robot-waking.svg +19 -19
  138. package/assets/robot-yawning.svg +23 -23
  139. package/assets/robot.svg +11 -11
  140. package/manifest.json +280 -280
  141. package/package.json +1 -1
@@ -1,22 +1,22 @@
1
- All Rights Reserved
2
-
3
- The artwork files in this directory and its subdirectories (including but not
4
- limited to SVG, PNG, GIF, and ICO files) are NOT covered by the project's
5
- source-code license. All rights are reserved by their respective copyright
6
- holders.
7
-
8
- Clawd character artwork:
9
- The Clawd character is the property of Anthropic (https://www.anthropic.com).
10
- Clawd pixel art in this project is fan-created and may not be used for
11
- commercial purposes.
12
-
13
- Calico cat (三花猫) artwork:
14
- Copyright (c) 2026 鹿鹿 (rullerzhou-afk). All rights reserved.
15
-
16
- Third-party artist contributions:
17
- Copyright is retained by the respective artists. See individual file headers
18
- or the project README for attribution details.
19
-
20
- You may NOT copy, modify, distribute, or use any artwork from this directory
21
- without explicit written permission from the copyright holder(s), except for
22
- personal use of the Clawd on Desk application as distributed by this project.
1
+ All Rights Reserved
2
+
3
+ The artwork files in this directory and its subdirectories (including but not
4
+ limited to SVG, PNG, GIF, and ICO files) are NOT covered by the project's
5
+ source-code license. All rights are reserved by their respective copyright
6
+ holders.
7
+
8
+ Clawd character artwork:
9
+ The Clawd character is the property of Anthropic (https://www.anthropic.com).
10
+ Clawd pixel art in this project is fan-created and may not be used for
11
+ commercial purposes.
12
+
13
+ Calico cat (三花猫) artwork:
14
+ Copyright (c) 2026 鹿鹿 (rullerzhou-afk). All rights reserved.
15
+
16
+ Third-party artist contributions:
17
+ Copyright is retained by the respective artists. See individual file headers
18
+ or the project README for attribution details.
19
+
20
+ You may NOT copy, modify, distribute, or use any artwork from this directory
21
+ without explicit written permission from the copyright holder(s), except for
22
+ personal use of the Clawd on Desk application as distributed by this project.
@@ -1,202 +1,202 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 2 20 16" width="500" height="400">
2
- <!-- Clawd About hero: "Deal with it" intro → freeze at 55% (cool pose, post-second-sparkle, hands not yet returning).
3
- Adapted from themes/clawd/assets/source/clawd-experiment-put-on-v4.svg:
4
- - 8s infinite → 4.4s forwards (plays once, freezes at terminal keyframe)
5
- - Keyframes past 55% removed; remaining remapped from 0-55% → 0-100%
6
- - Wrapped in <g class="breath-wrap"> for subtle breathing after intro
7
- - Wrapped in <g id="shake-slot"> outermost — JS adds .shake class on click
8
- -->
9
-
10
- <defs>
11
- <style>
12
- .arm-right-motion {
13
- transform-origin: 13px 10px;
14
- animation: arm-right 4.4s ease-in-out forwards;
15
- }
16
- .arm-left-motion {
17
- transform-origin: 2px 10px;
18
- animation: arm-left 4.4s ease-in-out forwards;
19
- }
20
- .glasses-fly {
21
- transform-origin: 0 0;
22
- animation: glasses-fly 4.4s ease-in-out forwards;
23
- }
24
- .mood {
25
- transform-origin: 7.5px 13px;
26
- animation: mood 4.4s ease-in-out forwards;
27
- }
28
- .shadow-fade {
29
- animation: shadow-fade 4.4s ease-in-out forwards;
30
- }
31
- .sparkle-near {
32
- transform-origin: 2.5px 6.5px;
33
- animation: sparkle-near 4.4s ease-in-out forwards;
34
- }
35
- .sparkle-far {
36
- transform-origin: 3.5px 4.5px;
37
- animation: sparkle-far 4.4s ease-in-out forwards;
38
- }
39
-
40
- /* Breath: kick in after intro completes; gentle infinite up-down */
41
- .breath-wrap {
42
- animation: breath 4s infinite ease-in-out;
43
- animation-delay: 4.4s;
44
- }
45
- @keyframes breath {
46
- 0%, 100% { transform: translateY(0); }
47
- 50% { transform: translateY(-0.3px); }
48
- }
49
-
50
- /* Shake: JS toggles .shake on click; animationend removes the class */
51
- .shake-slot {
52
- transform-origin: 7.5px 10px;
53
- }
54
- .shake-slot.shake {
55
- animation: shake 0.4s ease-in-out;
56
- }
57
- @keyframes shake {
58
- 0%, 100% { transform: rotate(0); }
59
- 20% { transform: rotate(-3deg); }
60
- 60% { transform: rotate(3deg); }
61
- 80% { transform: rotate(-2deg); }
62
- }
63
-
64
- /* Right arm: idle → raise → hold → cool pose (freeze at translate(0.5,1)) */
65
- @keyframes arm-right {
66
- 0%, 9% { transform: none; }
67
- 15%, 33% { transform: translateY(-3px) rotate(-90deg); }
68
- 45%, 73% { transform: translate(-1px, -1px); }
69
- 82%, 100% { transform: translate(0.5px, 1px); }
70
- }
71
-
72
- /* Left arm: idle → hold → cool pose (freeze at translate(-0.5,1)) */
73
- @keyframes arm-left {
74
- 0%, 27% { transform: none; }
75
- 45%, 73% { transform: translate(1px, -1px); }
76
- 82%, 100% { transform: translate(-0.5px, 1px); }
77
- }
78
-
79
- /* Glasses: invisible → summon → fly to face → display (freeze at translate(1.325,7.375) scale(0.65)) */
80
- @keyframes glasses-fly {
81
- 0%, 15% { transform: translate(10.15px, 3.25px) scale(0.3); opacity: 0; }
82
- 22%, 33% { transform: translate(10.15px, 3.25px) scale(0.3); opacity: 1; }
83
- 55%, 100% { transform: translate(1.325px, 7.375px) scale(0.65); opacity: 1; }
84
- }
85
-
86
- /* Mood: single head shake mid-intro → cool pose tilt (freeze at +1deg) */
87
- @keyframes mood {
88
- 0%, 55% { transform: rotate(0deg); }
89
- 60% { transform: rotate(1deg); }
90
- 65% { transform: rotate(-1deg); }
91
- 73% { transform: rotate(0deg); }
92
- 82%, 100% { transform: rotate(1deg); }
93
- }
94
-
95
- /* Hand shadows: visible only during hold periods */
96
- @keyframes shadow-fade {
97
- 0%, 40% { opacity: 0; }
98
- 51%, 76% { opacity: 1; }
99
- 87%, 100% { opacity: 0; }
100
- }
101
-
102
- /* Sparkle near (small, glasses corner): flashes mid-pose then fades */
103
- @keyframes sparkle-near {
104
- 0%, 73% { opacity: 0; transform: scale(0.4); }
105
- 75% { opacity: 1; transform: scale(0.7); }
106
- 78% { opacity: 0.7; transform: scale(0.5); }
107
- 80%, 100% { opacity: 0; transform: scale(0.4); }
108
- }
109
-
110
- /* Sparkle far (big, upper-left void): peaks late, faded before freeze */
111
- @keyframes sparkle-far {
112
- 0%, 84% { opacity: 0; transform: scale(0.5); }
113
- 87% { opacity: 1; transform: scale(1.4); }
114
- 91% { opacity: 0.9; transform: scale(1.2); }
115
- 96%, 100% { opacity: 0; transform: scale(0.6); }
116
- }
117
- </style>
118
-
119
- <clipPath id="inside-torso">
120
- <rect x="2" y="6" width="11" height="7"/>
121
- </clipPath>
122
- </defs>
123
-
124
- <g class="shake-slot" id="shake-slot">
125
- <rect id="ground-shadow" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
126
-
127
- <g class="breath-wrap">
128
- <g class="mood">
129
- <g id="master-group">
130
-
131
- <g id="legs" fill="#DE886D">
132
- <rect x="3" y="13" width="1" height="2"/>
133
- <rect x="5" y="13" width="1" height="2"/>
134
- <rect x="9" y="13" width="1" height="2"/>
135
- <rect x="11" y="13" width="1" height="2"/>
136
- </g>
137
-
138
- <rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
139
-
140
- <g clip-path="url(#inside-torso)" class="shadow-fade">
141
- <g class="arm-left-motion">
142
- <rect x="0" y="9" width="2.4" height="2.4" fill="#A85A3A"/>
143
- </g>
144
- <g class="arm-right-motion">
145
- <rect x="12.6" y="9" width="2.4" height="2.4" fill="#A85A3A"/>
146
- </g>
147
- </g>
148
-
149
- <g fill="#000000">
150
- <rect x="4" y="8" width="1" height="2"/>
151
- <rect x="10" y="8" width="1" height="2"/>
152
- </g>
153
-
154
- <g class="glasses-fly">
155
- <g fill="#000000">
156
- <rect x="0" y="0" width="19" height="1"/>
157
- <rect x="0" y="1" width="8" height="1"/>
158
- <rect x="11" y="1" width="8" height="1"/>
159
- <rect x="0" y="2" width="8" height="1"/>
160
- <rect x="11" y="2" width="8" height="1"/>
161
- <rect x="1" y="3" width="6" height="1"/>
162
- <rect x="12" y="3" width="6" height="1"/>
163
- <rect x="2" y="4" width="4" height="1"/>
164
- <rect x="13" y="4" width="4" height="1"/>
165
- </g>
166
- <g fill="#FFFFFF">
167
- <rect x="5" y="1" width="1" height="1"/>
168
- <rect x="4" y="2" width="1" height="1"/>
169
- <rect x="16" y="1" width="1" height="1"/>
170
- <rect x="15" y="2" width="1" height="1"/>
171
- </g>
172
- </g>
173
-
174
- <g class="arm-left-motion">
175
- <rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
176
- </g>
177
-
178
- <g class="arm-right-motion">
179
- <rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
180
- </g>
181
-
182
- <g class="sparkle-near" fill="#FFFFFF">
183
- <rect x="2" y="6" width="1" height="1"/>
184
- <rect x="2" y="5" width="1" height="1"/>
185
- <rect x="2" y="7" width="1" height="1"/>
186
- <rect x="1" y="6" width="1" height="1"/>
187
- <rect x="3" y="6" width="1" height="1"/>
188
- </g>
189
-
190
- <g class="sparkle-far" fill="#FFFFFF">
191
- <rect x="3" y="4" width="1" height="1"/>
192
- <rect x="3" y="3" width="1" height="1"/>
193
- <rect x="3" y="5" width="1" height="1"/>
194
- <rect x="2" y="4" width="1" height="1"/>
195
- <rect x="4" y="4" width="1" height="1"/>
196
- </g>
197
-
198
- </g>
199
- </g>
200
- </g>
201
- </g>
202
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 2 20 16" width="500" height="400">
2
+ <!-- Clawd About hero: "Deal with it" intro → freeze at 55% (cool pose, post-second-sparkle, hands not yet returning).
3
+ Adapted from themes/clawd/assets/source/clawd-experiment-put-on-v4.svg:
4
+ - 8s infinite → 4.4s forwards (plays once, freezes at terminal keyframe)
5
+ - Keyframes past 55% removed; remaining remapped from 0-55% → 0-100%
6
+ - Wrapped in <g class="breath-wrap"> for subtle breathing after intro
7
+ - Wrapped in <g id="shake-slot"> outermost — JS adds .shake class on click
8
+ -->
9
+
10
+ <defs>
11
+ <style>
12
+ .arm-right-motion {
13
+ transform-origin: 13px 10px;
14
+ animation: arm-right 4.4s ease-in-out forwards;
15
+ }
16
+ .arm-left-motion {
17
+ transform-origin: 2px 10px;
18
+ animation: arm-left 4.4s ease-in-out forwards;
19
+ }
20
+ .glasses-fly {
21
+ transform-origin: 0 0;
22
+ animation: glasses-fly 4.4s ease-in-out forwards;
23
+ }
24
+ .mood {
25
+ transform-origin: 7.5px 13px;
26
+ animation: mood 4.4s ease-in-out forwards;
27
+ }
28
+ .shadow-fade {
29
+ animation: shadow-fade 4.4s ease-in-out forwards;
30
+ }
31
+ .sparkle-near {
32
+ transform-origin: 2.5px 6.5px;
33
+ animation: sparkle-near 4.4s ease-in-out forwards;
34
+ }
35
+ .sparkle-far {
36
+ transform-origin: 3.5px 4.5px;
37
+ animation: sparkle-far 4.4s ease-in-out forwards;
38
+ }
39
+
40
+ /* Breath: kick in after intro completes; gentle infinite up-down */
41
+ .breath-wrap {
42
+ animation: breath 4s infinite ease-in-out;
43
+ animation-delay: 4.4s;
44
+ }
45
+ @keyframes breath {
46
+ 0%, 100% { transform: translateY(0); }
47
+ 50% { transform: translateY(-0.3px); }
48
+ }
49
+
50
+ /* Shake: JS toggles .shake on click; animationend removes the class */
51
+ .shake-slot {
52
+ transform-origin: 7.5px 10px;
53
+ }
54
+ .shake-slot.shake {
55
+ animation: shake 0.4s ease-in-out;
56
+ }
57
+ @keyframes shake {
58
+ 0%, 100% { transform: rotate(0); }
59
+ 20% { transform: rotate(-3deg); }
60
+ 60% { transform: rotate(3deg); }
61
+ 80% { transform: rotate(-2deg); }
62
+ }
63
+
64
+ /* Right arm: idle → raise → hold → cool pose (freeze at translate(0.5,1)) */
65
+ @keyframes arm-right {
66
+ 0%, 9% { transform: none; }
67
+ 15%, 33% { transform: translateY(-3px) rotate(-90deg); }
68
+ 45%, 73% { transform: translate(-1px, -1px); }
69
+ 82%, 100% { transform: translate(0.5px, 1px); }
70
+ }
71
+
72
+ /* Left arm: idle → hold → cool pose (freeze at translate(-0.5,1)) */
73
+ @keyframes arm-left {
74
+ 0%, 27% { transform: none; }
75
+ 45%, 73% { transform: translate(1px, -1px); }
76
+ 82%, 100% { transform: translate(-0.5px, 1px); }
77
+ }
78
+
79
+ /* Glasses: invisible → summon → fly to face → display (freeze at translate(1.325,7.375) scale(0.65)) */
80
+ @keyframes glasses-fly {
81
+ 0%, 15% { transform: translate(10.15px, 3.25px) scale(0.3); opacity: 0; }
82
+ 22%, 33% { transform: translate(10.15px, 3.25px) scale(0.3); opacity: 1; }
83
+ 55%, 100% { transform: translate(1.325px, 7.375px) scale(0.65); opacity: 1; }
84
+ }
85
+
86
+ /* Mood: single head shake mid-intro → cool pose tilt (freeze at +1deg) */
87
+ @keyframes mood {
88
+ 0%, 55% { transform: rotate(0deg); }
89
+ 60% { transform: rotate(1deg); }
90
+ 65% { transform: rotate(-1deg); }
91
+ 73% { transform: rotate(0deg); }
92
+ 82%, 100% { transform: rotate(1deg); }
93
+ }
94
+
95
+ /* Hand shadows: visible only during hold periods */
96
+ @keyframes shadow-fade {
97
+ 0%, 40% { opacity: 0; }
98
+ 51%, 76% { opacity: 1; }
99
+ 87%, 100% { opacity: 0; }
100
+ }
101
+
102
+ /* Sparkle near (small, glasses corner): flashes mid-pose then fades */
103
+ @keyframes sparkle-near {
104
+ 0%, 73% { opacity: 0; transform: scale(0.4); }
105
+ 75% { opacity: 1; transform: scale(0.7); }
106
+ 78% { opacity: 0.7; transform: scale(0.5); }
107
+ 80%, 100% { opacity: 0; transform: scale(0.4); }
108
+ }
109
+
110
+ /* Sparkle far (big, upper-left void): peaks late, faded before freeze */
111
+ @keyframes sparkle-far {
112
+ 0%, 84% { opacity: 0; transform: scale(0.5); }
113
+ 87% { opacity: 1; transform: scale(1.4); }
114
+ 91% { opacity: 0.9; transform: scale(1.2); }
115
+ 96%, 100% { opacity: 0; transform: scale(0.6); }
116
+ }
117
+ </style>
118
+
119
+ <clipPath id="inside-torso">
120
+ <rect x="2" y="6" width="11" height="7"/>
121
+ </clipPath>
122
+ </defs>
123
+
124
+ <g class="shake-slot" id="shake-slot">
125
+ <rect id="ground-shadow" x="3" y="15" width="9" height="1" fill="#000000" opacity="0.5"/>
126
+
127
+ <g class="breath-wrap">
128
+ <g class="mood">
129
+ <g id="master-group">
130
+
131
+ <g id="legs" fill="#DE886D">
132
+ <rect x="3" y="13" width="1" height="2"/>
133
+ <rect x="5" y="13" width="1" height="2"/>
134
+ <rect x="9" y="13" width="1" height="2"/>
135
+ <rect x="11" y="13" width="1" height="2"/>
136
+ </g>
137
+
138
+ <rect x="2" y="6" width="11" height="7" fill="#DE886D"/>
139
+
140
+ <g clip-path="url(#inside-torso)" class="shadow-fade">
141
+ <g class="arm-left-motion">
142
+ <rect x="0" y="9" width="2.4" height="2.4" fill="#A85A3A"/>
143
+ </g>
144
+ <g class="arm-right-motion">
145
+ <rect x="12.6" y="9" width="2.4" height="2.4" fill="#A85A3A"/>
146
+ </g>
147
+ </g>
148
+
149
+ <g fill="#000000">
150
+ <rect x="4" y="8" width="1" height="2"/>
151
+ <rect x="10" y="8" width="1" height="2"/>
152
+ </g>
153
+
154
+ <g class="glasses-fly">
155
+ <g fill="#000000">
156
+ <rect x="0" y="0" width="19" height="1"/>
157
+ <rect x="0" y="1" width="8" height="1"/>
158
+ <rect x="11" y="1" width="8" height="1"/>
159
+ <rect x="0" y="2" width="8" height="1"/>
160
+ <rect x="11" y="2" width="8" height="1"/>
161
+ <rect x="1" y="3" width="6" height="1"/>
162
+ <rect x="12" y="3" width="6" height="1"/>
163
+ <rect x="2" y="4" width="4" height="1"/>
164
+ <rect x="13" y="4" width="4" height="1"/>
165
+ </g>
166
+ <g fill="#FFFFFF">
167
+ <rect x="5" y="1" width="1" height="1"/>
168
+ <rect x="4" y="2" width="1" height="1"/>
169
+ <rect x="16" y="1" width="1" height="1"/>
170
+ <rect x="15" y="2" width="1" height="1"/>
171
+ </g>
172
+ </g>
173
+
174
+ <g class="arm-left-motion">
175
+ <rect x="0" y="9" width="2" height="2" fill="#DE886D"/>
176
+ </g>
177
+
178
+ <g class="arm-right-motion">
179
+ <rect x="13" y="9" width="2" height="2" fill="#DE886D"/>
180
+ </g>
181
+
182
+ <g class="sparkle-near" fill="#FFFFFF">
183
+ <rect x="2" y="6" width="1" height="1"/>
184
+ <rect x="2" y="5" width="1" height="1"/>
185
+ <rect x="2" y="7" width="1" height="1"/>
186
+ <rect x="1" y="6" width="1" height="1"/>
187
+ <rect x="3" y="6" width="1" height="1"/>
188
+ </g>
189
+
190
+ <g class="sparkle-far" fill="#FFFFFF">
191
+ <rect x="3" y="4" width="1" height="1"/>
192
+ <rect x="3" y="3" width="1" height="1"/>
193
+ <rect x="3" y="5" width="1" height="1"/>
194
+ <rect x="2" y="4" width="1" height="1"/>
195
+ <rect x="4" y="4" width="1" height="1"/>
196
+ </g>
197
+
198
+ </g>
199
+ </g>
200
+ </g>
201
+ </g>
202
+ </svg>