@dotcraft/avatar 0.8.0 → 0.8.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 (2) hide show
  1. package/dist/styles.css +2114 -14
  2. package/package.json +1 -1
package/dist/styles.css CHANGED
@@ -1,14 +1,2114 @@
1
- @import './rig.css';
2
- @import './avatar.css';
3
- @import './accessories.css';
4
- @import './effects.css';
5
-
6
- @import "./composer/styles/foundation.css";
7
- @import "./composer/styles/profile-transition.css";
8
- @import "./composer/styles/idle.css";
9
- @import "./composer/styles/focus.css";
10
- @import "./composer/styles/expressions.css";
11
- @import "./composer/styles/feedback.css";
12
- @import "./composer/styles/props.css";
13
-
14
- @import "./composer/styles/energy.css";
1
+ /* Arm outlines, material clips and held props move in lockstep.
2
+ transform-box: view-box resolves the same pivot for each layer. */
3
+ .dca-part-eyes,
4
+ .dca-part-glow,
5
+ .dca-part-light,
6
+ .dca-part-face {
7
+ transform-box: fill-box;
8
+ }
9
+
10
+ /* The incoming face waits out a ~70ms blank beat so two faces never blend into a
11
+ double exposure. */
12
+ .dca-part-face {
13
+ opacity: 0;
14
+ transition: opacity 110ms ease;
15
+ }
16
+
17
+ .dca-part-robot[data-expression='neutral'] .dca-part-face-neutral,
18
+ .dca-part-robot[data-expression='happy'] .dca-part-face-happy,
19
+ .dca-part-robot[data-expression='operator'] .dca-part-face-operator,
20
+ .dca-part-robot[data-expression='sleep'] .dca-part-face-sleep {
21
+ opacity: 1;
22
+ transition: opacity 150ms ease 70ms;
23
+ }
24
+
25
+ .dca-part-eyes {
26
+ transform-origin: center;
27
+ }
28
+
29
+ .dca-part-glow {
30
+ opacity: 0;
31
+ transform-origin: center;
32
+ }
33
+
34
+ .dca-part-light {
35
+ transform-origin: center;
36
+ }
37
+
38
+ /* The default 140ms transition-delay sequences "prop first, arm after" on retract, so
39
+ a prop is never left floating. Every rule that ENTERS a posed arm state overrides
40
+ the delay back to 0 so raises stay immediate. */
41
+ .dca-part-arm-l-w,
42
+ .dca-part-arm-l-b,
43
+ .dca-part-arm-l {
44
+ transform-box: view-box;
45
+ transform-origin: 233px 514px;
46
+ transition: transform 320ms cubic-bezier(0.34, 1.56, 0.64, 1) 140ms;
47
+ }
48
+
49
+ .dca-part-arm-r-w,
50
+ .dca-part-arm-r-b {
51
+ transform-box: view-box;
52
+ transform-origin: 791px 514px;
53
+ transition: transform 320ms cubic-bezier(0.34, 1.56, 0.64, 1) 140ms;
54
+ }
55
+
56
+ /* Every keyframe keeps the same function list (translate + rotate + scaleY) so the
57
+ interpolation stays smooth. translate dy=88 lands the hinge at ≈602 viewBox, the
58
+ height of the resting arm nub, so the hand lifts from where the arm already is. */
59
+ @keyframes dca-action-wave-arm {
60
+ 0% {
61
+ transform: translate(0, 0) rotate(0) scaleY(1);
62
+ }
63
+ 16% {
64
+ transform: translate(-48px, 88px) rotate(-122deg) scaleY(0.8);
65
+ }
66
+ 32% {
67
+ transform: translate(-48px, 88px) rotate(-92deg) scaleY(0.8);
68
+ }
69
+ 48% {
70
+ transform: translate(-48px, 88px) rotate(-122deg) scaleY(0.8);
71
+ }
72
+ 64% {
73
+ transform: translate(-48px, 88px) rotate(-92deg) scaleY(0.8);
74
+ }
75
+ 80% {
76
+ transform: translate(-48px, 88px) rotate(-114deg) scaleY(0.8);
77
+ }
78
+ 100% {
79
+ transform: translate(0, 0) rotate(0) scaleY(1);
80
+ }
81
+ }
82
+
83
+ @keyframes dca-action-wave-lean {
84
+ 0%,
85
+ 100% {
86
+ transform: rotate(0);
87
+ }
88
+ 20%,
89
+ 80% {
90
+ transform: rotate(3deg);
91
+ }
92
+ }
93
+
94
+ .dca-action-wave .dca-part-arm-r-w,
95
+ .dca-action-wave .dca-part-arm-r-b {
96
+ animation: dca-action-wave-arm 1.6s ease-in-out both;
97
+ }
98
+
99
+ .dca-action-wave .dca-action-jelly {
100
+ animation: dca-action-wave-lean 1.6s ease-in-out both;
101
+ }
102
+
103
+ /* Props are always-mounted `dca-part-prop-*` groups inside MascotRobot at opacity 0,
104
+ revealed by these composer root classes. */
105
+
106
+ /* The 1200ms delay keeps quick turns from flashing the mini terminal. */
107
+ .dca-part-prop-laptop {
108
+ opacity: 0;
109
+ transition: opacity 200ms ease;
110
+ }
111
+
112
+ .dca-action-prop-laptop .dca-part-prop-laptop {
113
+ opacity: 1;
114
+ transition: opacity 240ms ease 1200ms;
115
+ }
116
+
117
+ .dca-action-prop-laptop .dca-part-arm-l-w,
118
+ .dca-action-prop-laptop .dca-part-arm-l-b,
119
+ .dca-action-prop-laptop .dca-part-arm-l {
120
+ transform: translate(18px, 0);
121
+ transition: transform 320ms cubic-bezier(0.34, 1.56, 0.64, 1) 1200ms;
122
+ }
123
+
124
+ .dca-action-prop-laptop .dca-part-arm-r-w,
125
+ .dca-action-prop-laptop .dca-part-arm-r-b {
126
+ transform: translate(-18px, 0);
127
+ transition: transform 320ms cubic-bezier(0.34, 1.56, 0.64, 1) 1200ms;
128
+ }
129
+
130
+ @keyframes dca-action-laptop-scroll {
131
+ 0%,
132
+ 58% {
133
+ transform: translateY(0);
134
+ }
135
+ 66%,
136
+ 100% {
137
+ transform: translateY(-36px);
138
+ }
139
+ }
140
+
141
+ .dca-action-prop-laptop .dca-part-laptop-lines {
142
+ animation: dca-action-laptop-scroll 2200ms ease-in-out 1640ms infinite;
143
+ }
144
+
145
+ @keyframes dca-action-laptop-caret {
146
+ 0%,
147
+ 100% {
148
+ opacity: 1;
149
+ }
150
+ 50% {
151
+ opacity: 0;
152
+ }
153
+ }
154
+
155
+ .dca-action-prop-laptop .dca-part-laptop-caret {
156
+ animation: dca-action-laptop-caret 800ms steps(1, end) infinite;
157
+ }
158
+
159
+ /* The sign fades in only after the arm settles (320ms spring plus a beat), and on
160
+ retract it hides first while the arm waits out its 140ms transition-delay, so the
161
+ prop is never left floating without a hand. */
162
+ .dca-action-hold-sign .dca-part-arm-r-w,
163
+ .dca-action-hold-sign .dca-part-arm-r-b {
164
+ transform: translate(-48px, 88px) rotate(-128deg) scaleY(0.8);
165
+ transition-delay: 0ms;
166
+ }
167
+
168
+ .dca-part-prop-sign {
169
+ opacity: 0;
170
+ transition: opacity 140ms ease;
171
+ }
172
+
173
+ .dca-action-hold-sign .dca-part-prop-sign {
174
+ opacity: 1;
175
+ transition: opacity 180ms ease 340ms;
176
+ }
177
+
178
+ /* Click greeting while the sign is held: only the angle moves, and it starts and ends
179
+ exactly at the held pose so the hand-off to .dca-action-hold-sign is seamless.
180
+ The compound selector outranks the lone .dca-action-wave arm rule. */
181
+ @keyframes dca-action-sign-wave-arm {
182
+ 0% {
183
+ transform: translate(-48px, 88px) rotate(-128deg) scaleY(0.8);
184
+ }
185
+ 18% {
186
+ transform: translate(-48px, 88px) rotate(-143deg) scaleY(0.8);
187
+ }
188
+ 42% {
189
+ transform: translate(-48px, 88px) rotate(-113deg) scaleY(0.8);
190
+ }
191
+ 66% {
192
+ transform: translate(-48px, 88px) rotate(-143deg) scaleY(0.8);
193
+ }
194
+ 86% {
195
+ transform: translate(-48px, 88px) rotate(-120deg) scaleY(0.8);
196
+ }
197
+ 100% {
198
+ transform: translate(-48px, 88px) rotate(-128deg) scaleY(0.8);
199
+ }
200
+ }
201
+
202
+ /* Pure rotation about the hand's pivot: the shoulder hinge (791,514) shifted by the
203
+ held translate (-48,88), i.e. C = (743,602), by exactly the arm's angular deviation
204
+ from -128° at each step. Same centre and delta keeps the board gripped. */
205
+ @keyframes dca-action-sign-wave-prop {
206
+ 0% {
207
+ transform: rotate(0deg);
208
+ }
209
+ 18% {
210
+ transform: rotate(-15deg);
211
+ }
212
+ 42% {
213
+ transform: rotate(15deg);
214
+ }
215
+ 66% {
216
+ transform: rotate(-15deg);
217
+ }
218
+ 86% {
219
+ transform: rotate(8deg);
220
+ }
221
+ 100% {
222
+ transform: rotate(0deg);
223
+ }
224
+ }
225
+
226
+ .dca-action-hold-sign.dca-action-wave .dca-part-arm-r-w,
227
+ .dca-action-hold-sign.dca-action-wave .dca-part-arm-r-b {
228
+ animation: dca-action-sign-wave-arm 1.6s ease-in-out;
229
+ }
230
+
231
+ .dca-action-hold-sign.dca-action-wave .dca-part-prop-sign {
232
+ transform-box: view-box;
233
+ transform-origin: 743px 602px;
234
+ animation: dca-action-sign-wave-prop 1.6s ease-in-out;
235
+ }
236
+
237
+ /* The cheer reuses the wave's slide-then-rotate hinge grammar, so the outline wraps
238
+ the band and the colour stays seam-continuous. */
239
+ .dca-action-celebrate .dca-part-arm-l-w,
240
+ .dca-action-celebrate .dca-part-arm-l-b,
241
+ .dca-action-celebrate .dca-part-arm-l {
242
+ transform: translate(48px, 88px) rotate(135deg) scaleY(0.82);
243
+ transition-delay: 0ms;
244
+ }
245
+
246
+ .dca-action-celebrate .dca-part-arm-r-w,
247
+ .dca-action-celebrate .dca-part-arm-r-b {
248
+ transform: translate(-48px, 88px) rotate(-135deg) scaleY(0.82);
249
+ transition-delay: 0ms;
250
+ }
251
+ .dca-robot {
252
+ display: inline-flex;
253
+ flex: none;
254
+ vertical-align: middle;
255
+ isolation: isolate;
256
+ }
257
+
258
+ .dca-canvas { overflow: visible; }
259
+ .dca-body-motion { transform-origin: 512px 760px; }
260
+ .dca-robot[data-motion='on'] .dca-body-motion {
261
+ transition: transform 260ms cubic-bezier(.22, .7, .3, 1);
262
+ }
263
+
264
+ /* The production rig owns arm geometry, paired paint layers and all arm motion. */
265
+ .dca-robot[data-compact='true'] .dca-decoration-detail { display: none; }
266
+ .dca-robot[data-exiting='true'] :is(.dca-part-prop-laptop, .dca-part-prop-sign) {
267
+ opacity: 0;
268
+ transition: opacity 140ms ease;
269
+ }
270
+
271
+ .dca-robot[data-pose='thinking'] .dca-body-motion { transform: rotate(-4deg); }
272
+ .dca-robot[data-pose='working'] .dca-body-motion { transform: translateY(12px) rotate(2deg); }
273
+ .dca-robot[data-pose='blocked'] .dca-body-motion { transform: translateY(22px) scaleY(.96); }
274
+ .dca-robot[data-pose='greeting'] .dca-body-motion { transform: rotate(-3deg); }
275
+
276
+ .dca-robot[data-motion='on'][data-pose='idle'] .dca-body-motion { animation: dca-breathe 5s ease-in-out infinite; }
277
+ .dca-robot[data-motion='on'][data-pose='idle'] .dca-part-caret { animation: dca-cursor 7s step-end infinite; }
278
+ .dca-robot[data-motion='on'][data-pose='working'] .dca-body-motion { animation: dca-work var(--dca-loop) ease-in-out infinite; }
279
+ .dca-robot[data-motion='on'][data-pose='done'] .dca-body-motion { animation: dca-celebrate 800ms ease-in-out both; }
280
+ .dca-robot[data-motion='on'][data-pose='acknowledge'] .dca-body-motion { animation: dca-nod 350ms ease-in-out both; }
281
+
282
+ .dca-robot[data-paused='true'] * { animation-play-state: paused !important; }
283
+ .dca-robot[data-exiting='true'] .dca-body-motion { animation: none !important; }
284
+ .dca-robot[data-motion='off'] * { animation: none !important; transition: none !important; }
285
+
286
+ @keyframes dca-breathe {
287
+ 0%, 100% { transform: translateY(0) scaleY(1); }
288
+ 50% { transform: translateY(-9px) scaleY(1.008); }
289
+ }
290
+ @keyframes dca-cursor { 0%, 93%, 100% { opacity: 1; } 95%, 98% { opacity: .12; } }
291
+ @keyframes dca-work {
292
+ 0%, 100% { transform: translateY(12px) rotate(2deg); }
293
+ 50% { transform: translateY(5px) rotate(0deg); }
294
+ }
295
+ @keyframes dca-celebrate {
296
+ 0%, 100% { transform: translateY(0); }
297
+ 20% { transform: translateY(10px) scaleY(.97); }
298
+ 55% { transform: translateY(-30px) rotate(-3deg); }
299
+ }
300
+ @keyframes dca-nod {
301
+ 0%, 100% { transform: translateY(0); }
302
+ 38% { transform: translateY(17px) scaleY(.97); }
303
+ 68% { transform: translateY(-8px); }
304
+ }
305
+
306
+
307
+ .dca-robot[data-pose='sleep'] .dca-body-motion { transform: translateY(18px) rotate(4deg); }
308
+ .dca-robot[data-pose='sleep'] .dca-part-light { opacity: .45; }
309
+ .dca-robot[data-motion='off'][data-pose='greeting'] :is(.dca-part-arm-r-w, .dca-part-arm-r-b) { transform: translate(-48px, 88px) rotate(-110deg) scaleY(.8); }
310
+ @media (prefers-reduced-motion: reduce) {
311
+ .dca-robot[data-mode='system'] * { animation: none !important; transition: none !important; }
312
+ }
313
+ .dca-part-held,
314
+ .dca-part-temple {
315
+ opacity: 1;
316
+ transition: opacity 150ms ease 460ms;
317
+ }
318
+ .dca-robot:is([data-held-state='stowed'], [data-exiting='true']) .dca-part-held,
319
+ .dca-action-hold-sign .dca-part-temple {
320
+ opacity: 0;
321
+ transition: opacity 140ms ease;
322
+ }
323
+ .dca-robot[data-gesture='blink'] .dca-part-caret { animation: none !important; }
324
+
325
+ /* Lift an upright tool beside the face rather than sweeping it across the screen. */
326
+ .dca-robot[data-held-state='holding'] .dca-action-celebrate :is(.dca-part-arm-l-w, .dca-part-arm-l-b, .dca-part-arm-l) {
327
+ transform: translate(30px, -65px) rotate(20deg);
328
+ }
329
+ .dca-robot[data-effects='off'] .dca-fx { display: none; }
330
+
331
+ .dca-fx-sheen { transform: translateX(120px); }
332
+ .dca-fx-prism { transform: translateX(-40px); }
333
+ .dca-fx-scanline { transform: translateY(260px); }
334
+ .dca-fx-orbit-front, .dca-fx-orbit-back { offset-path: path('M486 0A140 104 0 0 1 346 104H-346A140 104 0 0 1-486 0 140 104 0 0 1-346-104H346A140 104 0 0 1 486 0Z'); }
335
+ .dca-fx-koi-a { offset-distance: 35%; }
336
+ .dca-fx-koi-b { offset-distance: 93.33%; }
337
+ .dca-fx-koi-a > g { transform: scale(1, -1); }
338
+ .dca-fx-koi-b > g { transform: scale(1, .9); }
339
+ .dca-fx-orbit-back, .dca-fx-orbit-front.dca-fx-koi-b { opacity: 0; }
340
+ .dca-fx-orbit-back.dca-fx-koi-b { opacity: 1; }
341
+ .dca-fx-sparkle > path { transform-box: fill-box; transform-origin: center; }
342
+ .dca-fx-spray { opacity: 0; transform-box: fill-box; transform-origin: center; }
343
+ .dca-fx-eye-flare { opacity: .25; }
344
+
345
+ @keyframes dca-fx-pulse { 0%, 100% { opacity: .5; } 50% { opacity: 1; } }
346
+ @keyframes dca-fx-flare { 0%, 100% { opacity: .8; } 12% { opacity: 1; } 20% { opacity: .7; } 28% { opacity: 1; } 60% { opacity: .9; } }
347
+ @keyframes dca-fx-breathe { 0%, 100% { opacity: .2; } 50% { opacity: .45; } }
348
+ @keyframes dca-fx-scan-eyes { 0% { transform: translateX(0); } 100% { transform: translateX(300px); } }
349
+ @keyframes dca-fx-flap { 0% { transform: rotate(-12deg); } 100% { transform: rotate(12deg); } }
350
+ @keyframes dca-fx-sway { 0% { transform: rotate(-1.6deg); } 100% { transform: rotate(1.6deg); } }
351
+ @keyframes dca-fx-blade-length { 0%, 100% { transform: scaleY(1); } 38% { transform: scaleY(.58); } 56% { transform: scaleY(1.08); } }
352
+ @keyframes dca-fx-blade-color { 0%, 100% { fill: #4de3ff; } 33% { fill: #ff6bd6; } 66% { fill: #8dff9a; } }
353
+ @keyframes dca-fx-orb-color { 0%, 100% { fill: #8b5cf6; } 33% { fill: #4de3ff; } 66% { fill: #ff6bd6; } }
354
+ @keyframes dca-fx-spin-flat { 0% { transform: scaleX(1); } 50% { transform: scaleX(.08); } 100% { transform: scaleX(1); } }
355
+ @keyframes dca-fx-swing { 0% { transform: rotate(-10deg); } 100% { transform: rotate(10deg); } }
356
+ @keyframes dca-fx-hover { 0% { transform: translateY(0); } 100% { transform: translateY(-14px); } }
357
+ @keyframes dca-fx-wave { 0% { transform: skewY(-6deg); } 100% { transform: skewY(6deg); } }
358
+ @keyframes dca-fx-rotate { to { transform: rotate(360deg); } }
359
+ @keyframes dca-fx-void-hot { from { transform: rotate(0deg); fill: #9fdcff; } to { transform: rotate(360deg); fill: #9fdcff; } }
360
+ @keyframes dca-fx-sonar {
361
+ 0% { transform: scale(1); } 25% { transform: scale(1.157); } 50% { transform: scale(1.339); } 75% { transform: scale(1.549); } 100% { transform: scale(1.793); }
362
+ }
363
+ @keyframes dca-fx-tide { 0% { transform: translateY(70px); } 100% { transform: translateY(-150px); } }
364
+ @keyframes dca-fx-lava {
365
+ 0%, 100% { stop-color: #4a1208; } 20% { stop-color: #e8451f; } 40% { stop-color: #ffb347; } 60% { stop-color: #ff6a2a; } 80% { stop-color: #7a1f0e; }
366
+ }
367
+ @keyframes dca-fx-galaxy {
368
+ 0%, 100% { stop-color: #1b1040; } 20% { stop-color: #4c1d95; } 40% { stop-color: #2563eb; } 60% { stop-color: #0b3d62; } 80% { stop-color: #7c3aed; }
369
+ }
370
+ @keyframes dca-fx-aurora {
371
+ 0%, 100% { stop-color: #0a1f33; } 20% { stop-color: #1fbf8f; } 40% { stop-color: #5eead4; } 60% { stop-color: #7c6cf0; } 80% { stop-color: #122046; }
372
+ }
373
+ @keyframes dca-fx-thermal { 0%, 100% { stop-color: #1a0b5e; } 25% { stop-color: #5b1fa8; } 50% { stop-color: #c02a6b; } 75% { stop-color: #3b1488; } }
374
+ @keyframes dca-fx-thermal-hot { 0%, 100% { stop-color: #c02a6b; } 25% { stop-color: #ff7a1f; } 50% { stop-color: #ffb020; } 75% { stop-color: #ffd23f; } }
375
+ @keyframes dca-fx-patina { to { stop-color: #58b39a; } }
376
+ @keyframes dca-fx-scanline { 0% { transform: translateY(0); } 100% { transform: translateY(560px); } }
377
+ @keyframes dca-fx-scan { 0% { transform: translateX(-30px); } 100% { transform: translateX(290px); } }
378
+ @keyframes dca-fx-steam { 0% { opacity: 0; transform: translateY(12px); } 35% { opacity: .8; } 100% { opacity: 0; transform: translateY(-28px); } }
379
+ @keyframes dca-fx-sparkle { 0%, 100% { opacity: .15; transform: scale(.55); } 50% { opacity: 1; transform: scale(1.15); } }
380
+ @keyframes dca-fx-flame { 0% { transform: scaleY(.82) scaleX(.94); opacity: .85; } 100% { transform: scaleY(1.12) scaleX(1.04); opacity: 1; } }
381
+ @keyframes dca-fx-node { 0%, 100% { opacity: .3; } 50% { opacity: 1; } }
382
+ @keyframes dca-fx-sheen { 0% { transform: translateX(-440px); } 55% { transform: translateX(740px); } 100% { transform: translateX(740px); } }
383
+ @keyframes dca-fx-prism-echo { 0%, 45% { transform: translateX(-440px); } 100% { transform: translateX(740px); } }
384
+ @keyframes dca-fx-holo {
385
+ 0% { stop-color: #ff8ad4; } 20% { stop-color: #ffd28a; } 40% { stop-color: #c9ff8a; }
386
+ 60% { stop-color: #8ad8ff; } 80% { stop-color: #c98aff; } 100% { stop-color: #ff8ad4; }
387
+ }
388
+ @keyframes dca-fx-lean { 0%, 100% { transform: rotate(-2.4deg); } 50% { transform: rotate(3.2deg); } }
389
+ @keyframes dca-fx-swell { 0%, 100% { transform: translateY(10px) rotate(1.2deg); } 50% { transform: translateY(-10px) rotate(-1.2deg); } }
390
+ @keyframes dca-fx-reach { 0%, 100% { transform: scale(.8); } 40% { transform: scale(1.05); } }
391
+ @keyframes dca-fx-foam { 0%, 100% { opacity: .55; } 40% { opacity: 1; } }
392
+ @keyframes dca-fx-spray { 0% { opacity: 0; transform: translate(0, 10px) scale(.4); } 25% { opacity: 1; transform: translate(10px, -12px) scale(1); } 100% { opacity: 0; transform: translate(44px, -76px) scale(.2); } }
393
+ @keyframes dca-fx-coil { 0%, 100% { transform: rotate(calc(var(--dca-coil) * -1deg)); } 50% { transform: rotate(calc(var(--dca-coil) * 1deg)); } }
394
+ @keyframes dca-fx-whisker { 0%, 100% { transform: rotate(-5deg); } 50% { transform: rotate(6deg); } }
395
+ @keyframes dca-fx-whisker-tip { 0%, 100% { transform: rotate(-9deg); } 50% { transform: rotate(10deg); } }
396
+ @keyframes dca-fx-frill-l { 0% { transform: rotate(-3deg); } 100% { transform: rotate(3deg); } }
397
+ @keyframes dca-fx-frill-r { 0% { transform: rotate(3deg); } 100% { transform: rotate(-3deg); } }
398
+ @keyframes dca-fx-frill-flare { 0%, 24%, 50%, 100% { transform: scale(1); } 30% { transform: scale(1.1); } 40% { transform: scale(1.06); } }
399
+ @keyframes dca-fx-rear {
400
+ 0%, 100% { transform: translate(0, 0) rotate(0deg) scale(1); } 12% { transform: translate(0, -6px) rotate(-1.2deg) scale(1); }
401
+ 23% { transform: translate(0, 4px) rotate(.8deg) scale(.99); } 30% { transform: translate(0, -12px) rotate(-2deg) scale(1.05); }
402
+ 40% { transform: translate(0, -9px) rotate(-1.6deg) scale(1.04); } 54% { transform: translate(0, 0) rotate(0deg) scale(1); }
403
+ 77% { transform: translate(0, -6px) rotate(-1deg) scale(1); }
404
+ }
405
+ @keyframes dca-fx-eye-flare { 0%, 22%, 54%, 100% { opacity: .25; } 28%, 42% { opacity: 1; } }
406
+ @keyframes dca-fx-drift { 0% { transform: translateX(-10px); } 100% { transform: translateX(10px); } }
407
+ @keyframes dca-fx-orbit { from { offset-distance: 0%; } to { offset-distance: 100%; } }
408
+ @keyframes dca-fx-koi-roll {
409
+ 0%, 50%, 100% { transform: scale(1, 0); } 2.5%, 47.5% { transform: scale(1, -.72); } 9%, 41% { transform: scale(1, -1); }
410
+ 52.5%, 97.5% { transform: scale(1, .72); } 59%, 91% { transform: scale(1, 1); }
411
+ }
412
+ /* The lower half of the orbit (0–50%) is in front of the body, the upper half behind it. */
413
+ @keyframes dca-fx-orbit-show-front { 0%, 49.99% { opacity: 1; } 50%, 100% { opacity: 0; } }
414
+ @keyframes dca-fx-orbit-show-back { 0%, 49.99% { opacity: 0; } 50%, 100% { opacity: 1; } }
415
+
416
+ .dca-robot[data-effects='live'] .dca-fx-pulse { animation: dca-fx-pulse 2.8s ease-in-out infinite; }
417
+ .dca-robot[data-effects='live'] .dca-fx-flare { animation: dca-fx-flare 2.2s ease-in-out infinite; }
418
+ .dca-robot[data-effects='live'] .dca-fx-breathe { animation: dca-fx-breathe 3.2s ease-in-out infinite; }
419
+ .dca-robot[data-effects='live'] .dca-fx-scan-eyes { animation: dca-fx-scan-eyes 1.6s cubic-bezier(.45, 0, .55, 1) infinite alternate; }
420
+ .dca-robot[data-effects='live'] .dca-fx-flap { animation: dca-fx-flap 1.3s ease-in-out infinite alternate; }
421
+ .dca-robot[data-effects='live'] .dca-fx-sway { animation: dca-fx-sway 3.4s ease-in-out infinite alternate; }
422
+ .dca-robot[data-effects='live'] .dca-fx-blade { animation: dca-fx-blade-length 4.4s ease-in-out infinite; }
423
+ .dca-robot[data-effects='live'] .dca-fx-blade-color { animation: dca-fx-blade-color 6s linear infinite; }
424
+ .dca-robot[data-effects='live'] .dca-fx-orb-color { animation: dca-fx-orb-color 5s linear infinite; }
425
+ .dca-robot[data-effects='live'] .dca-fx-spin-flat { animation: dca-fx-spin-flat .5s linear infinite; }
426
+ .dca-robot[data-effects='live'] .dca-fx-swing { animation: dca-fx-swing 1.4s ease-in-out infinite alternate; }
427
+ .dca-robot[data-effects='live'] .dca-fx-hover { animation: dca-fx-hover 2.2s ease-in-out infinite alternate; }
428
+ .dca-robot[data-effects='live'] .dca-fx-wave { animation: dca-fx-wave 1.1s ease-in-out infinite alternate; }
429
+ .dca-robot[data-effects='live'] .dca-fx-rotate { animation: dca-fx-rotate 28s linear infinite; }
430
+ .dca-robot[data-effects='live'] .dca-fx-rotate-fast { animation: dca-fx-rotate 6s linear infinite; }
431
+ .dca-robot[data-effects='live'] .dca-fx-spin-flat-slow { animation: dca-fx-spin-flat 2.4s linear infinite; }
432
+ .dca-robot[data-effects='live'] .dca-fx-flap-slow { animation: dca-fx-flap 2.6s ease-in-out infinite alternate; }
433
+ .dca-robot[data-effects='live'] .dca-skin-lava stop { animation: dca-fx-lava 7s ease-in-out infinite; }
434
+ .dca-robot[data-effects='live'] .dca-skin-galaxy stop { animation: dca-fx-galaxy 9s ease-in-out infinite; }
435
+ .dca-robot[data-effects='live'] .dca-skin-aurora stop { animation: dca-fx-aurora 8s ease-in-out infinite; }
436
+ .dca-robot[data-effects='live'] .dca-skin-thermal stop { animation: dca-fx-thermal 8s ease-in-out infinite; }
437
+ .dca-robot[data-effects='live'] :is(.dca-skin-lava, .dca-skin-galaxy, .dca-skin-aurora, .dca-skin-thermal) stop:nth-child(2) { animation-delay: -1.4s; }
438
+ .dca-robot[data-effects='live'] :is(.dca-skin-lava, .dca-skin-galaxy, .dca-skin-aurora, .dca-skin-thermal) stop:nth-child(3) { animation-delay: -2.8s; }
439
+ .dca-robot[data-effects='live'] :is(.dca-skin-lava, .dca-skin-galaxy, .dca-skin-aurora, .dca-skin-thermal) stop:nth-child(4) { animation-delay: -4.2s; }
440
+ .dca-robot[data-effects='live'] :is(.dca-skin-lava, .dca-skin-galaxy, .dca-skin-aurora, .dca-skin-thermal) stop:nth-child(5) { animation-delay: -5.6s; }
441
+ .dca-robot[data-effects='live'] .dca-skin-patina stop:nth-child(3) { animation: dca-fx-patina 12s ease-in-out infinite alternate; }
442
+ .dca-robot[data-effects='live'] .dca-fx-pinwheel { animation: dca-fx-rotate 24s linear infinite; }
443
+ .dca-robot[data-effects='live'] .dca-fx-sonar { animation: dca-fx-sonar 3.6s linear infinite; }
444
+ .dca-robot[data-effects='live'] .dca-fx-tide { animation: dca-fx-tide 7s ease-in-out infinite alternate; }
445
+ .dca-robot[data-effects='live'] .dca-fx-void { animation: dca-fx-rotate 12s linear infinite; }
446
+ .dca-robot[data-effects='live'] .dca-fx-scanline { animation: dca-fx-scanline 3.6s linear infinite; }
447
+ .dca-robot[data-effects='live'] .dca-fx-scan { animation: dca-fx-scan 2.4s cubic-bezier(.45, 0, .55, 1) infinite alternate; }
448
+ .dca-robot[data-effects='live'] .dca-fx-steam { animation: dca-fx-steam 2.6s ease-out infinite; }
449
+ .dca-robot[data-effects='live'] .dca-fx-sparkle > path { animation: dca-fx-sparkle 1.8s ease-in-out infinite; }
450
+ .dca-fx-sparkle-solo { transform-box: fill-box; transform-origin: center; }
451
+ .dca-robot[data-effects='live'] .dca-fx-sparkle-solo { animation: dca-fx-sparkle 2.4s ease-in-out infinite; }
452
+ .dca-robot[data-effects='live'] .dca-fx-flame { animation: dca-fx-flame .42s ease-in-out infinite alternate; }
453
+ .dca-robot[data-effects='live'] .dca-fx-node { animation: dca-fx-node 1.8s ease-in-out infinite; }
454
+ .dca-robot[data-effects='live'] .dca-fx-sheen { animation: dca-fx-sheen 4.8s cubic-bezier(.5, .05, .5, .95) infinite; }
455
+ .dca-robot[data-effects='live'] .dca-fx-prism-echo { animation-name: dca-fx-prism-echo; }
456
+ .dca-robot[data-effects='live'] .dca-fx-orbit-front { animation: dca-fx-orbit 8s linear infinite, dca-fx-orbit-show-front 8s linear infinite; }
457
+ .dca-robot[data-effects='live'] .dca-fx-orbit-back { animation: dca-fx-orbit 8s linear infinite, dca-fx-orbit-show-back 8s linear infinite; }
458
+ .dca-robot[data-effects='live'] :is(.dca-fx-orbit-front, .dca-fx-orbit-back) > g { animation: dca-fx-koi-roll 8s linear infinite; animation-delay: inherit; }
459
+ .dca-robot[data-effects='live'] .dca-fx-lean { animation: dca-fx-lean 8.4s ease-in-out infinite; }
460
+ .dca-robot[data-effects='live'] .dca-fx-swell { animation: dca-fx-swell 6s ease-in-out infinite; }
461
+ .dca-robot[data-effects='live'] .dca-fx-reach { animation: dca-fx-reach 5.6s ease-in-out infinite; }
462
+ .dca-robot[data-effects='live'] .dca-fx-foam { animation: dca-fx-foam 5.6s ease-in-out infinite; animation-delay: inherit; }
463
+ .dca-robot[data-effects='live'] .dca-fx-spray { animation: dca-fx-spray 4.8s ease-out infinite; }
464
+ .dca-robot[data-effects='live'] .dca-fx-coil { animation: dca-fx-coil 3.6s ease-in-out infinite; }
465
+ .dca-robot[data-effects='live'] .dca-fx-whisker { animation: dca-fx-whisker 3.6s ease-in-out infinite; }
466
+ .dca-robot[data-effects='live'] .dca-fx-whisker-tip { animation: dca-fx-whisker-tip 3.6s ease-in-out infinite; }
467
+ .dca-robot[data-effects='live'] .dca-fx-frill-l { animation: dca-fx-frill-l 1.8s ease-in-out infinite alternate; }
468
+ .dca-robot[data-effects='live'] .dca-fx-frill-r { animation: dca-fx-frill-r 1.8s ease-in-out infinite alternate; }
469
+ .dca-robot[data-effects='live'] .dca-fx-frill-flare { animation: dca-fx-frill-flare 7.2s ease-in-out infinite; }
470
+ .dca-robot[data-effects='live'] .dca-fx-rear { animation: dca-fx-rear 7.2s ease-in-out infinite; }
471
+ .dca-robot[data-effects='live'] .dca-fx-eye-flare { animation: dca-fx-eye-flare 7.2s ease-in-out infinite; }
472
+ .dca-robot[data-effects='live'] .dca-fx-drift { animation: dca-fx-drift 6s ease-in-out infinite alternate; }
473
+ .dca-robot[data-effects='live'] .dca-skin-holo stop { animation: dca-fx-holo 6s linear infinite; }
474
+ .dca-robot[data-effects='live'] .dca-skin-holo stop:nth-child(2) { animation-delay: -1.2s; }
475
+ .dca-robot[data-effects='live'] .dca-skin-holo stop:nth-child(3) { animation-delay: -2.4s; }
476
+ .dca-robot[data-effects='live'] .dca-skin-holo stop:nth-child(4) { animation-delay: -3.6s; }
477
+ .dca-robot[data-effects='live'] .dca-skin-holo stop:nth-child(5) { animation-delay: -4.8s; }
478
+
479
+ .dca-fx-volcano-flash, .dca-fx-volcano-bomb, .dca-fx-volcano-ash, .dca-fx-volcano-tongue { opacity: 0; }
480
+ .dca-fx-ufo-core, .dca-fx-ufo-abduct, .dca-fx-planet-sweep, .dca-fx-planet-spark, .dca-fx-planet-flare { opacity: 0; }
481
+ .dca-fx-phoenix-flare, .dca-fx-phoenix-pyre, .dca-fx-phoenix-ember { opacity: 0; }
482
+ .dca-fx-ufo-abduct, .dca-fx-phoenix-ember { transform-box: fill-box; transform-origin: center; }
483
+
484
+ @keyframes dca-fx-volcano-quake {
485
+ 0%, 27% { transform: translateX(0) scale(1, 1); } 28% { transform: translateX(-8px) scale(1.03, .95); }
486
+ 29% { transform: translateX(8px) scale(1.04, .92); } 30% { transform: translateX(-8px) scale(1.05, .9); }
487
+ 31% { transform: translateX(6px) scale(1.05, .89); } 32.5% { transform: translateX(0) scale(.94, 1.1); }
488
+ 35% { transform: translateX(0) scale(1.02, .98); } 37.5%, 100% { transform: translateX(0) scale(1, 1); }
489
+ }
490
+ @keyframes dca-fx-volcano-flash { 0%, 31% { opacity: 0; } 33% { opacity: 1; } 46%, 100% { opacity: 0; } }
491
+ @keyframes dca-fx-volcano-crater { 0%, 31%, 44%, 100% { fill: #ffb347; } 33%, 37% { fill: #fff3c4; } }
492
+ @keyframes dca-fx-volcano-lava { 0%, 31%, 46%, 100% { fill: #e8451f; } 33%, 39% { fill: #ff8a3d; } }
493
+ @keyframes dca-fx-volcano-bomb {
494
+ 0%, 31.9% { opacity: 0; transform: translateX(0); } 32% { opacity: 1; transform: translateX(0); }
495
+ 44% { opacity: 1; transform: translateX(var(--dca-dx)); } 48%, 100% { opacity: 0; transform: translateX(var(--dca-dx)); }
496
+ }
497
+ @keyframes dca-fx-volcano-arc {
498
+ 0%, 32% { transform: translateY(0); animation-timing-function: cubic-bezier(.33, .67, .67, 1); }
499
+ 37.5% { transform: translateY(var(--dca-up)); animation-timing-function: cubic-bezier(.33, 0, .67, .33); }
500
+ 44%, 100% { transform: translateY(var(--dca-down)); }
501
+ }
502
+ @keyframes dca-fx-volcano-ash {
503
+ 0%, 32% { opacity: 0; transform: translateY(36px) scale(.3); } 35% { opacity: 1; }
504
+ 40% { opacity: .95; transform: translateY(-14px) scale(1); } 50%, 100% { opacity: 0; transform: translateY(-34px) scale(1.18); }
505
+ }
506
+ @keyframes dca-fx-volcano-tongue {
507
+ 0%, 33% { opacity: 0; transform: scaleY(0); fill: #fff3c4; } 34% { opacity: 1; }
508
+ 38% { transform: scaleY(1); fill: #ffb347; } 44% { opacity: 1; fill: #e8451f; } 50%, 100% { opacity: 0; transform: scaleY(1); fill: #7a1f0e; }
509
+ }
510
+ @keyframes dca-fx-ufo-chase { 0% { opacity: 1; } 26%, 100% { opacity: .3; } }
511
+ @keyframes dca-fx-ufo-beam {
512
+ 0%, 30% { transform: scale(1, 1); } 33% { transform: scale(1.3, 1.62); } 42% { transform: scale(1.26, 1.56); } 48%, 100% { transform: scale(1, 1); }
513
+ }
514
+ @keyframes dca-fx-ufo-core { 0%, 30% { opacity: 0; } 33%, 42% { opacity: .85; } 47%, 100% { opacity: 0; } }
515
+ @keyframes dca-fx-ufo-abduct {
516
+ 0%, 32% { opacity: 0; transform: translate(0, 0) rotate(0deg) scale(.5); } 33.5% { opacity: 1; transform: translate(0, -10px) rotate(30deg) scale(1); }
517
+ 38.5% { opacity: 1; transform: translate(var(--dca-dx), -78px) rotate(100deg) scale(.8); }
518
+ 40%, 100% { opacity: 0; transform: translate(var(--dca-dx), -96px) rotate(130deg) scale(.4); }
519
+ }
520
+ @keyframes dca-fx-ufo-dip {
521
+ 0%, 42.5% { transform: translateY(0) rotate(0deg); } 44.5% { transform: translateY(10px) rotate(0deg); }
522
+ 47% { transform: translateY(-3px) rotate(-6deg); } 49.5% { transform: translateY(0) rotate(2.5deg); } 52%, 100% { transform: translateY(0) rotate(0deg); }
523
+ }
524
+ @keyframes dca-fx-planet-turn { to { transform: translateX(184px); } }
525
+ @keyframes dca-fx-planet-spark {
526
+ 0% { opacity: 0; transform: translate(0, 0); } 9% { opacity: 1; transform: translate(13px, 15px); } 18% { transform: translate(51px, 28px); }
527
+ 27% { transform: translate(108px, 37px); } 36% { transform: translate(175px, 40px); } 45% { transform: translate(242px, 37px); }
528
+ 54% { transform: translate(299px, 28px); } 63% { opacity: 1; transform: translate(337px, 15px); } 72%, 100% { opacity: 0; transform: translate(350px, 0); }
529
+ }
530
+ @keyframes dca-fx-planet-sweep { 0%, 30% { opacity: 0; stroke-dashoffset: -75; } 32%, 44% { opacity: 1; } 46%, 100% { opacity: 0; stroke-dashoffset: -175; } }
531
+ @keyframes dca-fx-planet-flare { 0%, 30% { opacity: 0; } 33.5% { opacity: 1; } 46%, 100% { opacity: 0; } }
532
+ @keyframes dca-fx-phoenix-pyre {
533
+ 0%, 30% { opacity: 0; transform: scale(.4, .1); } 30.5% { opacity: 1; } 32.5% { transform: scale(1.04, 1.05); } 34.5% { transform: scale(.97, .95); }
534
+ 36.5% { transform: scale(1.03, 1.04); } 38.5% { transform: scale(1, .98); } 41.5% { opacity: 1; transform: scale(.7, .22); } 43%, 100% { opacity: 0; transform: scale(.5, .05); }
535
+ }
536
+ @keyframes dca-fx-phoenix-regrow {
537
+ 0%, 30% { transform: scale(1); } 32%, 40% { transform: scale(.01); } 43.5% { transform: scale(1.16); } 45.5% { transform: scale(.95); } 47.5%, 100% { transform: scale(1); }
538
+ }
539
+ @keyframes dca-fx-phoenix-flare { 0%, 30% { opacity: 0; } 32% { opacity: 1; } 39% { opacity: .8; } 46%, 100% { opacity: 0; } }
540
+ @keyframes dca-fx-phoenix-ember {
541
+ 0%, 41% { opacity: 0; transform: translate(0, 0) scale(.4); } 42% { opacity: 1; transform: translate(calc(var(--dca-dx) * .3), calc(var(--dca-dy) * .3)) scale(1); }
542
+ 45% { opacity: 1; transform: translate(calc(var(--dca-dx) * .85), calc(var(--dca-dy) * .85)) scale(.75); } 47.5%, 100% { opacity: 0; transform: translate(var(--dca-dx), var(--dca-dy)) scale(.4); }
543
+ }
544
+
545
+ .dca-robot[data-effects='live'] .dca-fx-volcano-quake { animation: dca-fx-volcano-quake 9s linear infinite; }
546
+ .dca-robot[data-effects='live'] .dca-fx-volcano-flash { animation: dca-fx-volcano-flash 9s ease-out infinite; }
547
+ .dca-robot[data-effects='live'] .dca-fx-volcano-crater { animation: dca-fx-volcano-crater 9s ease-out infinite; }
548
+ .dca-robot[data-effects='live'] .dca-fx-volcano-lava { animation: dca-fx-volcano-lava 9s ease-out infinite; }
549
+ .dca-robot[data-effects='live'] .dca-fx-volcano-bomb { animation: dca-fx-volcano-bomb 9s linear infinite; }
550
+ .dca-robot[data-effects='live'] .dca-fx-volcano-arc { animation: dca-fx-volcano-arc 9s linear infinite; animation-delay: inherit; }
551
+ .dca-robot[data-effects='live'] .dca-fx-volcano-ash { animation: dca-fx-volcano-ash 9s ease-out infinite; }
552
+ .dca-robot[data-effects='live'] .dca-fx-volcano-tongue { animation: dca-fx-volcano-tongue 9s ease-out infinite; }
553
+ .dca-robot[data-effects='live'] .dca-fx-ufo-chase { animation: dca-fx-ufo-chase 1.5s ease-out infinite; }
554
+ .dca-robot[data-effects='live'] .dca-fx-ufo-beam { animation: dca-fx-ufo-beam 9s ease-in-out infinite; }
555
+ .dca-robot[data-effects='live'] .dca-fx-ufo-core { animation: dca-fx-ufo-core 9s ease-in-out infinite; }
556
+ .dca-robot[data-effects='live'] .dca-fx-ufo-abduct { animation: dca-fx-ufo-abduct 9s ease-in-out infinite; }
557
+ .dca-robot[data-effects='live'] .dca-fx-ufo-dip { animation: dca-fx-ufo-dip 9s ease-in-out infinite; }
558
+ .dca-robot[data-effects='live'] .dca-fx-planet-turn { animation: dca-fx-planet-turn 9s linear infinite; }
559
+ .dca-robot[data-effects='live'] .dca-fx-planet-spark { animation: dca-fx-planet-spark 4.5s linear infinite; }
560
+ .dca-robot[data-effects='live'] .dca-fx-planet-sweep { animation: dca-fx-planet-sweep 9s ease-in-out infinite; }
561
+ .dca-robot[data-effects='live'] .dca-fx-planet-flare { animation: dca-fx-planet-flare 9s ease-out infinite; }
562
+ .dca-robot[data-effects='live'] .dca-fx-phoenix-pyre { animation: dca-fx-phoenix-pyre 9s ease-in-out infinite; }
563
+ .dca-robot[data-effects='live'] .dca-fx-phoenix-regrow { animation: dca-fx-phoenix-regrow 9s ease-in-out infinite; }
564
+ .dca-robot[data-effects='live'] .dca-fx-phoenix-flare { animation: dca-fx-phoenix-flare 9s ease-out infinite; }
565
+ .dca-robot[data-effects='live'] .dca-fx-phoenix-ember { animation: dca-fx-phoenix-ember 9s ease-out infinite; }
566
+ .dca-fx-facet-flash, .dca-fx-strike, .dca-fx-zap, .dca-fx-coin-toss { opacity: 0; }
567
+ .dca-fx-star-pop, .dca-fx-shard { opacity: 0; transform-box: fill-box; transform-origin: center; }
568
+
569
+ @keyframes dca-fx-sweep { 0% { transform: translateX(0); } 14%, 100% { transform: translateX(520px); } }
570
+ @keyframes dca-fx-facet-flash { 0%, 8%, 100% { opacity: 0; } 3% { opacity: .95; } }
571
+ @keyframes dca-fx-star-pop {
572
+ 0%, 100% { opacity: 0; transform: scale(0) rotate(-45deg); } 3% { opacity: 1; transform: scale(1.15) rotate(0deg); }
573
+ 6% { opacity: 1; transform: scale(.8) rotate(20deg); } 9% { opacity: 0; transform: scale(0) rotate(45deg); }
574
+ }
575
+ @keyframes dca-fx-strike { 0%, 7%, 100% { opacity: 0; } 1% { opacity: 1; } 2.2% { opacity: .2; } 3.2%, 4.4% { opacity: 1; } }
576
+ @keyframes dca-fx-zap {
577
+ 0%, 100% { opacity: 0; transform: scale(.2); } 1% { opacity: 1; transform: scale(1); } 2.2% { opacity: .2; } 3.2% { opacity: 1; }
578
+ 5.5% { opacity: 0; transform: scale(1.08); }
579
+ }
580
+ @keyframes dca-fx-jolt {
581
+ 0%, 7%, 100% { transform: none; } 1% { transform: rotate(-4deg) scale(1.06, .9); } 2.2% { transform: rotate(3deg) scale(.96, 1.06); }
582
+ 3.4% { transform: rotate(-1.5deg) scale(1.02, .98); } 4.8% { transform: rotate(.6deg) scale(1, 1); }
583
+ }
584
+ @keyframes dca-fx-shard {
585
+ 0%, 100% { opacity: 0; transform: translate(0, 0) scale(.4) rotate(0deg); }
586
+ 5% { opacity: 1; transform: translate(2px, -30px) scale(1) rotate(6deg); }
587
+ 15% { opacity: 1; transform: translate(12px, -96px) scale(.95) rotate(16deg); }
588
+ 22% { opacity: 0; transform: translate(18px, -130px) scale(.8) rotate(24deg); }
589
+ }
590
+ @keyframes dca-fx-coin-toss {
591
+ 0%, 100% { opacity: 0; transform: translate(0, 0) scale(.3); } 2% { opacity: 1; transform: translate(-17px, -35px) scale(.9); }
592
+ 4% { transform: translate(-33px, -57px) scale(1); } 6% { transform: translate(-50px, -66px) scale(1); } 8% { transform: translate(-67px, -61px) scale(1); }
593
+ 10% { transform: translate(-83px, -44px) scale(1); } 12% { transform: translate(-100px, -12px) scale(1); } 14% { transform: translate(-117px, 32px) scale(1); }
594
+ 16% { opacity: 1; transform: translate(-133px, 89px) scale(1); } 18% { opacity: 0; transform: translate(-150px, 160px) scale(1); }
595
+ }
596
+ @keyframes dca-fx-coin-flip { 0%, 4%, 6.5%, 9%, 100% { transform: scaleX(1); } 5.25%, 7.75% { transform: scaleX(-1); } }
597
+ @keyframes dca-fx-pendant {
598
+ 0%, 100% { transform: rotate(0deg); animation-timing-function: ease-out; } 25% { transform: rotate(6deg); animation-timing-function: ease-in-out; }
599
+ 75% { transform: rotate(-6deg); animation-timing-function: ease-in; }
600
+ }
601
+
602
+ .dca-robot[data-effects='live'] .dca-fx-sweep { animation: dca-fx-sweep 9s cubic-bezier(.45, 0, .55, 1) infinite; }
603
+ .dca-robot[data-effects='live'] .dca-fx-facet-flash { animation: dca-fx-facet-flash 9s ease-in-out infinite; }
604
+ .dca-robot[data-effects='live'] .dca-fx-star-pop { animation: dca-fx-star-pop 9s ease-out infinite; }
605
+ .dca-robot[data-effects='live'] .dca-fx-strike { animation: dca-fx-strike 9s linear infinite; }
606
+ .dca-robot[data-effects='live'] .dca-fx-zap { animation: dca-fx-zap 9s ease-out infinite; }
607
+ .dca-robot[data-effects='live'] .dca-fx-jolt { animation: dca-fx-jolt 9s ease-in-out infinite; }
608
+ .dca-robot[data-effects='live'] .dca-fx-shard { animation: dca-fx-shard 9s ease-out infinite; }
609
+ .dca-robot[data-effects='live'] .dca-fx-coin-toss { animation: dca-fx-coin-toss 9s linear infinite; }
610
+ .dca-robot[data-effects='live'] .dca-fx-coin-flip { animation: dca-fx-coin-flip 9s linear infinite; }
611
+ .dca-robot[data-effects='live'] .dca-fx-pendant { animation: dca-fx-pendant 2.75s infinite; }
612
+ .dca-fx-hammer-bolt, .dca-fx-hammer-flash, .dca-fx-hammer-sparks { opacity: 0; }
613
+ :is(.dca-fx-hammer-sparks, .dca-fx-key-sparks) > path { transform-box: fill-box; transform-origin: center; }
614
+ @keyframes dca-fx-hammer-lift {
615
+ 0%, 69%, 100% { transform: translate(0, 0) rotate(0deg); } 75%, 80% { transform: translate(0, -30px) rotate(-8deg); }
616
+ 83.5% { transform: translate(0, 6px) rotate(1.5deg); } 87% { transform: translate(0, 0) rotate(0deg); }
617
+ }
618
+ @keyframes dca-fx-hammer-twirl {
619
+ 0%, 69%, 100% { transform: scaleX(1); animation-timing-function: ease-in; } 70.5% { transform: scaleX(0); animation-timing-function: ease-out; }
620
+ 72% { transform: scaleX(-1); animation-timing-function: ease-in; } 73.5% { transform: scaleX(0); animation-timing-function: ease-out; } 75% { transform: scaleX(1); }
621
+ }
622
+ @keyframes dca-fx-hammer-charge { 0%, 74%, 100% { transform: scale(1); } 77.5% { transform: scale(1.45); } 84% { transform: scale(1); } }
623
+ @keyframes dca-fx-hammer-bolt {
624
+ 0%, 75.5%, 100% { opacity: 0; transform: scaleY(.1); } 76.2% { opacity: 1; transform: scaleY(1); animation-timing-function: step-end; }
625
+ 77.4% { opacity: 0; animation-timing-function: step-end; } 77.9% { opacity: 1; transform: scaleY(1); animation-timing-function: step-end; } 79.4% { opacity: 0; transform: scaleY(1); }
626
+ }
627
+ @keyframes dca-fx-hammer-flash { 0%, 76%, 100% { opacity: 0; transform: scale(.2); } 76.8% { opacity: 1; transform: scale(.8); } 79.5% { opacity: 0; transform: scale(1.3); } }
628
+ @keyframes dca-fx-hammer-sparks { 0%, 76.4%, 100% { opacity: 0; transform: scale(.25); } 77.2%, 82% { opacity: 1; } 82.4% { opacity: 0; transform: scale(1.25); } }
629
+ @keyframes dca-fx-hammer-spark { 0%, 78.6%, 100% { transform: scale(1); } 82.2% { transform: scale(0); } }
630
+ @keyframes dca-fx-hammer-eyes { 0%, 76.4%, 100% { stop-color: var(--dca-stop); } 76.9%, 82% { stop-color: #4de3ff; } 83.6% { stop-color: var(--dca-stop); } }
631
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-hammer-lift { animation: dca-fx-hammer-lift 8s ease-in-out infinite; }
632
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-hammer-twirl { animation: dca-fx-hammer-twirl 8s linear infinite; }
633
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-hammer-charge { animation: dca-fx-hammer-charge 8s ease-in-out infinite; }
634
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-hammer-bolt { animation: dca-fx-hammer-bolt 8s linear infinite; }
635
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-hammer-flash { animation: dca-fx-hammer-flash 8s ease-out infinite; }
636
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-hammer-sparks { animation: dca-fx-hammer-sparks 8s ease-out infinite; }
637
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-hammer-sparks > path { animation: dca-fx-hammer-spark 8s ease-in infinite; }
638
+ :where(.dca-robot[data-effects='live'][data-held-state='holding'][data-hand='thunder-hammer']) .dca-paint-mark stop { animation: dca-fx-hammer-eyes 8s ease-in-out infinite; }
639
+ .dca-fx-key-burst, .dca-fx-key-sparks { opacity: 0; }
640
+ @keyframes dca-fx-key-push {
641
+ 0%, 69%, 100% { transform: translate(0, 0) scale(1); } 71%, 74% { transform: translate(0, -14px) scale(1); }
642
+ 75% { transform: translate(0, -18px) scale(1.07); } 76.5%, 81% { transform: translate(0, -14px) scale(1); } 85% { transform: translate(0, 0) scale(1); }
643
+ }
644
+ @keyframes dca-fx-key-turn {
645
+ 0%, 71%, 100% { transform: scaleX(1); animation-timing-function: ease-in; } 72.75% { transform: scaleX(0); animation-timing-function: ease-out; }
646
+ 74.5%, 80.5% { transform: scaleX(-1); animation-timing-function: ease-in; } 82.25% { transform: scaleX(0); animation-timing-function: ease-out; } 84% { transform: scaleX(1); }
647
+ }
648
+ @keyframes dca-fx-key-burst { 0%, 74.4%, 100% { opacity: 0; transform: scale(.2); } 75.4% { opacity: 1; transform: scale(1.05); } 77.4% { opacity: 1; transform: scale(.9); } 79% { opacity: 0; transform: scale(1.15); } }
649
+ @keyframes dca-fx-key-sparks { 0%, 74.6%, 100% { opacity: 0; transform: scale(.3); } 75.6%, 79.6% { opacity: 1; } 80% { opacity: 0; transform: scale(1.2); } }
650
+ @keyframes dca-fx-key-spark { 0%, 76.6%, 100% { transform: scale(1); } 79.8% { transform: scale(0); } }
651
+ @keyframes dca-fx-key-eyes { 0%, 74.6%, 100% { stop-color: var(--dca-stop); } 75.1%, 80.4% { stop-color: #f6b500; } 81.2% { stop-color: var(--dca-stop); } }
652
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-key-push { animation: dca-fx-key-push 8s ease-in-out infinite; }
653
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-key-turn { animation: dca-fx-key-turn 8s linear infinite; }
654
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-key-burst { animation: dca-fx-key-burst 8s ease-out infinite; }
655
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-key-sparks { animation: dca-fx-key-sparks 8s ease-out infinite; }
656
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-key-sparks > path { animation: dca-fx-key-spark 8s ease-in infinite; }
657
+ :where(.dca-robot[data-effects='live'][data-held-state='holding'][data-hand='master-key']) .dca-paint-mark stop { animation: dca-fx-key-eyes 8s ease-in-out infinite; }
658
+ .dca-fx-dragon-jet, .dca-fx-dragon-embers { opacity: 0; }
659
+ .dca-fx-dragon-embers > path { transform-box: fill-box; transform-origin: center; }
660
+ @keyframes dca-fx-dragon-body {
661
+ 0%, 69%, 100% { transform: translate(0, 0) rotate(0deg) scale(1); } 73% { transform: translate(-4px, -10px) rotate(0deg) scale(1.05); }
662
+ 75%, 80% { transform: translate(-6px, 0) rotate(-8deg) scale(1); } 77.5% { transform: translate(-6px, 2px) rotate(-7deg) scale(1); } 85% { transform: translate(0, 0) rotate(0deg) scale(1); }
663
+ }
664
+ @keyframes dca-fx-dragon-jet { 0%, 74.4%, 100% { opacity: 0; transform: scale(0, .6); } 76% { opacity: 1; transform: scale(1, 1); } 80.6% { opacity: 1; transform: scale(1, 1); } 82% { opacity: 0; transform: scale(.7, .6); } }
665
+ @keyframes dca-fx-dragon-embers { 0%, 80.2%, 100% { opacity: 0; transform: translate(0, 0); } 80.8% { opacity: 1; transform: translate(0, 0); } 86% { opacity: 1; transform: translate(-14px, -46px); } 86.4% { opacity: 0; transform: translate(-14px, -46px); } }
666
+ @keyframes dca-fx-dragon-ember { 0%, 81.6%, 100% { transform: scale(1); } 86% { transform: scale(0); } }
667
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-dragon-body { animation: dca-fx-dragon-body 8s ease-in-out infinite; }
668
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-dragon-jet { animation: dca-fx-dragon-jet 8s ease-out infinite; }
669
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-dragon-embers { animation: dca-fx-dragon-embers 8s ease-out infinite; }
670
+ .dca-robot[data-effects='live'][data-held-state='holding'] .dca-fx-dragon-embers > path { animation: dca-fx-dragon-ember 8s ease-in infinite; }
671
+
672
+ .dca-fx-sword-drawn, .dca-fx-sword-slash { opacity: 0; }
673
+ @keyframes dca-fx-sword-draw {
674
+ 0%, 38% { transform: translateX(0); animation-timing-function: cubic-bezier(.3, 0, .2, 1); }
675
+ 41% { transform: translateX(-112px); animation-timing-function: ease-in-out; }
676
+ 42.5%, 51% { transform: translateX(-100px); animation-timing-function: cubic-bezier(.6, 0, .9, .5); }
677
+ 53.5% { transform: translateX(8px); animation-timing-function: ease-out; }
678
+ 55%, 100% { transform: translateX(0); }
679
+ }
680
+ @keyframes dca-fx-sword-sheathed { 0%, 38%, 54%, 100% { opacity: 1; } 41%, 52% { opacity: 0; } }
681
+ @keyframes dca-fx-sword-drawn { 0%, 38%, 54%, 100% { opacity: 0; } 41%, 52% { opacity: 1; } }
682
+ @keyframes dca-fx-sword-slash {
683
+ 0%, 42.5% { opacity: 0; transform: scale(0, 1); animation-timing-function: ease-out; }
684
+ 42.6% { opacity: 1; animation-timing-function: ease-out; }
685
+ 44% { opacity: 1; transform: scale(1, 1); }
686
+ 46.5% { opacity: 1; transform: scale(1, 1); animation-timing-function: ease-in; }
687
+ 48.5% { opacity: 0; transform: scale(1, .3); }
688
+ 48.6%, 100% { opacity: 0; transform: scale(0, 1); }
689
+ }
690
+ .dca-robot[data-effects='live'] .dca-fx-sword-draw { animation: dca-fx-sword-draw 10s linear infinite; }
691
+ .dca-robot[data-effects='live'] .dca-fx-sword-sheathed { animation: dca-fx-sword-sheathed 10s linear infinite; }
692
+ .dca-robot[data-effects='live'] .dca-fx-sword-drawn { animation: dca-fx-sword-drawn 10s linear infinite; }
693
+ .dca-robot[data-effects='live'] .dca-fx-sword-slash { animation: dca-fx-sword-slash 10s linear infinite; }
694
+
695
+ .dca-fx-wing-ember { opacity: 0; transform-box: fill-box; transform-origin: center; }
696
+ @keyframes dca-fx-dragon-flap {
697
+ 0%, 20%, 40%, 60%, 75%, 80%, 100% { transform: rotate(0deg) scale(1); animation-timing-function: ease-in-out; }
698
+ 8%, 28%, 48%, 88% { transform: rotate(12deg) scale(1); animation-timing-function: cubic-bezier(.55, 0, .9, .5); }
699
+ 13%, 33%, 53%, 93% { transform: rotate(-10deg) scale(1); animation-timing-function: ease-out; }
700
+ 64.5% { transform: rotate(16deg) scale(1.08); animation-timing-function: ease-in-out; }
701
+ 67.5% { transform: rotate(19deg) scale(1.1); animation-timing-function: cubic-bezier(.7, 0, 1, .5); }
702
+ 69.5% { transform: rotate(-12deg) scale(1.03); animation-timing-function: ease-out; }
703
+ }
704
+ @keyframes dca-fx-wing-ignite {
705
+ 0%, 59.5%, 77%, 100% { fill: #7f2634; } 62% { fill: #c2352c; } 64.5%, 70% { fill: #ff7a2a; } 73.5% { fill: #c2352c; }
706
+ }
707
+ @keyframes dca-fx-wing-hot { 0%, 60%, 76%, 100% { fill: #ffb347; } 64%, 70.5% { fill: #fff1c2; } }
708
+ @keyframes dca-fx-wing-ember {
709
+ 0%, 69% { opacity: 0; transform: translate(0, 0) scale(.6); }
710
+ 69.3% { opacity: 1; transform: translate(0, 0) scale(1.1); animation-timing-function: cubic-bezier(.3, .6, .5, 1); }
711
+ 79% { opacity: 0; transform: translate(var(--dca-dx), var(--dca-dy)) scale(.3); }
712
+ 79.1%, 100% { opacity: 0; transform: translate(0, 0) scale(.6); }
713
+ }
714
+ .dca-robot[data-effects='live'] .dca-fx-dragon-flap { animation: dca-fx-dragon-flap 10s linear infinite; }
715
+ .dca-robot[data-effects='live'] .dca-fx-wing-ignite { animation: dca-fx-wing-ignite 10s ease-in-out infinite; }
716
+ .dca-robot[data-effects='live'] .dca-fx-wing-hot { animation: dca-fx-wing-hot 10s ease-in-out infinite; }
717
+ .dca-robot[data-effects='live'] .dca-fx-wing-ember { animation: dca-fx-wing-ember 10s linear infinite; }
718
+
719
+ .dca-fx-tesla-arc-alt, .dca-fx-tesla-glow, .dca-fx-tesla-discharge, .dca-fx-tesla-spark, .dca-fx-tesla-bit { opacity: 0; }
720
+ .dca-fx-tesla-spark, .dca-fx-tesla-bit { transform-box: fill-box; transform-origin: center; }
721
+ @keyframes dca-fx-tesla-arc { 0% { opacity: 1; } 34%, 100% { opacity: 0; } }
722
+ @keyframes dca-fx-tesla-glow { 0% { opacity: .9; } 30% { opacity: .45; } 55% { opacity: 1; } 80% { opacity: .6; } }
723
+ @keyframes dca-fx-tesla-top { 0% { fill: #4de3ff; } 40% { fill: #b5f6ff; } 70% { fill: #4de3ff; } }
724
+ @keyframes dca-fx-tesla-crackle { 0%, 58.5%, 69%, 100% { opacity: 1; } 59.5%, 67% { opacity: 0; } }
725
+ @keyframes dca-fx-tesla-discharge {
726
+ 0%, 59.5% { opacity: 0; } 60% { opacity: 1; } 60.8% { opacity: .25; } 61.4%, 65% { opacity: 1; } 68%, 100% { opacity: 0; }
727
+ }
728
+ @keyframes dca-fx-tesla-spark {
729
+ 0%, 59.8% { opacity: 0; transform: scale(.2) rotate(0deg); }
730
+ 60.4% { opacity: 1; transform: scale(1.5) rotate(20deg); animation-timing-function: ease-in; }
731
+ 64% { opacity: 0; transform: scale(.4) rotate(45deg); }
732
+ 64.1%, 100% { opacity: 0; transform: scale(.2) rotate(0deg); }
733
+ }
734
+ @keyframes dca-fx-tesla-bit {
735
+ 0%, 60% { opacity: 0; transform: translate(0, 0) scale(.6); }
736
+ 60.3% { opacity: 1; transform: translate(0, 0) scale(1); animation-timing-function: cubic-bezier(.2, .7, .4, 1); }
737
+ 64.5% { opacity: 0; transform: translate(var(--dca-dx), var(--dca-dy)) scale(.4); }
738
+ 64.6%, 100% { opacity: 0; transform: translate(0, 0) scale(.6); }
739
+ }
740
+ .dca-robot[data-effects='live'] .dca-fx-tesla-arc { animation: dca-fx-tesla-arc .6s steps(1, end) infinite; }
741
+ .dca-robot[data-effects='live'] .dca-fx-tesla-glow { animation: dca-fx-tesla-glow .7s steps(1, end) infinite; }
742
+ .dca-robot[data-effects='live'] .dca-fx-tesla-top { animation: dca-fx-tesla-top .45s steps(1, end) infinite; }
743
+ .dca-robot[data-effects='live'] .dca-fx-tesla-crackle { animation: dca-fx-tesla-crackle 10s linear infinite; }
744
+ .dca-robot[data-effects='live'] .dca-fx-tesla-discharge { animation: dca-fx-tesla-discharge 10s linear infinite; }
745
+ .dca-robot[data-effects='live'] .dca-fx-tesla-spark { animation: dca-fx-tesla-spark 10s linear infinite; }
746
+ .dca-robot[data-effects='live'] .dca-fx-tesla-bit { animation: dca-fx-tesla-bit 10s linear infinite; }
747
+
748
+ .dca-fx-halo-flare { opacity: 0; }
749
+ @keyframes dca-fx-halo-flare { 0%, 53% { opacity: 0; } 56% { opacity: 1; } 60% { opacity: .85; } 66%, 100% { opacity: 0; } }
750
+ .dca-robot[data-effects='live'] .dca-fx-halo-glint { animation: dca-fx-rotate 5s linear infinite; }
751
+ .dca-robot[data-effects='live'] .dca-fx-halo-flare { animation: dca-fx-halo-flare 10s ease-in-out infinite; }
752
+ .dca-fx-fin-beam, .dca-fx-fin-flash { opacity: 0; }
753
+ @keyframes dca-fx-fin-bob { 0%, 100% { transform: rotate(0deg); } 50% { transform: rotate(-1.6deg); } }
754
+ @keyframes dca-fx-fin-launch {
755
+ 0%, 20%, 39.5%, 100% { transform: translate(0px, 0px) rotate(0deg); animation-timing-function: cubic-bezier(.55, 0, .9, .45); }
756
+ 23%, 37% { transform: translate(80px, 0px) rotate(0deg); animation-timing-function: cubic-bezier(.2, 1.25, .4, 1); }
757
+ 27.5%, 32.5% { transform: translate(var(--dca-dx), var(--dca-dy)) rotate(var(--dca-turn)); animation-timing-function: cubic-bezier(.5, 0, .5, 1); }
758
+ }
759
+ @keyframes dca-fx-fin-beam {
760
+ 0%, 28% { opacity: 0; transform: translateX(0px) scaleX(.1); }
761
+ 28.8% { opacity: 1; transform: translateX(0px) scaleX(1); }
762
+ 30.6% { opacity: 1; transform: translateX(40px) scaleX(1); }
763
+ 31.6%, 100% { opacity: 0; transform: translateX(120px) scaleX(.5); }
764
+ }
765
+ @keyframes dca-fx-fin-flash { 0%, 27.8%, 31.4%, 100% { opacity: 0; } 28.6%, 30% { opacity: 1; } }
766
+ .dca-robot[data-effects='live'] .dca-fx-fin { animation: dca-fx-fin-launch 10s infinite; animation-delay: var(--dca-delay); }
767
+ .dca-robot[data-effects='live'] .dca-fx-fin-bob { animation: dca-fx-fin-bob 3.4s ease-in-out infinite; }
768
+ .dca-robot[data-effects='live'] .dca-fx-fin-beam { animation: dca-fx-fin-beam 10s linear infinite; animation-delay: var(--dca-delay); }
769
+ .dca-robot[data-effects='live'] .dca-fx-fin-flash { animation: dca-fx-fin-flash 10s linear infinite; animation-delay: var(--dca-delay); }
770
+
771
+ [data-mascot-theme='dark'] {
772
+ --dca-theme-surface: #141515;
773
+ --dca-theme-ink: #eeeeec;
774
+ --dca-theme-dimmed: color-mix(in srgb, var(--dca-theme-ink) 42%, var(--dca-theme-surface));
775
+ --dca-theme-success: #22c55e;
776
+ }
777
+
778
+ [data-mascot-theme='light'] {
779
+ --dca-theme-surface: #ffffff;
780
+ --dca-theme-ink: #1a1c1f;
781
+ --dca-theme-dimmed: color-mix(in srgb, var(--dca-theme-ink) 50%, var(--dca-theme-surface));
782
+ --dca-theme-success: #16a34a;
783
+ }
784
+
785
+ @keyframes composer-mascot-breathe {
786
+ 0%,
787
+ 100% {
788
+ transform: scale(1);
789
+ }
790
+ 50% {
791
+ transform: scale(1.035);
792
+ }
793
+ }
794
+
795
+ .composer-mascot-breathe {
796
+ animation: composer-mascot-breathe 4s ease-in-out infinite;
797
+ transform-origin: bottom center;
798
+ will-change: transform;
799
+ }
800
+
801
+ .composer-mascot-motion {
802
+ position: relative;
803
+ }
804
+
805
+ .composer-mascot-motion > div:first-child {
806
+ position: relative;
807
+ z-index: 2;
808
+ }
809
+
810
+ .composer-mascot-fast-echo {
811
+ display: grid;
812
+ line-height: 0;
813
+ transform-origin: bottom center;
814
+ }
815
+
816
+ .composer-mascot-character-stage {
817
+ display: grid;
818
+ width: 58px;
819
+ height: 58px;
820
+ overflow: visible;
821
+ }
822
+
823
+
824
+ [data-mascot-speed='fast'] .composer-mascot-motion {
825
+ --mascot-fast-shift-base: oklch(from var(--mascot-energy-accent)
826
+ clamp(0.5, calc(l + 0.22), 0.96) clamp(0.06, calc(c * 0.88), 0.27) calc(h + 92));
827
+ --mascot-fast-echo-left: color-mix(in oklab, var(--mascot-energy-accent) 68%, var(--dca-theme-ink));
828
+ --mascot-fast-echo-right: color-mix(in oklab, var(--mascot-fast-shift-base) 78%, var(--dca-theme-ink));
829
+ }
830
+
831
+ [data-mascot-speed='fast'] .composer-mascot-fast-echo {
832
+ animation: composer-mascot-fast-soft-echo 5.8s cubic-bezier(0.45, 0, 0.55, 1) infinite;
833
+ will-change: filter;
834
+ }
835
+
836
+ @keyframes composer-mascot-fast-soft-echo {
837
+ 0%, 100% {
838
+ filter:
839
+ drop-shadow(-2.1px 0 0.18px rgb(from var(--mascot-fast-echo-left) r g b / 0.58))
840
+ drop-shadow(-4px 0 0.25px rgb(from var(--mascot-fast-echo-left) r g b / 0.22))
841
+ drop-shadow(1.3px 0 0.2px rgb(from var(--mascot-fast-echo-right) r g b / 0.28))
842
+ drop-shadow(2.7px 0 0.25px rgb(from var(--mascot-fast-echo-right) r g b / 0.1));
843
+ }
844
+ 50% {
845
+ filter:
846
+ drop-shadow(-1.3px 0 0.2px rgb(from var(--mascot-fast-echo-left) r g b / 0.28))
847
+ drop-shadow(-2.7px 0 0.25px rgb(from var(--mascot-fast-echo-left) r g b / 0.1))
848
+ drop-shadow(2.1px 0 0.18px rgb(from var(--mascot-fast-echo-right) r g b / 0.58))
849
+ drop-shadow(4px 0 0.25px rgb(from var(--mascot-fast-echo-right) r g b / 0.22));
850
+ }
851
+ }
852
+
853
+ [data-mascot-theme='light'][data-mascot-speed='fast'] .composer-mascot-motion {
854
+ --mascot-fast-light-edge-base: oklch(from var(--mascot-energy-accent)
855
+ clamp(0.38, calc(l + 0.12), 0.94) clamp(0.05, calc(c * 0.92), 0.28) calc(h + 8));
856
+ --mascot-fast-light-echo-left: color-mix(in oklab, var(--mascot-fast-light-edge-base) 58%, var(--dca-theme-surface));
857
+ --mascot-fast-light-echo-right: color-mix(in oklab, var(--mascot-fast-shift-base) 54%, var(--dca-theme-surface));
858
+ }
859
+
860
+ [data-mascot-theme='light'][data-mascot-speed='fast'] .composer-mascot-fast-echo {
861
+ animation-name: composer-mascot-fast-soft-echo-light;
862
+ }
863
+
864
+ @keyframes composer-mascot-fast-soft-echo-light {
865
+ 0%, 100% {
866
+ filter:
867
+ drop-shadow(-1.55px 0 1.25px rgb(from var(--mascot-fast-light-echo-left) r g b / 0.3))
868
+ drop-shadow(-3px 0 2.8px rgb(from var(--mascot-fast-light-echo-left) r g b / 0.09))
869
+ drop-shadow(1.1px 0 1.35px rgb(from var(--mascot-fast-light-echo-right) r g b / 0.16))
870
+ drop-shadow(2.5px 0 2.8px rgb(from var(--mascot-fast-light-echo-right) r g b / 0.05));
871
+ }
872
+ 50% {
873
+ filter:
874
+ drop-shadow(-1.1px 0 1.35px rgb(from var(--mascot-fast-light-echo-left) r g b / 0.16))
875
+ drop-shadow(-2.5px 0 2.8px rgb(from var(--mascot-fast-light-echo-left) r g b / 0.05))
876
+ drop-shadow(1.55px 0 1.25px rgb(from var(--mascot-fast-light-echo-right) r g b / 0.3))
877
+ drop-shadow(3px 0 2.8px rgb(from var(--mascot-fast-light-echo-right) r g b / 0.09));
878
+ }
879
+ }
880
+
881
+ @keyframes composer-mascot-energy-medium-dark {
882
+ 0%, 38%, 100% { stop-color: var(--mascot-body-dark); }
883
+ 14% {
884
+ stop-color: oklch(from var(--mascot-body-dark)
885
+ clamp(0.28, calc(l + 0.0573), 0.96)
886
+ clamp(0, calc(c * 0.909), 0.3)
887
+ calc(h - 0.1));
888
+ }
889
+ }
890
+
891
+ @keyframes composer-mascot-energy-medium-mid {
892
+ 0%, 24%, 70%, 100% { stop-color: var(--mascot-body-mid); }
893
+ 46% {
894
+ stop-color: oklch(from var(--mascot-body-mid)
895
+ clamp(0.28, calc(l + 0.0796), 0.96)
896
+ clamp(0, calc(c * 0.814), 0.3)
897
+ calc(h - 0.56));
898
+ }
899
+ }
900
+
901
+ @keyframes composer-mascot-energy-medium-light {
902
+ 0%, 50%, 94%, 100% { stop-color: var(--mascot-body-light); }
903
+ 72% {
904
+ stop-color: oklch(from var(--mascot-body-light)
905
+ clamp(0.28, calc(l + 0.1052), 0.96)
906
+ clamp(0, calc(c * 0.569), 0.3)
907
+ calc(h + 1.57));
908
+ }
909
+ }
910
+
911
+ @keyframes composer-mascot-energy-high-dark {
912
+ 0%, 32%, 100% {
913
+ stop-color: oklch(from var(--mascot-body-dark)
914
+ clamp(0.28, calc(l - 0.0373), 0.96)
915
+ clamp(0, calc(c * 0.987), 0.3)
916
+ calc(h - 0.32));
917
+ }
918
+ 12% {
919
+ stop-color: oklch(from var(--mascot-body-dark)
920
+ clamp(0.28, calc(l + 0.0829), 0.96)
921
+ clamp(0, calc(c * 0.846), 0.3)
922
+ calc(h - 2.77));
923
+ }
924
+ }
925
+
926
+ @keyframes composer-mascot-energy-high-mid {
927
+ 0%, 22%, 60%, 100% {
928
+ stop-color: oklch(from var(--mascot-body-mid)
929
+ clamp(0.28, calc(l - 0.0386), 0.96)
930
+ clamp(0, calc(c * 1.211), 0.3)
931
+ calc(h - 3.62));
932
+ }
933
+ 40% {
934
+ stop-color: oklch(from var(--mascot-body-mid)
935
+ clamp(0.28, calc(l + 0.1298), 0.96)
936
+ clamp(0, calc(c * 0.662), 0.3)
937
+ calc(h - 9.24));
938
+ }
939
+ }
940
+
941
+ @keyframes composer-mascot-energy-high-light {
942
+ 0%, 48%, 86%, 100% {
943
+ stop-color: oklch(from var(--mascot-body-light)
944
+ clamp(0.28, calc(l - 0.0112), 0.96)
945
+ clamp(0, calc(c * 1.047), 0.3)
946
+ calc(h - 9.36));
947
+ }
948
+ 66% {
949
+ stop-color: oklch(from var(--mascot-body-light)
950
+ clamp(0.28, calc(l + 0.1713), 0.96)
951
+ clamp(0, calc(c * 0.314), 0.3)
952
+ calc(h - 9.37));
953
+ }
954
+ }
955
+
956
+ @keyframes composer-mascot-energy-high-mark-dark {
957
+ 0%, 44%, 100% {
958
+ stop-color: oklch(from var(--mascot-mark-dark)
959
+ clamp(0.28, calc(l + 0.0017), 0.96)
960
+ clamp(0, calc(c * 0.995), 0.3)
961
+ calc(h - 0.12));
962
+ }
963
+ 22% {
964
+ stop-color: oklch(from var(--mascot-mark-dark)
965
+ clamp(0.28, calc(l + 0.1236), 0.96)
966
+ clamp(0, calc(c * 0.758), 0.3)
967
+ calc(h - 3.57));
968
+ }
969
+ }
970
+
971
+ @keyframes composer-mascot-energy-high-mark-light {
972
+ 0%, 42%, 86%, 100% {
973
+ stop-color: oklch(from var(--mascot-mark-energy)
974
+ clamp(0.28, calc(l + 0.05), 0.96)
975
+ clamp(0, calc(c * 0.913), 0.3)
976
+ calc(h - 1.66));
977
+ }
978
+ 64% {
979
+ stop-color: oklch(from var(--mascot-mark-energy)
980
+ clamp(0.28, calc(l + 0.2226), 0.96)
981
+ clamp(0, calc(c * 0.409), 0.3)
982
+ calc(h - 12.45));
983
+ }
984
+ }
985
+
986
+ @keyframes composer-mascot-energy-extra-dark {
987
+ 0%, 36%, 100% {
988
+ stop-color: oklch(from var(--mascot-body-dark)
989
+ clamp(0.28, calc(l - 0.0021), 0.96)
990
+ clamp(0, calc(c * 0.983), 0.3)
991
+ calc(h + 2.19));
992
+ }
993
+ 16% {
994
+ stop-color: oklch(from var(--mascot-body-dark)
995
+ clamp(0.28, calc(l + 0.0559), 0.96)
996
+ clamp(0, calc(c * 1.002), 0.3)
997
+ calc(h + 40.24));
998
+ }
999
+ }
1000
+
1001
+ @keyframes composer-mascot-energy-extra-mid {
1002
+ 0%, 24%, 64%, 100% {
1003
+ stop-color: oklch(from var(--mascot-body-mid)
1004
+ clamp(0.28, calc(l - 0.0159), 0.96)
1005
+ clamp(0, calc(c * 1.133), 0.3)
1006
+ calc(h + 1.9));
1007
+ }
1008
+ 44% {
1009
+ stop-color: oklch(from var(--mascot-body-mid)
1010
+ clamp(0.28, calc(l + 0.0032), 0.96)
1011
+ clamp(0, calc(c * 1.303), 0.3)
1012
+ calc(h + 41.78));
1013
+ }
1014
+ }
1015
+
1016
+ @keyframes composer-mascot-energy-extra-light {
1017
+ 0%, 50%, 90%, 100% {
1018
+ stop-color: oklch(from var(--mascot-body-light)
1019
+ clamp(0.28, calc(l + 0.0239), 0.96)
1020
+ clamp(0, calc(c * 0.896), 0.3)
1021
+ calc(h - 2.67));
1022
+ }
1023
+ 70% {
1024
+ stop-color: oklch(from var(--mascot-body-light)
1025
+ clamp(0.28, calc(l + 0.0668), 0.96)
1026
+ clamp(0, calc(c * 1.057), 0.3)
1027
+ calc(h + 42.19));
1028
+ }
1029
+ }
1030
+
1031
+ @keyframes composer-mascot-energy-extra-mark-dark {
1032
+ 0%, 46%, 100% {
1033
+ stop-color: oklch(from var(--mascot-mark-dark)
1034
+ clamp(0.28, calc(l + 0.0159), 0.96)
1035
+ clamp(0, calc(c * 0.965), 0.3)
1036
+ calc(h + 1.45));
1037
+ }
1038
+ 24% {
1039
+ stop-color: oklch(from var(--mascot-mark-dark)
1040
+ clamp(0.28, calc(l + 0.0437), 0.96)
1041
+ clamp(0, calc(c * 0.993), 0.3)
1042
+ calc(h + 36.73));
1043
+ }
1044
+ }
1045
+
1046
+ @keyframes composer-mascot-energy-extra-mark-light {
1047
+ 0%, 46%, 90%, 100% {
1048
+ stop-color: oklch(from var(--mascot-mark-energy)
1049
+ clamp(0.28, calc(l + 0.0697), 0.96)
1050
+ clamp(0, calc(c * 0.851), 0.3)
1051
+ calc(h + 0.49));
1052
+ }
1053
+ 68% {
1054
+ stop-color: oklch(from var(--mascot-mark-energy)
1055
+ clamp(0.28, calc(l + 0.1058), 0.96)
1056
+ clamp(0, calc(c * 0.995), 0.3)
1057
+ calc(h + 45.19));
1058
+ }
1059
+ }
1060
+
1061
+ .composer-mascot-contact-shadow {
1062
+ position: absolute;
1063
+ right: 68px;
1064
+ top: 1px;
1065
+ width: 72px;
1066
+ height: 24px;
1067
+ transform: translateX(50%);
1068
+ border-radius: 50%;
1069
+ filter: blur(2px);
1070
+ pointer-events: none;
1071
+ }
1072
+ .composer-mascot-motion::after {
1073
+ content: '';
1074
+ position: absolute;
1075
+ top: 50%;
1076
+ left: 50%;
1077
+ z-index: 3;
1078
+ width: 104px;
1079
+ height: 90px;
1080
+ border-radius: 48%;
1081
+ opacity: 0;
1082
+ pointer-events: none;
1083
+ transform: translate(-50%, -50%);
1084
+ transform-origin: center;
1085
+ }
1086
+
1087
+ [data-mascot-profile-transition='active'] .composer-mascot-character-stage {
1088
+ transform-origin: 50% 52%;
1089
+ animation: composer-mascot-profile-character 1.24s linear both;
1090
+ }
1091
+
1092
+ [data-mascot-profile-transition='active'] .composer-mascot-motion::before {
1093
+ content: '';
1094
+ position: absolute;
1095
+ top: 52%;
1096
+ left: 50%;
1097
+ z-index: 1;
1098
+ width: 64px;
1099
+ height: 64px;
1100
+ box-sizing: border-box;
1101
+ border: 1px solid transparent;
1102
+ border-radius: 50%;
1103
+ background: radial-gradient(
1104
+ circle,
1105
+ #010106 0 34%,
1106
+ #05050c 38%,
1107
+ rgba(232, 236, 255, 0.78) 42%,
1108
+ rgba(135, 145, 180, 0.18) 48%,
1109
+ transparent 66%
1110
+ );
1111
+ opacity: 0;
1112
+ pointer-events: none;
1113
+ transform: translate(-50%, -50%) scale(0.16);
1114
+ transform-origin: center;
1115
+ animation:
1116
+ composer-mascot-profile-hole 1.24s linear both,
1117
+ composer-mascot-profile-rim 1.24s linear both;
1118
+ }
1119
+
1120
+ [data-mascot-profile-transition='active'] .composer-mascot-motion::after {
1121
+ top: 52%;
1122
+ left: 50%;
1123
+ z-index: 1;
1124
+ width: 86px;
1125
+ height: 86px;
1126
+ border-radius: 50%;
1127
+ color: var(--mascot-profile-from-accent);
1128
+ background:
1129
+ radial-gradient(circle, currentColor 0 0.9px, transparent 1.55px) 50% 2% / 4px 4px no-repeat,
1130
+ radial-gradient(circle, currentColor 0 0.76px, transparent 1.4px) 78% 12% / 4px 4px no-repeat,
1131
+ radial-gradient(circle, rgba(255, 255, 255, 0.88) 0 0.65px, transparent 1.3px) 96% 42% / 4px 4px no-repeat,
1132
+ radial-gradient(circle, currentColor 0 0.82px, transparent 1.48px) 88% 76% / 4px 4px no-repeat,
1133
+ radial-gradient(circle, currentColor 0 0.9px, transparent 1.55px) 55% 98% / 4px 4px no-repeat,
1134
+ radial-gradient(circle, rgba(255, 255, 255, 0.8) 0 0.65px, transparent 1.3px) 19% 86% / 4px 4px no-repeat,
1135
+ radial-gradient(circle, currentColor 0 0.76px, transparent 1.4px) 3% 55% / 4px 4px no-repeat,
1136
+ radial-gradient(circle, currentColor 0 0.82px, transparent 1.48px) 14% 20% / 4px 4px no-repeat;
1137
+ filter: drop-shadow(0 0 3px currentColor);
1138
+ opacity: 0;
1139
+ animation:
1140
+ composer-mascot-profile-particles 1.24s linear both,
1141
+ composer-mascot-profile-particle-color 1.24s linear both;
1142
+ }
1143
+
1144
+ [data-composer-root]:has([data-mascot-profile-transition='active']) .composer-mascot-contact-shadow {
1145
+ animation: composer-mascot-profile-contact-shadow 1.24s linear both;
1146
+ }
1147
+
1148
+ @keyframes composer-mascot-profile-character {
1149
+ 0%, 100% {
1150
+ opacity: 1;
1151
+ transform: translateY(0) rotate(0) scale(1);
1152
+ filter: none;
1153
+ }
1154
+ 18% {
1155
+ opacity: 1;
1156
+ transform: translateY(0) rotate(0) scale(1.015, 0.99);
1157
+ filter: saturate(1.03);
1158
+ }
1159
+ 34% {
1160
+ opacity: 0.96;
1161
+ transform: translateY(0) rotate(1.2deg) scale(0.76, 0.8);
1162
+ filter: brightness(0.96) saturate(1.08);
1163
+ }
1164
+ 46% {
1165
+ opacity: 0.14;
1166
+ transform: translateY(0) rotate(-4deg) scale(0.13);
1167
+ filter: brightness(0.72) saturate(1.18) blur(0.7px);
1168
+ }
1169
+ 48%, 52% {
1170
+ opacity: 0;
1171
+ transform: translateY(0) rotate(-6deg) scale(0.02);
1172
+ filter: brightness(0.58) saturate(1.2) blur(1px);
1173
+ }
1174
+ 64% {
1175
+ opacity: 0.95;
1176
+ transform: translateY(0) rotate(1.8deg) scale(1.1, 0.92);
1177
+ filter: brightness(1.12);
1178
+ }
1179
+ 76% {
1180
+ opacity: 1;
1181
+ transform: translateY(0) rotate(-0.8deg) scale(0.97, 1.035);
1182
+ filter: none;
1183
+ }
1184
+ 89% {
1185
+ opacity: 1;
1186
+ transform: translateY(0) rotate(0.3deg) scale(1.01, 0.995);
1187
+ filter: none;
1188
+ }
1189
+ }
1190
+
1191
+ @keyframes composer-mascot-profile-hole {
1192
+ 0%, 12%, 100% { opacity: 0; transform: translate(-50%, -50%) scale(0.16); }
1193
+ 30% { opacity: 0.72; transform: translate(-50%, -50%) scale(0.72); }
1194
+ 46%, 54% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
1195
+ 72% { opacity: 0.54; transform: translate(-50%, -50%) scale(0.66); }
1196
+ 88% { opacity: 0; transform: translate(-50%, -50%) scale(0.2); }
1197
+ }
1198
+
1199
+ @keyframes composer-mascot-profile-particles {
1200
+ 0%, 14%, 100% { opacity: 0; transform: translate(-50%, -50%) rotate(0) scale(1); }
1201
+ 20% { opacity: 0.45; transform: translate(-50%, -50%) rotate(8deg) scale(1); }
1202
+ 34% { opacity: 0.92; transform: translate(-50%, -50%) rotate(38deg) scale(0.72); }
1203
+ 48% { opacity: 0.12; transform: translate(-50%, -50%) rotate(86deg) scale(0.16); }
1204
+ 49.5% { opacity: 0; transform: translate(-50%, -50%) rotate(96deg) scale(0.08); }
1205
+ 50.5% { opacity: 0; transform: translate(-50%, -50%) rotate(104deg) scale(1); }
1206
+ 64% { opacity: 0.82; transform: translate(-50%, -50%) rotate(146deg) scale(0.7); }
1207
+ 82% { opacity: 0.08; transform: translate(-50%, -50%) rotate(206deg) scale(0.14); }
1208
+ 86% { opacity: 0; transform: translate(-50%, -50%) rotate(218deg) scale(0.08); }
1209
+ }
1210
+
1211
+ @keyframes composer-mascot-profile-particle-color {
1212
+ 0%, 42% { color: var(--mascot-profile-from-accent); }
1213
+ 49.5%, 50.5% { color: rgba(240, 244, 255, 0.96); }
1214
+ 58%, 100% { color: var(--mascot-profile-to-accent); }
1215
+ }
1216
+
1217
+ @keyframes composer-mascot-profile-rim {
1218
+ 0%, 16% {
1219
+ border-color: color-mix(in srgb, var(--mascot-profile-from-accent) 72%, transparent);
1220
+ box-shadow: 0 0 12px color-mix(in srgb, var(--mascot-profile-from-accent) 42%, transparent);
1221
+ }
1222
+ 34% {
1223
+ border-color: color-mix(in srgb, var(--mascot-profile-from-accent) 84%, white);
1224
+ box-shadow: 0 0 15px color-mix(in srgb, var(--mascot-profile-from-accent) 48%, transparent);
1225
+ }
1226
+ 50% {
1227
+ border-color: rgba(246, 248, 255, 0.92);
1228
+ box-shadow: 0 0 17px rgba(220, 226, 255, 0.46);
1229
+ }
1230
+ 66% {
1231
+ border-color: color-mix(in srgb, var(--mascot-profile-to-accent) 84%, white);
1232
+ box-shadow: 0 0 15px color-mix(in srgb, var(--mascot-profile-to-accent) 48%, transparent);
1233
+ }
1234
+ 84%, 100% {
1235
+ border-color: color-mix(in srgb, var(--mascot-profile-to-accent) 72%, transparent);
1236
+ box-shadow: 0 0 12px color-mix(in srgb, var(--mascot-profile-to-accent) 36%, transparent);
1237
+ }
1238
+ }
1239
+
1240
+ @keyframes composer-mascot-profile-contact-shadow {
1241
+ 0%, 100% { opacity: 1; transform: translateX(50%) scaleX(1); }
1242
+ 46%, 54% { opacity: 0; transform: translateX(50%) scaleX(0.25); }
1243
+ }
1244
+ [data-composer-root]:has(.composer-mascot-active-idle) .composer-mascot-contact-shadow {
1245
+ opacity: 0;
1246
+ }
1247
+
1248
+ /* A trip heads `--mascot-idle-dir`; each leg moves along `--mascot-idle-travel-sign` (left is -1). */
1249
+ .composer-mascot-active-idle {
1250
+ --mascot-idle-dir: -1;
1251
+ --mascot-idle-travel-sign: -1;
1252
+ }
1253
+
1254
+ .composer-mascot-active-idle[data-mascot-idle-direction='right'] {
1255
+ --mascot-idle-dir: 1;
1256
+ }
1257
+
1258
+ .composer-mascot-active-idle[data-mascot-idle-travel='right'] {
1259
+ --mascot-idle-travel-sign: 1;
1260
+ }
1261
+
1262
+ .composer-mascot-active-idle .composer-mascot-stage {
1263
+ position: relative;
1264
+ top: 0;
1265
+ left: 0;
1266
+ }
1267
+
1268
+ .composer-mascot-active-idle[data-mascot-idle-phase='away'] .composer-mascot-body {
1269
+ animation: none;
1270
+ transform: scale(1);
1271
+ }
1272
+
1273
+ /* The stage parks at the far end in its own (possibly scaled) space while the travel layer rests at zero. */
1274
+ .composer-mascot-active-idle[data-mascot-active-idle='hop'][data-mascot-idle-phase='away'] .composer-mascot-stage,
1275
+ .composer-mascot-active-idle[data-mascot-active-idle='hop'][data-mascot-idle-phase='inbound'] .composer-mascot-stage {
1276
+ left: calc(280px * var(--mascot-idle-stage-scale, 1) * var(--mascot-idle-dir, -1));
1277
+ }
1278
+
1279
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='away'] .composer-mascot-stage,
1280
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='inbound'] .composer-mascot-stage {
1281
+ left: calc(293.33px * var(--mascot-idle-stage-scale, 1) * var(--mascot-idle-dir, -1));
1282
+ }
1283
+
1284
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='away'] .composer-mascot-stage,
1285
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='inbound'] .composer-mascot-stage {
1286
+ top: calc(-128px * var(--mascot-idle-stage-scale, 1));
1287
+ left: calc(200px * var(--mascot-idle-stage-scale, 1) * var(--mascot-idle-dir, -1));
1288
+ }
1289
+
1290
+ .composer-mascot-active-idle .composer-mascot-travel,
1291
+ .composer-mascot-active-idle .composer-mascot-lift,
1292
+ .composer-mascot-active-idle .composer-mascot-body {
1293
+ transform-origin: bottom center;
1294
+ will-change: transform;
1295
+ }
1296
+
1297
+ .composer-mascot-active-idle .composer-mascot-travel {
1298
+ position: relative;
1299
+ }
1300
+
1301
+ .composer-mascot-active-idle .composer-mascot-lift {
1302
+ position: relative;
1303
+ z-index: 1;
1304
+ }
1305
+
1306
+ .composer-mascot-active-idle[data-mascot-active-idle='hop'][data-mascot-idle-phase='outbound'] .composer-mascot-travel,
1307
+ .composer-mascot-active-idle[data-mascot-active-idle='hop'][data-mascot-idle-phase='inbound'] .composer-mascot-travel {
1308
+ --mascot-hop-compress-y: 0.82px;
1309
+ --mascot-hop-apex-y: -11.44px;
1310
+ --mascot-hop-fall-y: -2.86px;
1311
+ --mascot-hop-land-y: 0.41px;
1312
+ --mascot-hop-distance: calc(280px * var(--mascot-idle-travel-sign, -1));
1313
+ --mascot-hop-x-1: calc(70px * var(--mascot-idle-travel-sign, -1));
1314
+ --mascot-hop-x-2: calc(140px * var(--mascot-idle-travel-sign, -1));
1315
+ --mascot-hop-x-3: calc(210px * var(--mascot-idle-travel-sign, -1));
1316
+ animation: composer-mascot-idle-hop-travel 2.4s linear forwards;
1317
+ }
1318
+
1319
+ .composer-mascot-active-idle[data-mascot-active-idle='hop'][data-mascot-idle-phase='outbound'] .composer-mascot-body,
1320
+ .composer-mascot-active-idle[data-mascot-active-idle='hop'][data-mascot-idle-phase='inbound'] .composer-mascot-body {
1321
+ animation: composer-mascot-idle-hop-body 600ms linear 4;
1322
+ }
1323
+
1324
+ .composer-mascot-active-idle[data-mascot-active-idle='hop'] .composer-mascot-travel::before,
1325
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'] .composer-mascot-travel::before {
1326
+ content: '';
1327
+ position: absolute;
1328
+ bottom: -1px;
1329
+ left: 50%;
1330
+ z-index: 0;
1331
+ width: 31px;
1332
+ height: 5px;
1333
+ border-radius: 50%;
1334
+ background: color-mix(in srgb, var(--dca-theme-ink) 15%, transparent);
1335
+ filter: blur(2px);
1336
+ pointer-events: none;
1337
+ transform: translateX(-50%);
1338
+ transform-origin: center;
1339
+ }
1340
+
1341
+ .composer-mascot-active-idle[data-mascot-active-idle='hop'][data-mascot-idle-phase='outbound'] .composer-mascot-travel::before,
1342
+ .composer-mascot-active-idle[data-mascot-active-idle='hop'][data-mascot-idle-phase='inbound'] .composer-mascot-travel::before {
1343
+ animation: composer-mascot-idle-hop-shadow 600ms ease-in-out 4;
1344
+ }
1345
+
1346
+ @keyframes composer-mascot-idle-hop-travel {
1347
+ 0% { transform: translateX(0); animation-timing-function: cubic-bezier(0.45, 0, 0.55, 1); }
1348
+ 25% { transform: translateX(var(--mascot-hop-x-1)); animation-timing-function: cubic-bezier(0.45, 0, 0.55, 1); }
1349
+ 50% { transform: translateX(var(--mascot-hop-x-2)); animation-timing-function: cubic-bezier(0.45, 0, 0.55, 1); }
1350
+ 75% { transform: translateX(var(--mascot-hop-x-3)); animation-timing-function: cubic-bezier(0.45, 0, 0.55, 1); }
1351
+ 100% { transform: translateX(var(--mascot-hop-distance)); }
1352
+ }
1353
+
1354
+ @keyframes composer-mascot-idle-hop-body {
1355
+ 0% { transform: translateY(0) scale(1); animation-timing-function: cubic-bezier(0.55, 0, 1, 0.45); }
1356
+ 7% { transform: translateY(var(--mascot-hop-compress-y)) scale(1.075, 0.925); animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1); }
1357
+ 44% { transform: translateY(var(--mascot-hop-apex-y)) scale(0.965, 1.055); animation-timing-function: cubic-bezier(0.64, 0, 0.78, 0); }
1358
+ 78% { transform: translateY(var(--mascot-hop-fall-y)) scale(0.995, 1.005); }
1359
+ 90% { transform: translateY(var(--mascot-hop-land-y)) scale(1.085, 0.91); animation-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1); }
1360
+ 100% { transform: translateY(0) scale(1); }
1361
+ }
1362
+
1363
+ @keyframes composer-mascot-idle-hop-shadow {
1364
+ 0%, 100% { opacity: 0.64; transform: translateX(-50%) scaleX(1); }
1365
+ 7% { opacity: 0.74; transform: translateX(-50%) scaleX(1.08); }
1366
+ 44% { opacity: 0.16; transform: translateX(-50%) scaleX(0.5); }
1367
+ 78% { opacity: 0.42; transform: translateX(-50%) scaleX(0.78); }
1368
+ 90% { opacity: 0.76; transform: translateX(-50%) scaleX(1.12); }
1369
+ }
1370
+
1371
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='outbound'] .composer-mascot-travel,
1372
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='inbound'] .composer-mascot-travel {
1373
+ --mascot-rocket-apex-y: -66.99px;
1374
+ --mascot-rocket-crouch-y: 1.23px;
1375
+ --mascot-rocket-air-y: -2.04px;
1376
+ --mascot-rocket-approach-y: -0.82px;
1377
+ --mascot-rocket-rebound-y: -1.23px;
1378
+ --mascot-flight-distance: calc(293.33px * var(--mascot-idle-travel-sign, -1));
1379
+ --mascot-rocket-tilt: calc(8deg * var(--mascot-idle-travel-sign, -1));
1380
+ animation: composer-mascot-idle-rocket-flight-x 1.8s linear forwards;
1381
+ }
1382
+
1383
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='outbound'] .composer-mascot-lift,
1384
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='inbound'] .composer-mascot-lift {
1385
+ animation: composer-mascot-idle-rocket-flight-y 1.8s linear forwards;
1386
+ }
1387
+
1388
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='outbound'] .composer-mascot-body,
1389
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='inbound'] .composer-mascot-body {
1390
+ animation: composer-mascot-idle-rocket-body 1.8s ease-out forwards;
1391
+ }
1392
+
1393
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='outbound'] .composer-mascot-travel::before,
1394
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='inbound'] .composer-mascot-travel::before {
1395
+ animation: composer-mascot-idle-flight-shadow 1.8s ease-in-out forwards;
1396
+ }
1397
+
1398
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'] .composer-mascot-trail {
1399
+ position: relative;
1400
+ isolation: isolate;
1401
+ }
1402
+
1403
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='outbound'] .composer-mascot-trail::before,
1404
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-phase='inbound'] .composer-mascot-trail::before {
1405
+ content: '';
1406
+ position: absolute;
1407
+ top: 17px;
1408
+ z-index: 1;
1409
+ width: 48px;
1410
+ height: 25px;
1411
+ filter: drop-shadow(0 0 3px color-mix(in srgb, #8fa5ff 45%, transparent));
1412
+ opacity: 0;
1413
+ pointer-events: none;
1414
+ animation: composer-mascot-idle-rocket-trail 1.8s ease-out forwards;
1415
+ }
1416
+
1417
+ /* The exhaust streams behind the leg's direction of travel. */
1418
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-travel='left'] .composer-mascot-trail::before {
1419
+ left: calc(100% - 2px);
1420
+ background:
1421
+ linear-gradient(90deg, #f5f7fa, #8fa5ff 28%, transparent 100%) 0 1px / 34px 2px no-repeat,
1422
+ linear-gradient(90deg, #f5f7fa, #8fa5ff 28%, transparent 100%) 0 11px / 48px 2px no-repeat,
1423
+ linear-gradient(90deg, #f5f7fa, #8fa5ff 28%, transparent 100%) 0 21px / 26px 2px no-repeat;
1424
+ transform-origin: left center;
1425
+ }
1426
+
1427
+ .composer-mascot-active-idle[data-mascot-active-idle='rocket'][data-mascot-idle-travel='right'] .composer-mascot-trail::before {
1428
+ right: calc(100% - 2px);
1429
+ background:
1430
+ linear-gradient(90deg, transparent 0%, #8fa5ff 72%, #f5f7fa 100%) 100% 1px / 34px 2px no-repeat,
1431
+ linear-gradient(90deg, transparent 0%, #8fa5ff 72%, #f5f7fa 100%) 100% 11px / 48px 2px no-repeat,
1432
+ linear-gradient(90deg, transparent 0%, #8fa5ff 72%, #f5f7fa 100%) 100% 21px / 26px 2px no-repeat;
1433
+ transform-origin: right center;
1434
+ }
1435
+
1436
+ @keyframes composer-mascot-idle-rocket-flight-x {
1437
+ 0% { transform: translateX(0); }
1438
+ 16% { transform: translateX(0); animation-timing-function: cubic-bezier(0.45, 0, 0.55, 1); }
1439
+ 86%, 100% { transform: translateX(var(--mascot-flight-distance)); }
1440
+ }
1441
+
1442
+ @keyframes composer-mascot-idle-rocket-flight-y {
1443
+ 0% { transform: translateY(0); }
1444
+ 16% { transform: translateY(0); animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1); }
1445
+ 51% { transform: translateY(var(--mascot-rocket-apex-y)); animation-timing-function: cubic-bezier(0.64, 0, 0.78, 0); }
1446
+ 86%, 100% { transform: translateY(0); }
1447
+ }
1448
+
1449
+ @keyframes composer-mascot-idle-rocket-body {
1450
+ 0% { transform: translateY(0) rotate(0) scale(1); }
1451
+ 9% { transform: translateY(var(--mascot-rocket-crouch-y)) rotate(0) scale(1.12, 0.82); }
1452
+ 17% { transform: translateY(var(--mascot-rocket-air-y)) rotate(var(--mascot-rocket-tilt)) scale(0.93, 1.09); }
1453
+ 72% { transform: translateY(var(--mascot-rocket-air-y)) rotate(var(--mascot-rocket-tilt)) scale(0.97, 1.04); }
1454
+ 84% { transform: translateY(var(--mascot-rocket-approach-y)) rotate(0) scale(1); }
1455
+ 89% { transform: translateY(0) rotate(0) scale(1.12, 0.86); }
1456
+ 96% { transform: translateY(var(--mascot-rocket-rebound-y)) rotate(0) scale(0.98, 1.03); }
1457
+ 100% { transform: translateY(0) rotate(0) scale(1); }
1458
+ }
1459
+
1460
+ @keyframes composer-mascot-idle-rocket-trail {
1461
+ 0%, 15% { opacity: 0; transform: scaleX(0.15); }
1462
+ 27% { opacity: 0.72; transform: scaleX(1); }
1463
+ 73% { opacity: 0.5; transform: scaleX(0.76); }
1464
+ 86%, 100% { opacity: 0; transform: scaleX(0.2); }
1465
+ }
1466
+
1467
+ @keyframes composer-mascot-idle-flight-shadow {
1468
+ 0%, 16% { opacity: 0.65; transform: translateX(-50%) scaleX(1); }
1469
+ 51% { opacity: 0.1; transform: translateX(-50%) scaleX(0.45); }
1470
+ 86%, 100% { opacity: 0.7; transform: translateX(-50%) scaleX(1.12); }
1471
+ }
1472
+
1473
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='outbound'] .composer-mascot-travel {
1474
+ --mascot-hover-x: calc(200px * var(--mascot-idle-travel-sign, -1));
1475
+ --mascot-hover-y: -128px;
1476
+ animation: composer-mascot-idle-hover-rise-x 1.8s cubic-bezier(0.26, 0.55, 0.24, 1) forwards;
1477
+ }
1478
+
1479
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='outbound'] .composer-mascot-lift {
1480
+ animation: composer-mascot-idle-hover-rise-y 1.8s linear forwards;
1481
+ }
1482
+
1483
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='away'] .composer-mascot-lift {
1484
+ animation: composer-mascot-idle-hover-float 2.8s ease-in-out forwards;
1485
+ }
1486
+
1487
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='inbound'] .composer-mascot-travel {
1488
+ --mascot-hover-x: calc(200px * var(--mascot-idle-travel-sign, -1));
1489
+ --mascot-hover-y: 128px;
1490
+ animation: composer-mascot-idle-hover-return-x 1.8s cubic-bezier(0.38, 0.04, 0.34, 1) forwards;
1491
+ }
1492
+
1493
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='inbound'] .composer-mascot-lift {
1494
+ animation: composer-mascot-idle-hover-return-y 1.8s linear forwards;
1495
+ }
1496
+
1497
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='outbound'] .composer-mascot-body {
1498
+ animation: composer-mascot-idle-hover-launch-body 1.8s ease-out forwards;
1499
+ }
1500
+
1501
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='away'] .composer-mascot-body {
1502
+ animation: composer-mascot-idle-hover-hold-body 2.8s ease-in-out forwards;
1503
+ }
1504
+
1505
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='inbound'] .composer-mascot-body {
1506
+ animation: composer-mascot-idle-hover-land-body 1.8s ease-in forwards;
1507
+ }
1508
+
1509
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='away'] .composer-mascot-trail {
1510
+ animation: composer-mascot-idle-hover-scan-body 2.8s ease-in-out forwards;
1511
+ }
1512
+
1513
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'] .composer-mascot-trail {
1514
+ position: relative;
1515
+ isolation: isolate;
1516
+ }
1517
+
1518
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'] .composer-mascot-trail::before {
1519
+ content: '';
1520
+ position: absolute;
1521
+ top: 16px;
1522
+ z-index: 1;
1523
+ width: 58px;
1524
+ height: 32px;
1525
+ opacity: 0;
1526
+ pointer-events: none;
1527
+ }
1528
+
1529
+ /* The side jet fires against the leg's direction of travel. */
1530
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-travel='left'] .composer-mascot-trail::before {
1531
+ --mascot-idle-jet-tilt: 22deg;
1532
+ left: 40px;
1533
+ background:
1534
+ linear-gradient(90deg, #f8fbff 0%, #9fb5ff 28%, transparent 94%) 0 3px / 42px 3px no-repeat,
1535
+ linear-gradient(90deg, #f8fbff 0%, #7894f8 26%, transparent 96%) 0 14px / 58px 3px no-repeat,
1536
+ linear-gradient(90deg, #dce6ff 0%, #6f8cf5 32%, transparent 94%) 0 25px / 34px 3px no-repeat;
1537
+ filter: drop-shadow(6px 3px 5px color-mix(in srgb, #6f8dff 54%, transparent));
1538
+ transform: rotate(22deg) scaleX(0.18);
1539
+ transform-origin: left center;
1540
+ }
1541
+
1542
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-travel='right'] .composer-mascot-trail::before {
1543
+ --mascot-idle-jet-tilt: -18deg;
1544
+ right: 40px;
1545
+ background:
1546
+ linear-gradient(90deg, transparent 6%, #9fb5ff 72%, #f8fbff 100%) 100% 3px / 42px 3px no-repeat,
1547
+ linear-gradient(90deg, transparent 4%, #7894f8 74%, #f8fbff 100%) 100% 14px / 58px 3px no-repeat,
1548
+ linear-gradient(90deg, transparent 6%, #6f8cf5 68%, #dce6ff 100%) 100% 25px / 34px 3px no-repeat;
1549
+ filter: drop-shadow(-5px 3px 5px color-mix(in srgb, #6f8dff 54%, transparent));
1550
+ transform: rotate(-18deg) scaleX(0.18);
1551
+ transform-origin: right center;
1552
+ }
1553
+
1554
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='outbound'] .composer-mascot-trail::before {
1555
+ animation: composer-mascot-idle-hover-side-jet-launch 1.8s ease-out forwards;
1556
+ }
1557
+
1558
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='inbound'] .composer-mascot-trail::before {
1559
+ animation: composer-mascot-idle-hover-side-jet-return 1.8s ease-out forwards;
1560
+ }
1561
+
1562
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'] .composer-mascot-trail::after {
1563
+ content: '';
1564
+ position: absolute;
1565
+ top: 46px;
1566
+ left: 50%;
1567
+ z-index: 1;
1568
+ width: 38px;
1569
+ height: 48px;
1570
+ background:
1571
+ radial-gradient(circle at 25% 72%, #7895fa 0 1px, transparent 2px),
1572
+ radial-gradient(circle at 74% 84%, #aabfff 0 1px, transparent 2px),
1573
+ radial-gradient(ellipse at 50% 2%, rgb(255 255 255 / 0.96) 0 7%, transparent 30%),
1574
+ linear-gradient(180deg, #f8fbff 0%, #9fb5ff 27%, #5b76ee 55%, transparent 92%) center top / 8px 46px no-repeat,
1575
+ linear-gradient(180deg, #dce6ff 0%, #7894f8 34%, transparent 88%) 8px 2px / 5px 35px no-repeat,
1576
+ linear-gradient(180deg, #dce6ff 0%, #7894f8 34%, transparent 88%) calc(100% - 8px) 2px / 5px 35px no-repeat;
1577
+ filter: drop-shadow(0 6px 5px color-mix(in srgb, #6f8dff 54%, transparent));
1578
+ opacity: 0;
1579
+ pointer-events: none;
1580
+ transform: translateX(-50%) scaleY(0.2);
1581
+ transform-origin: top center;
1582
+ }
1583
+
1584
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='outbound'] .composer-mascot-trail::after {
1585
+ animation: composer-mascot-idle-hover-bottom-handoff 1.8s ease-out forwards;
1586
+ }
1587
+
1588
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='away'] .composer-mascot-trail::after {
1589
+ animation: composer-mascot-idle-hover-bottom-hold 360ms ease-in-out infinite;
1590
+ }
1591
+
1592
+ .composer-mascot-active-idle[data-mascot-active-idle='hover'][data-mascot-idle-phase='inbound'] .composer-mascot-trail::after {
1593
+ animation: composer-mascot-idle-hover-bottom-return 1.8s linear forwards;
1594
+ }
1595
+
1596
+ @keyframes composer-mascot-idle-hover-rise-x {
1597
+ from { transform: translateX(0); }
1598
+ to { transform: translateX(var(--mascot-hover-x)); }
1599
+ }
1600
+
1601
+ @keyframes composer-mascot-idle-hover-rise-y {
1602
+ 0% { transform: translateY(0); animation-timing-function: cubic-bezier(0.2, 0.7, 0.2, 1); }
1603
+ 82% { transform: translateY(calc(var(--mascot-hover-y) - 8px)); animation-timing-function: cubic-bezier(0.34, 1.25, 0.64, 1); }
1604
+ 100% { transform: translateY(var(--mascot-hover-y)); }
1605
+ }
1606
+
1607
+ @keyframes composer-mascot-idle-hover-return-x {
1608
+ from { transform: translateX(0); }
1609
+ to { transform: translateX(var(--mascot-hover-x)); }
1610
+ }
1611
+
1612
+ @keyframes composer-mascot-idle-hover-return-y {
1613
+ 0% { transform: translateY(0); animation-timing-function: cubic-bezier(0.4, 0, 0.72, 0.48); }
1614
+ 78% { transform: translateY(calc(var(--mascot-hover-y) + 4px)); animation-timing-function: cubic-bezier(0.34, 1.32, 0.64, 1); }
1615
+ 91% { transform: translateY(calc(var(--mascot-hover-y) - 3px)); animation-timing-function: ease-out; }
1616
+ 100% { transform: translateY(var(--mascot-hover-y)); }
1617
+ }
1618
+
1619
+ @keyframes composer-mascot-idle-hover-float {
1620
+ 0%, 100% { transform: translateY(0); }
1621
+ 20% { transform: translateY(-5px); }
1622
+ 43% { transform: translateY(1px); }
1623
+ 68% { transform: translateY(-4px); }
1624
+ 86% { transform: translateY(1px); }
1625
+ }
1626
+
1627
+ @keyframes composer-mascot-idle-hover-launch-body {
1628
+ 0% { transform: translateY(0) scale(1); }
1629
+ 10% { transform: translateY(2px) scale(1.12, 0.82); }
1630
+ 22% { transform: translateY(-3px) rotate(calc(8deg * var(--mascot-idle-travel-sign, -1))) scale(0.94, 1.09); }
1631
+ 72% { transform: translateY(-2px) rotate(calc(5deg * var(--mascot-idle-travel-sign, -1))) scale(0.98, 1.035); }
1632
+ 90% { transform: translateY(1px) rotate(calc(2deg * var(--mascot-idle-travel-sign, -1))) scale(1.02, 0.98); }
1633
+ 100% { transform: translateY(0) rotate(0) scale(1); }
1634
+ }
1635
+
1636
+ @keyframes composer-mascot-idle-hover-hold-body {
1637
+ 0%, 100% { transform: scale(1); }
1638
+ 20%, 68% { transform: scale(0.985, 1.02); }
1639
+ 43%, 86% { transform: scale(1.012, 0.99); }
1640
+ }
1641
+
1642
+ @keyframes composer-mascot-idle-hover-land-body {
1643
+ 0% { transform: translateY(0) rotate(0) scale(1); }
1644
+ 18% { transform: translateY(-1px) rotate(calc(5deg * var(--mascot-idle-travel-sign, -1))) scale(0.99, 1.02); }
1645
+ 66% { transform: translateY(-1px) rotate(calc(3deg * var(--mascot-idle-travel-sign, -1))) scale(0.99, 1.02); }
1646
+ 86% { transform: translateY(0) rotate(0) scale(1); }
1647
+ 91% { transform: translateY(1px) rotate(0) scale(1.1, 0.88); }
1648
+ 95% { transform: translateY(-1px) rotate(0) scale(0.99, 1.02); }
1649
+ 99%, 100% { transform: translateY(0) rotate(0) scale(1); }
1650
+ }
1651
+
1652
+ @keyframes composer-mascot-idle-hover-scan-body {
1653
+ 0%, 12%, 46%, 54%, 88%, 100% { transform: rotate(0); }
1654
+ 20%, 38% { transform: rotate(-2.4deg); }
1655
+ 62%, 80% { transform: rotate(2.4deg); }
1656
+ }
1657
+
1658
+ @keyframes composer-mascot-idle-hover-side-jet-launch {
1659
+ 0% { opacity: 0.34; transform: rotate(var(--mascot-idle-jet-tilt, 22deg)) scaleX(0.34); }
1660
+ 12% { opacity: 0.94; transform: rotate(var(--mascot-idle-jet-tilt, 22deg)) scaleX(1.08); }
1661
+ 68% { opacity: 0.76; transform: rotate(var(--mascot-idle-jet-tilt, 22deg)) scaleX(0.84); }
1662
+ 84% { opacity: 0.42; transform: rotate(var(--mascot-idle-jet-tilt, 22deg)) scaleX(0.48); }
1663
+ 100% { opacity: 0; transform: rotate(var(--mascot-idle-jet-tilt, 22deg)) scaleX(0.12); }
1664
+ }
1665
+
1666
+ @keyframes composer-mascot-idle-hover-side-jet-return {
1667
+ 0% { opacity: 0.28; transform: rotate(var(--mascot-idle-jet-tilt, -18deg)) scaleX(0.28); }
1668
+ 12% { opacity: 0.88; transform: rotate(var(--mascot-idle-jet-tilt, -18deg)) scaleX(0.92); }
1669
+ 52% { opacity: 0.66; transform: rotate(var(--mascot-idle-jet-tilt, -18deg)) scaleX(0.62); }
1670
+ 74% { opacity: 0.3; transform: rotate(var(--mascot-idle-jet-tilt, -18deg)) scaleX(0.34); }
1671
+ 86%, 100% { opacity: 0; transform: rotate(var(--mascot-idle-jet-tilt, -18deg)) scaleX(0.12); }
1672
+ }
1673
+
1674
+ @keyframes composer-mascot-idle-hover-bottom-handoff {
1675
+ 0%, 70% { opacity: 0; transform: translateX(-50%) scaleY(0.16); }
1676
+ 84% { opacity: 0.58; transform: translateX(-50%) scaleY(0.58); }
1677
+ 100% { opacity: 0.78; transform: translateX(-50%) scaleY(0.72); }
1678
+ }
1679
+
1680
+ @keyframes composer-mascot-idle-hover-bottom-hold {
1681
+ 0%, 100% { opacity: 0.72; transform: translateX(-50%) scaleY(0.68) scaleX(0.94); }
1682
+ 50% { opacity: 0.92; transform: translateX(-50%) scaleY(0.88) scaleX(1.04); }
1683
+ }
1684
+
1685
+ @keyframes composer-mascot-idle-hover-bottom-return {
1686
+ 0% { opacity: 0.78; transform: translateX(-50%) rotate(0) scaleY(0.72); animation-timing-function: ease-in-out; }
1687
+ 24% { opacity: 0.68; transform: translateX(-50%) rotate(calc(8deg * var(--mascot-idle-travel-sign, -1))) scaleY(0.58); }
1688
+ 58% { opacity: 0.44; transform: translateX(-50%) rotate(calc(7deg * var(--mascot-idle-travel-sign, -1))) scaleY(0.38); }
1689
+ 78% { opacity: 0.86; transform: translateX(-50%) rotate(calc(3deg * var(--mascot-idle-travel-sign, -1))) scaleY(0.84); }
1690
+ 91% { opacity: 0.98; transform: translateX(-50%) rotate(0) scaleY(1.04); }
1691
+ 100% { opacity: 0; transform: translateX(-50%) rotate(0) scaleY(0.14); }
1692
+ }
1693
+ @keyframes composer-mascot-launch {
1694
+ 0% {
1695
+ transform: translateY(0) scale(1, 1);
1696
+ }
1697
+ 14% {
1698
+ transform: translateY(3px) scale(1.14, 0.8);
1699
+ }
1700
+ 38% {
1701
+ transform: translateY(-20px) scale(0.9, 1.14);
1702
+ }
1703
+ 58% {
1704
+ transform: translateY(0) scale(1.1, 0.88);
1705
+ }
1706
+ 74% {
1707
+ transform: translateY(-6px) scale(0.98, 1.04);
1708
+ }
1709
+ 88% {
1710
+ transform: translateY(0) scale(1.02, 0.98);
1711
+ }
1712
+ 100% {
1713
+ transform: translateY(0) scale(1, 1);
1714
+ }
1715
+ }
1716
+
1717
+ .composer-mascot-launch {
1718
+ animation: composer-mascot-launch 820ms cubic-bezier(0.3, 0.9, 0.4, 1);
1719
+ transform-origin: bottom center;
1720
+ }
1721
+
1722
+ @keyframes composer-mascot-jelly {
1723
+ 0% {
1724
+ transform: scale(1, 1);
1725
+ }
1726
+ 25% {
1727
+ transform: scale(1.16, 0.84);
1728
+ }
1729
+ 45% {
1730
+ transform: scale(0.9, 1.1);
1731
+ }
1732
+ 62% {
1733
+ transform: scale(1.06, 0.94);
1734
+ }
1735
+ 78% {
1736
+ transform: scale(0.98, 1.02);
1737
+ }
1738
+ 100% {
1739
+ transform: scale(1, 1);
1740
+ }
1741
+ }
1742
+
1743
+ .composer-mascot-jelly {
1744
+ transform-origin: bottom center;
1745
+ }
1746
+
1747
+ .composer-mascot-jelly:hover {
1748
+ animation: composer-mascot-jelly 600ms ease-out;
1749
+ }
1750
+
1751
+ @keyframes composer-mascot-bubble-in {
1752
+ 0% {
1753
+ opacity: 0;
1754
+ transform: translateY(6px) scale(0.94);
1755
+ }
1756
+ 100% {
1757
+ opacity: 1;
1758
+ transform: translateY(0) scale(1);
1759
+ }
1760
+ }
1761
+
1762
+ .composer-mascot-bubble {
1763
+ animation: composer-mascot-bubble-in 260ms cubic-bezier(0.34, 1.56, 0.64, 1);
1764
+ }
1765
+ @keyframes composer-mascot-nod {
1766
+ 0%, 100% { transform: translateY(0); }
1767
+ 40% { transform: translateY(2.5px) scale(1.015, 0.985); }
1768
+ }
1769
+
1770
+ .composer-mascot-nod {
1771
+ animation: composer-mascot-nod 140ms ease-out;
1772
+ transform-origin: bottom center;
1773
+ }
1774
+
1775
+ @keyframes composer-mascot-think-sway {
1776
+ 0%, 100% { transform: rotate(-2.2deg); }
1777
+ 50% { transform: rotate(2.2deg); }
1778
+ }
1779
+
1780
+ .composer-mascot-think {
1781
+ animation: composer-mascot-think-sway 2.6s ease-in-out infinite;
1782
+ transform-origin: bottom center;
1783
+ will-change: transform;
1784
+ }
1785
+ @keyframes composer-mascot-cheer {
1786
+ 0% {
1787
+ transform: translateY(0) scale(1, 1);
1788
+ }
1789
+ 12% {
1790
+ transform: translateY(2px) scale(1.08, 0.9);
1791
+ }
1792
+ 30% {
1793
+ transform: translateY(-13px) scale(0.96, 1.06);
1794
+ }
1795
+ 46% {
1796
+ transform: translateY(0) scale(1.05, 0.94);
1797
+ }
1798
+ 60% {
1799
+ transform: translateY(-8px) scale(0.98, 1.03);
1800
+ }
1801
+ 74% {
1802
+ transform: translateY(0) scale(1.02, 0.98);
1803
+ }
1804
+ 100% {
1805
+ transform: translateY(0) scale(1, 1);
1806
+ }
1807
+ }
1808
+
1809
+ .composer-mascot-cheer {
1810
+ animation: composer-mascot-cheer 1s ease-out;
1811
+ transform-origin: bottom center;
1812
+ }
1813
+
1814
+ .composer-mascot-sparkles {
1815
+ position: absolute;
1816
+ inset: 0;
1817
+ pointer-events: none;
1818
+ }
1819
+
1820
+ .composer-mascot-sparkles i {
1821
+ position: absolute;
1822
+ left: 50%;
1823
+ top: 6%;
1824
+ width: 7px;
1825
+ height: 7px;
1826
+ background: var(--dca-theme-success);
1827
+ clip-path: polygon(50% 0, 64% 36%, 100% 50%, 64% 64%, 50% 100%, 36% 64%, 0 50%, 36% 36%);
1828
+ animation: composer-mascot-sparkle 900ms ease-out forwards;
1829
+ }
1830
+
1831
+ @keyframes composer-mascot-sparkle {
1832
+ 0% {
1833
+ opacity: 0;
1834
+ transform: translate(0, 0) scale(0.4) rotate(0);
1835
+ }
1836
+ 18% {
1837
+ opacity: 1;
1838
+ }
1839
+ 100% {
1840
+ opacity: 0;
1841
+ transform: translate(var(--dx), var(--dy)) scale(1) rotate(160deg);
1842
+ }
1843
+ }
1844
+
1845
+ @keyframes composer-mascot-shake {
1846
+ 0%,
1847
+ 100% {
1848
+ transform: translateX(0) rotate(0);
1849
+ }
1850
+ 18% {
1851
+ transform: translateX(-5px) rotate(-2.4deg);
1852
+ }
1853
+ 38% {
1854
+ transform: translateX(5px) rotate(2.4deg);
1855
+ }
1856
+ 58% {
1857
+ transform: translateX(-4px) rotate(-1.8deg);
1858
+ }
1859
+ 78% {
1860
+ transform: translateX(3px) rotate(1.2deg);
1861
+ }
1862
+ }
1863
+
1864
+ .composer-mascot-shake {
1865
+ animation: composer-mascot-shake 520ms ease-in-out;
1866
+ transform-origin: bottom center;
1867
+ }
1868
+
1869
+ @keyframes composer-mascot-eager-hop {
1870
+ 0%,
1871
+ 100% {
1872
+ transform: translateY(0) scale(1, 1);
1873
+ }
1874
+ 50% {
1875
+ transform: translateY(-4px) scale(0.99, 1.02);
1876
+ }
1877
+ }
1878
+
1879
+ .composer-mascot-eager {
1880
+ animation: composer-mascot-eager-hop 460ms ease-in-out infinite;
1881
+ transform-origin: bottom center;
1882
+ }
1883
+
1884
+ @keyframes composer-mascot-sleep-breathe {
1885
+ 0%,
1886
+ 100% {
1887
+ transform: scale(1);
1888
+ }
1889
+ 50% {
1890
+ transform: scale(1.05, 1.06);
1891
+ }
1892
+ }
1893
+
1894
+ .composer-mascot-sleep-breathe {
1895
+ animation: composer-mascot-sleep-breathe 5.6s ease-in-out infinite;
1896
+ transform-origin: bottom center;
1897
+ }
1898
+
1899
+ .composer-mascot-zzz {
1900
+ position: absolute;
1901
+ inset: 0;
1902
+ pointer-events: none;
1903
+ }
1904
+
1905
+ .composer-mascot-zzz span {
1906
+ position: absolute;
1907
+ right: -2px;
1908
+ top: 2px;
1909
+ font-family: Georgia, serif;
1910
+ font-size: 13px;
1911
+ font-weight: 700;
1912
+ color: var(--dca-theme-dimmed);
1913
+ opacity: 0;
1914
+ animation: composer-mascot-zzz 2.8s ease-out infinite;
1915
+ }
1916
+
1917
+ .composer-mascot-zzz span:nth-child(2) {
1918
+ animation-delay: 0.9s;
1919
+ right: 2px;
1920
+ }
1921
+
1922
+ .composer-mascot-zzz span:nth-child(3) {
1923
+ animation-delay: 1.8s;
1924
+ right: 6px;
1925
+ }
1926
+
1927
+ @keyframes composer-mascot-zzz {
1928
+ 0% {
1929
+ opacity: 0;
1930
+ transform: translate(0, 0) scale(0.7);
1931
+ }
1932
+ 25% {
1933
+ opacity: 0.9;
1934
+ }
1935
+ 100% {
1936
+ opacity: 0;
1937
+ transform: translate(13px, -26px) scale(1.15);
1938
+ }
1939
+ }
1940
+
1941
+ @keyframes composer-mascot-startle {
1942
+ 0% {
1943
+ transform: translateY(0) scale(1);
1944
+ }
1945
+ 30% {
1946
+ transform: translateY(-7px) scale(1.1, 0.96);
1947
+ }
1948
+ 60% {
1949
+ transform: translateY(0) scale(0.97, 1.03);
1950
+ }
1951
+ 100% {
1952
+ transform: translateY(0) scale(1);
1953
+ }
1954
+ }
1955
+
1956
+ .composer-mascot-startle {
1957
+ animation: composer-mascot-startle 320ms ease-out;
1958
+ transform-origin: bottom center;
1959
+ }
1960
+
1961
+ @keyframes composer-mascot-push-lift {
1962
+ 0% { transform: translateY(0) scale(1); }
1963
+ 38% { transform: translateY(-7px) scale(0.98, 1.035); }
1964
+ 72% { transform: translateY(1px) scale(1.025, 0.975); }
1965
+ 88% { transform: translateY(-1px) scale(0.995, 1.01); }
1966
+ 100% { transform: translateY(0) scale(1); }
1967
+ }
1968
+
1969
+ .composer-mascot-push-lift {
1970
+ animation: composer-mascot-push-lift 360ms cubic-bezier(0.22, 0.72, 0.24, 1);
1971
+ transform-origin: bottom center;
1972
+ }
1973
+ @keyframes composer-mascot-land {
1974
+ 0%, 100% { transform: translateY(0) scale(1, 1); }
1975
+ 35% { transform: translateY(2px) scale(1.12, 0.86); }
1976
+ 70% { transform: translateY(-2px) scale(0.97, 1.03); }
1977
+ }
1978
+
1979
+ .composer-mascot-land {
1980
+ animation: composer-mascot-land 380ms ease-out;
1981
+ transform-origin: bottom center;
1982
+ }
1983
+
1984
+ @media (prefers-reduced-motion: reduce) {
1985
+ .composer-mascot-motion,
1986
+ .composer-mascot-motion * {
1987
+ animation: none !important;
1988
+ transition: none !important;
1989
+ }
1990
+ }
1991
+
1992
+ [data-composer-mascot-motion='off'],
1993
+ [data-composer-mascot-motion='off'] * { animation: none !important; transition: none !important; }
1994
+
1995
+ [data-mascot-effort] .dca-robot :is(.dca-paint-body, .dca-paint-mark) stop {
1996
+ transition: stop-color 360ms ease;
1997
+ }
1998
+
1999
+ [data-mascot-effort='medium'] .dca-robot .dca-paint-body stop:nth-child(1) {
2000
+ animation: composer-mascot-energy-medium-dark 6s ease-in-out infinite;
2001
+ }
2002
+
2003
+ [data-mascot-effort='medium'] .dca-robot .dca-paint-body stop:nth-child(2) {
2004
+ animation: composer-mascot-energy-medium-mid 6s ease-in-out infinite;
2005
+ }
2006
+
2007
+ [data-mascot-effort='medium'] .dca-robot .dca-paint-body stop:nth-child(3) {
2008
+ animation: composer-mascot-energy-medium-light 6s ease-in-out infinite;
2009
+ }
2010
+
2011
+ [data-mascot-effort='high'] .dca-robot .dca-paint-body stop:nth-child(1) {
2012
+ animation: composer-mascot-energy-high-dark 3.8s ease-in-out infinite;
2013
+ }
2014
+
2015
+ [data-mascot-effort='high'] .dca-robot .dca-paint-body stop:nth-child(2) {
2016
+ animation: composer-mascot-energy-high-mid 3.8s ease-in-out infinite;
2017
+ }
2018
+
2019
+ [data-mascot-effort='high'] .dca-robot .dca-paint-body stop:nth-child(3) {
2020
+ animation: composer-mascot-energy-high-light 3.8s ease-in-out infinite;
2021
+ }
2022
+
2023
+ [data-mascot-effort='high'] .dca-robot .dca-paint-mark stop:nth-child(1) {
2024
+ animation: composer-mascot-energy-high-mark-dark 3.8s ease-in-out infinite;
2025
+ }
2026
+
2027
+ [data-mascot-effort='high'] .dca-robot .dca-paint-mark stop:nth-child(2),
2028
+ [data-mascot-effort='high'] .dca-robot .dca-paint-mark stop:nth-child(3) {
2029
+ animation: composer-mascot-energy-high-mark-light 3.8s ease-in-out infinite;
2030
+ }
2031
+
2032
+ [data-mascot-effort='high'] .dca-robot {
2033
+ filter: drop-shadow(0 0 5px color-mix(in srgb,
2034
+ oklch(from var(--mascot-energy-accent)
2035
+ clamp(0.28, calc(l - 0.0112), 0.96)
2036
+ clamp(0, calc(c * 1.116), 0.3)
2037
+ calc(h - 3.09)) 28%, transparent));
2038
+ }
2039
+
2040
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot .dca-paint-body stop:nth-child(1) {
2041
+ animation: composer-mascot-energy-extra-dark 2.8s ease-in-out infinite;
2042
+ }
2043
+
2044
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot .dca-paint-body stop:nth-child(2) {
2045
+ animation: composer-mascot-energy-extra-mid 2.8s ease-in-out infinite;
2046
+ }
2047
+
2048
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot .dca-paint-body stop:nth-child(3) {
2049
+ animation: composer-mascot-energy-extra-light 2.8s ease-in-out infinite;
2050
+ }
2051
+
2052
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot .dca-paint-mark stop:nth-child(1) {
2053
+ animation: composer-mascot-energy-extra-mark-dark 2.8s ease-in-out infinite;
2054
+ }
2055
+
2056
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot .dca-paint-mark stop:nth-child(2),
2057
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot .dca-paint-mark stop:nth-child(3) {
2058
+ animation: composer-mascot-energy-extra-mark-light 2.8s ease-in-out infinite;
2059
+ }
2060
+
2061
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot {
2062
+ filter: drop-shadow(0 0 7px color-mix(in srgb,
2063
+ oklch(from var(--mascot-energy-accent)
2064
+ clamp(0.28, calc(l - 0.0456), 0.96)
2065
+ clamp(0, calc(c * 1.231), 0.3)
2066
+ calc(h + 27.55)) 36%, transparent));
2067
+ }
2068
+
2069
+ @keyframes dca-skin-energy {
2070
+ 0%, 100% { opacity: 0; }
2071
+ 50% { opacity: var(--dca-skin-energy-peak); }
2072
+ }
2073
+
2074
+ [data-mascot-effort='medium'] .dca-robot[data-effects='live'] .dca-skin-energy {
2075
+ --dca-skin-energy-peak: .16;
2076
+ animation: dca-skin-energy 6s ease-in-out infinite;
2077
+ }
2078
+
2079
+ [data-mascot-effort='high'] .dca-robot[data-effects='live'] .dca-skin-energy {
2080
+ --dca-skin-energy-peak: .26;
2081
+ animation: dca-skin-energy 3.8s ease-in-out infinite;
2082
+ }
2083
+
2084
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-skin-energy {
2085
+ --dca-skin-energy-peak: .38;
2086
+ animation: dca-skin-energy 2.8s ease-in-out infinite;
2087
+ }
2088
+
2089
+ [data-mascot-effort='medium'] .dca-robot[data-effects='live'] .dca-skin-paint stop { animation-duration: 4.6s; }
2090
+ [data-mascot-effort='high'] .dca-robot[data-effects='live'] .dca-skin-paint stop { animation-duration: 3.2s; }
2091
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-skin-paint stop { animation-duration: 2.2s; }
2092
+ :is([data-mascot-effort='high'], [data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-skin-thermal stop { animation-name: dca-fx-thermal-hot; }
2093
+ [data-mascot-effort='medium'] .dca-robot[data-effects='live'] .dca-fx-sheen { animation-duration: 3.4s; }
2094
+ [data-mascot-effort='high'] .dca-robot[data-effects='live'] .dca-fx-sheen { animation-duration: 2.4s; }
2095
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-fx-sheen { animation-duration: 1.6s; }
2096
+ [data-mascot-effort='medium'] .dca-robot[data-effects='live'] .dca-fx-scanline { animation-duration: 2.6s; }
2097
+ [data-mascot-effort='high'] .dca-robot[data-effects='live'] .dca-fx-scanline { animation-duration: 1.8s; }
2098
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-fx-scanline { animation-duration: 1.2s; }
2099
+ [data-mascot-effort='medium'] .dca-robot[data-effects='live'] .dca-fx-pinwheel { animation-duration: 16s; }
2100
+ [data-mascot-effort='high'] .dca-robot[data-effects='live'] .dca-fx-pinwheel { animation-duration: 11s; }
2101
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-fx-pinwheel { animation-duration: 8s; }
2102
+ [data-mascot-effort='medium'] .dca-robot[data-effects='live'] .dca-fx-sonar { animation-duration: 2.6s; }
2103
+ [data-mascot-effort='high'] .dca-robot[data-effects='live'] .dca-fx-sonar { animation-duration: 1.8s; }
2104
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-fx-sonar { animation-duration: 1.2s; }
2105
+ [data-mascot-effort='medium'] .dca-robot[data-effects='live'] .dca-fx-tide { animation-duration: 5s; }
2106
+ [data-mascot-effort='high'] .dca-robot[data-effects='live'] .dca-fx-tide { animation-duration: 3.6s; }
2107
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-fx-tide { animation-duration: 2.6s; }
2108
+ [data-mascot-effort='medium'] .dca-robot[data-effects='live'] .dca-fx-void { animation-duration: 9s; }
2109
+ [data-mascot-effort='high'] .dca-robot[data-effects='live'] .dca-fx-void { animation-duration: 6.5s; }
2110
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-fx-void { animation-duration: 4.5s; }
2111
+ :is([data-mascot-effort='high'], [data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-fx-void { animation-name: dca-fx-void-hot; }
2112
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] .dca-fx-prism-echo { opacity: 1; }
2113
+ [data-mascot-effort='high'] .dca-robot[data-effects='live'] [data-skin-overlay='galaxy'] .dca-fx-node { animation-duration: 1.1s; }
2114
+ :is([data-mascot-effort='extraHigh'], [data-mascot-effort='max']) .dca-robot[data-effects='live'] [data-skin-overlay='galaxy'] .dca-fx-node { animation-duration: .7s; }