Fraser commited on
Commit
3c1b1fe
·
1 Parent(s): 9c2da23

cleaner animations

Browse files
src/lib/components/Battle/BattleEffects.svelte CHANGED
@@ -25,7 +25,7 @@
25
 
26
  // Particle system configuration
27
  const PARTICLES_PER_EFFECT = 6; // Number of emoji particles per effect
28
- const SPAWN_RADIUS = 80; // Increased radius around piclet where particles spawn
29
 
30
  // Generate multiple particles for each effect
31
  $: particleList = effects.flatMap((effect, effectIndex) => {
@@ -33,19 +33,18 @@
33
  for (let i = 0; i < PARTICLES_PER_EFFECT; i++) {
34
  // More varied spawn positions for better coverage
35
  const angle = (Math.PI * 2 * i) / PARTICLES_PER_EFFECT + (Math.random() - 0.5) * 1.2;
36
- const distance = SPAWN_RADIUS * (0.5 + Math.random() * 0.8); // Wider distance variation
37
  const x = Math.cos(angle) * distance;
38
  const y = Math.sin(angle) * distance;
39
 
40
- // Enhanced animation properties for more dynamic effects
41
- const scale = 0.6 + Math.random() * 0.6; // 0.6x to 1.2x initial size
42
- const rotation = (Math.random() - 0.5) * 30; // Much smaller initial rotation range (-15deg to +15deg)
43
  const duration = Math.max(effect.duration * 1.8, 1800) + (Math.random() - 0.5) * 400; // Longer base duration
44
  const delay = Math.random() * 200; // More staggered animation starts
45
 
46
- // Additional movement properties for more dynamic motion
47
- const moveDistance = 40 + Math.random() * 60; // How far the particle travels
48
- const moveAngle = angle + (Math.random() - 0.5) * Math.PI * 0.8; // Movement direction
49
 
50
  particles.push({
51
  id: `${effectIndex}-${i}`,
@@ -54,7 +53,6 @@
54
  x,
55
  y,
56
  scale,
57
- rotation,
58
  duration,
59
  delay,
60
  moveDistance,
@@ -162,12 +160,11 @@
162
  <div
163
  class="effect-particle {particle.type}"
164
  style="
165
- left: {particle.x}px;
166
- top: {particle.y}px;
167
  animation-duration: {particle.duration}ms;
168
  animation-delay: {particle.delay}ms;
169
  --initial-scale: {particle.scale};
170
- --initial-rotation: {particle.rotation}deg;
171
  --move-x: {Math.cos(particle.moveAngle) * particle.moveDistance}px;
172
  --move-y: {Math.sin(particle.moveAngle) * particle.moveDistance}px;
173
  "
@@ -181,6 +178,11 @@
181
  .effects-wrapper {
182
  position: relative;
183
  display: inline-block;
 
 
 
 
 
184
  }
185
 
186
  .effects-container {
@@ -196,13 +198,15 @@
196
  z-index: 10;
197
  animation-fill-mode: forwards;
198
  transform-origin: center center;
 
199
  }
200
 
201
  .effect-emoji {
202
  font-size: 24px;
203
  display: block;
204
  filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.5));
205
- transform: scale(var(--initial-scale, 1)) rotate(var(--initial-rotation, 0deg));
 
206
  }
207
 
208
  /* Status effects - floating with rotation */
@@ -268,123 +272,123 @@
268
  opacity: 1;
269
  }
270
  25% {
271
- transform: translate(calc(-50% + var(--move-x) * 0.3), calc(-50% + var(--move-y) * 0.3)) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 5deg));
272
  opacity: 0.95;
273
  }
274
  50% {
275
- transform: translate(calc(-50% + var(--move-x) * 0.6), calc(-50% + var(--move-y) * 0.6)) scale(calc(var(--initial-scale) * 1.3)) rotate(calc(var(--initial-rotation) - 8deg));
276
  opacity: 0.8;
277
  }
278
  75% {
279
- transform: translate(calc(-50% + var(--move-x) * 0.9), calc(-50% + var(--move-y) * 0.9)) scale(calc(var(--initial-scale) * 0.7)) rotate(calc(var(--initial-rotation) + 3deg));
280
  opacity: 0.5;
281
  }
282
  100% {
283
- transform: translate(calc(-50% + var(--move-x)), calc(-50% + var(--move-y))) scale(0.3) rotate(calc(var(--initial-rotation) - 5deg));
284
  opacity: 0;
285
  }
286
  }
287
 
288
  @keyframes statusPoison {
289
  0% {
290
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(var(--initial-rotation)) scale(0.4);
291
  opacity: 0;
292
  }
293
  20% {
294
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) - 8deg)) scale(1.1);
295
  opacity: 1;
296
  }
297
  40% {
298
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 10deg)) scale(0.9);
299
  opacity: 0.8;
300
  }
301
  60% {
302
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) - 6deg)) scale(1.0);
303
  opacity: 0.6;
304
  }
305
  80% {
306
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 4deg)) scale(0.7);
307
  opacity: 0.3;
308
  }
309
  100% {
310
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(var(--initial-rotation)) scale(0.5);
311
  opacity: 0;
312
  }
313
  }
314
 
315
  @keyframes statusParalyze {
316
  0% {
317
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(var(--initial-rotation)) scale(0.2);
318
  opacity: 0;
319
  }
320
  10% {
321
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 3deg)) scale(1.3);
322
  opacity: 1;
323
  }
324
  20% {
325
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) - 4deg)) scale(1.1);
326
  opacity: 0.9;
327
  }
328
  30% {
329
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 2deg)) scale(1.2);
330
  opacity: 0.8;
331
  }
332
  40% {
333
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) - 3deg)) scale(1.0);
334
  opacity: 0.7;
335
  }
336
  50% {
337
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 2deg)) scale(0.9);
338
  opacity: 0.6;
339
  }
340
  100% {
341
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(var(--initial-rotation)) scale(0.3);
342
  opacity: 0;
343
  }
344
  }
345
 
346
  @keyframes statusSleep {
347
  0% {
348
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(var(--initial-rotation)) scale(0.5);
349
  opacity: 0;
350
  }
351
  25% {
352
- transform: translate(-50%, -55%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 4deg)) scale(1.1);
353
  opacity: 1;
354
  }
355
  50% {
356
- transform: translate(-50%, -45%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) - 6deg)) scale(1.0);
357
  opacity: 0.9;
358
  }
359
  75% {
360
- transform: translate(-50%, -55%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 3deg)) scale(0.9);
361
  opacity: 0.5;
362
  }
363
  100% {
364
- transform: translate(-50%, -60%) scale(var(--initial-scale)) rotate(var(--initial-rotation)) scale(0.4);
365
  opacity: 0;
366
  }
367
  }
368
 
369
  @keyframes statusFreeze {
370
  0% {
371
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(var(--initial-rotation)) scale(0.3);
372
  opacity: 0;
373
  }
374
  30% {
375
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 2deg)) scale(1.4);
376
  opacity: 1;
377
  }
378
  60% {
379
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) - 1deg)) scale(1.2);
380
  opacity: 0.8;
381
  }
382
  90% {
383
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 1deg)) scale(0.8);
384
  opacity: 0.3;
385
  }
386
  100% {
387
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(var(--initial-rotation)) scale(0.6);
388
  opacity: 0;
389
  }
390
  }
@@ -399,42 +403,42 @@
399
  opacity: 1;
400
  }
401
  30% {
402
- transform: translate(calc(-50% + var(--move-x) * 0.2), calc(-50% + var(--move-y) * 0.2 - 20px)) scale(calc(var(--initial-scale) * 1.2)) rotate(calc(var(--initial-rotation) + 4deg));
403
  opacity: 0.95;
404
  }
405
  60% {
406
- transform: translate(calc(-50% + var(--move-x) * 0.7), calc(-50% + var(--move-y) * 0.7 - 60px)) scale(calc(var(--initial-scale) * 1.0)) rotate(calc(var(--initial-rotation) - 6deg));
407
  opacity: 0.7;
408
  }
409
  85% {
410
- transform: translate(calc(-50% + var(--move-x)), calc(-50% + var(--move-y) - 90px)) scale(calc(var(--initial-scale) * 0.6)) rotate(calc(var(--initial-rotation) + 3deg));
411
  opacity: 0.3;
412
  }
413
  100% {
414
- transform: translate(calc(-50% + var(--move-x)), calc(-50% + var(--move-y) - 120px)) scale(0.2) rotate(calc(var(--initial-rotation) - 2deg));
415
  opacity: 0;
416
  }
417
  }
418
 
419
  @keyframes statDecrease {
420
  0% {
421
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(var(--initial-rotation)) scale(0.4);
422
  opacity: 0;
423
  }
424
  25% {
425
- transform: translate(-50%, -30%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) - 8deg)) scale(1.2);
426
  opacity: 1;
427
  }
428
  50% {
429
- transform: translate(-50%, -10%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 10deg)) scale(1.0);
430
  opacity: 0.8;
431
  }
432
  75% {
433
- transform: translate(-50%, 10%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) - 5deg)) scale(0.8);
434
  opacity: 0.4;
435
  }
436
  100% {
437
- transform: translate(-50%, 30%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 3deg)) scale(0.6);
438
  opacity: 0;
439
  }
440
  }
@@ -449,42 +453,42 @@
449
  opacity: 1;
450
  }
451
  20% {
452
- transform: translate(calc(-50% + var(--move-x) * 0.1), calc(-50% + var(--move-y) * 0.1)) scale(calc(var(--initial-scale) * 1.8)) rotate(calc(var(--initial-rotation) + 8deg));
453
  opacity: 0.95;
454
  }
455
  40% {
456
- transform: translate(calc(-50% + var(--move-x) * 0.4), calc(-50% + var(--move-y) * 0.4)) scale(calc(var(--initial-scale) * 1.5)) rotate(calc(var(--initial-rotation) - 12deg));
457
  opacity: 0.8;
458
  }
459
  70% {
460
- transform: translate(calc(-50% + var(--move-x) * 0.8), calc(-50% + var(--move-y) * 0.8)) scale(calc(var(--initial-scale) * 1.1)) rotate(calc(var(--initial-rotation) + 6deg));
461
  opacity: 0.4;
462
  }
463
  100% {
464
- transform: translate(calc(-50% + var(--move-x)), calc(-50% + var(--move-y))) scale(0.2) rotate(calc(var(--initial-rotation) - 4deg));
465
  opacity: 0;
466
  }
467
  }
468
 
469
  @keyframes missSwirl {
470
  0% {
471
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(var(--initial-rotation)) scale(0.6);
472
  opacity: 0;
473
  }
474
  25% {
475
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 8deg)) scale(1.2);
476
  opacity: 0.7;
477
  }
478
  50% {
479
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) - 10deg)) scale(1.0);
480
  opacity: 0.5;
481
  }
482
  75% {
483
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) + 6deg)) scale(0.8);
484
  opacity: 0.3;
485
  }
486
  100% {
487
- transform: translate(-50%, -50%) scale(var(--initial-scale)) rotate(calc(var(--initial-rotation) - 4deg)) scale(0.4);
488
  opacity: 0;
489
  }
490
  }
@@ -499,19 +503,19 @@
499
  opacity: 1;
500
  }
501
  25% {
502
- transform: translate(calc(-50% + var(--move-x) * 0.2), calc(-50% + var(--move-y) * 0.2 - 40px)) scale(calc(var(--initial-scale) * 1.3)) rotate(calc(var(--initial-rotation) + 5deg));
503
  opacity: 0.95;
504
  }
505
  50% {
506
- transform: translate(calc(-50% + var(--move-x) * 0.5), calc(-50% + var(--move-y) * 0.5 - 70px)) scale(calc(var(--initial-scale) * 1.1)) rotate(calc(var(--initial-rotation) - 7deg));
507
  opacity: 0.8;
508
  }
509
  75% {
510
- transform: translate(calc(-50% + var(--move-x) * 0.8), calc(-50% + var(--move-y) * 0.8 - 100px)) scale(calc(var(--initial-scale) * 0.8)) rotate(calc(var(--initial-rotation) + 4deg));
511
  opacity: 0.5;
512
  }
513
  100% {
514
- transform: translate(calc(-50% + var(--move-x)), calc(-50% + var(--move-y) - 130px)) scale(0.3) rotate(calc(var(--initial-rotation) - 3deg));
515
  opacity: 0;
516
  }
517
  }
 
25
 
26
  // Particle system configuration
27
  const PARTICLES_PER_EFFECT = 6; // Number of emoji particles per effect
28
+ const SPAWN_RADIUS = 45; // Radius around piclet where particles spawn (reduced for better containment)
29
 
30
  // Generate multiple particles for each effect
31
  $: particleList = effects.flatMap((effect, effectIndex) => {
 
33
  for (let i = 0; i < PARTICLES_PER_EFFECT; i++) {
34
  // More varied spawn positions for better coverage
35
  const angle = (Math.PI * 2 * i) / PARTICLES_PER_EFFECT + (Math.random() - 0.5) * 1.2;
36
+ const distance = SPAWN_RADIUS * (0.4 + Math.random() * 0.6); // Tighter distance variation for better containment
37
  const x = Math.cos(angle) * distance;
38
  const y = Math.sin(angle) * distance;
39
 
40
+ // Enhanced animation properties for more dynamic effects (no rotation)
41
+ const scale = 0.7 + Math.random() * 0.5; // 0.7x to 1.2x initial size
 
42
  const duration = Math.max(effect.duration * 1.8, 1800) + (Math.random() - 0.5) * 400; // Longer base duration
43
  const delay = Math.random() * 200; // More staggered animation starts
44
 
45
+ // Additional movement properties for more dynamic motion (reduced range)
46
+ const moveDistance = 20 + Math.random() * 30; // Further reduced movement distance for better containment
47
+ const moveAngle = angle + (Math.random() - 0.5) * Math.PI * 0.4; // Further reduced movement angle variation
48
 
49
  particles.push({
50
  id: `${effectIndex}-${i}`,
 
53
  x,
54
  y,
55
  scale,
 
56
  duration,
57
  delay,
58
  moveDistance,
 
160
  <div
161
  class="effect-particle {particle.type}"
162
  style="
163
+ left: calc(50% + {particle.x}px);
164
+ top: calc(50% + {particle.y}px);
165
  animation-duration: {particle.duration}ms;
166
  animation-delay: {particle.delay}ms;
167
  --initial-scale: {particle.scale};
 
168
  --move-x: {Math.cos(particle.moveAngle) * particle.moveDistance}px;
169
  --move-y: {Math.sin(particle.moveAngle) * particle.moveDistance}px;
170
  "
 
178
  .effects-wrapper {
179
  position: relative;
180
  display: inline-block;
181
+ /* Ensure wrapper contains particles even during resize */
182
+ overflow: visible;
183
+ /* Create a proper containing block for particles */
184
+ width: 100%;
185
+ height: 100%;
186
  }
187
 
188
  .effects-container {
 
198
  z-index: 10;
199
  animation-fill-mode: forwards;
200
  transform-origin: center center;
201
+ /* Position relative to the Piclet center */
202
  }
203
 
204
  .effect-emoji {
205
  font-size: 24px;
206
  display: block;
207
  filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.5));
208
+ transform: scale(var(--initial-scale, 1));
209
+ /* Remove rotation - emojis stay upright */
210
  }
211
 
212
  /* Status effects - floating with rotation */
 
272
  opacity: 1;
273
  }
274
  25% {
275
+ transform: translate(calc(-50% + var(--move-x) * 0.3), calc(-50% + var(--move-y) * 0.3)) scale(var(--initial-scale));
276
  opacity: 0.95;
277
  }
278
  50% {
279
+ transform: translate(calc(-50% + var(--move-x) * 0.6), calc(-50% + var(--move-y) * 0.6)) scale(calc(var(--initial-scale) * 1.3));
280
  opacity: 0.8;
281
  }
282
  75% {
283
+ transform: translate(calc(-50% + var(--move-x) * 0.9), calc(-50% + var(--move-y) * 0.9)) scale(calc(var(--initial-scale) * 0.7));
284
  opacity: 0.5;
285
  }
286
  100% {
287
+ transform: translate(calc(-50% + var(--move-x)), calc(-50% + var(--move-y))) scale(0.3);
288
  opacity: 0;
289
  }
290
  }
291
 
292
  @keyframes statusPoison {
293
  0% {
294
+ transform: translate(-50%, -50%) scale(0.4);
295
  opacity: 0;
296
  }
297
  20% {
298
+ transform: translate(-50%, -50%) scale(1.1);
299
  opacity: 1;
300
  }
301
  40% {
302
+ transform: translate(-50%, -50%) scale(0.9);
303
  opacity: 0.8;
304
  }
305
  60% {
306
+ transform: translate(-50%, -50%) scale(1.0);
307
  opacity: 0.6;
308
  }
309
  80% {
310
+ transform: translate(-50%, -50%) scale(0.7);
311
  opacity: 0.3;
312
  }
313
  100% {
314
+ transform: translate(-50%, -50%) scale(0.5);
315
  opacity: 0;
316
  }
317
  }
318
 
319
  @keyframes statusParalyze {
320
  0% {
321
+ transform: translate(-50%, -50%) scale(0.2);
322
  opacity: 0;
323
  }
324
  10% {
325
+ transform: translate(-50%, -50%) scale(1.3);
326
  opacity: 1;
327
  }
328
  20% {
329
+ transform: translate(-50%, -50%) scale(1.1);
330
  opacity: 0.9;
331
  }
332
  30% {
333
+ transform: translate(-50%, -50%) scale(1.2);
334
  opacity: 0.8;
335
  }
336
  40% {
337
+ transform: translate(-50%, -50%) scale(1.0);
338
  opacity: 0.7;
339
  }
340
  50% {
341
+ transform: translate(-50%, -50%) scale(0.9);
342
  opacity: 0.6;
343
  }
344
  100% {
345
+ transform: translate(-50%, -50%) scale(0.3);
346
  opacity: 0;
347
  }
348
  }
349
 
350
  @keyframes statusSleep {
351
  0% {
352
+ transform: translate(-50%, -50%) scale(0.5);
353
  opacity: 0;
354
  }
355
  25% {
356
+ transform: translate(-50%, -55%) scale(1.1);
357
  opacity: 1;
358
  }
359
  50% {
360
+ transform: translate(-50%, -45%) scale(1.0);
361
  opacity: 0.9;
362
  }
363
  75% {
364
+ transform: translate(-50%, -55%) scale(0.9);
365
  opacity: 0.5;
366
  }
367
  100% {
368
+ transform: translate(-50%, -60%) scale(0.4);
369
  opacity: 0;
370
  }
371
  }
372
 
373
  @keyframes statusFreeze {
374
  0% {
375
+ transform: translate(-50%, -50%) scale(0.3);
376
  opacity: 0;
377
  }
378
  30% {
379
+ transform: translate(-50%, -50%) scale(1.4);
380
  opacity: 1;
381
  }
382
  60% {
383
+ transform: translate(-50%, -50%) scale(1.2);
384
  opacity: 0.8;
385
  }
386
  90% {
387
+ transform: translate(-50%, -50%) scale(0.8);
388
  opacity: 0.3;
389
  }
390
  100% {
391
+ transform: translate(-50%, -50%) scale(0.6);
392
  opacity: 0;
393
  }
394
  }
 
403
  opacity: 1;
404
  }
405
  30% {
406
+ transform: translate(calc(-50% + var(--move-x) * 0.2), calc(-50% + var(--move-y) * 0.2 - 20px)) scale(calc(var(--initial-scale) * 1.2));
407
  opacity: 0.95;
408
  }
409
  60% {
410
+ transform: translate(calc(-50% + var(--move-x) * 0.7), calc(-50% + var(--move-y) * 0.7 - 60px)) scale(calc(var(--initial-scale) * 1.0));
411
  opacity: 0.7;
412
  }
413
  85% {
414
+ transform: translate(calc(-50% + var(--move-x)), calc(-50% + var(--move-y) - 90px)) scale(calc(var(--initial-scale) * 0.6));
415
  opacity: 0.3;
416
  }
417
  100% {
418
+ transform: translate(calc(-50% + var(--move-x)), calc(-50% + var(--move-y) - 120px)) scale(0.2);
419
  opacity: 0;
420
  }
421
  }
422
 
423
  @keyframes statDecrease {
424
  0% {
425
+ transform: translate(-50%, -50%) scale(0.4);
426
  opacity: 0;
427
  }
428
  25% {
429
+ transform: translate(-50%, -30%) scale(1.2);
430
  opacity: 1;
431
  }
432
  50% {
433
+ transform: translate(-50%, -10%) scale(1.0);
434
  opacity: 0.8;
435
  }
436
  75% {
437
+ transform: translate(-50%, 10%) scale(0.8);
438
  opacity: 0.4;
439
  }
440
  100% {
441
+ transform: translate(-50%, 30%) scale(0.6);
442
  opacity: 0;
443
  }
444
  }
 
453
  opacity: 1;
454
  }
455
  20% {
456
+ transform: translate(calc(-50% + var(--move-x) * 0.1), calc(-50% + var(--move-y) * 0.1)) scale(calc(var(--initial-scale) * 1.8));
457
  opacity: 0.95;
458
  }
459
  40% {
460
+ transform: translate(calc(-50% + var(--move-x) * 0.4), calc(-50% + var(--move-y) * 0.4)) scale(calc(var(--initial-scale) * 1.5));
461
  opacity: 0.8;
462
  }
463
  70% {
464
+ transform: translate(calc(-50% + var(--move-x) * 0.8), calc(-50% + var(--move-y) * 0.8)) scale(calc(var(--initial-scale) * 1.1));
465
  opacity: 0.4;
466
  }
467
  100% {
468
+ transform: translate(calc(-50% + var(--move-x)), calc(-50% + var(--move-y))) scale(0.2);
469
  opacity: 0;
470
  }
471
  }
472
 
473
  @keyframes missSwirl {
474
  0% {
475
+ transform: translate(-50%, -50%) scale(0.6);
476
  opacity: 0;
477
  }
478
  25% {
479
+ transform: translate(-50%, -50%) scale(1.2);
480
  opacity: 0.7;
481
  }
482
  50% {
483
+ transform: translate(-50%, -50%) scale(1.0);
484
  opacity: 0.5;
485
  }
486
  75% {
487
+ transform: translate(-50%, -50%) scale(0.8);
488
  opacity: 0.3;
489
  }
490
  100% {
491
+ transform: translate(-50%, -50%) scale(0.4);
492
  opacity: 0;
493
  }
494
  }
 
503
  opacity: 1;
504
  }
505
  25% {
506
+ transform: translate(calc(-50% + var(--move-x) * 0.2), calc(-50% + var(--move-y) * 0.2 - 40px)) scale(calc(var(--initial-scale) * 1.3));
507
  opacity: 0.95;
508
  }
509
  50% {
510
+ transform: translate(calc(-50% + var(--move-x) * 0.5), calc(-50% + var(--move-y) * 0.5 - 70px)) scale(calc(var(--initial-scale) * 1.1));
511
  opacity: 0.8;
512
  }
513
  75% {
514
+ transform: translate(calc(-50% + var(--move-x) * 0.8), calc(-50% + var(--move-y) * 0.8 - 100px)) scale(calc(var(--initial-scale) * 0.8));
515
  opacity: 0.5;
516
  }
517
  100% {
518
+ transform: translate(calc(-50% + var(--move-x)), calc(-50% + var(--move-y) - 130px)) scale(0.3);
519
  opacity: 0;
520
  }
521
  }