{"_id":"@casoon/atlas-effects","_rev":"6-264c935f0c0d02105138daff96f671ea","name":"@casoon/atlas-effects","dist-tags":{"latest":"0.2.0"},"versions":{"0.0.1":{"name":"@casoon/atlas-effects","version":"0.0.1","keywords":["effects","animations","javascript","ssr","tree-shaking","ui"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"joern.seidel@casoon.de"},"license":"MIT","_id":"@casoon/atlas-effects@0.0.1","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/atlas#readme","bugs":{"url":"https://github.com/casoon/atlas/issues"},"dist":{"shasum":"e7638bec7c65d21e91e328a88cb79a8d06e8b3a7","tarball":"https://registry.npmjs.org/@casoon/atlas-effects/-/atlas-effects-0.0.1.tgz","fileCount":71,"integrity":"sha512-/1g+idErpQ693Ab7yzIJ15enp/oPmPjTbfSvUppXF1HiIDNc2JT3bokOPA4yy9YOQZRbT1Xj+Mpk9MTeQsGVoQ==","signatures":[{"sig":"MEQCIBXQ/KBj57Gyow5KywSuwGCIguwNp1b+A3X2uR0VF5+mAiBu/eRXBhnp4vZEqlIqYnSCpauvtb/R+qyaDo7Q3xi9GA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105571},"type":"module","_from":"file:casoon-atlas-effects-0.0.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./glow":{"types":"./dist/glow.d.ts","import":"./dist/glow.js"},"./orbs":{"types":"./dist/orbs.d.ts","import":"./dist/orbs.js"},"./tilt":{"types":"./dist/tilt.d.ts","import":"./dist/tilt.js"},"./wave":{"types":"./dist/wave.d.ts","import":"./dist/wave.js"},"./ripple":{"types":"./dist/ripple.d.ts","import":"./dist/ripple.js"},"./magnetic":{"types":"./dist/magnetic.d.ts","import":"./dist/magnetic.js"},"./morphing":{"types":"./dist/morphing.d.ts","import":"./dist/morphing.js"},"./parallax":{"types":"./dist/parallax.d.ts","import":"./dist/parallax.js"},"./particles":{"types":"./dist/particles.d.ts","import":"./dist/particles.js"},"./typewriter":{"types":"./dist/typewriter.d.ts","import":"./dist/typewriter.js"},"./cursor-follow":{"types":"./dist/cursor-follow.d.ts","import":"./dist/cursor-follow.js"},"./glass-effects":{"types":"./dist/glass-effects.d.ts","import":"./dist/glass-effects.js"},"./scroll-reveal":{"types":"./dist/scroll-reveal.d.ts","import":"./dist/scroll-reveal.js"}},"funding":{"url":"https://www.casoon.de","type":"individual"},"scripts":{"build":"tsup","clean":"rimraf dist"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"_resolved":"/private/var/folders/rg/9_ywnhcd7bn1vkqxmsqkqb580000gn/T/0ce38ebf1b8aff30086c4449d2db7667/casoon-atlas-effects-0.0.1.tgz","_integrity":"sha512-/1g+idErpQ693Ab7yzIJ15enp/oPmPjTbfSvUppXF1HiIDNc2JT3bokOPA4yy9YOQZRbT1Xj+Mpk9MTeQsGVoQ==","repository":{"url":"git+https://github.com/casoon/atlas.git","type":"git","directory":"packages/effects"},"_npmVersion":"11.4.2","description":"13+ interactive JavaScript effects - SSR-safe, tree-shakeable, framework-agnostic","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/atlas-effects_0.0.1_1758447051532_0.16026785512636166","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nicht mehr gepflegt – Repo archiviert, kein Nachfolger"},"0.1.0":{"name":"@casoon/atlas-effects","version":"0.1.0","keywords":["effects","animations","javascript","ssr","tree-shaking","ui"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"joern.seidel@casoon.de"},"license":"MIT","_id":"@casoon/atlas-effects@0.1.0","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/atlas#readme","bugs":{"url":"https://github.com/casoon/atlas/issues"},"dist":{"shasum":"46318b09244a163cd60803b6586bdefdc48ca9ff","tarball":"https://registry.npmjs.org/@casoon/atlas-effects/-/atlas-effects-0.1.0.tgz","fileCount":79,"integrity":"sha512-f7k0cVSBD7fyJdOrIhzt0r3XaaIEk+1QcSgAwznRdPL6ILABkll3F4KfD+4V6tO1iuPTmF5RdOmHJAy/Vkk1pA==","signatures":[{"sig":"MEUCIFQ86LpRxRt0etOXo+wKN+hQCKFWfLDzq2brle7YoVsXAiEAh+tw0D3NJ/Zzu9VUO9DK6MpYNAikF21i3ElLPrKBfmE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252624},"type":"module","_from":"file:casoon-atlas-effects-0.1.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./glow":{"types":"./dist/glow.d.ts","import":"./dist/glow.js"},"./orbs":{"types":"./dist/orbs.d.ts","import":"./dist/orbs.js"},"./tilt":{"types":"./dist/tilt.d.ts","import":"./dist/tilt.js"},"./wave":{"types":"./dist/wave.d.ts","import":"./dist/wave.js"},"./ripple":{"types":"./dist/ripple.d.ts","import":"./dist/ripple.js"},"./magnetic":{"types":"./dist/magnetic.d.ts","import":"./dist/magnetic.js"},"./morphing":{"types":"./dist/morphing.d.ts","import":"./dist/morphing.js"},"./parallax":{"types":"./dist/parallax.d.ts","import":"./dist/parallax.js"},"./particles":{"types":"./dist/particles.d.ts","import":"./dist/particles.js"},"./typewriter":{"types":"./dist/typewriter.d.ts","import":"./dist/typewriter.js"},"./cursor-follow":{"types":"./dist/cursor-follow.d.ts","import":"./dist/cursor-follow.js"},"./glass-effects":{"types":"./dist/glass-effects.d.ts","import":"./dist/glass-effects.js"},"./scroll-reveal":{"types":"./dist/scroll-reveal.d.ts","import":"./dist/scroll-reveal.js"}},"funding":{"url":"https://www.casoon.de","type":"individual"},"scripts":{"build":"tsup","clean":"rimraf dist"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"_resolved":"/private/var/folders/vf/4rz59k517hq3lxyy__wcxl_m0000gn/T/b4f050cf8713f17feaaff3abafd9e897/casoon-atlas-effects-0.1.0.tgz","_integrity":"sha512-f7k0cVSBD7fyJdOrIhzt0r3XaaIEk+1QcSgAwznRdPL6ILABkll3F4KfD+4V6tO1iuPTmF5RdOmHJAy/Vkk1pA==","repository":{"url":"git+https://github.com/casoon/atlas.git","type":"git","directory":"packages/effects"},"_npmVersion":"11.6.1","description":"13+ interactive JavaScript effects - SSR-safe, tree-shakeable, framework-agnostic","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/atlas-effects_0.1.0_1763322069147_0.6125414645025113","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nicht mehr gepflegt – Repo archiviert, kein Nachfolger"},"0.1.1":{"name":"@casoon/atlas-effects","version":"0.1.1","keywords":["effects","animations","javascript","ssr","tree-shaking","ui"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"joern.seidel@casoon.de"},"license":"MIT","_id":"@casoon/atlas-effects@0.1.1","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/atlas#readme","bugs":{"url":"https://github.com/casoon/atlas/issues"},"dist":{"shasum":"52995cecb019c798607583d043b1beb6cfbe5fdc","tarball":"https://registry.npmjs.org/@casoon/atlas-effects/-/atlas-effects-0.1.1.tgz","fileCount":78,"integrity":"sha512-jfKTuFz137AdRTuneXQ37D0ZsgrkkJ11igzqzqxmvLZE+gqkdeQTStOecCJyEEmT4kCNY4v+kv8wczOdz3XJgw==","signatures":[{"sig":"MEUCIFgU+DWXPcpxIzFC3OdLgst/lt45fEEuaBgYSskX4kjeAiEAuhieA501vGkMW3mOHpXeqbeIEVtVfPRmcWgcfFKL0eE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252066},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./glow":{"types":"./dist/glow.d.ts","import":"./dist/glow.js"},"./orbs":{"types":"./dist/orbs.d.ts","import":"./dist/orbs.js"},"./tilt":{"types":"./dist/tilt.d.ts","import":"./dist/tilt.js"},"./wave":{"types":"./dist/wave.d.ts","import":"./dist/wave.js"},"./ripple":{"types":"./dist/ripple.d.ts","import":"./dist/ripple.js"},"./magnetic":{"types":"./dist/magnetic.d.ts","import":"./dist/magnetic.js"},"./morphing":{"types":"./dist/morphing.d.ts","import":"./dist/morphing.js"},"./parallax":{"types":"./dist/parallax.d.ts","import":"./dist/parallax.js"},"./particles":{"types":"./dist/particles.d.ts","import":"./dist/particles.js"},"./typewriter":{"types":"./dist/typewriter.d.ts","import":"./dist/typewriter.js"},"./cursor-follow":{"types":"./dist/cursor-follow.d.ts","import":"./dist/cursor-follow.js"},"./glass-effects":{"types":"./dist/glass-effects.d.ts","import":"./dist/glass-effects.js"},"./scroll-reveal":{"types":"./dist/scroll-reveal.d.ts","import":"./dist/scroll-reveal.js"}},"funding":{"url":"https://www.casoon.de","type":"individual"},"gitHead":"382eadc50c72d2576f7733933cfb06c2876bca9f","scripts":{"build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"repository":{"url":"git+https://github.com/casoon/atlas.git","type":"git","directory":"packages/effects"},"_npmVersion":"11.6.2","description":"13+ interactive JavaScript effects - SSR-safe, tree-shakeable, framework-agnostic","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/atlas-effects_0.1.1_1765481191328_0.31906187074420034","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nicht mehr gepflegt – Repo archiviert, kein Nachfolger"},"0.1.2":{"name":"@casoon/atlas-effects","version":"0.1.2","keywords":["effects","animations","javascript","ssr","tree-shaking","ui"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"joern.seidel@casoon.de"},"license":"MIT","_id":"@casoon/atlas-effects@0.1.2","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/atlas#readme","bugs":{"url":"https://github.com/casoon/atlas/issues"},"dist":{"shasum":"66d71f742d1fcc37a397dde037936187a8abdbc8","tarball":"https://registry.npmjs.org/@casoon/atlas-effects/-/atlas-effects-0.1.2.tgz","fileCount":79,"integrity":"sha512-4ZeglEan7HGpjxXVM/VJHPK6aCYr3DoFOurrdx2097n6BlvwWdX+nFrR0bqGSKHRKs0NOL4Ug4aY585ulTlcKw==","signatures":[{"sig":"MEQCIAw6cZHbT6hmDikzOBwN7ozfi4M+UmJl9ftGGDOi6qIiAiBayQhOBmpo1JewuvABnXGKSvuUo/sMkdBFyqIRG2OwSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253142},"type":"module","_from":"file:casoon-atlas-effects-0.1.2.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./glow":{"types":"./dist/glow.d.ts","import":"./dist/glow.js"},"./orbs":{"types":"./dist/orbs.d.ts","import":"./dist/orbs.js"},"./tilt":{"types":"./dist/tilt.d.ts","import":"./dist/tilt.js"},"./wave":{"types":"./dist/wave.d.ts","import":"./dist/wave.js"},"./ripple":{"types":"./dist/ripple.d.ts","import":"./dist/ripple.js"},"./magnetic":{"types":"./dist/magnetic.d.ts","import":"./dist/magnetic.js"},"./morphing":{"types":"./dist/morphing.d.ts","import":"./dist/morphing.js"},"./parallax":{"types":"./dist/parallax.d.ts","import":"./dist/parallax.js"},"./particles":{"types":"./dist/particles.d.ts","import":"./dist/particles.js"},"./typewriter":{"types":"./dist/typewriter.d.ts","import":"./dist/typewriter.js"},"./cursor-follow":{"types":"./dist/cursor-follow.d.ts","import":"./dist/cursor-follow.js"},"./glass-effects":{"types":"./dist/glass-effects.d.ts","import":"./dist/glass-effects.js"},"./scroll-reveal":{"types":"./dist/scroll-reveal.d.ts","import":"./dist/scroll-reveal.js"}},"funding":{"url":"https://www.casoon.de","type":"individual"},"scripts":{"build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"_resolved":"/private/var/folders/vf/4rz59k517hq3lxyy__wcxl_m0000gn/T/b2aea0f843653d982bdce0422b20259c/casoon-atlas-effects-0.1.2.tgz","_integrity":"sha512-4ZeglEan7HGpjxXVM/VJHPK6aCYr3DoFOurrdx2097n6BlvwWdX+nFrR0bqGSKHRKs0NOL4Ug4aY585ulTlcKw==","repository":{"url":"git+https://github.com/casoon/atlas.git","type":"git","directory":"packages/effects"},"_npmVersion":"11.6.2","description":"13+ interactive JavaScript effects - SSR-safe, tree-shakeable, framework-agnostic","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/atlas-effects_0.1.2_1765483944704_0.04862481019080067","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nicht mehr gepflegt – Repo archiviert, kein Nachfolger"},"0.2.0":{"name":"@casoon/atlas-effects","version":"0.2.0","keywords":["effects","animations","javascript","ssr","tree-shaking","ui"],"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"joern.seidel@casoon.de"},"license":"MIT","_id":"@casoon/atlas-effects@0.2.0","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"homepage":"https://github.com/casoon/atlas#readme","bugs":{"url":"https://github.com/casoon/atlas/issues"},"dist":{"shasum":"db95bc687e8f585020e1adc17796ef97f135f7f0","tarball":"https://registry.npmjs.org/@casoon/atlas-effects/-/atlas-effects-0.2.0.tgz","fileCount":79,"integrity":"sha512-slqXozImPsF8AqlabhMf087t+8nizxjEio1PPXYloE1FrReJT54wU1E7uqDZugyXHQZz0GDgb5jCswMduEYbTA==","signatures":[{"sig":"MEUCIQCfbifBXmuRqc+DD3B0s7V8gTiVx2LcdA0OhcuZPyN2hQIgG+u3t3poFppH4iJvT8BoMEGJ7uUPDDTPJZgR31eMdPU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":539595},"type":"module","_from":"file:casoon-atlas-effects-0.2.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./glow":{"types":"./dist/glow.d.ts","import":"./dist/glow.js"},"./orbs":{"types":"./dist/orbs.d.ts","import":"./dist/orbs.js"},"./tilt":{"types":"./dist/tilt.d.ts","import":"./dist/tilt.js"},"./wave":{"types":"./dist/wave.d.ts","import":"./dist/wave.js"},"./ripple":{"types":"./dist/ripple.d.ts","import":"./dist/ripple.js"},"./magnetic":{"types":"./dist/magnetic.d.ts","import":"./dist/magnetic.js"},"./morphing":{"types":"./dist/morphing.d.ts","import":"./dist/morphing.js"},"./parallax":{"types":"./dist/parallax.d.ts","import":"./dist/parallax.js"},"./particles":{"types":"./dist/particles.d.ts","import":"./dist/particles.js"},"./typewriter":{"types":"./dist/typewriter.d.ts","import":"./dist/typewriter.js"},"./cursor-follow":{"types":"./dist/cursor-follow.d.ts","import":"./dist/cursor-follow.js"},"./glass-effects":{"types":"./dist/glass-effects.d.ts","import":"./dist/glass-effects.js"},"./scroll-reveal":{"types":"./dist/scroll-reveal.d.ts","import":"./dist/scroll-reveal.js"}},"funding":{"url":"https://www.casoon.de","type":"individual"},"scripts":{"build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"jseidel","email":"joern.seidel@casoon.de"},"_resolved":"/private/var/folders/vf/4rz59k517hq3lxyy__wcxl_m0000gn/T/51c11684fb8771d32313b919eb51c22e/casoon-atlas-effects-0.2.0.tgz","_integrity":"sha512-slqXozImPsF8AqlabhMf087t+8nizxjEio1PPXYloE1FrReJT54wU1E7uqDZugyXHQZz0GDgb5jCswMduEYbTA==","repository":{"url":"git+https://github.com/casoon/atlas.git","type":"git","directory":"packages/effects"},"_npmVersion":"11.6.2","description":"13+ interactive JavaScript effects - SSR-safe, tree-shakeable, framework-agnostic","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/atlas-effects_0.2.0_1766476517276_0.375469601977777","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Nicht mehr gepflegt – Repo archiviert, kein Nachfolger"}},"time":{"created":"2025-09-21T09:30:51.357Z","modified":"2026-09-16T06:09:14.569Z","0.0.1":"2025-09-21T09:30:51.717Z","0.1.0":"2025-11-16T19:41:09.330Z","0.1.1":"2025-12-11T19:26:31.490Z","0.1.2":"2025-12-11T20:12:24.891Z","0.2.0":"2025-12-23T07:55:17.424Z"},"bugs":{"url":"https://github.com/casoon/atlas/issues"},"author":{"url":"https://www.casoon.de","name":"Jörn Seidel","email":"joern.seidel@casoon.de"},"license":"MIT","homepage":"https://github.com/casoon/atlas#readme","keywords":["effects","animations","javascript","ssr","tree-shaking","ui"],"repository":{"url":"git+https://github.com/casoon/atlas.git","type":"git","directory":"packages/effects"},"description":"13+ interactive JavaScript effects - SSR-safe, tree-shakeable, framework-agnostic","maintainers":[{"name":"jseidel","email":"joern.seidel@casoon.de"}],"readme":"# @casoon/atlas-effects\n\n**Modern, SSR-safe JavaScript effects for interactive UIs**\n\nA collection of 13+ interactive JavaScript effects designed for modern web applications. All effects are SSR-compatible, framework-agnostic, and highly customizable.\n\n## Features\n\n- ✅ **SSR-Safe** - No DOM access at module level\n- ✅ **Framework Agnostic** - Works with React, Vue, Svelte, Astro, vanilla JS\n- ✅ **Tree Shakeable** - Import only the effects you need\n- ✅ **TypeScript Native** - Full TypeScript support with detailed types\n- ✅ **Performance Optimized** - Efficient animations and cleanup\n- ✅ **Highly Customizable** - Extensive configuration options\n- ✅ **Accessibility Ready** - Respects user preferences\n\n## Installation\n\n```bash\nnpm install @casoon/atlas-effects\n```\n\n## Quick Start\n\n```typescript\nimport { ripple, tilt, particles } from '@casoon/atlas-effects';\n\n// Add ripple effect to buttons\nconst cleanup1 = ripple('.btn', { \n  strength: 0.8, \n  color: '#3b82f6' \n});\n\n// Add 3D tilt to cards\nconst cleanup2 = tilt('.card', { \n  intensity: 15, \n  glareEffect: true \n});\n\n// Add particle system\nconst cleanup3 = particles('#hero', { \n  count: 30, \n  interactive: true \n});\n\n// Cleanup when needed\ncleanup1();\ncleanup2();\ncleanup3();\n```\n\n## Available Effects\n\n### Core Effects\n\n#### Ripple\nInteractive click/touch ripple animations\n```typescript\nimport { ripple } from '@casoon/atlas-effects/ripple';\n\nconst dispose = ripple('#button', {\n  strength: 0.5,        // Ripple size multiplier\n  duration: 600,        // Animation duration in ms\n  color: 'rgba(255, 255, 255, 0.3)'\n});\n```\n\n#### Orbs\nFloating animated orb particles with physics\n```typescript\nimport { orbs } from '@casoon/atlas-effects/orbs';\n\nconst dispose = orbs('#container', {\n  count: 5,             // Number of orbs\n  minSize: 20,          // Minimum orb size\n  maxSize: 60,          // Maximum orb size\n  speed: 0.5,           // Movement speed\n  color: 'rgba(255, 255, 255, 0.1)'\n});\n```\n\n#### Parallax\nScroll-based parallax movement effects\n```typescript\nimport { parallax } from '@casoon/atlas-effects/parallax';\n\nconst dispose = parallax('#element', {\n  speed: 0.5,           // Parallax speed\n  direction: 'vertical', // 'vertical', 'horizontal', or 'both'\n  offset: 0             // Initial offset\n});\n```\n\n### Advanced Effects\n\n#### Glass Effects\nInteractive glassmorphism with dynamic blur\n```typescript\nimport { glassEffects } from '@casoon/atlas-effects/glass-effects';\n\nconst dispose = glassEffects('#element', {\n  intensity: 0.15,      // Background opacity\n  blurAmount: 16,       // Blur intensity\n  animated: true,       // Animated pulse\n  interactiveBlur: true, // Mouse interaction\n  color: 'rgba(255, 255, 255, 0.1)'\n});\n```\n\n#### Scroll Reveal\nElements animate in as they enter viewport\n```typescript\nimport { scrollReveal } from '@casoon/atlas-effects/scroll-reveal';\n\nconst dispose = scrollReveal('#element', {\n  distance: '20px',     // Animation distance\n  duration: 800,        // Animation duration\n  delay: 0,             // Delay before animation\n  origin: 'bottom',     // Animation origin\n  scale: 0.95,          // Initial scale\n  once: true            // Animate only once\n});\n```\n\n#### Particles\nConfigurable particle systems with connections\n```typescript\nimport { particles } from '@casoon/atlas-effects/particles';\n\nconst dispose = particles('#container', {\n  count: 30,            // Number of particles\n  size: [2, 8],         // Size range [min, max]\n  speed: [0.1, 0.5],    // Speed range [min, max]\n  color: ['#3b82f6', '#8b5cf6'], // Color array\n  interactive: true,    // Mouse interaction\n  connectLines: true,   // Connect nearby particles\n  maxDistance: 100      // Connection distance\n});\n```\n\n### Interactive Effects\n\n#### Cursor Follow\nElements that follow mouse movement\n```typescript\nimport { cursorFollow } from '@casoon/atlas-effects/cursor-follow';\n\nconst dispose = cursorFollow('#element', {\n  speed: 0.1,           // Follow speed\n  offset: { x: 10, y: -10 }, // Cursor offset\n  magnetic: false,      // Magnetic attraction\n  magneticThreshold: 100 // Magnetic range\n});\n```\n\n#### Tilt\n3D tilt effect with realistic physics and glare\n```typescript\nimport { tilt } from '@casoon/atlas-effects/tilt';\n\nconst dispose = tilt('#element', {\n  intensity: 20,        // Tilt intensity\n  scale: 1.05,          // Hover scale\n  perspective: 1000,    // 3D perspective\n  speed: 300,           // Animation speed\n  glareEffect: true     // Enable glare overlay\n});\n```\n\n#### Magnetic\nElements attracted to cursor with magnetic fields\n```typescript\nimport { magnetic } from '@casoon/atlas-effects/magnetic';\n\nconst dispose = magnetic('#element', {\n  strength: 0.3,        // Magnetic force\n  threshold: 100,       // Activation distance\n  returnSpeed: 0.1      // Return animation speed\n});\n```\n\n### Visual Effects\n\n#### Glow\nDynamic glow and lighting effects\n```typescript\nimport { glow } from '@casoon/atlas-effects/glow';\n\nconst dispose = glow('#element', {\n  color: '#3b82f6',     // Glow color\n  intensity: 0.5,       // Glow intensity\n  size: 20,             // Glow size\n  animated: true,       // Animated pulse\n  interactive: true     // Hover interaction\n});\n```\n\n#### Morphing\nShape and border-radius morphing animations\n```typescript\nimport { morphing } from '@casoon/atlas-effects/morphing';\n\nconst dispose = morphing('#element', {\n  shapes: ['50%', '0%', '25%', '50%'], // Shape sequence\n  duration: 2000,       // Animation duration\n  autoPlay: true,       // Auto-start animation\n  loop: true            // Loop animation\n});\n```\n\n#### Wave\nSine wave movement animations\n```typescript\nimport { wave } from '@casoon/atlas-effects/wave';\n\nconst dispose = wave('#element', {\n  amplitude: 10,        // Wave amplitude\n  frequency: 0.02,      // Wave frequency\n  speed: 0.05,          // Animation speed\n  direction: 'horizontal' // 'horizontal' or 'vertical'\n});\n```\n\n#### Typewriter\nAnimated text typing with cursor\n```typescript\nimport { typewriter } from '@casoon/atlas-effects/typewriter';\n\nconst dispose = typewriter('#element', {\n  texts: ['Hello!', 'World!'], // Text array\n  speed: 100,           // Typing speed\n  deleteSpeed: 50,      // Delete speed\n  pause: 1000,          // Pause between texts\n  loop: true,           // Loop through texts\n  cursor: true,         // Show cursor\n  cursorChar: '|'       // Cursor character\n});\n```\n\n## Framework Integration\n\n### React\n```typescript\nimport { useEffect, useRef } from 'react';\nimport { ripple } from '@casoon/atlas-effects';\n\nfunction MyComponent() {\n  const buttonRef = useRef<HTMLButtonElement>(null);\n\n  useEffect(() => {\n    if (buttonRef.current) {\n      const dispose = ripple(buttonRef.current, { strength: 0.8 });\n      return dispose; // Cleanup on unmount\n    }\n  }, []);\n\n  return <button ref={buttonRef}>Click me</button>;\n}\n```\n\n### Vue 3\n```vue\n<template>\n  <button ref=\"buttonRef\">Click me</button>\n</template>\n\n<script setup>\nimport { onMounted, onUnmounted, ref } from 'vue';\nimport { ripple } from '@casoon/atlas-effects';\n\nconst buttonRef = ref(null);\nlet dispose;\n\nonMounted(() => {\n  if (buttonRef.value) {\n    dispose = ripple(buttonRef.value, { strength: 0.8 });\n  }\n});\n\nonUnmounted(() => {\n  dispose?.();\n});\n</script>\n```\n\n### Svelte\n```svelte\n<script>\n  import { onMount } from 'svelte';\n  import { ripple } from '@casoon/atlas-effects';\n  \n  let buttonRef;\n\n  onMount(() => {\n    const dispose = ripple(buttonRef, { strength: 0.8 });\n    return dispose; // Cleanup on destroy\n  });\n</script>\n\n<button bind:this={buttonRef}>Click me</button>\n```\n\n### Astro\n```astro\n---\nimport { ripple } from '@casoon/atlas-effects';\n---\n\n<button id=\"my-button\">Click me</button>\n\n<script>\n  import { ripple } from '@casoon/atlas-effects';\n  \n  // Client-side only\n  if (typeof window !== 'undefined') {\n    const dispose = ripple('#my-button', { strength: 0.8 });\n  }\n</script>\n```\n\n## Advanced Usage\n\n### Effect Chaining\n```typescript\nimport { ripple, tilt, glow } from '@casoon/atlas-effects';\n\n// Combine multiple effects\nconst element = document.querySelector('#my-element');\nconst cleanups = [\n  ripple(element, { strength: 0.6 }),\n  tilt(element, { intensity: 10 }),\n  glow(element, { color: '#3b82f6', animated: false })\n];\n\n// Cleanup all effects\nconst cleanupAll = () => cleanups.forEach(fn => fn());\n```\n\n### Conditional Effects\n```typescript\nimport { tilt } from '@casoon/atlas-effects';\n\n// Only add effects on non-touch devices\nconst addTiltEffect = () => {\n  if (window.matchMedia('(hover: hover)').matches) {\n    return tilt('.card', { intensity: 15 });\n  }\n  return () => {}; // No-op cleanup\n};\n\nconst dispose = addTiltEffect();\n```\n\n### Dynamic Configuration\n```typescript\nimport { particles } from '@casoon/atlas-effects';\n\nconst configs = {\n  subtle: { count: 10, speed: [0.1, 0.2] },\n  normal: { count: 20, speed: [0.2, 0.4] },\n  intense: { count: 40, speed: [0.4, 0.8] }\n};\n\nlet currentEffect;\nconst changeIntensity = (level) => {\n  currentEffect?.(); // Cleanup current\n  currentEffect = particles('#bg', configs[level]);\n};\n```\n\n## Performance Guidelines\n\n### Optimization Tips\n1. **Cleanup Effects**: Always call the returned cleanup function\n2. **Selective Initialization**: Only initialize effects when needed\n3. **Throttle/Debounce**: Use throttling for resize/scroll events\n4. **Prefer CSS**: Use CSS animations when possible\n\n### Memory Management\n```typescript\n// Good: Store and cleanup effects\nconst effects = new Map();\n\nconst addEffect = (element, type, options) => {\n  const key = `${element.id}-${type}`;\n  const dispose = effectFunctions[type](element, options);\n  effects.set(key, dispose);\n};\n\nconst removeEffect = (element, type) => {\n  const key = `${element.id}-${type}`;\n  const dispose = effects.get(key);\n  if (dispose) {\n    dispose();\n    effects.delete(key);\n  }\n};\n\n// Cleanup all effects on page unload\nwindow.addEventListener('beforeunload', () => {\n  effects.forEach(dispose => dispose());\n  effects.clear();\n});\n```\n\n## Browser Support\n\n- **Modern Browsers**: Full support (Chrome 88+, Firefox 94+, Safari 14+)\n- **Internet Explorer**: Not supported (uses modern JavaScript features)\n- **Mobile**: Full support with touch event handling\n\n## Performance\n\n- **Bundle Size**: ~15KB minified and gzipped\n- **Tree Shaking**: Import only used effects\n- **Runtime**: Efficient RAF-based animations\n- **Memory**: Automatic cleanup prevents memory leaks\n\n## Accessibility\n\nAll effects respect user preferences:\n\n```css\n/* Effects are disabled when user prefers reduced motion */\n@media (prefers-reduced-motion: reduce) {\n  /* Effects automatically adapt or disable */\n}\n```\n\n## Migration Guide\n\n### From Custom Animation Libraries\n```typescript\n// Before (custom solution)\nconst myRipple = (element) => {\n  // Custom ripple implementation...\n};\n\n// After (CASOON Effects)\nimport { ripple } from '@casoon/effects';\nconst dispose = ripple(element, options);\n```\n\n### Version Updates\nEffects maintain backward compatibility within major versions. See [CHANGELOG.md](./CHANGELOG.md) for breaking changes.\n\n## Contributing\n\nSee the main [CASOON Atlas README](../../README.md) for contribution guidelines.\n\n## License\n\nMIT","readmeFilename":"README.md"}