{"version":3,"sources":["../src/utils.ts","../src/particlePool.ts","../src/animations/confetti.tsx","../src/animations/sparkles.tsx","../src/animations/hearts.tsx","../src/animations/fireworks.tsx","../src/animations/bubbles.tsx","../src/animations/stars.tsx","../src/animations/snow.tsx","../src/animations/emoji.tsx","../src/animations/coins.tsx","../src/animations/petals.tsx","../src/animations/aurora.tsx","../src/animations/fireflies.tsx","../src/animations/paint.tsx","../src/animations/balloons.tsx","../src/animations/galaxy.tsx","../src/animations/glitch.tsx","../src/animations/magicdust.tsx","../src/animations/crystals.tsx","../src/animations/leaves.tsx","../src/animations/mortar.tsx","../src/animations/bokeh.tsx","../src/animations/ribbons.tsx","../src/animations/geometric.tsx","../src/animations/index.ts","../src/mobileOptimizations.ts","../src/animationManager.ts","../src/useReward.tsx"],"names":["randomInRange","min","max","degreesToRadians","degrees","generateId","getRandomColor","colors","createParticleStyle","particle","_containerRect","ParticlePool","maxSize","particles","p","particlePool","createPooledParticle","props","createPooledParticles","count","factory","i","defaultColors","createConfettiParticles","origin","config","particleCount","startVelocity","elementSize","angle","velocity","color","renderConfettiParticle","_a","_b","flutterTransform","React","createSparkleParticles","spread","velocityScale","renderSparkleParticle","scale","twinkle","heartColors","createHeartParticles","horizontalDrift","renderHeartParticle","pulse","fireworkColors","createFireworkParticles","renderFireworkParticle","bubbleColors","createBubbleParticles","renderBubbleParticle","starColors","createStarParticles","renderStarParticle","snowColors","createSnowParticles","x","y","renderSnowParticle","defaultEmojis","celebrationEmojis","loveEmojis","happyEmojis","natureEmojis","foodEmojis","createEmojiParticles","emojis","renderEmojiParticle","emojiPresets","coinColors","createCoinParticles","renderCoinParticle","_c","_d","spinSpeed","currentRotation","petalColors","createPetalParticles","renderPetalParticle","spiralPhase","spiralX","wobble","auroraColors","createAuroraParticles","offset","renderAuroraParticle","wave","baseOpacity","fadeIn","fadeOut","opacity","fireflyColors","createFireflyParticles","renderFireflyParticle","floatX","floatY","glowIntensity","baseFade","paintColors","createPaintParticles","isMainSplat","renderPaintParticle","stretch","squish","isDripping","dripLength","balloonColors","createBalloonParticles","renderBalloonParticle","sway","bob","galaxyColors","createGalaxyParticles","progress","spiralAngle","radius","angleOffset","radiusOffset","finalAngle","finalRadius","offsetX","offsetY","tangentAngle","speed","renderGalaxyParticle","expansionRate","createGlitchParticles","channels","isHorizontal","channelIndex","channel","width","height","glitchOffset","encodedData","renderGlitchParticle","distortionAmount","mixBlendMode","createMagicDustParticles","offsetAngle","offsetDistance","renderMagicDustParticle","sparkleSize","createCrystalParticles","renderCrystalParticle","hue","createLeafParticles","renderLeafParticle","tumblePhase","swayPhase","swayAmount","rotationSpeed","tumble","swayX","rotation","mortarColors","createMortarParticles","shells","index","angleStep","targetColor","rad","timeToExplode","sparkArray","renderMortarParticle","elementData","e","trailOpacity","burstOpacity","twinkleOpacity","bokehColors","createBokehParticles","lifetime","distance","depth","size","renderBokehParticle","pulseAmount","currentSize","ribbonColors","createRibbonsParticles","renderRibbonsParticle","ribbonData","waveSpeed","waveAmplitude","segments","twistSpeed","lifeRatio","twist","gradientColors","geometricColors","createGeometricParticles","shapes","shape","createShapePath","renderGeometricParticle","shapeData","pulseSpeed","animations","isMobileDevice","userAgent","isMobileUA","isMobileWidth","hasTouch","optimizeConfigForMobile","__spreadProps","__spreadValues","shouldSkipFrame","frameCount","AnimationManager","animation","id","currentTime","deltaTime","completedAnimations","skipFrame","activeParticles","newParticles","effects","animationType","trailParticle","isMobile","burstCount","explosionParticles","burstParticle","coreCount","coreParticle","flashParticle","sum","anim","fps","animationManager","useReward","elementIdOrRef","isAnimating","setIsAnimating","useState","animationIdRef","useRef","containerRef","rootRef","internalRef","isUsingStringId","targetRef","animate","useCallback","resolve","_e","_f","_g","_h","_i","_j","_k","_l","_m","element","rect","animationHandler","optimizedConfig","container","root","createRoot","defaultGravity","gravity","friction","wind","animationId","updateCallback","updatedParticles","reward","pause","resume","replay","setAnimationId","useEffect","isPaused","useMemo"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Particle } from './types';\n\nexport const randomInRange = (min: number, max: number): number => {\n  return Math.random() * (max - min) + min;\n};\n\nexport const degreesToRadians = (degrees: number): number => {\n  return (degrees * Math.PI) / 180;\n};\n\nexport const generateId = (): string => {\n  return Math.random().toString(36).substring(2, 9);\n};\n\nexport const getRandomColor = (colors: string[]): string => {\n  return (\n    colors[Math.floor(Math.random() * colors.length)] || colors[0] || '#ffffff'\n  );\n};\n\nexport const createParticleStyle = (\n  particle: Particle,\n  _containerRect: DOMRect\n): React.CSSProperties => {\n  return {\n    position: 'absolute',\n    left: `${particle.x}px`,\n    top: `${particle.y}px`,\n    width: `${particle.size}px`,\n    height: `${particle.size}px`,\n    transform: `rotate(${particle.rotation}deg) translateX(-50%) translateY(-50%)`,\n    opacity: particle.opacity,\n    pointerEvents: 'none',\n    transition: 'none',\n    willChange: 'transform, opacity',\n  };\n};\n","import { Particle } from './types';\n\nexport interface PooledParticle extends Particle {\n  _pooled?: boolean;\n}\n\nexport class ParticlePool {\n  private pool: PooledParticle[] = [];\n  private maxSize: number;\n  private created: number = 0;\n\n  constructor(maxSize: number = 1000) {\n    this.maxSize = maxSize;\n  }\n\n  acquire(): PooledParticle {\n    // Try to get a particle from the pool\n    const particle = this.pool.pop();\n\n    if (particle) {\n      particle._pooled = false;\n      return particle;\n    }\n\n    // Create a new particle if pool is empty\n    this.created++;\n    return {\n      id: `p${this.created}`,\n      x: 0,\n      y: 0,\n      vx: 0,\n      vy: 0,\n      life: 0,\n      opacity: 0,\n      size: 0,\n      rotation: 0,\n      color: '',\n      _pooled: false,\n    };\n  }\n\n  release(particle: PooledParticle): void {\n    // Don't add to pool if already pooled or pool is full\n    if (particle._pooled || this.pool.length >= this.maxSize) {\n      return;\n    }\n\n    // Reset particle properties\n    particle._pooled = true;\n    particle.element = undefined;\n    particle.config = undefined;\n\n    // Add back to pool\n    this.pool.push(particle);\n  }\n\n  releaseAll(particles: PooledParticle[]): void {\n    particles.forEach((p) => this.release(p));\n  }\n\n  clear(): void {\n    this.pool = [];\n  }\n\n  getStats() {\n    return {\n      poolSize: this.pool.length,\n      totalCreated: this.created,\n      maxSize: this.maxSize,\n    };\n  }\n}\n\n// Create a singleton instance\nexport const particlePool = new ParticlePool();\n\n// Helper function to create particles using the pool\nexport function createPooledParticle(props: Partial<Particle>): PooledParticle {\n  const particle = particlePool.acquire();\n\n  // Apply properties\n  Object.assign(particle, props);\n\n  // Ensure id is unique if not provided\n  if (!props.id) {\n    particle.id = `p${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n  }\n\n  return particle;\n}\n\n// Helper function to create multiple particles\nexport function createPooledParticles(\n  count: number,\n  factory: (index: number) => Partial<Particle>\n): PooledParticle[] {\n  const particles: PooledParticle[] = [];\n\n  for (let i = 0; i < count; i++) {\n    particles.push(createPooledParticle(factory(i)));\n  }\n\n  return particles;\n}\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n  randomInRange,\n  degreesToRadians,\n  generateId,\n  getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n  '#f44336',\n  '#e91e63',\n  '#9c27b0',\n  '#673ab7',\n  '#3f51b5',\n  '#2196f3',\n  '#03a9f4',\n  '#00bcd4',\n  '#009688',\n  '#4caf50',\n  '#8bc34a',\n  '#cddc39',\n  '#ffeb3b',\n  '#ffc107',\n  '#ff9800',\n  '#ff5722',\n];\n\nexport const createConfettiParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 50,\n    startVelocity = 20,\n    colors = defaultColors,\n    elementSize = 20,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    const angle = randomInRange(0, 360);\n    const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n    const color = getRandomColor(colors);\n\n    return {\n      id: generateId(),\n      x: origin.x,\n      y: origin.y,\n      vx: Math.cos(degreesToRadians(angle)) * velocity,\n      vy: Math.sin(degreesToRadians(angle)) * velocity - 30,\n      life: config.lifetime || 150,\n      opacity: 1,\n      size: randomInRange(elementSize * 0.7, elementSize * 1.5),\n      rotation: randomInRange(0, 360),\n      color,\n    };\n  });\n};\n\nexport const renderConfettiParticle = (particle: Particle): React.ReactNode => {\n  const particleWithEffects = particle as Particle & {\n    config?: AnimationConfig;\n  };\n  const flutterEffect = particleWithEffects.config?.effects?.flutter;\n\n  // Apply flutter transform if enabled\n  const flutterTransform =\n    flutterEffect && particle.life > 0\n      ? `rotateY(${Math.sin(particle.life * 0.1) * 360}deg)`\n      : '';\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: '100%',\n        height: '60%',\n        backgroundColor: particle.color,\n        borderRadius: '3px',\n        boxShadow: '0 2px 4px rgba(0,0,0,0.2)',\n        transform: flutterTransform,\n        transformStyle: 'preserve-3d',\n        perspective: '1000px',\n      }}\n    />\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nexport const createSparkleParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 35,\n    spread = 120,\n    startVelocity = 15,\n    elementSize = 25,\n    colors = ['#FFD700', '#FFFFFF'],\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    const velocityScale = startVelocity / 45; // Scale based on default\n    return {\n      id: generateId(),\n      x: origin.x + randomInRange(-spread, spread),\n      y: origin.y + randomInRange(-spread, spread),\n      vx: randomInRange(-3, 3) * velocityScale,\n      vy: randomInRange(-3, 3) * velocityScale,\n      life: config.lifetime || 120,\n      opacity: 0,\n      size: randomInRange(elementSize * 0.4, elementSize * 1.2),\n      rotation: randomInRange(0, 360),\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderSparkleParticle = (\n  particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n  const scale = particle.opacity;\n\n  // Calculate twinkle effect if enabled\n  const twinkle = particle.config?.effects?.twinkle\n    ? 0.3 + Math.abs(Math.sin(particle.life * 0.2)) * 0.7\n    : 1;\n\n  return (\n    <svg\n      key={particle.id}\n      width=\"100%\"\n      height=\"100%\"\n      viewBox=\"0 0 24 24\"\n      style={{\n        transform: `scale(${scale}) rotate(${particle.rotation}deg)`,\n        filter: 'drop-shadow(0 0 6px rgba(255, 215, 0, 0.8))',\n        opacity: twinkle,\n        transition: 'opacity 0.1s ease-out',\n      }}\n    >\n      <path\n        d=\"M12 0L14.59 8.41L23 11L14.59 13.59L12 22L9.41 13.59L1 11L9.41 8.41L12 0Z\"\n        fill={particle.color}\n      />\n    </svg>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId, getRandomColor } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst heartColors = ['#ff1744', '#e91e63', '#ff4569', '#ff6b6b', '#ee5a70'];\n\nexport const createHeartParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 25,\n    startVelocity = 12,\n    colors = heartColors,\n    elementSize = 30,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    const angle = randomInRange(-45, -135);\n    const velocity = randomInRange(startVelocity * 0.7, startVelocity * 1.3);\n    const horizontalDrift = randomInRange(-2, 2);\n\n    return {\n      id: generateId(),\n      x: origin.x + randomInRange(-10, 10),\n      y: origin.y,\n      vx: Math.cos((angle * Math.PI) / 180) * velocity + horizontalDrift,\n      vy: Math.sin((angle * Math.PI) / 180) * velocity,\n      life: config.lifetime || 180,\n      opacity: 1,\n      size: randomInRange(elementSize * 0.6, elementSize * 1.2),\n      rotation: randomInRange(-20, 20),\n      color: getRandomColor(colors),\n    };\n  });\n};\n\nexport const renderHeartParticle = (\n  particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n  // Calculate pulse effect if enabled\n  const pulse = particle.config?.effects?.pulse\n    ? 1 + Math.sin(particle.life * 0.2) * 0.1\n    : 1;\n\n  return (\n    <svg\n      key={particle.id}\n      width=\"100%\"\n      height=\"100%\"\n      viewBox=\"0 0 24 24\"\n      fill={particle.color}\n      style={{\n        filter: `drop-shadow(0 0 ${particle.size * 0.15}px ${particle.color})`,\n        transform: `scale(${pulse})`,\n        transition: 'transform 0.1s ease-out',\n      }}\n    >\n      <path d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\" />\n    </svg>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n  randomInRange,\n  degreesToRadians,\n  generateId,\n  getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst fireworkColors = [\n  '#ff0000',\n  '#00ff00',\n  '#0000ff',\n  '#ffff00',\n  '#ff00ff',\n  '#00ffff',\n  '#ffffff',\n];\n\nexport const createFireworkParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 60,\n    startVelocity = 25,\n    colors = fireworkColors,\n    elementSize = 8,\n  } = config;\n\n  return createPooledParticles(particleCount, (i) => {\n    const angle = (360 / particleCount) * i + randomInRange(-5, 5);\n    const velocity = randomInRange(startVelocity * 0.5, startVelocity * 1.2);\n    const color = getRandomColor(colors);\n\n    return {\n      id: generateId(),\n      x: origin.x,\n      y: origin.y,\n      vx: Math.cos(degreesToRadians(angle)) * velocity,\n      vy: Math.sin(degreesToRadians(angle)) * velocity - 10,\n      life: config.lifetime || 140,\n      opacity: 1,\n      size: randomInRange(elementSize * 0.6, elementSize * 1.4),\n      rotation: 0,\n      color,\n    };\n  });\n};\n\nexport const renderFireworkParticle = (particle: Particle): React.ReactNode => {\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: '100%',\n        height: '100%',\n        backgroundColor: '#ffffff',\n        borderRadius: '50%',\n        boxShadow: `\n          0 0 ${particle.size}px ${particle.color},\n          0 0 ${particle.size * 2}px ${particle.color},\n          0 0 ${particle.size * 3}px ${particle.color},\n          0 0 ${particle.size * 4}px ${particle.color}\n        `,\n        background: `radial-gradient(circle, #ffffff 0%, ${particle.color} 40%, transparent 70%)`,\n      }}\n    />\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst bubbleColors = [\n  'rgba(66, 165, 245, 0.4)',\n  'rgba(41, 182, 246, 0.4)',\n  'rgba(38, 198, 218, 0.4)',\n  'rgba(129, 212, 250, 0.4)',\n];\n\nexport const createBubbleParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 30,\n    spread = 80,\n    startVelocity = 8,\n    colors = bubbleColors,\n    elementSize = 40,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    return {\n      id: generateId(),\n      x: origin.x + randomInRange(-spread, spread),\n      y: origin.y,\n      vx: randomInRange(-3, 3),\n      vy: -randomInRange(startVelocity * 0.7, startVelocity * 1.2),\n      life: config.lifetime || 160,\n      opacity: 0.7,\n      size: randomInRange(elementSize * 0.4, elementSize * 1.2),\n      rotation: 0,\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderBubbleParticle = (particle: Particle): React.ReactNode => {\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: '100%',\n        height: '100%',\n        backgroundColor: particle.color,\n        borderRadius: '50%',\n        border: '2px solid rgba(255, 255, 255, 0.6)',\n        backgroundImage:\n          'radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.8), transparent)',\n        boxShadow: `\n          inset 0 0 ${particle.size * 0.3}px rgba(255, 255, 255, 0.4),\n          0 0 ${particle.size * 0.5}px ${particle.color}\n        `,\n      }}\n    />\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst starColors = ['#FFD700', '#FFA500', '#FF6347', '#FFE4B5'];\n\nexport const createStarParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 40,\n    startVelocity = 18,\n    colors = starColors,\n    elementSize = 30,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    const angle = randomInRange(0, 360);\n    const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n\n    return {\n      id: generateId(),\n      x: origin.x,\n      y: origin.y,\n      vx: Math.cos((angle * Math.PI) / 180) * velocity,\n      vy: Math.sin((angle * Math.PI) / 180) * velocity - 15,\n      life: config.lifetime || 150,\n      opacity: 1,\n      size: randomInRange(elementSize * 0.5, elementSize * 1.3),\n      rotation: randomInRange(0, 360),\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderStarParticle = (\n  particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n  // Calculate twinkle effect if enabled\n  const twinkle = particle.config?.effects?.twinkle\n    ? 0.3 + Math.abs(Math.sin(particle.life * 0.15)) * 0.7\n    : 1;\n\n  return (\n    <svg\n      key={particle.id}\n      width=\"100%\"\n      height=\"100%\"\n      viewBox=\"0 0 24 24\"\n      fill={particle.color}\n      style={{\n        filter: `drop-shadow(0 0 ${particle.size * 0.2}px ${particle.color})`,\n        opacity: twinkle,\n        transition: 'opacity 0.1s ease-out',\n      }}\n    >\n      <path d=\"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z\" />\n    </svg>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst snowColors = ['#FFFFFF', '#F0F8FF', '#F5F5F5', '#FAFAFA'];\n\nexport const createSnowParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 50,\n    spread = 200,\n    startVelocity = 3,\n    colors = snowColors,\n    elementSize = 15,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    // Spread particles across the width, starting from above viewport\n    const x = origin.x + randomInRange(-spread * 2, spread * 2);\n    const y = origin.y - randomInRange(100, 300); // Start above the trigger point\n\n    return {\n      id: generateId(),\n      x,\n      y,\n      vx: randomInRange(-0.5, 0.5), // Gentle horizontal drift\n      vy: randomInRange(startVelocity * 0.5, startVelocity * 1.2),\n      life: config.lifetime || 300, // Longer lifetime for snow\n      opacity: randomInRange(0.4, 0.9),\n      size: randomInRange(elementSize * 0.3, elementSize),\n      rotation: randomInRange(0, 360),\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderSnowParticle = (particle: Particle): React.ReactNode => {\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: '100%',\n        height: '100%',\n        backgroundColor: particle.color,\n        borderRadius: '50%',\n        boxShadow: `\n          0 0 ${particle.size * 0.5}px rgba(255, 255, 255, 0.8),\n          inset 0 0 ${particle.size * 0.3}px rgba(255, 255, 255, 0.5)\n        `,\n        filter: 'blur(0.5px)',\n      }}\n    />\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\n// Default emoji sets for different moods\nconst defaultEmojis = ['🎉', '🎊', '🎈', '🎁', '✨', '🌟', '💫', '🎯'];\nconst celebrationEmojis = ['🎉', '🎊', '🥳', '🎈', '🎁', '🍾', '🥂', '🎆'];\nconst loveEmojis = ['❤️', '💕', '💖', '💝', '💗', '💓', '💞', '💘'];\nconst happyEmojis = ['😊', '😄', '🥰', '😍', '🤗', '😘', '😁', '🤩'];\nconst natureEmojis = ['🌸', '🌺', '🌻', '🌹', '🌷', '🌼', '🍀', '🌿'];\nconst foodEmojis = ['🍕', '🍔', '🍟', '🌮', '🍿', '🍩', '🍪', '🧁'];\n\nexport interface EmojiAnimationConfig extends AnimationConfig {\n  emojis?: string[];\n}\n\nexport const createEmojiParticles = (\n  origin: { x: number; y: number },\n  config: EmojiAnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 30,\n    spread = 100,\n    startVelocity = 15,\n    elementSize = 35,\n    emojis = defaultEmojis,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    const angle = randomInRange(-45, -135);\n    const velocity = randomInRange(startVelocity * 0.5, startVelocity * 1.2);\n\n    return {\n      id: generateId(),\n      x: origin.x + randomInRange(-spread, spread),\n      y: origin.y,\n      vx: Math.cos((angle * Math.PI) / 180) * velocity,\n      vy: Math.sin((angle * Math.PI) / 180) * velocity,\n      life: config.lifetime || 180,\n      opacity: 1,\n      size: randomInRange(elementSize * 0.7, elementSize * 1.3),\n      rotation: randomInRange(-45, 45),\n      color: '', // Not used for emojis\n      element: emojis[Math.floor(Math.random() * emojis.length)],\n    };\n  });\n};\n\nexport const renderEmojiParticle = (particle: Particle): React.ReactNode => {\n  return (\n    <div\n      key={particle.id}\n      style={{\n        fontSize: `${particle.size}px`,\n        lineHeight: 1,\n        userSelect: 'none',\n        filter: particle.opacity < 0.5 ? 'blur(1px)' : undefined,\n      }}\n    >\n      {particle.element}\n    </div>\n  );\n};\n\n// Export preset emoji sets for easy use\nexport const emojiPresets = {\n  celebration: celebrationEmojis,\n  love: loveEmojis,\n  happy: happyEmojis,\n  nature: natureEmojis,\n  food: foodEmojis,\n  default: defaultEmojis,\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst coinColors = ['#FFD700', '#FFA500', '#FFB300', '#FFC700'];\n\nexport const createCoinParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 30,\n    spread = 70,\n    startVelocity = 25,\n    colors = coinColors,\n    elementSize = 25,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n    const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n\n    return {\n      id: generateId(),\n      x: origin.x,\n      y: origin.y,\n      vx: Math.sin(angle) * velocity,\n      vy: -Math.cos(angle) * velocity,\n      life: config.lifetime || 120,\n      opacity: 1,\n      size: randomInRange(elementSize * 0.8, elementSize * 1.2),\n      rotation: randomInRange(0, 360),\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderCoinParticle = (\n  particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n  const spinSpeed = particle.config?.effects?.spin3D ? 8 : 2; // Faster spin with 3D effect\n  const currentRotation = (120 - particle.life) * spinSpeed;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: '100%',\n        height: '100%',\n        background: `radial-gradient(ellipse at 30% 30%, ${particle.color}, #B8860B)`,\n        borderRadius: '50%',\n        transform: particle.config?.effects?.spin3D\n          ? `rotateY(${currentRotation}deg)`\n          : `rotate(${currentRotation}deg)`,\n        transformStyle: 'preserve-3d',\n        perspective: '1000px',\n        boxShadow: `\n          inset -2px -2px 4px rgba(0, 0, 0, 0.3),\n          inset 2px 2px 4px rgba(255, 255, 255, 0.5),\n          0 2px 4px rgba(0, 0, 0, 0.3)\n        `,\n        border: `1px solid ${particle.color}`,\n        position: 'relative',\n        overflow: 'hidden',\n      }}\n    >\n      {/* Dollar sign - hide when flipped */}\n      <div\n        style={{\n          position: 'absolute',\n          top: '50%',\n          left: '50%',\n          transform: 'translate(-50%, -50%)',\n          fontSize: `${particle.size * 0.5}px`,\n          fontWeight: 'bold',\n          color: '#B8860B',\n          textShadow: '1px 1px 1px rgba(0, 0, 0, 0.3)',\n          fontFamily: 'Arial, sans-serif',\n          opacity: 1,\n        }}\n      >\n        $\n      </div>\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst petalColors = ['#FFB6C1', '#FFC0CB', '#FF69B4', '#FF1493', '#FFF0F5'];\n\nexport const createPetalParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 40,\n    spread = 100,\n    startVelocity = 8,\n    colors = petalColors,\n    elementSize = 20,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n    const velocity = randomInRange(startVelocity * 0.3, startVelocity);\n\n    return {\n      id: generateId(),\n      x: origin.x + randomInRange(-20, 20),\n      y: origin.y - randomInRange(0, 30),\n      vx: Math.sin(angle) * velocity,\n      vy: randomInRange(2, 5), // Gentle fall\n      life: config.lifetime || 200,\n      opacity: randomInRange(0.7, 1),\n      size: randomInRange(elementSize * 0.7, elementSize * 1.3),\n      rotation: randomInRange(0, 360),\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderPetalParticle = (particle: Particle): React.ReactNode => {\n  // Create spiral motion\n  const spiralPhase = (200 - particle.life) * 0.1;\n  const spiralX = Math.sin(spiralPhase) * 15;\n  const wobble = Math.sin(particle.life * 0.1) * 10;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: '100%',\n        height: '120%',\n        position: 'relative',\n        transform: `translateX(${spiralX}px) rotate(${wobble}deg)`,\n        transformStyle: 'preserve-3d',\n      }}\n    >\n      {/* Petal shape */}\n      <div\n        style={{\n          width: '100%',\n          height: '100%',\n          background: `radial-gradient(ellipse at 50% 30%, ${particle.color}, ${particle.color}DD)`,\n          borderRadius: '0% 100% 0% 100%',\n          position: 'absolute',\n          boxShadow: `\n            inset 1px 1px 3px rgba(255, 255, 255, 0.5),\n            0 2px 4px rgba(0, 0, 0, 0.1)\n          `,\n          border: `1px solid ${particle.color}CC`,\n          transform: 'rotateY(45deg)',\n        }}\n      />\n      {/* Second petal for depth */}\n      <div\n        style={{\n          width: '100%',\n          height: '100%',\n          background: `radial-gradient(ellipse at 50% 30%, ${particle.color}EE, ${particle.color}BB)`,\n          borderRadius: '0% 100% 0% 100%',\n          position: 'absolute',\n          transform: 'rotate(45deg) scale(0.9)',\n          opacity: 0.8,\n        }}\n      />\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst auroraColors = [\n  '#00ff88',\n  '#00ffaa',\n  '#00ddff',\n  '#0099ff',\n  '#0066ff',\n  '#9933ff',\n  '#ff00ff',\n];\n\nexport const createAuroraParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 20,\n    spread = 300,\n    startVelocity = 0.8,\n    colors = auroraColors,\n    elementSize = 100,\n  } = config;\n\n  return createPooledParticles(particleCount, (i) => {\n    const angle = (i / particleCount) * spread - spread / 2;\n    const offset = randomInRange(-30, 30);\n\n    return {\n      id: generateId(),\n      x: origin.x + angle + offset,\n      y: origin.y,\n      vx: randomInRange(-0.5, 0.5),\n      vy: -startVelocity,\n      life: config.lifetime || 250,\n      opacity: 1,\n      size: randomInRange(elementSize * 0.8, elementSize * 1.2),\n      rotation: randomInRange(-15, 15),\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderAuroraParticle = (particle: Particle): React.ReactNode => {\n  // Create gentle flowing wave motion - reduced amplitude\n  const wave = Math.sin(particle.life * 0.02) * 10;\n  // Use the actual particle opacity set by animationManager\n  const baseOpacity = particle.opacity;\n  // Add fade in/out effect\n  const fadeIn = particle.life > 350 ? (400 - particle.life) / 50 : 1;\n  const fadeOut = particle.life < 50 ? particle.life / 50 : 1;\n  const opacity = baseOpacity * fadeIn * fadeOut * 0.4;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: `${particle.size}px`,\n        height: `${particle.size * 0.3}px`,\n        position: 'relative',\n        transform: `translateX(${wave}px)`,\n        filter: 'blur(2px)',\n      }}\n    >\n      {/* Aurora ribbon */}\n      <div\n        style={{\n          width: '100%',\n          height: '100%',\n          background: `linear-gradient(90deg, transparent, ${particle.color}, transparent)`,\n          borderRadius: '50%',\n          opacity,\n          boxShadow: `0 0 ${particle.size * 0.5}px ${particle.color}`,\n          animation: 'shimmer 2s infinite',\n        }}\n      />\n      {/* Secondary layer for depth */}\n      <div\n        style={{\n          position: 'absolute',\n          top: '20%',\n          left: '10%',\n          width: '80%',\n          height: '60%',\n          background: `radial-gradient(ellipse at center, ${particle.color}44, transparent)`,\n          borderRadius: '50%',\n          opacity: opacity * 0.5,\n          filter: 'blur(4px)',\n        }}\n      />\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst fireflyColors = ['#FFFF99', '#FFFFCC', '#FFFF66', '#FFFFAA'];\n\nexport const createFireflyParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 20,\n    spread = 150,\n    startVelocity = 2,\n    colors = fireflyColors,\n    elementSize = 8,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    const angle = randomInRange(0, 360) * (Math.PI / 180);\n    const velocity = randomInRange(startVelocity * 0.3, startVelocity);\n\n    return {\n      id: generateId(),\n      x: origin.x + randomInRange(-spread / 2, spread / 2),\n      y: origin.y + randomInRange(-20, 20),\n      vx: Math.cos(angle) * velocity,\n      vy: Math.sin(angle) * velocity * 0.5, // More horizontal movement\n      life: config.lifetime || 300,\n      opacity: 0,\n      size: randomInRange(elementSize * 0.6, elementSize),\n      rotation: randomInRange(0, 360), // Used for blink timing\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderFireflyParticle = (particle: Particle): React.ReactNode => {\n  // Create organic floating motion\n  const floatX = Math.sin(particle.life * 0.02 + particle.rotation) * 15;\n  const floatY = Math.cos(particle.life * 0.03 + particle.rotation) * 10;\n\n  // Blinking effect - each firefly has its own rhythm based on rotation\n  const blinkCycle = Math.sin(particle.life * 0.1 + particle.rotation * 0.1);\n  const isBlinking = blinkCycle > 0.3;\n  const glowIntensity = isBlinking ? 1 : 0.1;\n\n  // Fade in/out\n  const fadeIn = Math.min(1, (300 - particle.life) / 30);\n  const fadeOut = particle.life / 300;\n  const baseFade = Math.min(fadeIn, fadeOut);\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: `${particle.size}px`,\n        height: `${particle.size}px`,\n        position: 'relative',\n        transform: `translate(${floatX}px, ${floatY}px)`,\n      }}\n    >\n      {/* Firefly body */}\n      <div\n        style={{\n          width: '100%',\n          height: '100%',\n          background: particle.color,\n          borderRadius: '50%',\n          opacity: baseFade * glowIntensity,\n          boxShadow: `\n            0 0 ${particle.size}px ${particle.color},\n            0 0 ${particle.size * 2}px ${particle.color},\n            0 0 ${particle.size * 3}px ${particle.color}88\n          `,\n          transition: 'opacity 0.3s ease',\n        }}\n      />\n      {/* Glow aura */}\n      <div\n        style={{\n          position: 'absolute',\n          top: '50%',\n          left: '50%',\n          width: `${particle.size * 4}px`,\n          height: `${particle.size * 4}px`,\n          background: `radial-gradient(circle, ${particle.color}44 0%, transparent 70%)`,\n          borderRadius: '50%',\n          transform: 'translate(-50%, -50%)',\n          opacity: baseFade * glowIntensity * 0.5,\n          transition: 'opacity 0.3s ease',\n        }}\n      />\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst paintColors = [\n  '#FF006E',\n  '#FB5607',\n  '#FFBE0B',\n  '#8338EC',\n  '#3A86FF',\n  '#06FFB4',\n];\n\nexport const createPaintParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 25,\n    spread = 120,\n    startVelocity = 35,\n    colors = paintColors,\n    elementSize = 30,\n  } = config;\n\n  return createPooledParticles(particleCount, (i) => {\n    const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n    const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n    const isMainSplat = i < 5; // First few particles are bigger splats\n\n    return {\n      id: generateId(),\n      x: origin.x,\n      y: origin.y,\n      vx: Math.sin(angle) * velocity * (isMainSplat ? 0.3 : 1),\n      vy: -Math.cos(angle) * velocity * 0.7 + (isMainSplat ? 5 : 0),\n      life: config.lifetime || 150,\n      opacity: 1,\n      size: isMainSplat\n        ? randomInRange(elementSize * 1.5, elementSize * 2.5)\n        : randomInRange(elementSize * 0.3, elementSize),\n      rotation: randomInRange(0, 360),\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderPaintParticle = (particle: Particle): React.ReactNode => {\n  // Paint splatter gets more stretched as it flies\n  const stretch = 1 + (Math.abs(particle.vx) + Math.abs(particle.vy)) * 0.01;\n  const squish = 1 / stretch;\n\n  // Drip effect for some particles\n  const isDripping = particle.size > 15 && particle.rotation > 180;\n  const dripLength = isDripping ? particle.size * 0.5 : 0;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: `${particle.size}px`,\n        height: `${particle.size}px`,\n        position: 'relative',\n        transform: `\n          scaleX(${stretch}) \n          scaleY(${squish}) \n          rotate(${(Math.atan2(particle.vy, particle.vx) * 180) / Math.PI}deg)\n        `,\n      }}\n    >\n      {/* Main paint splat */}\n      <div\n        style={{\n          width: '100%',\n          height: '100%',\n          background: particle.color,\n          borderRadius: '50%',\n          position: 'relative',\n          boxShadow: `inset -2px -2px 4px rgba(0,0,0,0.2)`,\n        }}\n      >\n        {/* Splatter details */}\n        <div\n          style={{\n            position: 'absolute',\n            top: '20%',\n            left: '20%',\n            width: '30%',\n            height: '30%',\n            background: particle.color,\n            borderRadius: '50%',\n            opacity: 0.8,\n            transform: `translate(${randomInRange(-5, 5)}px, ${randomInRange(-5, 5)}px)`,\n          }}\n        />\n        <div\n          style={{\n            position: 'absolute',\n            bottom: '15%',\n            right: '15%',\n            width: '25%',\n            height: '25%',\n            background: particle.color,\n            borderRadius: '50%',\n            opacity: 0.7,\n          }}\n        />\n      </div>\n\n      {/* Paint drip */}\n      {isDripping && (\n        <div\n          style={{\n            position: 'absolute',\n            bottom: `-${dripLength}px`,\n            left: '40%',\n            width: '20%',\n            height: `${dripLength}px`,\n            background: particle.color,\n            borderRadius: '0 0 50% 50%',\n            opacity: 0.9,\n          }}\n        />\n      )}\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst balloonColors = [\n  '#FF006E',\n  '#FB5607',\n  '#FFBE0B',\n  '#8338EC',\n  '#3A86FF',\n  '#06FFB4',\n  '#FF4081',\n];\n\nexport const createBalloonParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 15,\n    spread = 80,\n    startVelocity = 10,\n    colors = balloonColors,\n    elementSize = 35,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n    const velocity = randomInRange(startVelocity * 0.7, startVelocity);\n\n    return {\n      id: generateId(),\n      x: origin.x + randomInRange(-spread * 0.8, spread * 0.8), // Spread balloons out more\n      y: origin.y + randomInRange(-10, 30),\n      vx: Math.sin(angle) * velocity * 0.3 + randomInRange(-1, 1), // Add horizontal drift\n      vy: -velocity * 0.4, // Balloons float up slowly\n      life: config.lifetime || 250,\n      opacity: 0.9,\n      size: randomInRange(elementSize * 0.8, elementSize * 1.2),\n      rotation: randomInRange(-10, 10),\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderBalloonParticle = (particle: Particle): React.ReactNode => {\n  // Gentle swaying motion\n  const sway = Math.sin(particle.life * 0.03) * 15;\n  const bob = Math.sin(particle.life * 0.05) * 5;\n\n  // Fade out near the end\n  const fadeOut = particle.life > 50 ? 1 : particle.life / 50;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: '100%',\n        height: '120%',\n        position: 'relative',\n        transform: `\n          translateX(${sway}px) \n          translateY(${bob}px)\n          rotate(${sway * 0.2}deg)\n        `,\n        opacity: particle.opacity * fadeOut,\n      }}\n    >\n      {/* Balloon body */}\n      <div\n        style={{\n          width: '100%',\n          height: '100%',\n          background: `radial-gradient(circle at 30% 30%, ${particle.color}ee, ${particle.color})`,\n          borderRadius: '50% 50% 50% 50% / 60% 60% 40% 40%',\n          position: 'relative',\n          boxShadow: `\n            inset -5px -5px 10px rgba(0,0,0,0.2),\n            0 4px 8px rgba(0,0,0,0.2)\n          `,\n        }}\n      >\n        {/* Highlight */}\n        <div\n          style={{\n            position: 'absolute',\n            top: '15%',\n            left: '20%',\n            width: '25%',\n            height: '30%',\n            background:\n              'radial-gradient(circle, rgba(255,255,255,0.8) 0%, transparent 70%)',\n            borderRadius: '50%',\n            transform: 'rotate(-20deg)',\n          }}\n        />\n\n        {/* Balloon knot */}\n        <div\n          style={{\n            position: 'absolute',\n            bottom: '-5px',\n            left: '50%',\n            transform: 'translateX(-50%)',\n            width: '0',\n            height: '0',\n            borderLeft: '4px solid transparent',\n            borderRight: '4px solid transparent',\n            borderTop: `8px solid ${particle.color}`,\n          }}\n        />\n      </div>\n\n      {/* String */}\n      <svg\n        style={{\n          position: 'absolute',\n          top: '100%',\n          left: '50%',\n          transform: 'translateX(-50%)',\n          width: '2px',\n          height: `${particle.size * 2}px`,\n          opacity: 0.6,\n        }}\n      >\n        <path\n          d={`M1 0 Q ${1 + Math.sin(particle.life * 0.1) * 3} ${particle.size} 1 ${particle.size * 2}`}\n          stroke={particle.color}\n          strokeWidth=\"1.5\"\n          fill=\"none\"\n          opacity=\"0.4\"\n        />\n      </svg>\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst galaxyColors = [\n  '#FFFFFF',\n  '#FFF9C4',\n  '#BBDEFB',\n  '#C5CAE9',\n  '#D1C4E9',\n  '#FFE082',\n  '#FFCCBC',\n];\n\nexport const createGalaxyParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 60,\n    spread = 200,\n    startVelocity = 15,\n    colors = galaxyColors,\n    elementSize = 8,\n  } = config;\n\n  return createPooledParticles(particleCount, (i) => {\n    // Create spiral distribution\n    const progress = i / particleCount;\n    const spiralAngle = progress * Math.PI * 4; // 2 full rotations\n    const radius = progress * spread;\n\n    // Add some randomness to make it look natural\n    const angleOffset = randomInRange(-0.3, 0.3);\n    const radiusOffset = randomInRange(-10, 10);\n\n    const finalAngle = spiralAngle + angleOffset;\n    const finalRadius = radius + radiusOffset;\n\n    // Position based on spiral\n    const offsetX = Math.cos(finalAngle) * finalRadius;\n    const offsetY = Math.sin(finalAngle) * finalRadius;\n\n    // Velocity follows the spiral tangent\n    const tangentAngle = finalAngle + Math.PI / 2;\n    const speed = startVelocity * (1 - progress * 0.5); // Outer stars move slower\n\n    return {\n      id: generateId(),\n      x: origin.x,\n      y: origin.y,\n      vx: Math.cos(tangentAngle) * speed * 0.3 + offsetX * 0.02,\n      vy: Math.sin(tangentAngle) * speed * 0.3 + offsetY * 0.02,\n      life: config.lifetime || 250,\n      opacity: 0,\n      size:\n        randomInRange(elementSize * 0.3, elementSize) * (1 - progress * 0.5), // Smaller at edges\n      rotation: randomInRange(0, 360),\n      color:\n        colors[Math.floor(Math.random() * colors.length)] ||\n        colors[0] ||\n        '#ffffff',\n    };\n  });\n};\n\nexport const renderGalaxyParticle = (particle: Particle): React.ReactNode => {\n  // Particles slowly rotate around center while expanding\n  const age = (250 - particle.life) / 250;\n  const expansionRate = 1 + age * 0.5;\n\n  // Fade in quickly, fade out slowly\n  const fadeIn = Math.min(1, (250 - particle.life) / 30);\n  const fadeOut = particle.life / 250;\n  const opacity = Math.min(fadeIn, fadeOut);\n\n  // Twinkle effect\n  const twinkle = Math.sin(particle.life * 0.2 + particle.rotation) * 0.3 + 0.7;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: `${particle.size}px`,\n        height: `${particle.size}px`,\n        position: 'relative',\n        transform: `scale(${expansionRate})`,\n        opacity: opacity * twinkle,\n      }}\n    >\n      {/* Star core */}\n      <div\n        style={{\n          width: '100%',\n          height: '100%',\n          background: particle.color,\n          borderRadius: '50%',\n          boxShadow: `\n            0 0 ${particle.size}px ${particle.color},\n            0 0 ${particle.size * 2}px ${particle.color}88,\n            0 0 ${particle.size * 3}px ${particle.color}44\n          `,\n          position: 'relative',\n        }}\n      >\n        {/* Star spikes */}\n        <div\n          style={{\n            position: 'absolute',\n            top: '50%',\n            left: '50%',\n            width: `${particle.size * 3}px`,\n            height: '1px',\n            background: `linear-gradient(90deg, transparent, ${particle.color}, transparent)`,\n            transform: `translate(-50%, -50%) rotate(${particle.rotation}deg)`,\n            opacity: twinkle,\n          }}\n        />\n        <div\n          style={{\n            position: 'absolute',\n            top: '50%',\n            left: '50%',\n            width: '1px',\n            height: `${particle.size * 3}px`,\n            background: `linear-gradient(180deg, transparent, ${particle.color}, transparent)`,\n            transform: `translate(-50%, -50%) rotate(${particle.rotation}deg)`,\n            opacity: twinkle,\n          }}\n        />\n      </div>\n\n      {/* Nebula dust for larger stars */}\n      {particle.size > 5 && (\n        <div\n          style={{\n            position: 'absolute',\n            top: '50%',\n            left: '50%',\n            width: `${particle.size * 6}px`,\n            height: `${particle.size * 6}px`,\n            background: `radial-gradient(circle, ${particle.color}22 0%, transparent 70%)`,\n            borderRadius: '50%',\n            transform: 'translate(-50%, -50%)',\n            opacity: opacity * 0.3,\n            filter: 'blur(3px)',\n          }}\n        />\n      )}\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\n\nexport const createGlitchParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const { particleCount = 20, elementSize = 200 } = config;\n\n  const particles: Particle[] = [];\n  const channels = ['r', 'g', 'b'];\n\n  for (let i = 0; i < particleCount; i++) {\n    const isHorizontal = Math.random() > 0.3;\n    const channelIndex = i % 3;\n    const channel = channels[channelIndex];\n\n    // Encode all data in rotation:\n    // bits 0-1: channel (0=r, 1=g, 2=b)\n    // bit 2: isHorizontal (0=false, 1=true)\n    // bits 3-10: width (0-255)\n    // bits 11-18: height (0-255)\n    // bits 19-24: glitchOffset + 32 (to make positive)\n    const width = isHorizontal ? randomInRange(50, 200) : randomInRange(2, 8);\n    const height = isHorizontal ? randomInRange(2, 8) : randomInRange(50, 200);\n    const glitchOffset = randomInRange(-20, 20);\n\n    const encodedData =\n      channelIndex +\n      (isHorizontal ? 4 : 0) +\n      (Math.floor(width) << 3) +\n      (Math.floor(height) << 11) +\n      ((glitchOffset + 32) << 19);\n\n    particles.push({\n      id: generateId(),\n      x: origin.x + randomInRange(-elementSize / 2, elementSize / 2),\n      y: origin.y + randomInRange(-elementSize / 2, elementSize / 2),\n      vx: randomInRange(-50, 50),\n      vy: randomInRange(-30, 30),\n      life: config.lifetime || 150,\n      opacity: randomInRange(0.3, 1),\n      size: randomInRange(5, 20), // Store distortionAmount\n      rotation: encodedData,\n      color:\n        channel === 'r' ? '#ff0000' : channel === 'g' ? '#00ff00' : '#0000ff',\n    });\n  }\n\n  return particles;\n};\n\nexport const renderGlitchParticle = (particle: Particle): React.ReactNode => {\n  // Decode data from rotation\n  const channelIndex = particle.rotation & 3;\n  const width = (particle.rotation >> 3) & 255;\n  const height = (particle.rotation >> 11) & 255;\n  const glitchOffset = ((particle.rotation >> 19) & 63) - 32;\n\n  const channel = ['r', 'g', 'b'][channelIndex];\n  const distortionAmount = particle.size;\n\n  const colors = {\n    r: channel === 'r' ? 255 : 0,\n    g: channel === 'g' ? 255 : 0,\n    b: channel === 'b' ? 255 : 0,\n  };\n\n  const mixBlendMode =\n    channel === 'r' ? 'screen' : channel === 'g' ? 'multiply' : 'difference';\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: `${width}px`,\n        height: `${height}px`,\n        backgroundColor: `rgba(${colors.r}, ${colors.g}, ${colors.b}, ${particle.opacity})`,\n        mixBlendMode,\n        filter: `blur(${randomInRange(0, 2)}px)`,\n        boxShadow: `${glitchOffset}px 0 ${distortionAmount}px rgba(${colors.r}, ${colors.g}, ${colors.b}, ${particle.opacity * 0.5})`,\n      }}\n    />\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n  randomInRange,\n  degreesToRadians,\n  generateId,\n  getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n  '#9C27B0',\n  '#E91E63',\n  '#FF00FF',\n  '#00FFFF',\n  '#FFD700',\n  '#FF69B4',\n  '#DA70D6',\n  '#9370DB',\n];\n\nexport const createMagicDustParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 40,\n    startVelocity = 8,\n    colors = defaultColors,\n    elementSize = 12,\n  } = config;\n\n  return createPooledParticles(particleCount, (i) => {\n    // Create particles in a circular pattern with some randomness\n    const angle = (i / particleCount) * 360 + randomInRange(-30, 30);\n    const velocity = randomInRange(startVelocity * 0.3, startVelocity);\n    const color = getRandomColor(colors);\n\n    // Add some particles that trail behind cursor movement\n    const offsetAngle = randomInRange(0, 360);\n    const offsetDistance = randomInRange(0, 30);\n\n    return {\n      id: generateId(),\n      x: origin.x + Math.cos(degreesToRadians(offsetAngle)) * offsetDistance,\n      y: origin.y + Math.sin(degreesToRadians(offsetAngle)) * offsetDistance,\n      vx: Math.cos(degreesToRadians(angle)) * velocity + randomInRange(-2, 2),\n      vy: Math.sin(degreesToRadians(angle)) * velocity + randomInRange(-2, 2),\n      life: config.lifetime || 120,\n      opacity: randomInRange(0.4, 1),\n      size: randomInRange(elementSize * 0.3, elementSize),\n      rotation: randomInRange(0, 360),\n      color,\n    };\n  });\n};\n\nexport const renderMagicDustParticle = (\n  particle: Particle\n): React.ReactNode => {\n  const sparkleSize = particle.size * 0.7;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: `${particle.size}px`,\n        height: `${particle.size}px`,\n        position: 'relative',\n      }}\n    >\n      {/* Central glow */}\n      <div\n        style={{\n          position: 'absolute',\n          width: '100%',\n          height: '100%',\n          backgroundColor: particle.color,\n          borderRadius: '50%',\n          boxShadow: `0 0 ${particle.size}px ${particle.color}, 0 0 ${particle.size * 2}px ${particle.color}`,\n          filter: 'blur(1px)',\n        }}\n      />\n      {/* Sparkle effect */}\n      <div\n        style={{\n          position: 'absolute',\n          top: '50%',\n          left: '50%',\n          width: `${sparkleSize}px`,\n          height: `${sparkleSize}px`,\n          transform: `translate(-50%, -50%) rotate(${particle.rotation}deg)`,\n        }}\n      >\n        <div\n          style={{\n            position: 'absolute',\n            width: '100%',\n            height: '2px',\n            backgroundColor: 'white',\n            top: '50%',\n            left: '0',\n            transform: 'translateY(-50%)',\n            boxShadow: '0 0 4px white',\n          }}\n        />\n        <div\n          style={{\n            position: 'absolute',\n            width: '2px',\n            height: '100%',\n            backgroundColor: 'white',\n            left: '50%',\n            top: '0',\n            transform: 'translateX(-50%)',\n            boxShadow: '0 0 4px white',\n          }}\n        />\n      </div>\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n  randomInRange,\n  degreesToRadians,\n  generateId,\n  getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n  '#FF1493',\n  '#00CED1',\n  '#FFD700',\n  '#FF69B4',\n  '#7B68EE',\n  '#00FA9A',\n  '#FF6347',\n  '#4169E1',\n];\n\nexport const createCrystalParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 15,\n    startVelocity = 15,\n    colors = defaultColors,\n    elementSize = 25,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    // Crystals explode outward and fall with gravity\n    const angle = randomInRange(0, 360);\n    const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n    const color = getRandomColor(colors);\n\n    return {\n      id: generateId(),\n      x: origin.x,\n      y: origin.y,\n      vx: Math.cos(degreesToRadians(angle)) * velocity,\n      vy: Math.sin(degreesToRadians(angle)) * velocity - 10,\n      life: config.lifetime || 150,\n      opacity: randomInRange(0.7, 1),\n      size: randomInRange(elementSize * 0.6, elementSize),\n      rotation: randomInRange(0, 360),\n      color,\n    };\n  });\n};\n\nexport const renderCrystalParticle = (particle: Particle): React.ReactNode => {\n  // Create rainbow refraction effect\n  const hue = (Date.now() * 0.5 + particle.x + particle.y) % 360;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: `${particle.size}px`,\n        height: `${particle.size * 1.5}px`,\n        position: 'relative',\n        transform: `rotate(${particle.rotation}deg)`,\n      }}\n    >\n      {/* Crystal shape with gradient */}\n      <div\n        style={{\n          position: 'absolute',\n          width: '100%',\n          height: '100%',\n          background: `linear-gradient(135deg, ${particle.color}, ${particle.color}88, transparent)`,\n          clipPath: 'polygon(50% 0%, 100% 40%, 75% 100%, 25% 100%, 0% 40%)',\n          boxShadow: `0 0 ${particle.size}px ${particle.color}44`,\n        }}\n      />\n\n      {/* Inner facets */}\n      <div\n        style={{\n          position: 'absolute',\n          width: '80%',\n          height: '80%',\n          top: '10%',\n          left: '10%',\n          background: `linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.4), transparent)`,\n          clipPath: 'polygon(50% 10%, 90% 45%, 65% 90%, 35% 90%, 10% 45%)',\n        }}\n      />\n\n      {/* Rainbow refraction overlay */}\n      <div\n        style={{\n          position: 'absolute',\n          width: '100%',\n          height: '100%',\n          background: `linear-gradient(${hue}deg, \n            hsla(${hue}, 100%, 50%, 0.3),\n            hsla(${(hue + 60) % 360}, 100%, 50%, 0.3),\n            hsla(${(hue + 120) % 360}, 100%, 50%, 0.3)\n          )`,\n          clipPath: 'polygon(50% 0%, 100% 40%, 75% 100%, 25% 100%, 0% 40%)',\n          mixBlendMode: 'screen',\n        }}\n      />\n\n      {/* Shine effect */}\n      <div\n        style={{\n          position: 'absolute',\n          width: '30%',\n          height: '30%',\n          top: '20%',\n          left: '35%',\n          background:\n            'radial-gradient(circle, rgba(255, 255, 255, 0.8), transparent)',\n          borderRadius: '50%',\n          filter: 'blur(2px)',\n        }}\n      />\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId, getRandomColor } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n  '#D2691E',\n  '#CD853F',\n  '#8B4513',\n  '#A0522D',\n  '#FF8C00',\n  '#FF6347',\n];\n\nexport const createLeafParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 10,\n    colors = defaultColors,\n    elementSize = 25,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    return {\n      id: generateId(),\n      x: origin.x + randomInRange(-100, 100),\n      y: origin.y + randomInRange(-50, 0),\n      vx: randomInRange(-1, 1),\n      vy: randomInRange(0.5, 2),\n      life: config.lifetime || 300,\n      opacity: 1,\n      size: randomInRange(elementSize * 0.6, elementSize),\n      // Encode tumble phase (0-360), sway phase (0-360), and sway amount (20-40) + rotation speed (-3 to 3)\n      rotation:\n        Math.floor(randomInRange(0, 360)) +\n        Math.floor(randomInRange(0, 360)) * 1000 +\n        Math.floor(randomInRange(20, 40)) * 1000000 +\n        (Math.floor(randomInRange(-3, 3)) + 3) * 100000000,\n      color: getRandomColor(colors),\n    };\n  });\n};\n\nexport const renderLeafParticle = (particle: Particle): React.ReactNode => {\n  // Extract encoded values\n  const tumblePhase = particle.rotation % 1000;\n  const swayPhase = Math.floor((particle.rotation % 1000000) / 1000);\n  const swayAmount = Math.floor((particle.rotation % 100000000) / 1000000);\n  const rotationSpeed = Math.floor(particle.rotation / 100000000) - 3;\n\n  // Calculate tumbling and swaying\n  const tumble =\n    Math.sin(((Date.now() * 0.002 + tumblePhase) * Math.PI) / 180) * 30;\n  const swayX =\n    Math.sin(((Date.now() * 0.001 + swayPhase) * Math.PI) / 180) * swayAmount;\n  const rotation = (Date.now() * rotationSpeed * 0.01 + tumble) % 360;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: '100%',\n        height: '100%',\n        position: 'relative',\n        transform: `translateX(${swayX}px) rotate(${rotation}deg)`,\n      }}\n    >\n      <svg\n        width=\"100%\"\n        height=\"100%\"\n        viewBox={`-${particle.size / 2} -${particle.size / 2} ${particle.size} ${particle.size}`}\n        style={{\n          position: 'absolute',\n          top: 0,\n          left: 0,\n        }}\n      >\n        {/* Leaf shape */}\n        <path\n          d={`\n            M 0,-${particle.size / 2}\n            C -${particle.size / 3},-${particle.size / 3} -${particle.size / 3},${particle.size / 3} 0,${particle.size / 2}\n            C ${particle.size / 3},${particle.size / 3} ${particle.size / 3},-${particle.size / 3} 0,-${particle.size / 2}\n          `}\n          fill={particle.color}\n          opacity=\"0.9\"\n        />\n\n        {/* Leaf vein */}\n        <line\n          x1=\"0\"\n          y1={-particle.size / 2}\n          x2=\"0\"\n          y2={particle.size / 2}\n          stroke=\"#8B4513\"\n          strokeWidth=\"1\"\n          opacity=\"0.5\"\n        />\n\n        {/* Side veins */}\n        <line\n          x1=\"0\"\n          y1={-particle.size / 4}\n          x2={-particle.size / 4}\n          y2={-particle.size / 8}\n          stroke=\"#8B4513\"\n          strokeWidth=\"0.5\"\n          opacity=\"0.5\"\n        />\n        <line\n          x1=\"0\"\n          y1={-particle.size / 4}\n          x2={particle.size / 4}\n          y2={-particle.size / 8}\n          stroke=\"#8B4513\"\n          strokeWidth=\"0.5\"\n          opacity=\"0.5\"\n        />\n        <line\n          x1=\"0\"\n          y1={particle.size / 4}\n          x2={-particle.size / 4}\n          y2={particle.size / 8}\n          stroke=\"#8B4513\"\n          strokeWidth=\"0.5\"\n          opacity=\"0.5\"\n        />\n        <line\n          x1=\"0\"\n          y1={particle.size / 4}\n          x2={particle.size / 4}\n          y2={particle.size / 8}\n          stroke=\"#8B4513\"\n          strokeWidth=\"0.5\"\n          opacity=\"0.5\"\n        />\n      </svg>\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId, degreesToRadians } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst mortarColors = [\n  '#ff6b6b',\n  '#4ecdc4',\n  '#45b7d1',\n  '#f7dc6f',\n  '#bb8fce',\n  '#85c1f5',\n  '#ffd93d',\n  '#6bcf7f',\n];\n\nexport const createMortarParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 3, // Number of firework shells\n    spread = 60, // Total spread angle\n    startVelocity = 12, // Much lower velocity\n    colors = mortarColors,\n    elementSize = 8,\n  } = config;\n\n  const particles: Particle[] = [];\n\n  // Create firework shells that fire at angles\n  const shells = createPooledParticles(particleCount, (index) => {\n    // Distribute shells across the spread angle - more horizontal\n    const baseAngle = -90; // Start from straight up\n    const angleStep = particleCount > 1 ? spread / (particleCount - 1) : 0;\n    const angle = baseAngle - spread / 2 + angleStep * index;\n\n    const velocity = randomInRange(startVelocity * 0.9, startVelocity * 1.1);\n    const targetColor = colors[Math.floor(Math.random() * colors.length)];\n    const rad = degreesToRadians(angle);\n\n    // Calculate when to explode based on trajectory\n    const timeToExplode = randomInRange(20, 35); // Explode much earlier\n\n    return {\n      id: generateId(),\n      x: origin.x,\n      y: origin.y,\n      vx: Math.cos(rad) * velocity,\n      vy: Math.sin(rad) * velocity,\n      life: config.lifetime || 200,\n      opacity: 1,\n      size: elementSize,\n      rotation: 0,\n      color: targetColor,\n      config: config, // Add config to particle\n      // Store explosion data\n      element: JSON.stringify({\n        isShell: true,\n        hasExploded: false,\n        timeToExplode: timeToExplode, // Fixed explosion time\n        burstCount: randomInRange(30, 45),\n        burstColor: targetColor,\n      }),\n    };\n  });\n\n  particles.push(...shells);\n\n  // Create launch sparks at the base\n  for (let i = 0; i < 8; i++) {\n    const sparkArray = createPooledParticles(1, () => ({\n      id: generateId(),\n      x: origin.x + randomInRange(-5, 5),\n      y: origin.y,\n      vx: randomInRange(-2, 2),\n      vy: randomInRange(-10, -3),\n      life: randomInRange(10, 20),\n      opacity: 1,\n      size: randomInRange(2, 3),\n      rotation: 0,\n      color: '#ffaa00',\n      element: JSON.stringify({\n        isLaunchSpark: true,\n      }),\n    }));\n    particles.push(...sparkArray);\n  }\n\n  return particles;\n};\n\ninterface MortarElementData {\n  isShell?: boolean;\n  hasExploded?: boolean;\n  timeToExplode?: number;\n  burstCount?: number;\n  burstColor?: string;\n  isTrail?: boolean;\n  isBurst?: boolean;\n  isLaunchSpark?: boolean;\n  isGalaxy?: boolean;\n  isCore?: boolean;\n  twinkle?: boolean;\n}\n\nexport const renderMortarParticle = (\n  particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n  let elementData: MortarElementData = {};\n  try {\n    if (particle.element && typeof particle.element === 'string') {\n      elementData = JSON.parse(particle.element);\n    }\n  } catch (e) {\n    // Fallback\n  }\n\n  // Render launch sparks\n  if (elementData.isLaunchSpark) {\n    return (\n      <div\n        key={particle.id}\n        style={{\n          width: '100%',\n          height: '100%',\n          backgroundColor: particle.color,\n          borderRadius: '50%',\n          opacity: particle.opacity,\n          boxShadow: `0 0 3px ${particle.color}`,\n        }}\n      />\n    );\n  }\n\n  // Render trail particles\n  if (elementData.isTrail) {\n    const trailOpacity = particle.opacity * (particle.life / 30) * 0.4;\n    return (\n      <div\n        key={particle.id}\n        style={{\n          width: '100%',\n          height: '100%',\n          background: `radial-gradient(circle, ${particle.color}88 0%, transparent 60%)`,\n          borderRadius: '50%',\n          opacity: trailOpacity,\n          filter: 'blur(1px)',\n        }}\n      />\n    );\n  }\n\n  // Render burst particles\n  if (elementData.isBurst) {\n    const burstOpacity = particle.opacity * Math.pow(particle.life / 120, 0.5);\n\n    // Galaxy-style burst particles\n    if (elementData.isGalaxy) {\n      const twinkleOpacity = elementData.twinkle\n        ? 0.3 + Math.sin(particle.life * 0.3) * 0.7\n        : 1;\n\n      return (\n        <div\n          key={particle.id}\n          style={{\n            width: '100%',\n            height: '100%',\n            backgroundColor: particle.color,\n            borderRadius: '50%',\n            opacity: burstOpacity * twinkleOpacity,\n            boxShadow: `0 0 ${particle.size * 2}px ${particle.color}`,\n            transform: `rotate(${particle.rotation}deg)`,\n          }}\n        />\n      );\n    }\n\n    // Core particles\n    if (elementData.isCore) {\n      return (\n        <div\n          key={particle.id}\n          style={{\n            width: '100%',\n            height: '100%',\n            backgroundColor: '#FFFFFF',\n            borderRadius: '50%',\n            opacity: burstOpacity,\n            boxShadow: `0 0 ${particle.size * 3}px #FFFFFF`,\n          }}\n        />\n      );\n    }\n\n    // Default burst (shouldn't reach here with new code)\n    return (\n      <div\n        key={particle.id}\n        style={{\n          width: '100%',\n          height: '100%',\n          backgroundColor: particle.color,\n          borderRadius: '50%',\n          opacity: burstOpacity,\n          boxShadow: `\n            0 0 ${particle.size}px ${particle.color},\n            0 0 ${particle.size * 2}px ${particle.color}88\n          `,\n          filter: particle.life > 80 ? 'blur(0px)' : 'blur(1px)',\n        }}\n      />\n    );\n  }\n\n  // Render shell\n  if (elementData.isShell) {\n    // Hide shell after explosion\n    if (elementData.hasExploded) {\n      return null;\n    }\n\n    // Calculate rotation based on movement direction\n    const rotation = (Math.atan2(particle.vy, particle.vx) * 180) / Math.PI;\n\n    return (\n      <div\n        key={particle.id}\n        style={{\n          width: '100%',\n          height: '100%',\n          position: 'relative',\n          transform: `rotate(${rotation}deg)`,\n        }}\n      >\n        {/* Glowing shell */}\n        <div\n          style={{\n            width: '100%',\n            height: '100%',\n            backgroundColor: '#ffffff',\n            borderRadius: '50%',\n            boxShadow: `\n              0 0 ${particle.size * 0.5}px #ffffff,\n              0 0 ${particle.size}px ${particle.color},\n              0 0 ${particle.size * 2}px ${particle.color}88\n            `,\n          }}\n        />\n      </div>\n    );\n  }\n\n  // Default particle\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: '100%',\n        height: '100%',\n        backgroundColor: particle.color,\n        borderRadius: '50%',\n        opacity: particle.opacity,\n      }}\n    />\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\n// Inspired by Sergio A. Carrasco Chavez's bokeh effect\n// Original: https://codepen.io/sergio-carrasco/pen/bokeh\n\nconst bokehColors = [\n  '#FFFFFF', // Pure white\n  '#FFF8DC', // Cornsilk\n  '#FFFACD', // LemonChiffon\n  '#FFE4B5', // Moccasin\n  '#FFDEAD', // NavajoWhite\n  '#F0E68C', // Khaki\n  '#FFD700', // Gold\n];\n\nexport const createBokehParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 50,\n    spread = 300,\n    startVelocity = 1,\n    colors = bokehColors,\n    elementSize = 40,\n    lifetime = 200,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    // Create particles at various distances from origin for depth effect\n    const angle = Math.random() * Math.PI * 2;\n    const distance = randomInRange(0, spread);\n\n    // Vary sizes for depth perception\n    const depth = Math.random(); // 0 = close, 1 = far\n    const size = elementSize * (0.3 + depth * 0.7); // Bigger = closer\n\n    return {\n      id: generateId(),\n      x: origin.x + Math.cos(angle) * distance,\n      y: origin.y + Math.sin(angle) * distance,\n      vx: randomInRange(-0.5, 0.5) * startVelocity,\n      vy: randomInRange(-0.5, -1.5) * startVelocity, // Gentle upward drift\n      life: lifetime,\n      opacity: 0.1 + depth * 0.5, // Closer = more transparent (out of focus)\n      size: size,\n      rotation: 0,\n      color: colors[Math.floor(Math.random() * colors.length)],\n      element: JSON.stringify({\n        depth: depth,\n        pulsePhase: Math.random() * Math.PI * 2, // Random starting phase for pulse\n        baseSize: size,\n      }),\n    };\n  });\n};\n\nexport const renderBokehParticle = (particle: Particle): React.ReactNode => {\n  let elementData: { depth?: number; pulsePhase?: number; baseSize?: number } =\n    {};\n  try {\n    if (particle.element && typeof particle.element === 'string') {\n      elementData = JSON.parse(particle.element);\n    }\n  } catch (e) {\n    // Fallback\n  }\n\n  // Create gentle pulsing effect\n  const pulseAmount =\n    Math.sin(particle.life * 0.05 + (elementData.pulsePhase || 0)) * 0.1 + 1;\n  const currentSize = (elementData.baseSize || particle.size) * pulseAmount;\n\n  // Fade in at start, fade out at end\n  const fadeIn = Math.min(\n    1,\n    (particle.config?.lifetime || 200 - particle.life) / 20\n  );\n  const fadeOut = Math.min(1, particle.life / 40);\n  const opacity = particle.opacity * fadeIn * fadeOut;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: '100%',\n        height: '100%',\n        position: 'relative',\n      }}\n    >\n      {/* Outer glow */}\n      <div\n        style={{\n          position: 'absolute',\n          top: '50%',\n          left: '50%',\n          width: `${currentSize * 3}px`,\n          height: `${currentSize * 3}px`,\n          transform: 'translate(-50%, -50%)',\n          background: `radial-gradient(circle, ${particle.color}22 0%, transparent 50%)`,\n          filter: 'blur(20px)',\n          opacity: opacity * 0.6,\n        }}\n      />\n\n      {/* Middle glow */}\n      <div\n        style={{\n          position: 'absolute',\n          top: '50%',\n          left: '50%',\n          width: `${currentSize * 2}px`,\n          height: `${currentSize * 2}px`,\n          transform: 'translate(-50%, -50%)',\n          background: `radial-gradient(circle, ${particle.color}44 0%, transparent 60%)`,\n          filter: 'blur(10px)',\n          opacity: opacity * 0.8,\n        }}\n      />\n\n      {/* Inner core */}\n      <div\n        style={{\n          position: 'absolute',\n          top: '50%',\n          left: '50%',\n          width: `${currentSize}px`,\n          height: `${currentSize}px`,\n          transform: 'translate(-50%, -50%)',\n          background: `radial-gradient(circle, ${particle.color}88 0%, ${particle.color}44 50%, transparent 100%)`,\n          borderRadius: '50%',\n          filter: 'blur(2px)',\n          opacity: opacity,\n        }}\n      />\n    </div>\n  );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n  randomInRange,\n  degreesToRadians,\n  generateId,\n  getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst ribbonColors = [\n  '#FF1744', // Red\n  '#F50057', // Pink\n  '#D500F9', // Purple\n  '#651FFF', // Deep Purple\n  '#2979FF', // Blue\n  '#00E5FF', // Cyan\n  '#1DE9B6', // Teal\n  '#00E676', // Green\n  '#76FF03', // Light Green\n  '#FFEA00', // Yellow\n  '#FFC400', // Amber\n  '#FF9100', // Orange\n];\n\nexport const createRibbonsParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 25,\n    spread = 120,\n    startVelocity = 15,\n    colors = ribbonColors,\n    elementSize = 60,\n    lifetime = 200,\n  } = config;\n\n  return createPooledParticles(particleCount, () => {\n    const angle = randomInRange(-spread / 2, spread / 2) - 90; // Upward bias\n    const velocity = randomInRange(startVelocity * 0.7, startVelocity);\n    const color = getRandomColor(colors);\n\n    return {\n      id: generateId(),\n      x: origin.x,\n      y: origin.y,\n      vx: Math.cos(degreesToRadians(angle)) * velocity,\n      vy: Math.sin(degreesToRadians(angle)) * velocity - 10, // Slight upward boost\n      life: lifetime,\n      opacity: 1,\n      size: elementSize,\n      rotation: randomInRange(0, 360),\n      color,\n      element: JSON.stringify({\n        waveSpeed: randomInRange(0.1, 0.2),\n        waveAmplitude: randomInRange(20, 40),\n        segments: 5,\n        twistSpeed: randomInRange(0.05, 0.15),\n      }),\n    };\n  });\n};\n\nexport const renderRibbonsParticle = (particle: Particle): React.ReactNode => {\n  let ribbonData: any = {};\n  try {\n    if (particle.element && typeof particle.element === 'string') {\n      ribbonData = JSON.parse(particle.element);\n    }\n  } catch (e) {\n    // Fallback\n  }\n\n  const {\n    waveSpeed = 0.15,\n    waveAmplitude = 30,\n    segments = 5,\n    twistSpeed = 0.1,\n  } = ribbonData;\n\n  const lifeRatio = particle.life / (particle.config?.lifetime || 200);\n\n  // Create wave effect\n  const wave = Math.sin(particle.life * waveSpeed) * waveAmplitude * lifeRatio;\n  const twist = Math.sin(particle.life * twistSpeed) * 180;\n\n  // Create gradient for ribbon\n  const gradientColors = [\n    particle.color,\n    `${particle.color}CC`,\n    `${particle.color}99`,\n    `${particle.color}66`,\n    `${particle.color}33`,\n  ];\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: `${particle.size * 0.15}px`,\n        height: `${particle.size}px`,\n        background: `linear-gradient(to bottom, ${gradientColors.join(', ')})`,\n        borderRadius: '2px',\n        boxShadow: `0 2px 8px ${particle.color}66`,\n        opacity: particle.opacity * lifeRatio,\n        transform: `translateX(${wave}px) rotateZ(${twist}deg) rotateY(${particle.rotation}deg)`,\n        transformStyle: 'preserve-3d',\n        transformOrigin: 'center top',\n      }}\n    />\n  );\n};","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n  randomInRange,\n  degreesToRadians,\n  generateId,\n  getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst geometricColors = [\n  '#00D9FF', // Cyan\n  '#FF006E', // Pink\n  '#FFB700', // Gold\n  '#8338EC', // Purple\n  '#3A86FF', // Blue\n  '#06FFA5', // Mint\n  '#FF4365', // Coral\n  '#FFEE32', // Yellow\n  '#9B5DE5', // Violet\n  '#00F5FF', // Aqua\n  '#F15BB5', // Magenta\n  '#00BBF9', // Sky Blue\n];\n\ntype ShapeType = 'triangle' | 'square' | 'diamond' | 'hexagon' | 'star';\n\nexport const createGeometricParticles = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n): Particle[] => {\n  const {\n    particleCount = 30,\n    spread = 360,\n    startVelocity = 25,\n    colors = geometricColors,\n    elementSize = 25,\n    lifetime = 120,\n  } = config;\n\n  const shapes: ShapeType[] = ['triangle', 'square', 'diamond', 'hexagon', 'star'];\n\n  return createPooledParticles(particleCount, () => {\n    const angle = randomInRange(0, 360);\n    const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n    const color = getRandomColor(colors);\n    const shape = shapes[Math.floor(Math.random() * shapes.length)];\n\n    return {\n      id: generateId(),\n      x: origin.x,\n      y: origin.y,\n      vx: Math.cos(degreesToRadians(angle)) * velocity,\n      vy: Math.sin(degreesToRadians(angle)) * velocity - 15, // Slight upward bias\n      life: lifetime,\n      opacity: 1,\n      size: randomInRange(elementSize * 0.6, elementSize * 1.2),\n      rotation: randomInRange(0, 360),\n      color,\n      element: JSON.stringify({\n        shape,\n        spinSpeed: randomInRange(-5, 5),\n        pulseSpeed: randomInRange(0.05, 0.1),\n      }),\n    };\n  });\n};\n\nconst createShapePath = (shape: ShapeType): string => {\n  switch (shape) {\n    case 'triangle':\n      return 'polygon(50% 0%, 0% 100%, 100% 100%)';\n    case 'square':\n      return 'polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)';\n    case 'diamond':\n      return 'polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)';\n    case 'hexagon':\n      return 'polygon(30% 0%, 70% 0%, 100% 50%, 70% 100%, 30% 100%, 0% 50%)';\n    case 'star':\n      return 'polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)';\n    default:\n      return 'polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)';\n  }\n};\n\nexport const renderGeometricParticle = (particle: Particle): React.ReactNode => {\n  let shapeData: any = {};\n  try {\n    if (particle.element && typeof particle.element === 'string') {\n      shapeData = JSON.parse(particle.element);\n    }\n  } catch (e) {\n    // Fallback\n  }\n\n  const {\n    shape = 'square',\n    spinSpeed = 3,\n    pulseSpeed = 0.08,\n  } = shapeData;\n\n  const lifeRatio = particle.life / (particle.config?.lifetime || 120);\n  const rotation = particle.rotation + (particle.life * spinSpeed);\n  \n  // Pulse effect\n  const pulse = 1 + Math.sin(particle.life * pulseSpeed) * 0.1;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: `${particle.size * pulse}px`,\n        height: `${particle.size * pulse}px`,\n        background: `linear-gradient(135deg, ${particle.color} 0%, ${particle.color}CC 50%, ${particle.color}99 100%)`,\n        clipPath: createShapePath(shape),\n        opacity: particle.opacity * lifeRatio,\n        transform: `rotate(${rotation}deg)`,\n        boxShadow: `0 0 ${10 * lifeRatio}px ${particle.color}66`,\n        filter: `brightness(${1 + lifeRatio * 0.5})`,\n      }}\n    />\n  );\n};","import { AnimationType, AnimationConfig, Particle } from '../types';\nimport { createConfettiParticles, renderConfettiParticle } from './confetti';\nimport { createSparkleParticles, renderSparkleParticle } from './sparkles';\nimport { createHeartParticles, renderHeartParticle } from './hearts';\nimport { createFireworkParticles, renderFireworkParticle } from './fireworks';\nimport { createBubbleParticles, renderBubbleParticle } from './bubbles';\nimport { createStarParticles, renderStarParticle } from './stars';\nimport { createSnowParticles, renderSnowParticle } from './snow';\nimport { createEmojiParticles, renderEmojiParticle } from './emoji';\nimport { createCoinParticles, renderCoinParticle } from './coins';\nimport { createPetalParticles, renderPetalParticle } from './petals';\nimport { createAuroraParticles, renderAuroraParticle } from './aurora';\nimport { createFireflyParticles, renderFireflyParticle } from './fireflies';\nimport { createPaintParticles, renderPaintParticle } from './paint';\nimport { createBalloonParticles, renderBalloonParticle } from './balloons';\nimport { createGalaxyParticles, renderGalaxyParticle } from './galaxy';\nimport { createGlitchParticles, renderGlitchParticle } from './glitch';\nimport { createMagicDustParticles, renderMagicDustParticle } from './magicdust';\nimport { createCrystalParticles, renderCrystalParticle } from './crystals';\nimport { createLeafParticles, renderLeafParticle } from './leaves';\nimport { createMortarParticles, renderMortarParticle } from './mortar';\nimport { createBokehParticles, renderBokehParticle } from './bokeh';\nimport { createRibbonsParticles, renderRibbonsParticle } from './ribbons';\nimport { createGeometricParticles, renderGeometricParticle } from './geometric';\n\nexport type ParticleCreator = (\n  origin: { x: number; y: number },\n  config: AnimationConfig\n) => Particle[];\nexport type ParticleRenderer = (particle: Particle) => React.ReactNode;\n\ninterface AnimationHandler {\n  createParticles: ParticleCreator;\n  renderParticle: ParticleRenderer;\n}\n\nexport const animations: Record<AnimationType, AnimationHandler> = {\n  confetti: {\n    createParticles: createConfettiParticles,\n    renderParticle: renderConfettiParticle,\n  },\n  sparkles: {\n    createParticles: createSparkleParticles,\n    renderParticle: renderSparkleParticle,\n  },\n  hearts: {\n    createParticles: createHeartParticles,\n    renderParticle: renderHeartParticle,\n  },\n  fireworks: {\n    createParticles: createFireworkParticles,\n    renderParticle: renderFireworkParticle,\n  },\n  bubbles: {\n    createParticles: createBubbleParticles,\n    renderParticle: renderBubbleParticle,\n  },\n  stars: {\n    createParticles: createStarParticles,\n    renderParticle: renderStarParticle,\n  },\n  snow: {\n    createParticles: createSnowParticles,\n    renderParticle: renderSnowParticle,\n  },\n  emoji: {\n    createParticles: createEmojiParticles,\n    renderParticle: renderEmojiParticle,\n  },\n  coins: {\n    createParticles: createCoinParticles,\n    renderParticle: renderCoinParticle,\n  },\n  petals: {\n    createParticles: createPetalParticles,\n    renderParticle: renderPetalParticle,\n  },\n  aurora: {\n    createParticles: createAuroraParticles,\n    renderParticle: renderAuroraParticle,\n  },\n  fireflies: {\n    createParticles: createFireflyParticles,\n    renderParticle: renderFireflyParticle,\n  },\n  paint: {\n    createParticles: createPaintParticles,\n    renderParticle: renderPaintParticle,\n  },\n  balloons: {\n    createParticles: createBalloonParticles,\n    renderParticle: renderBalloonParticle,\n  },\n  galaxy: {\n    createParticles: createGalaxyParticles,\n    renderParticle: renderGalaxyParticle,\n  },\n  glitch: {\n    createParticles: createGlitchParticles,\n    renderParticle: renderGlitchParticle,\n  },\n  magicdust: {\n    createParticles: createMagicDustParticles,\n    renderParticle: renderMagicDustParticle,\n  },\n  crystals: {\n    createParticles: createCrystalParticles,\n    renderParticle: renderCrystalParticle,\n  },\n  leaves: {\n    createParticles: createLeafParticles,\n    renderParticle: renderLeafParticle,\n  },\n  mortar: {\n    createParticles: createMortarParticles,\n    renderParticle: renderMortarParticle,\n  },\n  bokeh: {\n    createParticles: createBokehParticles,\n    renderParticle: renderBokehParticle,\n  },\n  ribbons: {\n    createParticles: createRibbonsParticles,\n    renderParticle: renderRibbonsParticle,\n  },\n  geometric: {\n    createParticles: createGeometricParticles,\n    renderParticle: renderGeometricParticle,\n  },\n};\n","import { AnimationConfig } from './types';\n\nexport const isMobileDevice = (): boolean => {\n  if (typeof window === 'undefined') return false;\n\n  // Check user agent\n  const userAgent =\n    navigator.userAgent ||\n    navigator.vendor ||\n    (window as Window & { opera?: string }).opera ||\n    '';\n  const isMobileUA =\n    /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n      userAgent\n    );\n\n  // Check viewport width\n  const isMobileWidth = window.innerWidth <= 768;\n\n  // Check touch support\n  const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n\n  return isMobileUA || (isMobileWidth && hasTouch);\n};\n\nexport const optimizeConfigForMobile = (\n  config: AnimationConfig\n): AnimationConfig => {\n  if (!isMobileDevice()) return config;\n\n  return {\n    ...config,\n    // Reduce particle count by 40%\n    particleCount: Math.floor((config.particleCount || 50) * 0.6),\n    // Reduce element size by 20%\n    elementSize: Math.floor((config.elementSize || 20) * 0.8),\n    // Reduce lifetime by 20%\n    lifetime: Math.floor((config.lifetime || 150) * 0.8),\n    // Simplify physics\n    physics: {\n      ...config.physics,\n      // Reduce precision for mobile\n      gravity: Math.round((config.physics?.gravity || 0) * 100) / 100,\n      wind: Math.round((config.physics?.wind || 0) * 100) / 100,\n      friction: Math.round((config.physics?.friction || 0.98) * 100) / 100,\n    },\n  };\n};\n\n// Frame skipping for mobile\nexport const shouldSkipFrame = (frameCount: number): boolean => {\n  if (!isMobileDevice()) return false;\n  // Skip every 3rd frame on mobile\n  return frameCount % 3 === 0;\n};\n\n// Reduce visual complexity for mobile\nexport const simplifyVisualEffects = (animationType: string): boolean => {\n  if (!isMobileDevice()) return false;\n  // These animations have heavy visual effects\n  const heavyAnimations = [\n    'fireflies',\n    'galaxy',\n    'aurora',\n    'crystals',\n    'glitch',\n  ];\n  return heavyAnimations.includes(animationType);\n};\n","import { Particle } from './types';\nimport { particlePool, PooledParticle } from './particlePool';\nimport { shouldSkipFrame } from './mobileOptimizations';\nimport { randomInRange } from './utils';\n\nexport interface AnimationInstance {\n  id: string;\n  particles: Particle[];\n  containerElement: HTMLDivElement;\n  renderFunction: (particle: Particle) => React.ReactNode;\n  updateCallback?: (particles: Particle[]) => void;\n  onComplete?: () => void;\n  physics: {\n    gravity: number;\n    friction: number;\n    wind: number;\n  };\n  animationType: string;\n  config?: {\n    effects?: {\n      flutter?: boolean;\n      windDrift?: boolean;\n      wobble?: boolean;\n      twinkle?: boolean;\n    };\n  };\n  frameCount: number;\n  isPaused?: boolean;\n  pausedAt?: number;\n}\n\nclass AnimationManager {\n  private animations: Map<string, AnimationInstance> = new Map();\n  private rafId: number | null = null;\n  private isRunning: boolean = false;\n  private lastFrameTime: number = 0;\n  private frameInterval: number = 1000 / 60; // 60 FPS target\n\n  // Performance metrics\n  private frameCount: number = 0;\n  private fpsUpdateInterval: number = 1000; // Update FPS every second\n  private lastFpsUpdate: number = 0;\n  private currentFps: number = 0;\n\n  constructor() {\n    // Bind methods\n    this.update = this.update.bind(this);\n  }\n\n  addAnimation(animation: AnimationInstance): void {\n    this.animations.set(animation.id, animation);\n\n    // Start the loop if not already running\n    if (!this.isRunning && this.animations.size > 0) {\n      this.start();\n    }\n  }\n\n  removeAnimation(id: string): void {\n    const animation = this.animations.get(id);\n    if (animation) {\n      // Release particles back to pool\n      particlePool.releaseAll(animation.particles as Particle[]);\n\n      // Remove container\n      if (\n        animation.containerElement &&\n        document.body.contains(animation.containerElement)\n      ) {\n        document.body.removeChild(animation.containerElement);\n      }\n\n      this.animations.delete(id);\n    }\n\n    // Stop the loop if no more animations\n    if (this.animations.size === 0) {\n      this.stop();\n    }\n  }\n\n  private start(): void {\n    if (this.isRunning) return;\n\n    this.isRunning = true;\n    this.lastFrameTime = performance.now();\n    this.lastFpsUpdate = this.lastFrameTime;\n    this.frameCount = 0;\n    this.rafId = requestAnimationFrame(this.update);\n  }\n\n  private stop(): void {\n    if (!this.isRunning) return;\n\n    this.isRunning = false;\n    if (this.rafId !== null) {\n      cancelAnimationFrame(this.rafId);\n      this.rafId = null;\n    }\n  }\n\n  private update(currentTime: number): void {\n    // Calculate delta time\n    const deltaTime = currentTime - this.lastFrameTime;\n\n    // Frame rate limiting\n    if (deltaTime < this.frameInterval) {\n      this.rafId = requestAnimationFrame(this.update);\n      return;\n    }\n\n    this.lastFrameTime = currentTime - (deltaTime % this.frameInterval);\n    this.frameCount++;\n\n    // Update FPS counter\n    if (currentTime - this.lastFpsUpdate >= this.fpsUpdateInterval) {\n      this.currentFps = this.frameCount;\n      this.frameCount = 0;\n      this.lastFpsUpdate = currentTime;\n    }\n\n    // Check if tab is visible\n    const isTabVisible = !document.hidden;\n    if (!isTabVisible) {\n      this.rafId = requestAnimationFrame(this.update);\n      return;\n    }\n\n    // Update all animations\n    const completedAnimations: string[] = [];\n\n    this.animations.forEach((animation, id) => {\n      // Skip update if animation is paused\n      if (animation.isPaused) {\n        return;\n      }\n\n      animation.frameCount++;\n      const skipFrame = shouldSkipFrame(animation.frameCount);\n\n      let activeParticles = 0;\n      const newParticles: PooledParticle[] = []; // Collect new particles to add\n\n      // Update particles\n      animation.particles = animation.particles.map((particle) => {\n        if (particle.life <= 0) return particle;\n\n        activeParticles++;\n\n        // Physics update\n        particle.x += particle.vx;\n        particle.y += particle.vy;\n        particle.vy += animation.physics.gravity;\n        particle.vx += animation.physics.wind;\n        particle.vx *= animation.physics.friction;\n        particle.vy *= animation.physics.friction;\n\n        // Update rotation - make sparkles spin more\n        if (animation.animationType === 'sparkles') {\n          particle.rotation += 5; // Constant spin for sparkles\n        } else {\n          particle.rotation += particle.vx * 2;\n        }\n\n        particle.life -= 1.2;\n\n        // Apply animation-specific effects\n        this.applyEffects(particle, animation);\n\n        // Handle mortar explosions\n        this.handleMortarExplosion(particle, animation, newParticles);\n\n        // Update opacity\n        this.updateOpacity(particle, animation);\n\n        return particle;\n      });\n\n      // Add any new particles created during the update (e.g., explosion particles)\n      if (newParticles.length > 0) {\n        animation.particles.push(...newParticles);\n      }\n\n      // Call update callback if provided\n      if (animation.updateCallback && !skipFrame) {\n        animation.updateCallback(animation.particles);\n      }\n\n      // Mark for removal if no active particles\n      if (activeParticles === 0) {\n        completedAnimations.push(id);\n        if (animation.onComplete) {\n          animation.onComplete();\n        }\n      }\n    });\n\n    // Remove completed animations\n    completedAnimations.forEach((id) => this.removeAnimation(id));\n\n    // Continue loop if animations remain\n    if (this.isRunning) {\n      this.rafId = requestAnimationFrame(this.update);\n    }\n  }\n\n  private applyEffects(particle: Particle, animation: AnimationInstance): void {\n    const effects = animation.config?.effects;\n    if (!effects) return;\n\n    const { animationType } = animation;\n\n    // Flutter effect for confetti\n    if (effects.flutter && animationType === 'confetti') {\n      particle.x += Math.sin(particle.life * 0.1) * 0.5;\n      particle.rotation += Math.sin(particle.life * 0.05) * 2;\n    }\n\n    // Wind drift for snow/leaves\n    if (\n      effects.windDrift &&\n      (animationType === 'snow' || animationType === 'leaves')\n    ) {\n      particle.x +=\n        Math.sin(particle.life * 0.05 + particle.id.charCodeAt(0)) * 0.8;\n    }\n\n    // Wobble effect for bubbles\n    if (effects.wobble && animationType === 'bubbles') {\n      particle.x += Math.sin(particle.life * 0.08) * 0.3;\n      particle.y += Math.cos(particle.life * 0.08) * 0.2;\n    }\n  }\n\n  private handleMortarExplosion(\n    particle: Particle,\n    animation: AnimationInstance,\n    newParticles: PooledParticle[]\n  ): void {\n    if (animation.animationType !== 'mortar' || !particle.element) return;\n\n    try {\n      const elementData = JSON.parse(particle.element as string);\n\n      // Handle shell particles\n      if (elementData.isShell && !elementData.hasExploded) {\n        // Create trail particles as the shell rises\n        if (animation.frameCount % 3 === 0) {\n          const trailParticle = particlePool.acquire();\n          Object.assign(trailParticle, {\n            id: `${particle.id}-trail-${Date.now()}`,\n            x: particle.x + randomInRange(-2, 2),\n            y: particle.y + randomInRange(-2, 2),\n            vx: randomInRange(-1, 1),\n            vy: randomInRange(0, 2),\n            life: 30,\n            opacity: 0.8,\n            size: particle.size * 0.7,\n            rotation: 0,\n            color: particle.color,\n            element: JSON.stringify({ isTrail: true }),\n            config: particle.config,\n          });\n          newParticles.push(trailParticle);\n        }\n\n        // Check if it's time to explode based on fixed timer\n        const totalLife = particle.config?.lifetime ?? 200;\n        const flightTime = totalLife - particle.life;\n        const shouldExplode = flightTime >= (elementData.timeToExplode || 25);\n\n        if (shouldExplode) {\n          // Mark as exploded\n          elementData.hasExploded = true;\n          particle.element = JSON.stringify(elementData);\n\n          // Create galaxy-style explosion with fewer particles for performance\n          const isMobile = window.innerWidth < 768;\n          const burstCount = isMobile ? 20 : 30; // Reduced particle count\n          const explosionParticles: PooledParticle[] = [];\n\n          // Galaxy colors for the explosion\n          const galaxyColors = [\n            '#FFFFFF',\n            '#FFF9C4',\n            '#BBDEFB',\n            '#C5CAE9',\n            '#D1C4E9',\n            '#FFE082',\n            '#FFCCBC',\n          ];\n\n          // Create spiral galaxy explosion\n          for (let i = 0; i < burstCount; i++) {\n            const progress = i / burstCount;\n            const spiralAngle = progress * Math.PI * 6; // 3 full rotations\n            const radius = progress * 80; // Explosion radius\n\n            // Add randomness for natural look\n            const angleOffset = randomInRange(-0.4, 0.4);\n            const radiusOffset = randomInRange(-15, 15);\n\n            const finalAngle = spiralAngle + angleOffset;\n            const finalRadius = (radius + radiusOffset) * 0.5; // Smaller explosion\n\n            // Velocity follows spiral tangent\n            const tangentAngle = finalAngle + Math.PI / 2;\n            const speed = 3 * (1 - progress * 0.3); // Outer particles slower\n\n            const burstParticle = particlePool.acquire();\n            Object.assign(burstParticle, {\n              id: `${particle.id}-burst-${i}`,\n              x: particle.x + Math.cos(finalAngle) * finalRadius * 0.1,\n              y: particle.y + Math.sin(finalAngle) * finalRadius * 0.1,\n              vx: Math.cos(tangentAngle) * speed + Math.cos(finalAngle) * 2,\n              vy: Math.sin(tangentAngle) * speed + Math.sin(finalAngle) * 2,\n              life: 120 - progress * 40, // Inner particles live longer\n              opacity: 1,\n              size: randomInRange(2, 5) * (1 - progress * 0.5),\n              rotation: randomInRange(0, 360),\n              color:\n                galaxyColors[Math.floor(Math.random() * galaxyColors.length)],\n              element: JSON.stringify({\n                isBurst: true,\n                isGalaxy: true,\n                twinkle: Math.random() > 0.7,\n              }),\n              config: particle.config,\n            });\n            explosionParticles.push(burstParticle);\n          }\n\n          // Add fewer bright core particles\n          const coreCount = isMobile ? 5 : 8;\n          for (let i = 0; i < coreCount; i++) {\n            const angle = (Math.PI * 2 * i) / coreCount;\n            const coreParticle = particlePool.acquire();\n            Object.assign(coreParticle, {\n              id: `${particle.id}-core-${i}`,\n              x: particle.x,\n              y: particle.y,\n              vx: Math.cos(angle) * randomInRange(1, 2),\n              vy: Math.sin(angle) * randomInRange(1, 2),\n              life: 60, // Shorter life\n              opacity: 1,\n              size: randomInRange(3, 5),\n              rotation: 0,\n              color: '#FFFFFF',\n              element: JSON.stringify({\n                isBurst: true,\n                isCore: true,\n              }),\n              config: particle.config,\n            });\n            explosionParticles.push(coreParticle);\n          }\n\n          // Add center flash\n          const flashParticle = particlePool.acquire();\n          Object.assign(flashParticle, {\n            id: `${particle.id}-flash`,\n            x: particle.x,\n            y: particle.y,\n            vx: 0,\n            vy: 0,\n            life: 20,\n            opacity: 1,\n            size: 30,\n            rotation: 0,\n            color: '#ffffff',\n            element: JSON.stringify({ isBurst: true }),\n            config: particle.config,\n          });\n          explosionParticles.push(flashParticle);\n\n          newParticles.push(...explosionParticles);\n        }\n      }\n    } catch (e) {\n      // Ignore parse errors\n    }\n  }\n\n  private updateOpacity(\n    particle: Particle,\n    animation: AnimationInstance\n  ): void {\n    const { animationType, config } = animation;\n    const effects = config?.effects;\n\n    if (animationType === 'sparkles') {\n      if (particle.life > 70) {\n        particle.opacity = (100 - particle.life) / 30;\n      } else if (particle.life < 30) {\n        particle.opacity = particle.life / 30;\n      }\n      // Twinkle effect\n      if (effects?.twinkle) {\n        particle.opacity *= 0.5 + Math.sin(particle.life * 0.3) * 0.5;\n      }\n    } else if (animationType === 'stars' && effects?.twinkle) {\n      // Twinkle effect for stars\n      particle.opacity =\n        (particle.life / 100) * (0.5 + Math.sin(particle.life * 0.3) * 0.5);\n    } else {\n      particle.opacity = particle.life / 100;\n    }\n  }\n\n  getStats() {\n    return {\n      activeAnimations: this.animations.size,\n      currentFps: this.currentFps,\n      isRunning: this.isRunning,\n      totalParticles: Array.from(this.animations.values()).reduce(\n        (sum, anim) => sum + anim.particles.filter((p) => p.life > 0).length,\n        0\n      ),\n    };\n  }\n\n  // Adjust target frame rate for performance\n  setTargetFPS(fps: number): void {\n    this.frameInterval = 1000 / fps;\n  }\n\n  // Pause a specific animation\n  pauseAnimation(id: string): void {\n    const animation = this.animations.get(id);\n    if (animation && !animation.isPaused) {\n      animation.isPaused = true;\n      animation.pausedAt = performance.now();\n    }\n  }\n\n  // Resume a specific animation\n  resumeAnimation(id: string): void {\n    const animation = this.animations.get(id);\n    if (animation && animation.isPaused) {\n      animation.isPaused = false;\n\n      // Restart RAF loop if needed\n      if (this.animations.size > 0 && !this.isRunning) {\n        this.start();\n      }\n    }\n  }\n\n  // Check if an animation is paused\n  isAnimationPaused(id: string): boolean {\n    const animation = this.animations.get(id);\n    return animation ? !!animation.isPaused : false;\n  }\n\n  // Get animation by ID\n  getAnimation(id: string): AnimationInstance | undefined {\n    return this.animations.get(id);\n  }\n}\n\n// Singleton instance\nexport const animationManager = new AnimationManager();\n","import {\n  useCallback,\n  useRef,\n  useState,\n  useEffect,\n  RefObject,\n  useMemo,\n} from 'react';\nimport React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\nimport {\n  AnimationType,\n  AnimationConfig,\n  Particle,\n  AnimationControls,\n} from './types';\nimport { animations } from './animations';\nimport { createParticleStyle } from './utils';\nimport { optimizeConfigForMobile } from './mobileOptimizations';\nimport { animationManager } from './animationManager';\n\ninterface UseRewardReturn extends AnimationControls {\n  reward: () => Promise<void>;\n  isAnimating: boolean;\n  targetRef?: RefObject<HTMLElement>;\n}\n\n// Overload signatures for better TypeScript support\nexport function useReward(\n  elementId: string,\n  animationType: AnimationType,\n  config?: AnimationConfig\n): UseRewardReturn;\n\nexport function useReward(\n  targetRef: RefObject<HTMLElement>,\n  animationType: AnimationType,\n  config?: AnimationConfig\n): UseRewardReturn;\n\nexport function useReward(\n  elementIdOrRef: string | RefObject<HTMLElement>,\n  animationType: AnimationType,\n  config?: AnimationConfig\n): UseRewardReturn {\n  const [isAnimating, setIsAnimating] = useState(false);\n  const animationIdRef = useRef<string | null>(null);\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const rootRef = useRef<Root | null>(null);\n\n  // Create internal ref if string ID is provided\n  const internalRef = useRef<HTMLElement>(null);\n  const isUsingStringId = typeof elementIdOrRef === 'string';\n  const targetRef = isUsingStringId ? internalRef : elementIdOrRef;\n\n  const animate = useCallback(() => {\n    return new Promise<void>((resolve) => {\n      // Get element from ref or ID\n      let element: HTMLElement | null = null;\n\n      if (isUsingStringId) {\n        // SSR safety check\n        if (typeof document === 'undefined') return;\n        element = document.getElementById(elementIdOrRef as string);\n      } else {\n        element = targetRef.current;\n      }\n\n      if (!element) {\n        // Development warning - will be stripped by minifiers in production\n        console.warn?.(\n          `[Partycles] Element ${isUsingStringId ? `with ID \"${elementIdOrRef}\"` : 'from ref'} not found. ` +\n            'Make sure the element exists when reward() is called.'\n        );\n        resolve();\n        return;\n      }\n\n      const rect = element.getBoundingClientRect();\n      const origin = {\n        x: rect.left + rect.width / 2,\n        y: rect.top + rect.height / 2,\n      };\n\n      const animationHandler = animations[animationType];\n      if (!animationHandler) {\n        console.error(`Animation type \"${animationType}\" not found`);\n        resolve();\n        return;\n      }\n\n      // Apply mobile performance optimizations\n      const optimizedConfig = config\n        ? optimizeConfigForMobile(config)\n        : undefined;\n\n      // Create particles\n      const particles = animationHandler\n        .createParticles(origin, optimizedConfig || {})\n        .map((particle) => ({\n          ...particle,\n          config: optimizedConfig || config, // Store config in particle for render functions\n        }));\n\n      // Create container\n      // SSR safety check\n      if (typeof document === 'undefined') {\n        resolve();\n        return;\n      }\n\n      const container = document.createElement('div');\n      container.style.position = 'fixed';\n      container.style.top = '0';\n      container.style.left = '0';\n      container.style.width = '100%';\n      container.style.height = '100%';\n      container.style.pointerEvents = 'none';\n      container.style.zIndex = '9999';\n      document.body.appendChild(container);\n      containerRef.current = container;\n\n      // Create React root\n      const root = createRoot(container);\n      rootRef.current = root;\n\n      const containerRect = container.getBoundingClientRect();\n\n      // Default gravity varies by animation type\n      const defaultGravity =\n        animationType === 'bubbles'\n          ? -0.1\n          : animationType === 'snow'\n            ? 0.05\n            : 0.35;\n      const gravity =\n        optimizedConfig?.physics?.gravity ??\n        config?.physics?.gravity ??\n        defaultGravity;\n      const friction =\n        optimizedConfig?.physics?.friction ?? config?.physics?.friction ?? 0.98;\n      const wind = optimizedConfig?.physics?.wind ?? config?.physics?.wind ?? 0;\n\n      // Create animation instance ID\n      const animationId = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n      animationIdRef.current = animationId;\n\n      // Update callback to render particles\n      const updateCallback = (updatedParticles: Particle[]) => {\n        if (rootRef.current) {\n          rootRef.current.render(\n            <React.Fragment>\n              {updatedParticles\n                .filter((p) => p.life > 0)\n                .map((particle) => (\n                  <div\n                    key={particle.id}\n                    style={createParticleStyle(particle, containerRect)}\n                  >\n                    {animationHandler.renderParticle(particle)}\n                  </div>\n                ))}\n            </React.Fragment>\n          );\n        }\n      };\n\n      // Add animation to manager\n      animationManager.addAnimation({\n        id: animationId,\n        particles,\n        containerElement: container,\n        renderFunction: animationHandler.renderParticle,\n        updateCallback,\n        onComplete: () => {\n          // Cleanup\n          if (rootRef.current) {\n            rootRef.current.unmount();\n            rootRef.current = null;\n          }\n          containerRef.current = null;\n          animationIdRef.current = null;\n          setIsAnimating(false);\n          resolve();\n        },\n        physics: { gravity, friction, wind },\n        animationType,\n        config: optimizedConfig || config,\n        frameCount: 0,\n      });\n\n      setIsAnimating(true);\n    });\n  }, [elementIdOrRef, animationType, config, isUsingStringId, targetRef]);\n\n  const reward = useCallback(() => {\n    if (!isAnimating) {\n      return animate();\n    }\n    return Promise.resolve();\n  }, [animate, isAnimating]);\n\n  // Imperative control methods\n  const pause = useCallback(() => {\n    if (animationIdRef.current) {\n      animationManager.pauseAnimation(animationIdRef.current);\n    }\n  }, []);\n\n  const resume = useCallback(() => {\n    if (animationIdRef.current) {\n      animationManager.resumeAnimation(animationIdRef.current);\n    }\n  }, []);\n\n  const replay = useCallback(() => {\n    // First clean up existing animation if any\n    if (animationIdRef.current) {\n      animationManager.removeAnimation(animationIdRef.current);\n      animationIdRef.current = null;\n    }\n    setIsAnimating(false);\n\n    // Then start a new animation\n    return animate();\n  }, [animate]);\n\n  const [animationId, setAnimationId] = useState<string | null>(null);\n\n  // Update animation ID in state when it changes\n  useEffect(() => {\n    setAnimationId(animationIdRef.current);\n  }, [isAnimating]);\n\n  const isPaused = useMemo(() => {\n    if (!animationId) return false;\n    return animationManager.isAnimationPaused(animationId);\n  }, [animationId]); // Re-compute when animation ID changes\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (animationIdRef.current) {\n        animationManager.removeAnimation(animationIdRef.current);\n      }\n      if (rootRef.current) {\n        try {\n          rootRef.current.unmount();\n        } catch (e) {\n          // Ignore unmount errors in test environment\n        }\n        rootRef.current = null;\n      }\n      if (\n        containerRef.current &&\n        document.body.contains(containerRef.current)\n      ) {\n        document.body.removeChild(containerRef.current);\n        containerRef.current = null;\n      }\n    };\n  }, []);\n\n  // Return ref only for ref-based API\n  if (!isUsingStringId) {\n    return { reward, isAnimating, targetRef, pause, resume, replay, isPaused };\n  }\n\n  return { reward, isAnimating, pause, resume, replay, isPaused };\n}\n"]}