{"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/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","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","_e","_f","_g","_h","spinSpeed","currentRotation","scaleX","petalColors","createPetalParticles","renderPetalParticle","spiralPhase","spiralX","wobble","auroraColors","createAuroraParticles","offset","renderAuroraParticle","wave","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","twinkle","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","animations","isMobileDevice","userAgent","isMobileUA","isMobileWidth","hasTouch","optimizeConfigForMobile","__spreadProps","__spreadValues","shouldSkipFrame","frameCount","AnimationManager","animation","id","currentTime","deltaTime","completedAnimations","skipFrame","activeParticles","effects","animationType","sum","anim","fps","animationManager","useReward","elementIdOrRef","isAnimating","setIsAnimating","useState","animationIdRef","useRef","containerRef","rootRef","internalRef","isUsingStringId","targetRef","animate","useCallback","resolve","_i","_j","_k","_l","_m","element","rect","animationHandler","optimizedConfig","container","root","createRoot","defaultGravity","gravity","friction","wind","animationId","updateCallback","updatedParticles","reward","pause","resume","replay","isPaused","useMemo","useEffect"],"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\ninterface PooledParticle extends Particle {\n  _pooled?: boolean;\n}\n\nclass 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(count: number, factory: (index: number) => Partial<Particle>): 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}","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 & { config?: AnimationConfig };\n  const flutterEffect = particleWithEffects.config?.effects?.flutter;\n  \n  // Apply flutter transform if enabled\n  const flutterTransform = 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: `${particle.size}px`,\n        height: `${particle.size * 0.6}px`,\n        backgroundColor: particle.color,\n        borderRadius: '3px',\n        boxShadow: '0 2px 4px rgba(0,0,0,0.2)',\n        transform: flutterTransform,\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 = (particle: Particle): React.ReactNode => {\n  const scale = particle.opacity;\n\n  return (\n    <svg\n      key={particle.id}\n      width={particle.size}\n      height={particle.size}\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      }}\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={particle.size * pulse}\n      height={particle.size * pulse}\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        transition: 'width 0.1s ease-out, height 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';\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: `${particle.size}px`,\n        height: `${particle.size}px`,\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: `${particle.size}px`,\n        height: `${particle.size}px`,\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 = (particle: Particle): React.ReactNode => {\n  return (\n    <svg\n      key={particle.id}\n      width={particle.size}\n      height={particle.size}\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      }}\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: `${particle.size}px`,\n        height: `${particle.size}px`,\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 = particle.rotation + (120 - particle.life) * spinSpeed;\n\n  // 3D effect: scale X based on rotation to simulate perspective\n  const scaleX = particle.config?.effects?.spin3D\n    ? Math.abs(Math.cos((currentRotation * Math.PI) / 180))\n    : 1;\n\n  return (\n    <div\n      key={particle.id}\n      style={{\n        width: `${particle.size}px`,\n        height: `${particle.size}px`,\n        background: `radial-gradient(ellipse at 30% 30%, ${particle.color}, #B8860B)`,\n        borderRadius: '50%',\n        transform: particle.config?.effects?.spin3D\n          ? `rotateY(${currentRotation}deg) scaleX(${scaleX})`\n          : `rotate(${currentRotation}deg)`,\n        transformStyle: 'preserve-3d',\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        backfaceVisibility: '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: particle.config?.effects?.spin3D && scaleX < 0.3 ? 0 : 1,\n          transition: 'opacity 0.1s',\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: `${particle.size}px`,\n        height: `${particle.size * 1.2}px`,\n        position: 'relative',\n        transform: `translateX(${spiralX}px) rotate(${particle.rotation + 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 = 15,\n    spread = 200,\n    startVelocity = 3,\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(-1, 1),\n      vy: -startVelocity,\n      life: config.lifetime || 250,\n      opacity: 0,\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 flowing wave motion\n  const wave = Math.sin(particle.life * 0.05) * 20;\n  const fadeIn = Math.min(1, (250 - particle.life) / 50);\n  const fadeOut = particle.life / 250;\n  const opacity = Math.min(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) rotate(${particle.rotation}deg)`,\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: `${particle.size}px`,\n        height: `${particle.size * 1.2}px`,\n        position: 'relative',\n        transform: `\n          translateX(${sway}px) \n          translateY(${bob}px)\n          rotate(${particle.rotation + 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';\nimport { createPooledParticles } from '../particlePool';\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';\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';\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: `${particle.size}px`,\n        height: `${particle.size}px`,\n        position: 'relative',\n        transform: `translateX(${swayX}px) rotate(${rotation}deg)`,\n      }}\n    >\n      <svg\n        width={particle.size}\n        height={particle.size}\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 { 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';\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};\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 } from './particlePool';\nimport { shouldSkipFrame } from './mobileOptimizations';\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?: any;\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 any);\n      \n      // Remove container\n      if (animation.containerElement && document.body.contains(animation.containerElement)) {\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      \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        particle.rotation += particle.vx * 2;\n        particle.life -= 1.2;\n        \n        // Apply animation-specific effects\n        this.applyEffects(particle, animation);\n        \n        // Update opacity\n        this.updateOpacity(particle, animation);\n        \n        return particle;\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 (effects.windDrift && (animationType === 'snow' || animationType === 'leaves')) {\n      particle.x += 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 updateOpacity(particle: Particle, animation: AnimationInstance): 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 = (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();","import { useCallback, useRef, useState, useEffect, RefObject, useMemo } from 'react';\nimport React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\nimport { AnimationType, AnimationConfig, Particle, AnimationControls } 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 = optimizedConfig?.physics?.gravity ?? config?.physics?.gravity ?? defaultGravity;\n    const friction = 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 isPaused = useMemo(() => {\n    if (!animationIdRef.current) return false;\n    return animationManager.isAnimationPaused(animationIdRef.current);\n  }, [isAnimating]); // Re-compute when animation state 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        rootRef.current.unmount();\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"]}