lively-mascot 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2501 @@
1
+ /* ============================================================
2
+ * lively-mascot · Base Styles (shared across all characters)
3
+ *
4
+ * Zero dependencies, pure CSS. Visual language: solid fill + 2px
5
+ * ink outline + hard-edge offset shadow (sticker / neo-brutalist).
6
+ *
7
+ * Theme vars (set via JS inline style or override):
8
+ * --lively-body Body fill, default #48ff42
9
+ * --lively-outline Outline / eyes / shadow ink, default #080808
10
+ * --lively-accent Blush accent, default #ff9fb6
11
+ *
12
+ * Structure (DOM):
13
+ * .lively-mascot (root, cursor-follow class)
14
+ * .lively-mascot__rig (JS applies tilt/translate via transform)
15
+ * .lively-body -> idle sway
16
+ * .lively-face-wrap > svg > .lively-face -> blink
17
+ * .lively__feet -> step / happy kick / hopping tuck
18
+ * ============================================================ */
19
+
20
+ /* --- Root --- */
21
+ .lively-mascot {
22
+ --lively-body: #48ff42;
23
+ --lively-outline: #080808;
24
+ --lively-accent: #ff9fb6;
25
+ --lively-depth-transform: rotateX(0deg) rotateY(0deg);
26
+ --lively-gloss-x: 25%;
27
+ --lively-gloss-y: 18%;
28
+ position: relative;
29
+ display: inline-block;
30
+ width: 106px;
31
+ height: 106px;
32
+ container-type: inline-size;
33
+ cursor: pointer;
34
+ user-select: none;
35
+ }
36
+
37
+ /* 2D view keeps the original flat, sticker-like rendering. */
38
+ .lively-mascot--2d {
39
+ perspective: none;
40
+ }
41
+
42
+ /* Lightweight depth treatment: the same SVG character gains a shallow
43
+ camera angle, layered parts, and directional shading without WebGL. */
44
+ .lively-mascot--3d {
45
+ --lively-depth-transform: rotateX(2deg) rotateY(-2.8deg);
46
+ perspective: 680px;
47
+ perspective-origin: 50% 50%;
48
+ }
49
+
50
+ .lively-mascot--3d .lively-mascot__rig,
51
+ .lively-mascot--3d .lively-mascot__gaze,
52
+ .lively-mascot.lively-mascot--3d .lively-body,
53
+ .lively-mascot--3d .lively-face-wrap {
54
+ transform-style: preserve-3d;
55
+ }
56
+
57
+ .lively-mascot--3d .lively-mascot__gaze {
58
+ transform-origin: 50% 58%;
59
+ }
60
+
61
+ .lively-mascot__gaze { transform: var(--lively-depth-transform); }
62
+
63
+ .lively-mascot.lively-mascot--3d .lively-body {
64
+ box-shadow:
65
+ 0 16px 24px rgba(15, 17, 18, .24),
66
+ 0 4px 7px rgba(15, 17, 18, .16),
67
+ inset -12px -14px 22px rgba(10, 15, 20, .22),
68
+ inset 7px 7px 14px rgba(255,255,255,.21);
69
+ filter: saturate(1.03) contrast(1.02);
70
+ backface-visibility: hidden;
71
+ }
72
+
73
+ .lively-mascot--3d .lively-body::before {
74
+ content: "";
75
+ position: absolute;
76
+ inset: 0;
77
+ border-radius: inherit;
78
+ background:
79
+ radial-gradient(ellipse at var(--lively-gloss-x) var(--lively-gloss-y), rgba(255,255,255,.34) 0%, rgba(255,255,255,.17) 16%, transparent 43%),
80
+ linear-gradient(145deg, rgba(255,255,255,.13) 0%, rgba(255,255,255,0) 43%),
81
+ linear-gradient(325deg, rgba(10,15,20,.20) 0%, rgba(10,15,20,0) 46%);
82
+ opacity: .92;
83
+ pointer-events: none;
84
+ transform: translateZ(6px);
85
+ filter: blur(.65px);
86
+ }
87
+
88
+ .lively-mascot--3d .lively-body::after {
89
+ content: "";
90
+ position: absolute;
91
+ inset: 2px;
92
+ border-radius: inherit;
93
+ border: 1px solid rgba(255,255,255,.13);
94
+ box-shadow: inset -4px -5px 7px rgba(8,13,18,.10), inset 2px 2px 5px rgba(255,255,255,.08);
95
+ pointer-events: none;
96
+ transform: translateZ(2px);
97
+ opacity: .82;
98
+ }
99
+
100
+ .lively-mascot--3d .lively-face-wrap {
101
+ transform: translateZ(11px);
102
+ filter: drop-shadow(0 3px 3px rgba(0,0,0,.14));
103
+ }
104
+ .lively-mascot--3d .lively__leaf,
105
+ .lively-mascot--3d .lively__ears,
106
+ .lively-mascot--3d .lively__antenna {
107
+ filter: drop-shadow(2px 4px 3px rgba(0,0,0,.18));
108
+ }
109
+ .lively-mascot--3d .lively__leaf svg,
110
+ .lively-mascot--3d .lively__ears svg,
111
+ .lively-mascot--3d .lively__antenna svg {
112
+ transform: translateZ(13px);
113
+ filter: drop-shadow(3px 5px 4px rgba(0,0,0,.19));
114
+ }
115
+
116
+ /* Solid accessories use their own depth planes so they do not read as flat decals. */
117
+ .lively-mascot--3d .lively__tail {
118
+ transform-style: preserve-3d;
119
+ filter: drop-shadow(2px 4px 3px rgba(0,0,0,.16));
120
+ }
121
+ .lively-mascot--3d .lively__tail svg { transform: translateZ(-3px); }
122
+ .lively-mascot--3d .lively__feet {
123
+ transform: translateZ(5px);
124
+ filter: var(--lively-state-filter, brightness(1)) drop-shadow(0 5px 4px rgba(0,0,0,.20));
125
+ }
126
+ .lively-mascot--3d .lively__foot svg {
127
+ transform: translateZ(10px);
128
+ filter: drop-shadow(1px 3px 3px rgba(0,0,0,.20));
129
+ }
130
+
131
+ /* Shared foot lighting: a softbox reflection sits on the upper-left of
132
+ every foot shape, including rectangular robot feet. */
133
+ .lively-mascot--3d .lively__foot::after {
134
+ content: "";
135
+ position: absolute;
136
+ left: 16%;
137
+ top: 13%;
138
+ width: 52%;
139
+ height: 30%;
140
+ border-radius: 50%;
141
+ background: radial-gradient(ellipse, rgba(255,255,255,.48) 0%, rgba(255,255,255,.16) 45%, transparent 76%);
142
+ filter: blur(.45px);
143
+ pointer-events: none;
144
+ z-index: 2;
145
+ }
146
+
147
+ @media (prefers-reduced-motion: reduce) {
148
+ .lively-mascot--3d .lively-body::before { transform: none; }
149
+ }
150
+
151
+ /* --- Static mode: no cursor-follow, no idle / loop animations ---
152
+ Used for thumbnail previews (e.g. the emotion gallery). The visible face is
153
+ still driven by the `is-emotion-XX` class; only motion is disabled. */
154
+ .lively-mascot--static {
155
+ cursor: default;
156
+ pointer-events: none;
157
+ }
158
+
159
+ .lively-mascot--static * {
160
+ animation: none !important;
161
+ }
162
+
163
+ /* --- Loading ring overlay (28) — shared by all characters ---
164
+ A bold, clearly-visible spinner for the live mascot; hidden in static
165
+ thumbnails so the emotion gallery stays purely iconic. */
166
+ .lively__loading-overlay {
167
+ display: none;
168
+ }
169
+
170
+ .lively-mascot.is-emotion-28 .lively__loading-overlay {
171
+ display: block;
172
+ position: absolute;
173
+ top: 50%;
174
+ left: 50%;
175
+ width: 50%;
176
+ height: 50%;
177
+ transform: translate(-50%, -50%);
178
+ box-sizing: border-box;
179
+ border-radius: 50%;
180
+ border: 2.5px solid color-mix(in srgb, var(--lively-outline) 22%, transparent);
181
+ pointer-events: none;
182
+ z-index: 10;
183
+ }
184
+
185
+ .lively-mascot.is-emotion-28 .lively__loading-overlay::before {
186
+ content: "";
187
+ position: absolute;
188
+ inset: -5px;
189
+ box-sizing: border-box;
190
+ border: 4px solid transparent;
191
+ border-top-color: var(--lively-outline);
192
+ border-right-color: var(--lively-outline);
193
+ border-radius: inherit;
194
+ filter: drop-shadow(0 0 3px color-mix(in srgb, var(--lively-outline) 35%, transparent));
195
+ animation: lively-loading-orbit 1s linear infinite;
196
+ }
197
+
198
+ /* Static thumbnails (emotion gallery) keep the same loading ring but frozen */
199
+ .lively-mascot--static.is-emotion-28 .lively__loading-overlay {
200
+ display: block;
201
+ width: 44%;
202
+ height: 44%;
203
+ border-width: 2px;
204
+ }
205
+
206
+ .lively-mascot--static.is-emotion-28 .lively__loading-overlay::before {
207
+ animation: none;
208
+ inset: -4px;
209
+ border-width: 3px;
210
+ /* freeze the arc at about 2 o'clock so it still reads as "loading" */
211
+ transform: rotate(45deg);
212
+ }
213
+
214
+ /* Rig layer: outer posture layer (hop / refresh rotation) */
215
+ .lively-mascot__rig {
216
+ position: absolute;
217
+ inset: 0;
218
+ will-change: transform;
219
+ }
220
+
221
+ /* Gaze layer: JS applies cursor-follow tilt; wraps all parts so the whole
222
+ face leans/turns together with the body posture. */
223
+ .lively-mascot__gaze {
224
+ position: absolute;
225
+ inset: 0;
226
+ will-change: transform;
227
+ }
228
+
229
+ /* ============================================================
230
+ * Body
231
+ * ============================================================ */
232
+ .lively-body {
233
+ position: absolute;
234
+ inset: 0;
235
+ border: 2px solid var(--lively-outline);
236
+ border-radius: 50%;
237
+ background: var(--lively-body);
238
+ box-shadow: 3px 3px 0 color-mix(in srgb, var(--lively-outline) 70%, transparent);
239
+ transform-origin: 50% 92%;
240
+ /* Default idle posture: body + nested face + ears sway together */
241
+ animation: lively-sway 3.6s ease-in-out infinite;
242
+ }
243
+
244
+ /* These characters read best when their head/body rests upright. They retain
245
+ a quiet idle lift, while their attached ears, leaf, and antenna keep their
246
+ own independent motion. */
247
+ .lively-mascot--sprout .lively-body,
248
+ .lively-mascot--cat .lively-body,
249
+ .lively-mascot--robot .lively-body {
250
+ animation-name: lively-upright-sway;
251
+ }
252
+
253
+ /* Immersive mode keeps internal facial detail readable while removing the
254
+ sticker-like silhouette ink from the body and exposed outer accessories. */
255
+ .lively-mascot.lively-mascot--outline-hidden .lively-body {
256
+ border-width: 0;
257
+ }
258
+
259
+ .lively-mascot.lively-mascot--2d.lively-mascot--outline-hidden .lively-body {
260
+ box-shadow: none;
261
+ }
262
+
263
+ /* With the ink geometry removed, the shared light pass fills the entire body
264
+ edge instead of forming a separate rim around the silhouette. */
265
+ .lively-mascot.lively-mascot--3d.lively-mascot--outline-hidden .lively-body::before {
266
+ inset: 0;
267
+ }
268
+
269
+ .lively-mascot.lively-mascot--3d.lively-mascot--outline-hidden .lively-body::after {
270
+ display: none;
271
+ }
272
+
273
+ .lively-mascot--outline-hidden .lively-sprout__leaf,
274
+ .lively-mascot--outline-hidden .lively__ear,
275
+ .lively-mascot--outline-hidden .lively-cat__tail-outline,
276
+ .lively-mascot--outline-hidden .lively-ghost__hem-stroke {
277
+ stroke-opacity: 0;
278
+ }
279
+
280
+ .lively-mascot.is-happy .lively-body {
281
+ animation: lively-squish 0.6s cubic-bezier(.3, 1.6, .4, 1);
282
+ }
283
+
284
+ /* ============================================================
285
+ * Face
286
+ * ============================================================ */
287
+ .lively-face-wrap {
288
+ position: absolute;
289
+ inset: 4px;
290
+ }
291
+
292
+ .lively-face-accessory {
293
+ visibility: hidden;
294
+ }
295
+
296
+ .lively-face-accessory.is-active {
297
+ visibility: visible;
298
+ }
299
+
300
+ .lively-face-wrap svg {
301
+ display: block;
302
+ width: 100%;
303
+ height: 100%;
304
+ overflow: visible;
305
+ transform-origin: 50% 50%;
306
+ animation: lively-breathe 3.8s ease-in-out infinite;
307
+ }
308
+
309
+ .lively-face {
310
+ transform-box: fill-box;
311
+ transform-origin: center;
312
+ }
313
+
314
+ /* --- Eyes --- */
315
+ .lively-face__eye {
316
+ transform-box: fill-box;
317
+ transform-origin: center;
318
+ transition: transform 90ms ease-out;
319
+ }
320
+
321
+ .lively-face__eye.is-blinking {
322
+ transform: scaleY(0.08);
323
+ }
324
+
325
+ .lively-face__eye>ellipse {
326
+ fill: #fff;
327
+ stroke: var(--lively-outline);
328
+ stroke-width: 2.4;
329
+ }
330
+
331
+ .lively-face__pupil {
332
+ fill: var(--lively-outline);
333
+ }
334
+
335
+ .lively-face__shine {
336
+ fill: #fff;
337
+ }
338
+
339
+ /* --- Blush --- */
340
+ .lively-face__blush {
341
+ fill: var(--lively-accent);
342
+ fill-opacity: 0.75;
343
+ }
344
+
345
+ /* --- Mouth variants --- */
346
+ .lively-face__mouth,
347
+ .lively-face__happy {
348
+ fill: none;
349
+ stroke: var(--lively-outline);
350
+ stroke-width: 2.6;
351
+ stroke-linecap: round;
352
+ }
353
+
354
+ .lively-face__happy-mouth {
355
+ fill: var(--lively-outline);
356
+ }
357
+
358
+ .lively-face__happy,
359
+ .lively-face__happy-mouth {
360
+ visibility: hidden;
361
+ }
362
+
363
+ .lively-mascot.is-happy .lively-face__eye>ellipse,
364
+ .lively-mascot.is-happy .lively-face__pupil,
365
+ .lively-mascot.is-happy .lively-face__shine,
366
+ .lively-mascot.is-happy .lively-face__mouth {
367
+ visibility: hidden;
368
+ }
369
+
370
+ .lively-mascot.is-happy .lively-face__happy,
371
+ .lively-mascot.is-happy .lively-face__happy-mouth {
372
+ visibility: visible;
373
+ }
374
+
375
+ /* --- Alt face elements: hidden by default --- */
376
+ .lively-face__sad-mouth,
377
+ .lively-face__open-mouth,
378
+ .lively-face__flat-mouth,
379
+ .lively-face__bored-mouth,
380
+ .lively-face__sleep-eye,
381
+ .lively-face__angry-brow,
382
+ .lively-face__x-eye,
383
+ .lively-face__heart-eye {
384
+ visibility: hidden;
385
+ }
386
+
387
+ .lively-face__sad-mouth,
388
+ .lively-face__flat-mouth,
389
+ .lively-face__bored-mouth {
390
+ fill: none;
391
+ stroke: var(--lively-outline);
392
+ stroke-width: 2.6;
393
+ stroke-linecap: round;
394
+ }
395
+
396
+ .lively-face__open-mouth {
397
+ fill: var(--lively-outline);
398
+ stroke: var(--lively-outline);
399
+ stroke-width: 1.5;
400
+ }
401
+
402
+ .lively-face__sleep-eye {
403
+ fill: none;
404
+ stroke: var(--lively-outline);
405
+ stroke-width: 2.4;
406
+ stroke-linecap: round;
407
+ }
408
+
409
+ .lively-face__angry-brow {
410
+ fill: none;
411
+ stroke: var(--lively-outline);
412
+ stroke-width: 2.8;
413
+ stroke-linecap: round;
414
+ }
415
+
416
+ .lively-face__x-eye line {
417
+ fill: none;
418
+ stroke: var(--lively-outline);
419
+ stroke-width: 2.6;
420
+ stroke-linecap: round;
421
+ }
422
+
423
+ .lively-face__heart-eye {
424
+ fill: var(--lively-accent);
425
+ stroke: var(--lively-outline);
426
+ stroke-width: 1.2;
427
+ }
428
+
429
+ /* ============================================================
430
+ * Emotion Face Behaviors (40 emotions)
431
+ * ============================================================ */
432
+
433
+ /* 00 Sleep */
434
+ .lively-mascot.is-emotion-00 .lively-face__eye>ellipse,
435
+ .lively-mascot.is-emotion-00 .lively-face__pupil,
436
+ .lively-mascot.is-emotion-00 .lively-face__shine,
437
+ .lively-mascot.is-emotion-00 .lively-face__mouth {
438
+ visibility: hidden;
439
+ }
440
+
441
+ .lively-mascot.is-emotion-00 .lively-face__sleep-eye {
442
+ visibility: visible;
443
+ }
444
+
445
+ .lively-mascot.is-emotion-00 .lively-face__flat-mouth {
446
+ visibility: visible;
447
+ }
448
+
449
+ .lively-mascot.is-emotion-00 .lively-face__blush {
450
+ fill-opacity: 0.3;
451
+ }
452
+
453
+ /* 01 Wake */
454
+ .lively-mascot.is-emotion-01 .lively-face__mouth {
455
+ visibility: hidden;
456
+ }
457
+
458
+ .lively-mascot.is-emotion-01 .lively-face__open-mouth {
459
+ visibility: visible;
460
+ rx: 3;
461
+ ry: 4;
462
+ }
463
+
464
+ /* 02 Idle: default face */
465
+
466
+ /* 03 Breathe: default face */
467
+
468
+ /* 04 Ready */
469
+ .lively-mascot.is-emotion-04 .lively-face__eye>ellipse {
470
+ ry: 13;
471
+ }
472
+
473
+ /* 05 Pause */
474
+ .lively-mascot.is-emotion-05 .lively-face__eye>ellipse {
475
+ ry: 5;
476
+ }
477
+
478
+ .lively-mascot.is-emotion-05 .lively-face__pupil,
479
+ .lively-mascot.is-emotion-05 .lively-face__shine {
480
+ visibility: hidden;
481
+ }
482
+
483
+ .lively-mascot.is-emotion-05 .lively-face__mouth {
484
+ visibility: hidden;
485
+ }
486
+
487
+ .lively-mascot.is-emotion-05 .lively-face__flat-mouth {
488
+ visibility: visible;
489
+ }
490
+
491
+ /* 06 Refresh: normal face */
492
+
493
+ /* 07 LowBattery */
494
+ .lively-mascot.is-emotion-07 .lively-face__eye {
495
+ transform: translateY(2px) scaleY(0.8);
496
+ }
497
+
498
+ .lively-mascot.is-emotion-07 .lively-face__mouth {
499
+ visibility: hidden;
500
+ }
501
+
502
+ .lively-mascot.is-emotion-07 .lively-face__sad-mouth {
503
+ visibility: visible;
504
+ }
505
+
506
+ .lively-mascot.is-emotion-07 .lively-face__blush {
507
+ fill-opacity: 0.3;
508
+ }
509
+
510
+ /* 08 Offline */
511
+ .lively-mascot.is-emotion-08 .lively-face__eye>ellipse,
512
+ .lively-mascot.is-emotion-08 .lively-face__pupil,
513
+ .lively-mascot.is-emotion-08 .lively-face__shine,
514
+ .lively-mascot.is-emotion-08 .lively-face__mouth {
515
+ visibility: hidden;
516
+ }
517
+
518
+ .lively-mascot.is-emotion-08 .lively-face__x-eye {
519
+ visibility: visible;
520
+ }
521
+
522
+ .lively-mascot.is-emotion-08 .lively-face__flat-mouth {
523
+ visibility: visible;
524
+ }
525
+
526
+ .lively-mascot.is-emotion-08 .lively-face__blush {
527
+ fill-opacity: 0;
528
+ }
529
+
530
+ /* 09 Boot */
531
+ .lively-mascot.is-emotion-09 .lively-face__eye>ellipse {
532
+ ry: 13;
533
+ rx: 11;
534
+ }
535
+
536
+ .lively-mascot.is-emotion-09 .lively-face__mouth {
537
+ visibility: hidden;
538
+ }
539
+
540
+ .lively-mascot.is-emotion-09 .lively-face__open-mouth {
541
+ visibility: visible;
542
+ }
543
+
544
+ /* 10 Happy */
545
+ .lively-mascot.is-emotion-10 .lively-face__eye>ellipse,
546
+ .lively-mascot.is-emotion-10 .lively-face__pupil,
547
+ .lively-mascot.is-emotion-10 .lively-face__shine,
548
+ .lively-mascot.is-emotion-10 .lively-face__mouth {
549
+ visibility: hidden;
550
+ }
551
+
552
+ .lively-mascot.is-emotion-10 .lively-face__happy {
553
+ visibility: visible;
554
+ }
555
+
556
+ .lively-mascot.is-emotion-10 .lively-face__happy-mouth {
557
+ visibility: visible;
558
+ }
559
+
560
+ .lively-mascot.is-emotion-10 .lively-face__blush {
561
+ fill-opacity: 1;
562
+ }
563
+
564
+ /* 11 Excited */
565
+ .lively-mascot.is-emotion-11 .lively-face__eye>ellipse,
566
+ .lively-mascot.is-emotion-11 .lively-face__pupil,
567
+ .lively-mascot.is-emotion-11 .lively-face__shine,
568
+ .lively-mascot.is-emotion-11 .lively-face__mouth {
569
+ visibility: hidden;
570
+ }
571
+
572
+ .lively-mascot.is-emotion-11 .lively-face__happy {
573
+ visibility: visible;
574
+ }
575
+
576
+ .lively-mascot.is-emotion-11 .lively-face__happy-mouth {
577
+ visibility: visible;
578
+ }
579
+
580
+ .lively-mascot.is-emotion-11 .lively-face__blush {
581
+ fill-opacity: 1;
582
+ rx: 9;
583
+ }
584
+
585
+ /* 12 Sad */
586
+ .lively-mascot.is-emotion-12 .lively-face__eye {
587
+ transform: translateY(2px) scaleY(0.85);
588
+ }
589
+
590
+ .lively-mascot.is-emotion-12 .lively-face__mouth {
591
+ visibility: hidden;
592
+ }
593
+
594
+ .lively-mascot.is-emotion-12 .lively-face__sad-mouth {
595
+ visibility: visible;
596
+ }
597
+
598
+ .lively-mascot.is-emotion-12 .lively-face__blush {
599
+ fill-opacity: 0.3;
600
+ }
601
+
602
+ /* 13 Angry */
603
+ .lively-mascot.is-emotion-13 .lively-face__eye>ellipse {
604
+ ry: 9;
605
+ }
606
+
607
+ .lively-mascot.is-emotion-13 .lively-face__mouth {
608
+ visibility: hidden;
609
+ }
610
+
611
+ .lively-mascot.is-emotion-13 .lively-face__sad-mouth {
612
+ visibility: visible;
613
+ }
614
+
615
+ .lively-mascot.is-emotion-13 .lively-face__angry-brow {
616
+ visibility: visible;
617
+ }
618
+
619
+ .lively-mascot.is-emotion-13 .lively-face__blush {
620
+ fill: #ff6b6b;
621
+ fill-opacity: 0.7;
622
+ }
623
+
624
+ /* 14 Surprised */
625
+ .lively-mascot.is-emotion-14 .lively-face__eye>ellipse {
626
+ ry: 14;
627
+ rx: 12;
628
+ }
629
+
630
+ .lively-mascot.is-emotion-14 .lively-face__mouth {
631
+ visibility: hidden;
632
+ }
633
+
634
+ .lively-mascot.is-emotion-14 .lively-face__open-mouth {
635
+ visibility: visible;
636
+ rx: 6;
637
+ ry: 7;
638
+ }
639
+
640
+ .lively-mascot.is-emotion-14 .lively-face__blush {
641
+ fill-opacity: 0.9;
642
+ }
643
+
644
+ /* 15 Shy */
645
+ .lively-mascot.is-emotion-15 .lively-face__eye {
646
+ transform: translateY(3px);
647
+ }
648
+
649
+ .lively-mascot.is-emotion-15 .lively-face__mouth {
650
+ visibility: hidden;
651
+ }
652
+
653
+ .lively-mascot.is-emotion-15 .lively-face__happy {
654
+ visibility: visible;
655
+ }
656
+
657
+ .lively-mascot.is-emotion-15 .lively-face__happy-mouth {
658
+ visibility: visible;
659
+ }
660
+
661
+ .lively-mascot.is-emotion-15 .lively-face__blush {
662
+ fill-opacity: 1;
663
+ rx: 9;
664
+ ry: 5;
665
+ }
666
+
667
+ /* 16 Love */
668
+ .lively-mascot.is-emotion-16 .lively-face__eye>ellipse,
669
+ .lively-mascot.is-emotion-16 .lively-face__pupil,
670
+ .lively-mascot.is-emotion-16 .lively-face__shine,
671
+ .lively-mascot.is-emotion-16 .lively-face__mouth {
672
+ visibility: hidden;
673
+ }
674
+
675
+ .lively-mascot.is-emotion-16 .lively-face__heart-eye {
676
+ visibility: visible;
677
+ }
678
+
679
+ .lively-mascot.is-emotion-16 .lively-face__happy-mouth {
680
+ visibility: visible;
681
+ }
682
+
683
+ .lively-mascot.is-emotion-16 .lively-face__blush {
684
+ fill-opacity: 1;
685
+ rx: 9;
686
+ }
687
+
688
+ /* 17 Confused */
689
+ .lively-mascot.is-emotion-17 .lively-face__mouth {
690
+ visibility: hidden;
691
+ }
692
+
693
+ .lively-mascot.is-emotion-17 .lively-face__sad-mouth {
694
+ visibility: visible;
695
+ }
696
+
697
+ .lively-mascot.is-emotion-17 .lively-face__blush {
698
+ fill-opacity: 0.4;
699
+ }
700
+
701
+ /* 18 Cool */
702
+ .lively-mascot.is-emotion-18 .lively-face__eye>ellipse {
703
+ ry: 6;
704
+ }
705
+
706
+ .lively-mascot.is-emotion-18 .lively-face__mouth {
707
+ visibility: hidden;
708
+ }
709
+
710
+ .lively-mascot.is-emotion-18 .lively-face__happy {
711
+ visibility: visible;
712
+ }
713
+
714
+ .lively-mascot.is-emotion-18 .lively-face__blush {
715
+ fill-opacity: 0.5;
716
+ }
717
+
718
+ /* 19 Smug */
719
+ .lively-mascot.is-emotion-19 .lively-face__eye>ellipse {
720
+ ry: 7;
721
+ }
722
+
723
+ .lively-mascot.is-emotion-19 .lively-face__mouth {
724
+ visibility: hidden;
725
+ }
726
+
727
+ .lively-mascot.is-emotion-19 .lively-face__happy {
728
+ visibility: visible;
729
+ }
730
+
731
+ .lively-mascot.is-emotion-19 .lively-face__happy-mouth {
732
+ visibility: visible;
733
+ }
734
+
735
+ /* 20 Thinking */
736
+ .lively-mascot.is-emotion-20 .lively-face__eye {
737
+ transform: translateY(-3px);
738
+ }
739
+
740
+ .lively-mascot.is-emotion-20 .lively-face__mouth {
741
+ visibility: hidden;
742
+ }
743
+
744
+ .lively-mascot.is-emotion-20 .lively-face__flat-mouth {
745
+ visibility: visible;
746
+ }
747
+
748
+ /* 21 Listening */
749
+ .lively-mascot.is-emotion-21 .lively-face__eye>ellipse {
750
+ ry: 13;
751
+ }
752
+
753
+ /* 22 Talking */
754
+ .lively-mascot.is-emotion-22 .lively-face__mouth {
755
+ visibility: hidden;
756
+ }
757
+
758
+ .lively-mascot.is-emotion-22 .lively-face__open-mouth {
759
+ visibility: visible;
760
+ rx: 4;
761
+ ry: 5;
762
+ }
763
+
764
+ /* 23 Searching: default face (JS gaze handles eye direction) */
765
+
766
+ /* 24 Reading */
767
+ .lively-mascot.is-emotion-24 .lively-face__eye {
768
+ transform: translateY(3px);
769
+ }
770
+
771
+ .lively-mascot.is-emotion-24 .lively-face__mouth {
772
+ visibility: hidden;
773
+ }
774
+
775
+ .lively-mascot.is-emotion-24 .lively-face__happy {
776
+ visibility: visible;
777
+ }
778
+
779
+ /* 25 Writing */
780
+ .lively-mascot.is-emotion-25 .lively-face__eye {
781
+ transform: translateY(2px) translateX(1px);
782
+ }
783
+
784
+ /* 26 Coding */
785
+ .lively-mascot.is-emotion-26 .lively-face__eye>ellipse {
786
+ ry: 8;
787
+ }
788
+
789
+ .lively-mascot.is-emotion-26 .lively-face__mouth {
790
+ visibility: hidden;
791
+ }
792
+
793
+ .lively-mascot.is-emotion-26 .lively-face__flat-mouth {
794
+ visibility: visible;
795
+ }
796
+
797
+ /* 27 Designing: default face */
798
+
799
+ /* 28 Loading */
800
+ .lively-mascot.is-emotion-28 .lively-face__eye {
801
+ animation: lively-loading-eye-drift 3s ease-in-out infinite;
802
+ }
803
+
804
+ .lively-mascot.is-emotion-28 .lively-face__mouth {
805
+ visibility: hidden;
806
+ }
807
+
808
+ .lively-mascot.is-emotion-28 .lively-face__flat-mouth {
809
+ visibility: visible;
810
+ }
811
+
812
+ /* 29 Processing */
813
+ .lively-mascot.is-emotion-29 .lively-face__eye>ellipse {
814
+ ry: 9;
815
+ }
816
+
817
+ .lively-mascot.is-emotion-29 .lively-face__mouth {
818
+ visibility: hidden;
819
+ }
820
+
821
+ .lively-mascot.is-emotion-29 .lively-face__flat-mouth {
822
+ visibility: visible;
823
+ }
824
+
825
+ /* 30 Success */
826
+ .lively-mascot.is-emotion-30 .lively-face__eye>ellipse,
827
+ .lively-mascot.is-emotion-30 .lively-face__pupil,
828
+ .lively-mascot.is-emotion-30 .lively-face__shine,
829
+ .lively-mascot.is-emotion-30 .lively-face__mouth {
830
+ visibility: hidden;
831
+ }
832
+
833
+ .lively-mascot.is-emotion-30 .lively-face__happy {
834
+ visibility: visible;
835
+ }
836
+
837
+ .lively-mascot.is-emotion-30 .lively-face__happy-mouth {
838
+ visibility: visible;
839
+ }
840
+
841
+ .lively-mascot.is-emotion-30 .lively-face__blush {
842
+ fill-opacity: 1;
843
+ }
844
+
845
+ /* 31 Error */
846
+ .lively-mascot.is-emotion-31 .lively-face__eye>ellipse,
847
+ .lively-mascot.is-emotion-31 .lively-face__pupil,
848
+ .lively-mascot.is-emotion-31 .lively-face__shine,
849
+ .lively-mascot.is-emotion-31 .lively-face__mouth {
850
+ visibility: hidden;
851
+ }
852
+
853
+ .lively-mascot.is-emotion-31 .lively-face__x-eye {
854
+ visibility: visible;
855
+ }
856
+
857
+ .lively-mascot.is-emotion-31 .lively-face__sad-mouth {
858
+ visibility: visible;
859
+ }
860
+
861
+ .lively-mascot.is-emotion-31 .lively-face__blush {
862
+ fill: #ff6b6b;
863
+ fill-opacity: 0.7;
864
+ }
865
+
866
+ /* 32 Grateful */
867
+ .lively-mascot.is-emotion-32 .lively-face__eye>ellipse,
868
+ .lively-mascot.is-emotion-32 .lively-face__pupil,
869
+ .lively-mascot.is-emotion-32 .lively-face__shine,
870
+ .lively-mascot.is-emotion-32 .lively-face__mouth {
871
+ visibility: hidden;
872
+ }
873
+
874
+ .lively-mascot.is-emotion-32 .lively-face__happy {
875
+ visibility: visible;
876
+ }
877
+
878
+ .lively-mascot.is-emotion-32 .lively-face__happy-mouth {
879
+ visibility: visible;
880
+ }
881
+
882
+ .lively-mascot.is-emotion-32 .lively-face__blush {
883
+ fill: #ffb37a;
884
+ fill-opacity: 0.85;
885
+ }
886
+
887
+ /* 33 Retrying */
888
+ .lively-mascot.is-emotion-33 .lively-face__pupil {
889
+ rx: 3;
890
+ ry: 4;
891
+ }
892
+
893
+ .lively-mascot.is-emotion-33 .lively-face__mouth {
894
+ d: path("M44 63 Q50 63 56 63");
895
+ }
896
+
897
+ /* 34 Cancelled */
898
+ .lively-mascot.is-emotion-34 .lively-face__pupil {
899
+ cy: 47;
900
+ ry: 3;
901
+ }
902
+
903
+ .lively-mascot.is-emotion-34 .lively-face__mouth {
904
+ visibility: hidden;
905
+ }
906
+
907
+ .lively-mascot.is-emotion-34 .lively-face__sad-mouth {
908
+ visibility: visible;
909
+ }
910
+
911
+ .lively-mascot.is-emotion-34 .lively-face__blush {
912
+ fill-opacity: 0.3;
913
+ }
914
+
915
+ /* 35 Crying */
916
+ .lively-mascot.is-emotion-35 .lively-face__eye>ellipse,
917
+ .lively-mascot.is-emotion-35 .lively-face__pupil,
918
+ .lively-mascot.is-emotion-35 .lively-face__shine,
919
+ .lively-mascot.is-emotion-35 .lively-face__mouth {
920
+ visibility: hidden;
921
+ }
922
+
923
+ .lively-mascot.is-emotion-35 .lively-face__cry-eye {
924
+ visibility: visible;
925
+ }
926
+
927
+ .lively-mascot.is-emotion-35 .lively-face__sad-mouth {
928
+ visibility: visible;
929
+ }
930
+
931
+ .lively-mascot.is-emotion-35 .lively-face__tear {
932
+ visibility: visible;
933
+ }
934
+
935
+ .lively-mascot.is-emotion-35 .lively-face__blush {
936
+ fill: #6ec7ff;
937
+ fill-opacity: 0.6;
938
+ }
939
+
940
+ /* 36 Bored */
941
+ .lively-mascot.is-emotion-36 .lively-face__eye {
942
+ transform: translateY(4px) scaleY(.5);
943
+ }
944
+
945
+ .lively-mascot.is-emotion-36 .lively-face__pupil,
946
+ .lively-mascot.is-emotion-36 .lively-face__shine {
947
+ transform: translateY(2px);
948
+ }
949
+
950
+ .lively-mascot.is-emotion-36 .lively-face__mouth {
951
+ visibility: hidden;
952
+ }
953
+
954
+ .lively-mascot.is-emotion-36 .lively-face__bored-mouth {
955
+ visibility: visible;
956
+ }
957
+
958
+ .lively-mascot.is-emotion-36 .lively-face__blush {
959
+ fill-opacity: .36;
960
+ }
961
+
962
+ /* 37 Nervous */
963
+ .lively-mascot.is-emotion-37 .lively-face__sweat {
964
+ visibility: visible;
965
+ }
966
+
967
+ .lively-mascot.is-emotion-37 .lively-face__pupil {
968
+ animation: lively-nervous-eyes 0.4s ease-in-out infinite;
969
+ }
970
+
971
+ /* 38 Eureka */
972
+ .lively-mascot.is-emotion-38 .lively-face__eye>ellipse,
973
+ .lively-mascot.is-emotion-38 .lively-face__pupil,
974
+ .lively-mascot.is-emotion-38 .lively-face__shine,
975
+ .lively-mascot.is-emotion-38 .lively-face__mouth {
976
+ visibility: hidden;
977
+ }
978
+
979
+ .lively-mascot.is-emotion-38 .lively-face__star-eye {
980
+ visibility: visible;
981
+ }
982
+
983
+ .lively-mascot.is-emotion-38 .lively-face__happy {
984
+ visibility: visible;
985
+ }
986
+
987
+ .lively-mascot.is-emotion-38 .lively-face__happy-mouth {
988
+ visibility: visible;
989
+ }
990
+
991
+ .lively-mascot.is-emotion-38 .lively-face__sparkle {
992
+ visibility: visible;
993
+ }
994
+
995
+ /* 39 Waiting */
996
+ .lively-mascot.is-emotion-39 .lively-face__pupil {
997
+ cy: 47;
998
+ }
999
+
1000
+ .lively-mascot.is-emotion-39 .lively-face__mouth {
1001
+ d: path("M44 64 Q50 64 56 64");
1002
+ }
1003
+
1004
+ .lively-mascot.is-emotion-39 .lively-face__waiting-dots {
1005
+ visibility: visible;
1006
+ }
1007
+
1008
+ /* ============================================================
1009
+ * SVG Element Base Styles
1010
+ * ============================================================ */
1011
+
1012
+ /* --- Tear drops --- */
1013
+ .lively-face__tear {
1014
+ visibility: hidden;
1015
+ }
1016
+
1017
+ .lively-mascot.is-emotion-35 .lively-face__tear--l {
1018
+ animation: lively-tear-fall 0.8s ease-in infinite;
1019
+ }
1020
+
1021
+ .lively-mascot.is-emotion-35 .lively-face__tear--r {
1022
+ animation: lively-tear-fall 0.8s ease-in 0.3s infinite;
1023
+ }
1024
+
1025
+ @keyframes lively-tear-fall {
1026
+ 0% {
1027
+ transform: translate(var(--tx, 40px), 52px);
1028
+ opacity: 0.9;
1029
+ }
1030
+
1031
+ 100% {
1032
+ transform: translate(var(--tx, 40px), 72px);
1033
+ opacity: 0;
1034
+ }
1035
+ }
1036
+
1037
+ /* --- Sweat drop --- */
1038
+ .lively-face__sweat {
1039
+ visibility: hidden;
1040
+ }
1041
+
1042
+ .lively-mascot.is-emotion-37 .lively-face__sweat {
1043
+ animation: lively-sweat-drip 1.2s ease-in infinite;
1044
+ }
1045
+
1046
+ @keyframes lively-sweat-drip {
1047
+ 0% {
1048
+ transform: translate(82px, 30px);
1049
+ opacity: 0.8;
1050
+ }
1051
+
1052
+ 100% {
1053
+ transform: translate(82px, 48px);
1054
+ opacity: 0;
1055
+ }
1056
+ }
1057
+
1058
+ /* --- Star eyes --- */
1059
+ .lively-face__star-eye {
1060
+ visibility: hidden;
1061
+ }
1062
+
1063
+ .lively-mascot.is-emotion-38 .lively-face__star-eye {
1064
+ animation: lively-star-pulse 0.6s ease-in-out infinite;
1065
+ }
1066
+
1067
+ @keyframes lively-star-pulse {
1068
+
1069
+ 0%,
1070
+ 100% {
1071
+ transform: scale(1);
1072
+ }
1073
+
1074
+ 50% {
1075
+ transform: scale(1.2);
1076
+ }
1077
+ }
1078
+
1079
+ /* --- Sparkles --- */
1080
+ .lively-face__sparkle {
1081
+ visibility: hidden;
1082
+ }
1083
+
1084
+ .lively-mascot.is-emotion-38 .lively-face__sparkle--1 {
1085
+ animation: lively-sparkle-twinkle 0.8s ease-in-out infinite;
1086
+ }
1087
+
1088
+ .lively-mascot.is-emotion-38 .lively-face__sparkle--2 {
1089
+ animation: lively-sparkle-twinkle 0.8s ease-in-out 0.4s infinite;
1090
+ }
1091
+
1092
+ @keyframes lively-sparkle-twinkle {
1093
+
1094
+ 0%,
1095
+ 100% {
1096
+ opacity: 0;
1097
+ transform: scale(0.5);
1098
+ }
1099
+
1100
+ 50% {
1101
+ opacity: 1;
1102
+ transform: scale(1);
1103
+ }
1104
+ }
1105
+
1106
+ /* --- Cry eyes --- */
1107
+ .lively-face__cry-eye {
1108
+ visibility: hidden;
1109
+ }
1110
+
1111
+ /* --- Waiting dots --- */
1112
+ .lively-face__waiting-dots {
1113
+ visibility: hidden;
1114
+ }
1115
+
1116
+ .lively-mascot.is-emotion-39 .lively-face__waiting-dots circle:nth-child(1) {
1117
+ animation: lively-dot-bounce 1.2s ease-in-out infinite;
1118
+ }
1119
+
1120
+ .lively-mascot.is-emotion-39 .lively-face__waiting-dots circle:nth-child(2) {
1121
+ animation: lively-dot-bounce 1.2s ease-in-out 0.2s infinite;
1122
+ }
1123
+
1124
+ .lively-mascot.is-emotion-39 .lively-face__waiting-dots circle:nth-child(3) {
1125
+ animation: lively-dot-bounce 1.2s ease-in-out 0.4s infinite;
1126
+ }
1127
+
1128
+ @keyframes lively-dot-bounce {
1129
+
1130
+ 0%,
1131
+ 60%,
1132
+ 100% {
1133
+ transform: translateY(0);
1134
+ opacity: 0.4;
1135
+ }
1136
+
1137
+ 30% {
1138
+ transform: translateY(-4px);
1139
+ opacity: 1;
1140
+ }
1141
+ }
1142
+
1143
+ /* ============================================================
1144
+ * Feet
1145
+ * ============================================================ */
1146
+ .lively__feet {
1147
+ --lively-state-filter: brightness(1);
1148
+ position: absolute;
1149
+ bottom: -7cqw;
1150
+ left: 0;
1151
+ width: 100%;
1152
+ filter: var(--lively-state-filter);
1153
+ }
1154
+
1155
+ .lively__foot {
1156
+ position: absolute;
1157
+ bottom: 0;
1158
+ width: 22cqw;
1159
+ height: 16cqw;
1160
+ transform-origin: 50% 0;
1161
+ animation: lively-foot-tap 1.6s ease-in-out infinite;
1162
+ }
1163
+
1164
+ .lively__foot svg {
1165
+ display: block;
1166
+ width: 100%;
1167
+ height: 100%;
1168
+ overflow: visible;
1169
+ }
1170
+
1171
+ /* Default foot positions (characters override via their own CSS) */
1172
+ .lively__foot--l {
1173
+ left: 18cqw;
1174
+ }
1175
+
1176
+ .lively__foot--r {
1177
+ left: 60cqw;
1178
+ animation-delay: 0.8s;
1179
+ }
1180
+
1181
+ .lively-foot__body {
1182
+ fill: var(--lively-outline);
1183
+ stroke: var(--lively-outline);
1184
+ stroke-width: 1;
1185
+ filter: drop-shadow(1px 1px 0 rgba(0, 0, 0, 0.12));
1186
+ }
1187
+
1188
+ .lively-foot__shine {
1189
+ fill: #fff;
1190
+ opacity: 0.85;
1191
+ }
1192
+
1193
+ /* Happy foot kicks */
1194
+ .lively-mascot.is-happy .lively__foot--l {
1195
+ animation: lively-foot-kick-l 0.6s cubic-bezier(.3, 1.5, .5, 1);
1196
+ }
1197
+
1198
+ .lively-mascot.is-happy .lively__foot--r {
1199
+ animation: lively-foot-kick-r 0.6s cubic-bezier(.3, 1.5, .5, 1);
1200
+ }
1201
+
1202
+ /* Hopping: feet tuck */
1203
+ .lively-mascot.is-hopping .lively-mascot__rig {
1204
+ animation: lively-hop 0.9s cubic-bezier(.3, .7, .4, 1);
1205
+ }
1206
+
1207
+ .lively-mascot.is-hopping .lively__foot {
1208
+ animation: lively-foot-tuck 0.9s ease-in-out;
1209
+ }
1210
+
1211
+ /* ============================================================
1212
+ * Reduced Motion
1213
+ * ============================================================ */
1214
+ @media (prefers-reduced-motion: reduce) {
1215
+
1216
+ .lively-body,
1217
+ .lively__leaf,
1218
+ .lively__ears,
1219
+ .lively__antenna,
1220
+ .lively__tail,
1221
+ .lively-cat__whiskers,
1222
+ .lively-cat__whisker,
1223
+ .lively__foot,
1224
+ .lively__ghost-hem,
1225
+ .lively-face-wrap svg,
1226
+ .lively__loading-overlay::before {
1227
+ animation: none !important;
1228
+ }
1229
+ }
1230
+
1231
+ /* ============================================================
1232
+ * Keyframes: Base
1233
+ * ============================================================ */
1234
+ @keyframes lively-breathe {
1235
+
1236
+ 0%,
1237
+ 100% {
1238
+ transform: scale(1);
1239
+ }
1240
+
1241
+ 50% {
1242
+ transform: scale(1.035);
1243
+ }
1244
+ }
1245
+
1246
+ @keyframes lively-squish {
1247
+ 0% {
1248
+ transform: scale(1, 1);
1249
+ }
1250
+
1251
+ 30% {
1252
+ transform: scale(1.12, 0.86);
1253
+ }
1254
+
1255
+ 60% {
1256
+ transform: scale(0.94, 1.08);
1257
+ }
1258
+
1259
+ 100% {
1260
+ transform: scale(1, 1);
1261
+ }
1262
+ }
1263
+
1264
+ @keyframes lively-sway {
1265
+
1266
+ 0%,
1267
+ 100% {
1268
+ transform: rotate(6deg);
1269
+ }
1270
+
1271
+ 50% {
1272
+ transform: rotate(10deg) translateY(-2px);
1273
+ }
1274
+ }
1275
+
1276
+ @keyframes lively-upright-sway {
1277
+
1278
+ 0%,
1279
+ 100% {
1280
+ transform: translateY(0);
1281
+ }
1282
+
1283
+ 50% {
1284
+ transform: translateY(-2px);
1285
+ }
1286
+ }
1287
+
1288
+ @keyframes lively-hop {
1289
+ 0% {
1290
+ transform: translateY(0);
1291
+ }
1292
+
1293
+ 18% {
1294
+ transform: translateY(3px) scale(1.07, 0.88);
1295
+ }
1296
+
1297
+ 45% {
1298
+ transform: translateY(-13px) scale(0.95, 1.07);
1299
+ }
1300
+
1301
+ 72% {
1302
+ transform: translateY(0) scale(1.05, 0.93);
1303
+ }
1304
+
1305
+ 100% {
1306
+ transform: translateY(0);
1307
+ }
1308
+ }
1309
+
1310
+ @keyframes lively-leaf-sway {
1311
+
1312
+ 0%,
1313
+ 100% {
1314
+ transform: rotate(8deg);
1315
+ }
1316
+
1317
+ 50% {
1318
+ transform: rotate(20deg) translateY(-1px);
1319
+ }
1320
+ }
1321
+
1322
+ @keyframes lively-leaf-spin {
1323
+ 0% {
1324
+ transform: rotate(8deg);
1325
+ }
1326
+
1327
+ 100% {
1328
+ transform: rotate(368deg);
1329
+ }
1330
+ }
1331
+
1332
+ @keyframes lively-foot-tap {
1333
+
1334
+ 0%,
1335
+ 100% {
1336
+ transform: rotate(0deg) translateY(0);
1337
+ }
1338
+
1339
+ 30% {
1340
+ transform: rotate(-11deg) translateY(-2px);
1341
+ }
1342
+
1343
+ 60% {
1344
+ transform: rotate(5deg) translateY(0);
1345
+ }
1346
+ }
1347
+
1348
+ @keyframes lively-foot-kick-l {
1349
+
1350
+ 0%,
1351
+ 100% {
1352
+ transform: rotate(0deg) translateY(0);
1353
+ }
1354
+
1355
+ 40% {
1356
+ transform: rotate(-26deg) translateY(-5px);
1357
+ }
1358
+ }
1359
+
1360
+ @keyframes lively-foot-kick-r {
1361
+
1362
+ 0%,
1363
+ 100% {
1364
+ transform: rotate(0deg) translateY(0);
1365
+ }
1366
+
1367
+ 40% {
1368
+ transform: rotate(26deg) translateY(-5px);
1369
+ }
1370
+ }
1371
+
1372
+ @keyframes lively-foot-tuck {
1373
+
1374
+ 0%,
1375
+ 100% {
1376
+ transform: rotate(0deg) translateY(0);
1377
+ }
1378
+
1379
+ 40% {
1380
+ transform: rotate(0deg) translateY(-4px) scaleY(0.6);
1381
+ }
1382
+ }
1383
+
1384
+ /* ============================================================
1385
+ * Keyframes: Emotion Body Animations
1386
+ * ============================================================ */
1387
+
1388
+ /* --- Lifecycle --- */
1389
+ @keyframes lively-wake {
1390
+ 0% {
1391
+ transform: scale(0.9) rotate(-3deg);
1392
+ opacity: 0.6;
1393
+ }
1394
+
1395
+ 50% {
1396
+ transform: scale(1.05) rotate(2deg);
1397
+ opacity: 1;
1398
+ }
1399
+
1400
+ 100% {
1401
+ transform: scale(1) rotate(0);
1402
+ opacity: 1;
1403
+ }
1404
+ }
1405
+
1406
+ @keyframes lively-deep-breathe {
1407
+
1408
+ 0%,
1409
+ 100% {
1410
+ transform: scale(1);
1411
+ }
1412
+
1413
+ 50% {
1414
+ transform: scale(1.06);
1415
+ }
1416
+ }
1417
+
1418
+ @keyframes lively-ready {
1419
+
1420
+ 0%,
1421
+ 100% {
1422
+ transform: translateY(0);
1423
+ }
1424
+
1425
+ 50% {
1426
+ transform: translateY(-3px);
1427
+ }
1428
+ }
1429
+
1430
+ @keyframes lively-refresh {
1431
+ 0% {
1432
+ transform: rotate(0);
1433
+ }
1434
+
1435
+ 100% {
1436
+ transform: rotate(360deg);
1437
+ }
1438
+ }
1439
+
1440
+ @keyframes lively-lowbatt {
1441
+
1442
+ 0%,
1443
+ 100% {
1444
+ opacity: 1;
1445
+ }
1446
+
1447
+ 50% {
1448
+ opacity: 0.7;
1449
+ }
1450
+ }
1451
+
1452
+ @keyframes lively-boot {
1453
+ 0% {
1454
+ transform: scale(0.3);
1455
+ opacity: 0;
1456
+ }
1457
+
1458
+ 60% {
1459
+ transform: scale(1.1);
1460
+ opacity: 1;
1461
+ }
1462
+
1463
+ 100% {
1464
+ transform: scale(1);
1465
+ opacity: 1;
1466
+ }
1467
+ }
1468
+
1469
+ /* --- Reactions --- */
1470
+ @keyframes lively-happy-bounce {
1471
+ 0% {
1472
+ transform: translateY(0) scale(1);
1473
+ }
1474
+
1475
+ 30% {
1476
+ transform: translateY(-12px) scale(1.05, 0.95);
1477
+ }
1478
+
1479
+ 50% {
1480
+ transform: translateY(-16px) scale(0.95, 1.05);
1481
+ }
1482
+
1483
+ 80% {
1484
+ transform: translateY(2px) scale(1.02, 0.98);
1485
+ }
1486
+
1487
+ 100% {
1488
+ transform: translateY(0) scale(1);
1489
+ }
1490
+ }
1491
+
1492
+ @keyframes lively-excited {
1493
+
1494
+ 0%,
1495
+ 100% {
1496
+ transform: translateY(0) rotate(0);
1497
+ }
1498
+
1499
+ 25% {
1500
+ transform: translateY(-6px) rotate(-4deg);
1501
+ }
1502
+
1503
+ 75% {
1504
+ transform: translateY(-6px) rotate(4deg);
1505
+ }
1506
+ }
1507
+
1508
+ @keyframes lively-sad {
1509
+
1510
+ 0%,
1511
+ 100% {
1512
+ transform: translateY(0) rotate(0);
1513
+ }
1514
+
1515
+ 50% {
1516
+ transform: translateY(3px) rotate(-2deg);
1517
+ }
1518
+ }
1519
+
1520
+ @keyframes lively-bored {
1521
+
1522
+ 0%,
1523
+ 100% {
1524
+ transform: translateY(1px) rotate(-1deg) scale(1, .99);
1525
+ }
1526
+
1527
+ 50% {
1528
+ transform: translateY(4px) rotate(-2.2deg) scale(1.012, .972);
1529
+ }
1530
+ }
1531
+
1532
+ @keyframes lively-surprise {
1533
+ 0% {
1534
+ transform: scale(1);
1535
+ }
1536
+
1537
+ 30% {
1538
+ transform: scale(1.15, 0.88);
1539
+ }
1540
+
1541
+ 60% {
1542
+ transform: scale(0.92, 1.1);
1543
+ }
1544
+
1545
+ 100% {
1546
+ transform: scale(1);
1547
+ }
1548
+ }
1549
+
1550
+ @keyframes lively-love-pulse {
1551
+
1552
+ 0%,
1553
+ 100% {
1554
+ transform: scale(1);
1555
+ }
1556
+
1557
+ 50% {
1558
+ transform: scale(1.08);
1559
+ }
1560
+ }
1561
+
1562
+ @keyframes lively-confused {
1563
+
1564
+ 0%,
1565
+ 100% {
1566
+ transform: rotate(0);
1567
+ }
1568
+
1569
+ 25% {
1570
+ transform: rotate(-5deg);
1571
+ }
1572
+
1573
+ 75% {
1574
+ transform: rotate(5deg);
1575
+ }
1576
+ }
1577
+
1578
+ @keyframes lively-smug {
1579
+
1580
+ 0%,
1581
+ 100% {
1582
+ transform: translateY(0) rotate(0);
1583
+ }
1584
+
1585
+ 50% {
1586
+ transform: translateY(-2px) rotate(3deg);
1587
+ }
1588
+ }
1589
+
1590
+ @keyframes lively-shy {
1591
+
1592
+ 0%,
1593
+ 100% {
1594
+ transform: translateX(0) rotate(0);
1595
+ }
1596
+
1597
+ 30% {
1598
+ transform: translateX(3px) rotate(1deg);
1599
+ }
1600
+
1601
+ 70% {
1602
+ transform: translateX(-2px) rotate(-0.5deg);
1603
+ }
1604
+ }
1605
+
1606
+ /* --- Work States --- */
1607
+ @keyframes lively-thinking {
1608
+
1609
+ 0%,
1610
+ 100% {
1611
+ transform: translateY(0);
1612
+ }
1613
+
1614
+ 30% {
1615
+ transform: translateY(-4px);
1616
+ }
1617
+
1618
+ 60% {
1619
+ transform: translateY(-2px);
1620
+ }
1621
+ }
1622
+
1623
+ @keyframes lively-listening {
1624
+
1625
+ 0%,
1626
+ 100% {
1627
+ transform: scale(1);
1628
+ }
1629
+
1630
+ 50% {
1631
+ transform: scale(1.04, 0.96);
1632
+ }
1633
+ }
1634
+
1635
+ @keyframes lively-talking {
1636
+
1637
+ 0%,
1638
+ 100% {
1639
+ transform: scaleY(1);
1640
+ }
1641
+
1642
+ 50% {
1643
+ transform: scaleY(1.03);
1644
+ }
1645
+ }
1646
+
1647
+ @keyframes lively-searching {
1648
+
1649
+ 0%,
1650
+ 100% {
1651
+ transform: translateX(0);
1652
+ }
1653
+
1654
+ 25% {
1655
+ transform: translateX(-4px);
1656
+ }
1657
+
1658
+ 75% {
1659
+ transform: translateX(4px);
1660
+ }
1661
+ }
1662
+
1663
+ @keyframes lively-reading {
1664
+
1665
+ 0%,
1666
+ 100% {
1667
+ transform: translateY(0);
1668
+ }
1669
+
1670
+ 50% {
1671
+ transform: translateY(2px);
1672
+ }
1673
+ }
1674
+
1675
+ @keyframes lively-writing {
1676
+
1677
+ 0%,
1678
+ 100% {
1679
+ transform: translateX(0) rotate(0);
1680
+ }
1681
+
1682
+ 25% {
1683
+ transform: translateX(-2px) rotate(-1deg);
1684
+ }
1685
+
1686
+ 75% {
1687
+ transform: translateX(2px) rotate(1deg);
1688
+ }
1689
+ }
1690
+
1691
+ @keyframes lively-coding {
1692
+
1693
+ 0%,
1694
+ 100% {
1695
+ transform: translateY(0);
1696
+ }
1697
+
1698
+ 50% {
1699
+ transform: translateY(-2px);
1700
+ }
1701
+ }
1702
+
1703
+ @keyframes lively-designing {
1704
+
1705
+ 0%,
1706
+ 100% {
1707
+ transform: rotate(0);
1708
+ }
1709
+
1710
+ 33% {
1711
+ transform: rotate(-3deg);
1712
+ }
1713
+
1714
+ 66% {
1715
+ transform: rotate(3deg);
1716
+ }
1717
+ }
1718
+
1719
+ @keyframes lively-loading {
1720
+ 0% {
1721
+ transform: rotate(0);
1722
+ }
1723
+
1724
+ 100% {
1725
+ transform: rotate(360deg);
1726
+ }
1727
+ }
1728
+
1729
+ @keyframes lively-processing {
1730
+
1731
+ 0%,
1732
+ 100% {
1733
+ transform: scale(1);
1734
+ }
1735
+
1736
+ 50% {
1737
+ transform: scale(0.95);
1738
+ }
1739
+ }
1740
+
1741
+ @keyframes lively-success {
1742
+ 0% {
1743
+ transform: scale(1);
1744
+ }
1745
+
1746
+ 30% {
1747
+ transform: scale(1.12, 0.88);
1748
+ }
1749
+
1750
+ 60% {
1751
+ transform: scale(0.95, 1.08);
1752
+ }
1753
+
1754
+ 100% {
1755
+ transform: scale(1);
1756
+ }
1757
+ }
1758
+
1759
+ /* --- Loading keyframes --- */
1760
+ @keyframes lively-loading-eye-drift {
1761
+
1762
+ 0%,
1763
+ 100% {
1764
+ transform: translateX(0);
1765
+ }
1766
+
1767
+ 25% {
1768
+ transform: translateX(-2px);
1769
+ }
1770
+
1771
+ 75% {
1772
+ transform: translateX(2px);
1773
+ }
1774
+ }
1775
+
1776
+ @keyframes lively-leaf-spin-slow {
1777
+ 0% {
1778
+ transform: rotate(8deg) scale(1);
1779
+ }
1780
+
1781
+ 50% {
1782
+ transform: rotate(188deg) scale(1.08);
1783
+ }
1784
+
1785
+ 100% {
1786
+ transform: rotate(368deg) scale(1);
1787
+ }
1788
+ }
1789
+
1790
+ @keyframes lively-loading-orbit {
1791
+ from {
1792
+ transform: rotate(0deg);
1793
+ }
1794
+
1795
+ to {
1796
+ transform: rotate(360deg);
1797
+ }
1798
+ }
1799
+
1800
+ @keyframes lively-loading-bounce {
1801
+ 0%, 100% {
1802
+ transform: translateY(0);
1803
+ }
1804
+
1805
+ 50% {
1806
+ transform: translateY(-5px);
1807
+ }
1808
+ }
1809
+
1810
+ /* ============================================================
1811
+ * Keyframes: Leaf Emotion Animations
1812
+ * ============================================================ */
1813
+ @keyframes lively-leaf-sleep {
1814
+
1815
+ 0%,
1816
+ 100% {
1817
+ transform: rotate(8deg) scaleY(0.9);
1818
+ }
1819
+
1820
+ 50% {
1821
+ transform: rotate(12deg) scaleY(0.85);
1822
+ }
1823
+ }
1824
+
1825
+ @keyframes lively-leaf-wake {
1826
+ 0% {
1827
+ transform: rotate(5deg) scale(0.9);
1828
+ }
1829
+
1830
+ 50% {
1831
+ transform: rotate(25deg) scale(1.1);
1832
+ }
1833
+
1834
+ 100% {
1835
+ transform: rotate(10deg) scale(1);
1836
+ }
1837
+ }
1838
+
1839
+ @keyframes lively-leaf-breathe {
1840
+
1841
+ 0%,
1842
+ 100% {
1843
+ transform: rotate(8deg);
1844
+ }
1845
+
1846
+ 50% {
1847
+ transform: rotate(16deg) scaleY(1.05);
1848
+ }
1849
+ }
1850
+
1851
+ @keyframes lively-leaf-ready {
1852
+
1853
+ 0%,
1854
+ 100% {
1855
+ transform: rotate(10deg);
1856
+ }
1857
+
1858
+ 50% {
1859
+ transform: rotate(18deg) translateY(-2px);
1860
+ }
1861
+ }
1862
+
1863
+ @keyframes lively-leaf-pause {
1864
+
1865
+ 0%,
1866
+ 100% {
1867
+ transform: rotate(8deg);
1868
+ opacity: 0.6;
1869
+ }
1870
+
1871
+ 50% {
1872
+ transform: rotate(10deg);
1873
+ opacity: 0.5;
1874
+ }
1875
+ }
1876
+
1877
+ @keyframes lively-leaf-refresh {
1878
+ 0% {
1879
+ transform: rotate(8deg);
1880
+ }
1881
+
1882
+ 100% {
1883
+ transform: rotate(368deg);
1884
+ }
1885
+ }
1886
+
1887
+ @keyframes lively-leaf-droop {
1888
+
1889
+ 0%,
1890
+ 100% {
1891
+ transform: rotate(5deg) translateY(2px) scaleY(0.85);
1892
+ }
1893
+
1894
+ 50% {
1895
+ transform: rotate(3deg) translateY(4px) scaleY(0.8);
1896
+ }
1897
+ }
1898
+
1899
+ @keyframes lively-leaf-boot {
1900
+ 0% {
1901
+ transform: scale(0.5) rotate(0);
1902
+ }
1903
+
1904
+ 60% {
1905
+ transform: scale(1.15) rotate(15deg);
1906
+ }
1907
+
1908
+ 100% {
1909
+ transform: scale(1) rotate(10deg);
1910
+ }
1911
+ }
1912
+
1913
+ @keyframes lively-leaf-spin-fast {
1914
+ 0% {
1915
+ transform: rotate(8deg);
1916
+ }
1917
+
1918
+ 100% {
1919
+ transform: rotate(368deg);
1920
+ }
1921
+ }
1922
+
1923
+ @keyframes lively-leaf-flap {
1924
+
1925
+ 0%,
1926
+ 100% {
1927
+ transform: rotate(8deg);
1928
+ }
1929
+
1930
+ 25% {
1931
+ transform: rotate(28deg);
1932
+ }
1933
+
1934
+ 75% {
1935
+ transform: rotate(-10deg);
1936
+ }
1937
+ }
1938
+
1939
+ @keyframes lively-leaf-angry {
1940
+
1941
+ 0%,
1942
+ 100% {
1943
+ transform: rotate(8deg);
1944
+ }
1945
+
1946
+ 25% {
1947
+ transform: rotate(-5deg);
1948
+ }
1949
+
1950
+ 75% {
1951
+ transform: rotate(20deg);
1952
+ }
1953
+ }
1954
+
1955
+ @keyframes lively-leaf-jump {
1956
+ 0% {
1957
+ transform: rotate(8deg) translateY(0);
1958
+ }
1959
+
1960
+ 50% {
1961
+ transform: rotate(20deg) translateY(-6px);
1962
+ }
1963
+
1964
+ 100% {
1965
+ transform: rotate(8deg) translateY(0);
1966
+ }
1967
+ }
1968
+
1969
+ @keyframes lively-leaf-shy {
1970
+
1971
+ 0%,
1972
+ 100% {
1973
+ transform: rotate(12deg) scaleX(1);
1974
+ }
1975
+
1976
+ 50% {
1977
+ transform: rotate(6deg) scaleX(-1);
1978
+ }
1979
+ }
1980
+
1981
+ @keyframes lively-leaf-love {
1982
+
1983
+ 0%,
1984
+ 100% {
1985
+ transform: rotate(10deg) scale(1);
1986
+ }
1987
+
1988
+ 50% {
1989
+ transform: rotate(15deg) scale(1.15);
1990
+ }
1991
+ }
1992
+
1993
+ @keyframes lively-leaf-confused {
1994
+
1995
+ 0%,
1996
+ 100% {
1997
+ transform: rotate(8deg);
1998
+ }
1999
+
2000
+ 25% {
2001
+ transform: rotate(-8deg);
2002
+ }
2003
+
2004
+ 75% {
2005
+ transform: rotate(22deg);
2006
+ }
2007
+ }
2008
+
2009
+ @keyframes lively-leaf-cool {
2010
+
2011
+ 0%,
2012
+ 100% {
2013
+ transform: rotate(8deg);
2014
+ }
2015
+
2016
+ 50% {
2017
+ transform: rotate(14deg) translateY(-1px);
2018
+ }
2019
+ }
2020
+
2021
+ @keyframes lively-leaf-smug {
2022
+
2023
+ 0%,
2024
+ 100% {
2025
+ transform: rotate(8deg) translateY(0);
2026
+ }
2027
+
2028
+ 50% {
2029
+ transform: rotate(16deg) translateY(-2px);
2030
+ }
2031
+ }
2032
+
2033
+ @keyframes lively-leaf-think {
2034
+
2035
+ 0%,
2036
+ 100% {
2037
+ transform: rotate(8deg);
2038
+ }
2039
+
2040
+ 50% {
2041
+ transform: rotate(20deg) translateY(-2px);
2042
+ }
2043
+ }
2044
+
2045
+ @keyframes lively-leaf-perk {
2046
+
2047
+ 0%,
2048
+ 100% {
2049
+ transform: rotate(8deg) scaleY(1);
2050
+ }
2051
+
2052
+ 50% {
2053
+ transform: rotate(14deg) scaleY(1.1);
2054
+ }
2055
+ }
2056
+
2057
+ @keyframes lively-leaf-talk {
2058
+
2059
+ 0%,
2060
+ 100% {
2061
+ transform: rotate(10deg);
2062
+ }
2063
+
2064
+ 50% {
2065
+ transform: rotate(18deg);
2066
+ }
2067
+ }
2068
+
2069
+ @keyframes lively-leaf-search {
2070
+
2071
+ 0%,
2072
+ 100% {
2073
+ transform: rotate(5deg) translateX(0);
2074
+ }
2075
+
2076
+ 25% {
2077
+ transform: rotate(12deg) translateX(-3px);
2078
+ }
2079
+
2080
+ 75% {
2081
+ transform: rotate(12deg) translateX(3px);
2082
+ }
2083
+ }
2084
+
2085
+ @keyframes lively-leaf-read {
2086
+
2087
+ 0%,
2088
+ 100% {
2089
+ transform: rotate(6deg) translateY(0);
2090
+ }
2091
+
2092
+ 50% {
2093
+ transform: rotate(4deg) translateY(2px);
2094
+ }
2095
+ }
2096
+
2097
+ @keyframes lively-leaf-write {
2098
+
2099
+ 0%,
2100
+ 100% {
2101
+ transform: rotate(8deg) translateX(0);
2102
+ }
2103
+
2104
+ 25% {
2105
+ transform: rotate(5deg) translateX(-2px);
2106
+ }
2107
+
2108
+ 75% {
2109
+ transform: rotate(12deg) translateX(2px);
2110
+ }
2111
+ }
2112
+
2113
+ @keyframes lively-leaf-code {
2114
+
2115
+ 0%,
2116
+ 100% {
2117
+ transform: rotate(8deg);
2118
+ }
2119
+
2120
+ 50% {
2121
+ transform: rotate(16deg);
2122
+ }
2123
+ }
2124
+
2125
+ @keyframes lively-leaf-design {
2126
+
2127
+ 0%,
2128
+ 100% {
2129
+ transform: rotate(8deg);
2130
+ }
2131
+
2132
+ 33% {
2133
+ transform: rotate(4deg);
2134
+ }
2135
+
2136
+ 66% {
2137
+ transform: rotate(14deg);
2138
+ }
2139
+ }
2140
+
2141
+ @keyframes lively-leaf-pulse {
2142
+
2143
+ 0%,
2144
+ 100% {
2145
+ transform: rotate(8deg) scale(1);
2146
+ }
2147
+
2148
+ 50% {
2149
+ transform: rotate(8deg) scale(1.1);
2150
+ }
2151
+ }
2152
+
2153
+ @keyframes lively-leaf-celebrate {
2154
+ 0% {
2155
+ transform: rotate(8deg) scale(1);
2156
+ }
2157
+
2158
+ 30% {
2159
+ transform: rotate(25deg) scale(1.15);
2160
+ }
2161
+
2162
+ 60% {
2163
+ transform: rotate(-5deg) scale(1.05);
2164
+ }
2165
+
2166
+ 100% {
2167
+ transform: rotate(8deg) scale(1);
2168
+ }
2169
+ }
2170
+
2171
+ @keyframes lively-leaf-error {
2172
+
2173
+ 0%,
2174
+ 100% {
2175
+ transform: rotate(8deg);
2176
+ opacity: 1;
2177
+ }
2178
+
2179
+ 50% {
2180
+ transform: rotate(-3deg);
2181
+ opacity: 0.5;
2182
+ }
2183
+ }
2184
+
2185
+ /* ============================================================
2186
+ * Keyframes: Foot Emotion Animations
2187
+ * ============================================================ */
2188
+ @keyframes lively-foot-rest {
2189
+
2190
+ 0%,
2191
+ 100% {
2192
+ transform: rotate(0deg) translateY(0);
2193
+ }
2194
+
2195
+ 50% {
2196
+ transform: rotate(0deg) translateY(-1px);
2197
+ }
2198
+ }
2199
+
2200
+ @keyframes lively-foot-wake {
2201
+ 0% {
2202
+ transform: rotate(0deg) scaleY(0.6);
2203
+ }
2204
+
2205
+ 60% {
2206
+ transform: rotate(0deg) scaleY(1.1);
2207
+ }
2208
+
2209
+ 100% {
2210
+ transform: rotate(0deg) scaleY(1);
2211
+ }
2212
+ }
2213
+
2214
+ @keyframes lively-foot-ready {
2215
+
2216
+ 0%,
2217
+ 100% {
2218
+ transform: rotate(0deg) translateY(0);
2219
+ }
2220
+
2221
+ 50% {
2222
+ transform: rotate(0deg) translateY(-2px);
2223
+ }
2224
+ }
2225
+
2226
+ @keyframes lively-foot-boot {
2227
+ 0% {
2228
+ transform: rotate(0deg) scaleY(0.3);
2229
+ }
2230
+
2231
+ 60% {
2232
+ transform: rotate(0deg) scaleY(1.1);
2233
+ }
2234
+
2235
+ 100% {
2236
+ transform: rotate(0deg) scaleY(1);
2237
+ }
2238
+ }
2239
+
2240
+ @keyframes lively-foot-kick {
2241
+
2242
+ 0%,
2243
+ 100% {
2244
+ transform: rotate(0deg) translateY(0);
2245
+ }
2246
+
2247
+ 40% {
2248
+ transform: rotate(-30deg) translateY(-6px);
2249
+ }
2250
+ }
2251
+
2252
+ @keyframes lively-foot-jump {
2253
+
2254
+ 0%,
2255
+ 100% {
2256
+ transform: rotate(0deg) translateY(0) scaleY(1);
2257
+ }
2258
+
2259
+ 30% {
2260
+ transform: rotate(0deg) translateY(2px) scaleY(0.7);
2261
+ }
2262
+
2263
+ 50% {
2264
+ transform: rotate(0deg) translateY(-8px) scaleY(1);
2265
+ }
2266
+ }
2267
+
2268
+ @keyframes lively-foot-drag {
2269
+
2270
+ 0%,
2271
+ 100% {
2272
+ transform: rotate(0deg) translateY(0);
2273
+ }
2274
+
2275
+ 50% {
2276
+ transform: rotate(3deg) translateY(2px);
2277
+ }
2278
+ }
2279
+
2280
+ @keyframes lively-foot-stomp {
2281
+
2282
+ 0%,
2283
+ 100% {
2284
+ transform: rotate(0deg) translateY(0);
2285
+ }
2286
+
2287
+ 30% {
2288
+ transform: rotate(0deg) translateY(-3px);
2289
+ }
2290
+
2291
+ 60% {
2292
+ transform: rotate(0deg) translateY(2px);
2293
+ }
2294
+ }
2295
+
2296
+ @keyframes lively-foot-tap-slow {
2297
+
2298
+ 0%,
2299
+ 100% {
2300
+ transform: rotate(0deg) translateY(0);
2301
+ }
2302
+
2303
+ 50% {
2304
+ transform: rotate(-5deg) translateY(-1px);
2305
+ }
2306
+ }
2307
+
2308
+ @keyframes lively-foot-tap-fast {
2309
+
2310
+ 0%,
2311
+ 100% {
2312
+ transform: rotate(0deg) translateY(0);
2313
+ }
2314
+
2315
+ 30% {
2316
+ transform: rotate(-10deg) translateY(-2px);
2317
+ }
2318
+
2319
+ 60% {
2320
+ transform: rotate(6deg) translateY(0);
2321
+ }
2322
+ }
2323
+
2324
+ @keyframes lively-foot-cross {
2325
+
2326
+ 0%,
2327
+ 100% {
2328
+ transform: rotate(0deg) translateX(0);
2329
+ }
2330
+
2331
+ 50% {
2332
+ transform: rotate(0deg) translateX(4px);
2333
+ }
2334
+ }
2335
+
2336
+ @keyframes lively-foot-pose {
2337
+
2338
+ 0%,
2339
+ 100% {
2340
+ transform: rotate(0deg) translateY(0);
2341
+ }
2342
+
2343
+ 30% {
2344
+ transform: rotate(5deg) translateY(-2px);
2345
+ }
2346
+
2347
+ 70% {
2348
+ transform: rotate(-3deg) translateY(-1px);
2349
+ }
2350
+ }
2351
+
2352
+ @keyframes lively-foot-pace {
2353
+
2354
+ 0%,
2355
+ 100% {
2356
+ transform: rotate(0deg) translateY(0);
2357
+ }
2358
+
2359
+ 25% {
2360
+ transform: rotate(-6deg) translateY(-2px);
2361
+ }
2362
+
2363
+ 75% {
2364
+ transform: rotate(6deg) translateY(-2px);
2365
+ }
2366
+ }
2367
+
2368
+ /* ============================================================
2369
+ * Keyframes: Extended Emotions (35-39)
2370
+ * ============================================================ */
2371
+ @keyframes lively-nervous {
2372
+
2373
+ 0%,
2374
+ 100% {
2375
+ transform: translateX(0);
2376
+ }
2377
+
2378
+ 20% {
2379
+ transform: translateX(-1.5px);
2380
+ }
2381
+
2382
+ 40% {
2383
+ transform: translateX(1.5px);
2384
+ }
2385
+
2386
+ 60% {
2387
+ transform: translateX(-1px);
2388
+ }
2389
+
2390
+ 80% {
2391
+ transform: translateX(1px);
2392
+ }
2393
+ }
2394
+
2395
+ @keyframes lively-leaf-nervous {
2396
+
2397
+ 0%,
2398
+ 100% {
2399
+ transform: rotate(8deg);
2400
+ }
2401
+
2402
+ 25% {
2403
+ transform: rotate(2deg);
2404
+ }
2405
+
2406
+ 75% {
2407
+ transform: rotate(14deg);
2408
+ }
2409
+ }
2410
+
2411
+ @keyframes lively-foot-nervous {
2412
+
2413
+ 0%,
2414
+ 100% {
2415
+ transform: translateY(0);
2416
+ }
2417
+
2418
+ 50% {
2419
+ transform: translateY(-2px);
2420
+ }
2421
+ }
2422
+
2423
+ @keyframes lively-nervous-eyes {
2424
+
2425
+ 0%,
2426
+ 100% {
2427
+ transform: translateX(0);
2428
+ }
2429
+
2430
+ 25% {
2431
+ transform: translateX(-1.5px);
2432
+ }
2433
+
2434
+ 75% {
2435
+ transform: translateX(1.5px);
2436
+ }
2437
+ }
2438
+
2439
+ @keyframes lively-eureka {
2440
+ 0% {
2441
+ transform: scale(1);
2442
+ }
2443
+
2444
+ 20% {
2445
+ transform: scale(1.12, 0.9);
2446
+ }
2447
+
2448
+ 40% {
2449
+ transform: scale(0.95, 1.08);
2450
+ }
2451
+
2452
+ 60% {
2453
+ transform: scale(1.04, 0.97);
2454
+ }
2455
+
2456
+ 100% {
2457
+ transform: scale(1);
2458
+ }
2459
+ }
2460
+
2461
+ @keyframes lively-leaf-eureka {
2462
+ 0% {
2463
+ transform: rotate(8deg) scale(1);
2464
+ }
2465
+
2466
+ 50% {
2467
+ transform: rotate(35deg) scale(1.15);
2468
+ }
2469
+
2470
+ 100% {
2471
+ transform: rotate(10deg) scale(1);
2472
+ }
2473
+ }
2474
+
2475
+ @keyframes lively-waiting {
2476
+
2477
+ 0%,
2478
+ 100% {
2479
+ transform: translateX(0) rotate(0);
2480
+ }
2481
+
2482
+ 30% {
2483
+ transform: translateX(-2px) rotate(-1deg);
2484
+ }
2485
+
2486
+ 60% {
2487
+ transform: translateX(2px) rotate(1deg);
2488
+ }
2489
+ }
2490
+
2491
+ @keyframes lively-leaf-waiting {
2492
+
2493
+ 0%,
2494
+ 100% {
2495
+ transform: rotate(8deg);
2496
+ }
2497
+
2498
+ 50% {
2499
+ transform: rotate(14deg);
2500
+ }
2501
+ }