{"name":"Hyperiux Vault","url":"https://vault.hyperiux.com/ai-components","site":"https://vault.hyperiux.com","description":"Hyperiux Vault is a library of production-ready interaction effects for React and Next.js: scroll systems, text animations, cursor effects, page transitions, WebGL scenes, carousels, buttons, navigation, backgrounds and loaders. Every effect installs as editable source code with the hyperiux CLI.","company":"Hyperiux Immersion Labs Private Limited","totals":{"effects":151,"free":56,"pro":95,"categories":11,"templates":4},"requirements":[{"name":"Framework","value":"React 18+ or Next.js 14+ (App Router or Pages Router); Vite + React projects work too"},{"name":"WebGL / 3D","value":"WebGL and 3D effects use React Three Fiber 9, which needs React 19 (Next.js 15+)"},{"name":"Page transitions","value":"Effects built on next-transition-router need the Next.js App Router"},{"name":"Styling","value":"Tailwind CSS v3 or v4"},{"name":"Runtime","value":"Node.js 18.17+ (20+ recommended)"},{"name":"Package manager","value":"npm, pnpm, yarn or bun"},{"name":"Language","value":"JavaScript or TypeScript (every effect ships .jsx and .tsx)"}],"install":{"init":"npx hyperiux init","add":"npx hyperiux add <effect-name>","login":"npx hyperiux login","npm":"https://www.npmjs.com/package/hyperiux"},"mcp":{"command":"npx -y hyperiux-mcp-server","claudeCode":"claude mcp add hyperiux -- npx -y hyperiux-mcp-server","config":{"mcpServers":{"hyperiux":{"command":"npx","args":["-y","hyperiux-mcp-server"]}}}},"categories":[{"id":"text","slug":"text-animations","name":"Text Animations","count":25,"free":12,"url":"https://vault.hyperiux.com/effects/text-animations"},{"id":"backgrounds","slug":"backgrounds","name":"Animated Backgrounds","count":5,"free":3,"url":"https://vault.hyperiux.com/effects/backgrounds"},{"id":"buttons","slug":"buttons","name":"Animated Buttons","count":10,"free":5,"url":"https://vault.hyperiux.com/effects/buttons"},{"id":"carousels","slug":"carousels","name":"Carousel Effects","count":11,"free":6,"url":"https://vault.hyperiux.com/effects/carousels"},{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects","count":24,"free":8,"url":"https://vault.hyperiux.com/effects/scroll-effects"},{"id":"components","slug":"components","name":"Creative Components","count":20,"free":8,"url":"https://vault.hyperiux.com/effects/components"},{"id":"navigation","slug":"navigation","name":"Navigations","count":9,"free":3,"url":"https://vault.hyperiux.com/effects/navigation"},{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects","count":17,"free":4,"url":"https://vault.hyperiux.com/effects/cursor-effects"},{"id":"transitions","slug":"page-transitions","name":"Page Transitions","count":10,"free":2,"url":"https://vault.hyperiux.com/effects/page-transitions"},{"id":"loaders","slug":"loaders","name":"Loaders","count":3,"free":2,"url":"https://vault.hyperiux.com/effects/loaders"},{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects","count":17,"free":3,"url":"https://vault.hyperiux.com/effects/webgl-effects"}],"effects":[{"slug":"blur-text","title":"Blur Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A soft text reveal animation that brings headlines, section intros, and short claims into focus with a calm blur-in effect.","description":"Blur Text for React lets words soften into view for calm hero statements, section intros, and premium landing-page copy. Built to stay readable with motion off.","tags":["Motion"],"dependencies":["motion"],"install":"npx hyperiux add blur-text","usage":"import BlurText from \"@/components/effects/blur-text\";\n\nconst Page = () => {\n return (\n <div  className=\"overflow-x-hidden bg-[#f7f1e3] max-w-4xl\">\n <BlurText\n once={false}\n variant=\"fade\"\n className=\"block text-6xl font-black uppercase leading-none tracking-tight sm:text-7xl lg:text-8xl\"\n >\n Blur should feel like a stage entrance, not a loading state.\n </BlurText>\n </div>\n );\n};\n\nexport default Page;","props":[{"name":"delay","type":"number","default":0,"description":"Delay before the word animation starts."},{"name":"duration","type":"number","default":0.5,"description":"Animation duration per word."},{"name":"blur","type":"number","default":10,"description":"Initial blur amount in pixels."},{"name":"variant","type":"string","default":"fade","description":"Direction variant for the reveal."},{"name":"once","type":"boolean","default":false,"description":"Runs the reveal only once per viewport entry when enabled."},{"name":"textColor","type":"string","default":"#111111","description":"Text color. Unset inherits from the surrounding text."}],"overview":["Blur Text helps important words arrive with intent: words soften into view.","Reach for it on headlines, launch claims, section openers, and one-line proof. Keep it away from body copy, error messages, legal text, and instructions, where reading has to be effortless.","The thing to watch is that the words get lost in the motion. The resolved phrase has to be real DOM text, the animation must not spell itself out to a screen reader, and a reduced-motion visitor should land on the final, readable state at once."],"exampleUseCase":["A skincare brand homepage can use Blur Text on the hero line and the short claims that open each product section. Each phrase softens into focus as it enters the viewport, so the page feels calm and considered rather than loud.","The outcome is composure. The motion sets the tone, then gets out of the way, leaving real, readable text for shoppers and search engines. Ingredient lists, prices, and shipping details stay static, where they can be read right away."],"bestFor":["Calm hero lines and section intros where words should soften into view once.","Short claims where legibility matters more than spectacle.","Blur Text makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Not for body text, labels, errors, legal copy, or anything a user must read right away."],"performance":["Limit motion to the phrase that earns it, hold its layout space ahead of time, and keep heavy filters off large blocks of text."],"accessibility":["Make the whole phrase available to assistive technology a single time; where the text is split into per-character spans, mark the duplicates aria-hidden."],"commonMistakes":["Using Blur Text on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Blur Text?","answer":"Use it when a short headline, claim, or intro needs words to soften into view."},{"question":"How do I keep Blur Text accessible?","answer":"Ship the final phrase in the DOM and surface it a single time, hiding duplicated animated fragments from assistive technology where needed."},{"question":"Does Blur Text affect SEO?","answer":"Not when the final text ships as real HTML rather than living inside canvas or client-only animation."},{"question":"How do I avoid layout shift with Blur Text?","answer":"Pre-reserve the final text's space so line breaks stay put across breakpoints."},{"question":"What should reduced motion do for Blur Text?","answer":"Render the settled, legible text at once, with no scrambling, staggering, or looping."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text","demoUrl":"https://vault.hyperiux.com/demo/blur-text","related":[{"slug":"text-fill-animation","title":"Text Fill Animation","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-fill-animation"},{"slug":"animated-toggle","title":"Animated Toggle","docsUrl":"https://vault.hyperiux.com/effects/buttons/animated-toggle"},{"slug":"character-trail","title":"Character Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/character-trail"}]},{"slug":"chromatic-text","title":"Chromatic Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A chromatic headline effect for portfolios, campaign pages, AI products, cyber brands, and experimental landing pages where the type should briefly distort without losing the message.","description":"Chromatic Text for React adds RGB-split motion to large headlines for campaign pages, portfolios, and technical brand moments.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add chromatic-text","usage":"import ChromaticText from \"@/components/effects/chromatic-text\";\n\nconst page = () => {\n  return (\n    <>\n    <ChromaticText/>\n</>\n  )\n}","props":[{"name":"baseTextColor","type":"string","default":"#ffffff","description":"Color of the front/base text layer."},{"name":"firstTextColor","type":"string","default":"#FFB200","description":"Color of the red chromatic depth layer."},{"name":"secondTextColor","type":"string","default":"#EB5B00","description":"Color of the blue chromatic depth layer."},{"name":"fontSize","type":"number","default":10,"description":"Font size in vw units shared by every text layer."},{"name":"fontWeight","type":"number","default":500,"description":"Font weight shared by every text layer."},{"name":"backgroundColor","type":"string","default":"#111111","description":"Background color for the scroll section."}],"fixedText":true,"overview":["Chromatic Text turns a headline into an optical signal.","The effect separates the edges of large type into chromatic offsets, creating a controlled RGB-split or aberration treatment. The text can blur, drift, separate, and resolve depending on the trigger model. The result feels digital, unstable, and engineered, but the headline must still come back into focus.","Use Chromatic Text when the headline should feel technical, optical, or slightly charged. It works for AI pages, developer tools, cyber interfaces, music and culture campaigns, creative portfolios, and launch sections where the type can carry a controlled distortion.","The page job is attention with restraint. The visitor should notice the chromatic shift, understand the headline, and keep moving. If the effect makes the words harder to read than the message deserves, the animation has become the main character."],"exampleUseCase":["A cyber or AI product page can use Chromatic Text in the hero to give the first claim a controlled signal-distortion effect. The headline briefly separates into chromatic edges, then resolves into readable copy.","The outcome is tension. The page feels technical and alive without sacrificing the clarity of the claim."],"bestFor":["AI, cyber, developer-tool, and experimental brand pages where RGB-split motion fits the visual language.","Portfolio and campaign headlines where type can carry a short optical distortion.","Dark hero sections where white typography and chromatic edges can create contrast.","Short headline moments that resolve quickly into readable text."],"notFor":["Not for body copy, legal text, product instructions, forms, dashboards, documentation, pricing copy, or long paragraphs.","Not for accessibility-critical wording or anything the user must read instantly. Distortion is an accent, not a reading strategy."],"performance":["Limit the effect to one or two large headings, avoid heavy blur across large text blocks, throttle scroll-driven updates, and clean up listeners or animation instances on unmount. Keep channel offsets controlled so the effect feels sharp rather than smeared."],"accessibility":["Expose the headline once. Decorative RGB layers should not be announced as repeated text. On mobile, reduce blur, offset distance, and scroll-linked intensity. For reduced motion, show the resolved headline immediately with no channel travel, blur, or displacement."],"commonMistakes":["Applying chromatic distortion to long copy.","Letting RGB offsets make the headline unreadable.","Duplicating text layers without hiding decorative copies from assistive technology.","Running scroll-linked updates without throttling or cleanup.","Using chromatic motion on a brand that needs calm clarity more than signal noise."],"faq":[{"question":"What is Chromatic Text?","answer":"Chromatic Text is a React text animation that adds RGB-split, chromatic-aberration, or channel-offset motion to large typography."},{"question":"When should I use Chromatic Text?","answer":"Use it for short hero headlines, campaign statements, and technical brand moments where optical distortion supports the visual identity."},{"question":"Is Chromatic Text good for body copy?","answer":"No. Use it on large, short text only. Body copy should remain stable, readable, and boring in the best possible way."},{"question":"How do I keep Chromatic Text accessible?","answer":"Expose the real headline once and hide decorative duplicated text layers from assistive technology where appropriate."},{"question":"Does Chromatic Text affect SEO?","answer":"Not if the headline remains real HTML. Avoid rendering the only meaningful text inside canvas, image layers, or client-only visual duplicates."},{"question":"What should reduced motion do for Chromatic Text?","answer":"Show the final readable headline immediately. Remove scroll-linked distortion, RGB-channel travel, blur, and repeated motion."},{"question":"Can Hyperiux adapt Chromatic Text for a real brand system?","answer":"Yes. A custom version should define channel colors, offset distance, trigger behavior, blur limits, typography constraints, mobile tuning, accessibility handling, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/chromatic-text","demoUrl":"https://vault.hyperiux.com/demo/chromatic-text","related":[{"slug":"mask-text-reveal","title":"Mask Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"},{"slug":"drop-text","title":"Drop Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/drop-text"},{"slug":"text-stream","title":"Text Stream","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-stream"}]},{"slug":"circle-text-reveal","title":"Circle Text Reveal","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A circular mask text animation that reveals short headlines, campaign lines, and proof statements through a focused shape-based entrance.","description":"Circle Text Reveal for React reveals words through a circular mask for campaign headlines where shape is part of the art direction.","tags":["Motion"],"dependencies":["motion"],"install":"npx hyperiux add circle-text-reveal","usage":"import CircleTextReveal from '@/components/effects/circle-text-reveal'\n\nconst page = () => {\n return (\n <>\n <div className=\"relative\">\n <CircleTextReveal\n textColor=\"#111\"\n circleColorBg=\"#ff5f00\"\n RevealedTextColor=\"#ffffff\"\n />\n </div>\n </>\n )\n}\n\n\nexport default page","props":[{"name":"textColor","type":"string","default":"#111111","description":"Base text color."},{"name":"circleColorBg","type":"string","default":"#ff5f00","description":"Reveal circle background color."},{"name":"RevealedTextColor","type":"string","default":"#fefefe","description":"Text color inside the revealed layer."},{"name":"lerp","type":"number","default":0.15,"description":"Pointer-follow smoothing amount; higher values track faster."},{"name":"smoothness","type":"number","default":0.5,"description":"Mask-size transition duration in seconds."},{"name":"circleSize","type":"number","default":500,"description":"Expanded reveal circle size in pixels."}],"fixedText":true,"overview":["Circle Text Reveal helps important words arrive with intent: text appears through a circular mask.","Best on short, high-emphasis text: headlines, launch lines, section openers, proof points. Avoid it on body copy, errors, legal text, or instructions, where legibility cannot be negotiable.","The main risk is the text disappearing into the effect. Ship the final phrase as genuine HTML, keep per-character motion out of the accessibility tree, and serve the settled, legible text immediately when motion is reduced."],"exampleUseCase":["An art gallery's exhibition microsite can use Circle Text Reveal on the opening statement. A circle follows the visitor's cursor and uncovers a second line hidden beneath the first, so the page rewards curiosity in the same way the exhibition does.","The outcome is discovery. Because the reveal depends on a mouse, it works best as a desktop moment. On touch devices the main statement still reads in full, and opening hours, tickets, and directions belong in ordinary text elsewhere on the page."],"bestFor":["Campaign moments where the circular mask is part of the art direction.","Short statements that can resolve fully without delaying reading.","Circle Text Reveal makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Avoid it on body copy, labels, error and legal text, or any wording that has to be read on sight."],"performance":["Move only the words that carry weight, pre-reserve their space to avoid shift, and skip costly filters on large text blocks."],"accessibility":["Assistive technology should hear the phrase once, not character by character; visually split fragments are hidden from the accessibility tree with aria-hidden."],"commonMistakes":["Using Circle Text Reveal on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Circle Text Reveal?","answer":"Use it when a campaign moment needs text appearing through a circular mask."},{"question":"How do I keep Circle Text Reveal accessible?","answer":"Keep the resolved phrase in the DOM, exposed once; mark any duplicated animated fragments hidden from assistive technology."},{"question":"Does Circle Text Reveal affect SEO?","answer":"Not as long as the resolved text is genuine HTML and never trapped in canvas or client-only animation."},{"question":"How do I avoid layout shift with Circle Text Reveal?","answer":"Hold the finished text's footprint so wrapping does not jump between breakpoints."},{"question":"What should reduced motion do for Circle Text Reveal?","answer":"Land directly on the finished, readable text: no character scramble, no stagger, no loop."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal","demoUrl":"https://vault.hyperiux.com/demo/circle-text-reveal","related":[{"slug":"split-canvas","title":"Split Canvas","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/split-canvas"},{"slug":"circular-split-roll","title":"Circular Split Roll","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/circular-split-roll"},{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"parallax-image-animation","title":"Parallax Image","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-image-animation"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"}]},{"slug":"depth-flip-text","title":"Depth Flip Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A phrase-level text animation for hero headlines, product claims, campaign lines, and brand statements where the message needs motion without becoming a full carousel.","description":"Depth Flip for React swaps short phrases through a compressed depth-flip motion for hero lines, product claims, and brand statements.","tags":["GSAP"],"dependencies":["@gsap/react","gsap"],"install":"npx hyperiux add depth-flip-text","usage":"import DepthFlipText from \"@/components/effects/depth-flip-text\";\n\nconst page = () => {\n return (\n <>\n <DepthFlipText/>\n </>\n )\n}\n\n\nexport default page","props":[{"name":"phrases","type":"string[]","default":["Hyperiux Vault ships faster","Premium UI for modern teams","Built to launch beautifully"],"description":"Phrases that cycle through the perspective flip."},{"name":"backgroundColor","type":"string","default":"#f6f5f2","description":"Background color behind the effect."},{"name":"textColor","type":"string","default":"#ffffff","description":"Text color for both the current and incoming phrase."},{"name":"loop","type":"boolean","default":true,"description":"Restarts the phrase sequence after the last entry."},{"name":"holdDuration","type":"number","default":0.4,"description":"Delay before each phrase begins its flip transition."},{"name":"transitionDuration","type":"number","default":1.4,"description":"Duration of the flip animation."},{"name":"charStagger","type":"number","default":0.02,"description":"Delay between each character beginning its motion."},{"name":"useOpacityTransition","type":"boolean","default":false,"description":"Fades outgoing and incoming characters during the flip."},{"name":"scrub","type":"boolean","default":false,"description":"Links the first flip transition to scroll progress instead of autoplay."},{"name":"scrollStart","type":"string","default":"top 80%","description":"ScrollTrigger start value used when scrub is enabled."},{"name":"scrollEnd","type":"string","default":"bottom 20%","description":"ScrollTrigger end value used when scrub is enabled."}],"overview":["Depth Flip turns a static headline into a controlled sequence of short statements.","The effect works by transitioning one phrase into another through a layered flip motion. The outgoing line compresses, shifts, or folds through depth while the next phrase resolves into place. It gives the text a spatial handoff without needing a large 3D scene, heavy WebGL layer, or full-screen route transition.","Use Depth Flip when a page needs to rotate between a small set of connected statements: product positioning, campaign claims, launch lines, value propositions, feature labels, or short brand phrases. The page job is compression: say more than one thing in the same visual space without making the visitor read a dense block.","The production risk is over-rotation. A flipping headline can sharpen a hero, but it can also weaken the message if the copy changes too quickly, loops forever, or hides the most important claim. The strongest version uses a small set of phrases that belong to the same argument and lets each one settle long enough to be read."],"exampleUseCase":["A developer-tool landing page can use Depth Flip in the hero to rotate between three related claims: speed, source ownership, and production readiness. Each phrase gets its moment, then hands off to the next without forcing a bulky paragraph above the CTA.","The outcome is density with control. The page can say more than one thing without making the first screen feel crowded.","A studio homepage can use the same effect for a short brand sequence where each phrase defines one part of the promise: craft, motion, and commercial clarity."],"bestFor":["Hero headlines where two to four short phrases need to share one visual space.","Product positioning statements that rotate between related claims.","Campaign pages where the headline needs motion without a full-screen transition.","Developer-tool, SaaS, AI, portfolio, and agency pages where short phrases can carry the core message.","Brand intros where the type should feel spatial, compressed, and deliberate."],"notFor":["Not for body copy, long sentences, legal text, documentation, form labels, error messages, pricing details, or instructions.","Not for unrelated phrase sets. If every flip introduces a new topic, the effect becomes a slot machine for positioning.","Not for headlines where one strong sentence would do the job better."],"performance":["Keep the phrase count small, animate transform and opacity, avoid layout reads during every transition, and clean up timers or animation instances when the component unmounts. Reserve the headline container so phrase changes do not shift surrounding content.","Avoid running multiple Depth Flip instances in the same viewport unless the page is deliberately built around kinetic typography."],"accessibility":["Expose the active phrase clearly and avoid making assistive technology read decorative duplicate layers. If the phrase sequence communicates essential meaning, provide a stable text equivalent or ensure each phrase remains understandable without relying on motion.","On mobile, reduce depth distance, scale compression, and transition speed if the effect feels cramped. For reduced motion, show a static preferred phrase or switch phrases instantly without perspective movement."],"commonMistakes":["Using long phrases that cannot flip cleanly.","Letting the headline width jump on every phrase change.","Looping the animation too quickly beside the primary CTA.","Using unrelated claims in the same sequence.","Hiding the real text inside decorative layers.","Treating the effect as a replacement for clear positioning."],"faq":[{"question":"What is Depth Flip Text?","answer":"Depth Flip is a React text animation that transitions between short phrases using a compressed perspective or flip-style motion."},{"question":"When should I use Depth Flip Text?","answer":"Use it when a hero, campaign section, or product intro needs to rotate between a small set of related claims in the same visual space."},{"question":"How many phrases work best?","answer":"Two to four phrases usually work best. More than that can dilute the message and make the headline feel like an endless loop."},{"question":"Is Depth Flip good for long sentences?","answer":"No. Keep the phrases short. The effect works best when each phrase can be read instantly before the next one appears."},{"question":"How do I keep Depth Flip accessible?","answer":"Expose the meaningful phrase once, hide decorative duplicate layers where needed, and avoid making the animation the only way to understand the message."},{"question":"What should reduced motion do for Depth Flip?","answer":"Show a static phrase, display the full phrase set as normal text, or switch instantly without perspective movement, scale compression, or repeated flipping."},{"question":"Can Depth Flip be used in a hero section?","answer":"Yes. It is strongest in hero sections where the page needs a sharp rotating claim near the main CTA. Keep the timing slow enough for the visitor to read each phrase."},{"question":"Can Hyperiux adapt Depth Flip for a real brand system?","answer":"Yes. A custom version should define phrase strategy, timing, perspective depth, typography rules, layout reservation, accessibility handling, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/depth-flip-text","demoUrl":"https://vault.hyperiux.com/demo/depth-flip-text","related":[{"slug":"text-fill-animation","title":"Text Fill Animation","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-fill-animation"},{"slug":"text-convergence","title":"Text Convergence","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/text-convergence"},{"slug":"text-stream","title":"Text Stream","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-stream"}]},{"slug":"drop-text","title":"Drop Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A gravity-led text animation for headlines, intros, and brand moments where the words should feel physical before they become fully readable.","description":"Drop Text for React drops characters into place for hero headlines, editorial intros, and playful brand moments while keeping the final text readable.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add drop-text","usage":"import DropText from \"@/components/effects/drop-text\";\n\nconst page = () => {\n  return (\n    <>\n    <DropText />\n</>\n  )\n}","props":[{"name":"variant","type":"string","default":"drop","description":"Animation style used for the text entrance."},{"name":"splitBy","type":"string","default":"characters","description":"Text unit used for the drop animation."},{"name":"staggerFrom","type":"string","default":"random","description":"Origin used for the staggered drop sequence."},{"name":"yOffset","type":"number","default":-30,"description":"Starting vertical offset in pixels. Negative values rise from above, positive values drop from below."},{"name":"xOffset","type":"number","default":0,"description":"Starting horizontal offset in pixels."},{"name":"rotate","type":"number","default":0,"description":"Starting rotation in degrees."},{"name":"blur","type":"number","default":0,"description":"Starting blur in pixels."},{"name":"scaleFrom","type":"number","default":1,"description":"Starting scale before the text settles into place."},{"name":"startOpacity","type":"number","default":0,"description":"Starting opacity before the text animates in."},{"name":"duration","type":"number","default":0.4,"description":"Animation duration in seconds."},{"name":"stagger","type":"number","default":0.02,"description":"Delay between each animated text unit."},{"name":"ease","type":"string","default":"power2.out","description":"GSAP easing used by the drop animation."},{"name":"animateOnScroll","type":"boolean","default":false,"description":"Runs the animation when the component enters the viewport."},{"name":"fontSize","type":"number","default":6,"description":"Font size in vw units."},{"name":"fontColor","type":"string","default":"#ffffff","description":"Text color."},{"name":"textAlign","type":"string","default":"center","description":"Text alignment."},{"name":"lineHeight","type":"number","default":1,"description":"Text line height."},{"name":"letterSpacing","type":"number","default":0,"description":"Letter spacing in em units."},{"name":"backgroundColor","type":"string","default":"#101113","description":"Background color behind the text."},{"name":"text","type":"string","default":"Motion Makes Spaces Move","description":"Text to animate; use \\n for line breaks with splitBy lines."}],"overview":["Drop Text turns a short phrase into a physical typographic moment.","Characters separate from their usual position, move with a drop-like motion, and resolve back into a stable line of text. The effect gives the words weight. It feels playful, kinetic, and slightly imperfect in the right way, while still preserving the final phrase as readable copy.","Use Drop Text when a headline needs more personality than a fade, blur, or simple slide. It works for creative portfolios, studio pages, campaign intros, interactive hero sections, and playful product moments where typography can carry a little gravity.","The page job is arrival. The visitor should notice the phrase, understand it, and continue. The animation can make the text feel alive, but it cannot become a reading obstacle."],"exampleUseCase":["A creative studio can use Drop Text on a homepage intro where the brand wants the first line to feel playful and built by hand. The words drop into place, settle, and stay readable before the visitor reaches the CTA.","The outcome is character. The headline feels more memorable without turning the page into a typographic obstacle course."],"bestFor":["Short hero headlines where character motion supports the brand tone.","Campaign intros that need a playful, physical text reveal.","Portfolio and studio pages where motion craft is part of the selling point.","One-line statements that can resolve quickly into stable readable text."],"notFor":["Not for body copy, labels, error messages, legal copy, instructions, pricing details, or any text users must read immediately.","Not for long paragraphs. Gravity is charming for a headline; it is irritating for a contract."],"performance":["Keep the animated phrase short, reserve the final text space, avoid layout reads during every character movement, and limit replay behavior. Animate transform and opacity rather than layout properties."],"accessibility":["Expose the full phrase once as readable text. Do not make screen readers hear each character as it drops. On mobile, reduce distance, rotation, and stagger. For reduced motion, show the settled phrase immediately or use a short fade."],"commonMistakes":["Using Drop Text on long copy blocks.","Removing the readable phrase from the DOM.","Letting character movement cause layout shift.","Replaying the drop animation every time the user scrolls slightly.","Making the letters unreadable for longer than the sentence deserves."],"faq":[{"question":"What is Drop Text?","answer":"Drop Text is a React text animation where characters fall, scatter, or settle into place before resolving into a readable phrase."},{"question":"When should I use Drop Text?","answer":"Use it for short headlines, hero statements, campaign intros, and playful brand moments where typography can carry motion without hurting readability."},{"question":"Is Drop Text good for paragraphs?","answer":"No. Use it on short phrases. Paragraphs need reading speed, not falling letters."},{"question":"How do I keep Drop Text accessible?","answer":"Keep the final phrase available as real text and expose it once to assistive technology. Hide duplicated animated character spans when needed."},{"question":"Does Drop Text affect SEO?","answer":"Not when the final phrase renders as real HTML. Avoid putting the only meaningful text inside canvas, SVG paths, or client-only decorative spans."},{"question":"What should reduced motion do for Drop Text?","answer":"Show the final readable phrase immediately or with a very short fade. Remove character drops, rotation, stagger, and repeated motion."},{"question":"Can Hyperiux adapt Drop Text for a real brand system?","answer":"Yes. A custom version should define character behavior, timing, easing, typography rules, layout reservation, accessibility handling, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/drop-text","demoUrl":"https://vault.hyperiux.com/demo/drop-text","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"text-convergence","title":"Text Convergence","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/text-convergence"},{"slug":"text-stream","title":"Text Stream","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-stream"},{"slug":"perspective-text-reveal","title":"Perspective Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/perspective-text-reveal"}]},{"slug":"flickering-text","title":"Flickering Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A controlled flicker animation for cinematic hero sections, cyber interfaces, launch pages, music campaigns, game-adjacent sites, and moody editorial layouts where typography needs atmosphere without losing readability.","description":"Flickering Text for React gives large headlines a controlled light-flicker effect for cinematic, cyber, editorial, and launch-page moments.","tags":["GSAP"],"dependencies":["@gsap/react","gsap"],"install":"npx hyperiux add flickering-text","usage":"import FlickeringText from \"@/components/effects/flickering-text\";\n\nconst page = () => {\n return (\n <>\n <FlickeringText/>\n </>\n )\n}\n\n\nexport default page","props":[{"name":"backgroundColor","type":"string","default":"#0a0a0a","description":"Background color behind the text."},{"name":"textColor","type":"string","default":"#ffffff","description":"Text color."},{"name":"glowColor","type":"string","default":"#ffffff","description":"Glow color when bloom is enabled."},{"name":"wigglesPerSecond","type":"number","default":2,"description":"Noise samples per second that drive the flicker."},{"name":"correlation","type":"number","default":0.5,"description":"How much each character follows the shared flicker lane."},{"name":"minOpacity","type":"number","default":0,"description":"Lowest opacity characters can dip to."},{"name":"minAmount","type":"number","default":-1,"description":"Lower bound of the flicker selector."},{"name":"maxAmount","type":"number","default":1,"description":"Upper bound of the flicker selector."},{"name":"glowIntensity","type":"number","default":1,"description":"Glow strength when bloom is enabled."},{"name":"glowRadius","type":"number","default":1,"description":"Glow spread multiplier."},{"name":"fontSize","type":"number | string","default":"10vw","description":"Font size for the text."},{"name":"fontWeight","type":"number | string","default":600,"description":"Font weight for the text."},{"name":"glow","type":"boolean","default":true,"description":"Turns the extra glow effect on or off."}],"fixedText":true,"overview":["Flickering Text gives display typography a short burst of unstable light.","Letters brighten, dim, stutter, and settle into a readable final state. The effect works because the instability is brief. It creates tension, then gets out of the way before the visitor has to work too hard to read the message.","Use Flickering Text when a headline should feel cinematic, electrical, haunted, technical, or signal-led. It fits dark hero sections, campaign intros, entertainment pages, cyber brands, AI product launches, portfolio openers, and visual storytelling sections where the type can carry a moment of controlled distortion.","The page job is atmosphere. The visitor should feel the mood before reading the rest of the page, but the final headline still needs to be legible, stable, and worth the attention it just demanded."],"exampleUseCase":["A cyber product page can use Flickering Text in the hero to introduce a short headline with controlled instability. The text pulses, settles, and gives the page a darker technical tone before the supporting copy and CTA appear.","The outcome is tension. The brand feels sharper, but the message still resolves into a clear claim.","A film, music, or campaign microsite can use the same effect for an opening title where atmosphere matters before explanation. The flicker earns attention without forcing the whole page into constant motion."],"bestFor":["Dark hero sections where typography needs a cinematic or signal-led arrival.","AI, cyber, developer-tool, gaming, music, entertainment, and experimental brand pages.","Campaign intros where a short headline can carry dramatic atmosphere.","Portfolio openers where the first line should feel more authored than a normal fade.","One-off title moments where flicker supports mood, not every piece of text on the page."],"notFor":["Not for body copy, documentation, legal text, pricing details, error messages, form labels, instructions, or accessibility-critical content.","Not for long loops, constant blinking, or repeated flicker effects across the page.","Not for calm SaaS pages where trust, clarity, and reading speed matter more than atmosphere."],"performance":["Keep the effect scoped to one or two headlines. Animate opacity, text-shadow, filter, or layered glow with restraint, and avoid large blur values on multiple text layers. Clean up timers or animation instances when the component unmounts.","Do not loop the flicker indefinitely near CTAs, forms, or reading sections. Once the headline has arrived, let it stay still."],"accessibility":["Expose the headline once as readable text. Do not make assistive technology read duplicate glow layers or flicker fragments.","Avoid fast, high-contrast flashes. On mobile, reduce glow intensity, blur, and flicker count so the text remains comfortable to read. For reduced motion, render the stable headline immediately or use a minimal fade with no flicker."],"commonMistakes":["Making the flicker too fast, too bright, or too repetitive.","Applying the effect to long copy instead of one short display line.","Letting glow reduce the sharpness of the final text.","Duplicating text layers without hiding decorative copies from assistive technology.","Looping the effect forever beside the main CTA.","Using flicker to compensate for weak headline writing."],"faq":[{"question":"What is Flickering Text?","answer":"Flickering Text is a React text animation that makes a headline pulse, dim, brighten, or stutter briefly before settling into a stable readable state."},{"question":"When should I use Flickering Text?","answer":"Use it when a hero, campaign title, or editorial intro needs cinematic, cyber, electrical, or signal-led atmosphere."},{"question":"Is Flickering Text good for body copy?","answer":"No. Flicker belongs on short display text. Body copy should stay stable and easy to read."},{"question":"How do I keep Flickering Text accessible?","answer":"Render the headline as real text, expose it once to assistive technology, and hide decorative duplicate glow layers where needed."},{"question":"Should Flickering Text loop?","answer":"Usually no. It should flicker briefly, resolve, and stop. Continuous blinking quickly becomes distracting and uncomfortable."},{"question":"What should reduced motion do for Flickering Text?","answer":"Show the final stable headline immediately or with a minimal fade. Remove flicker, glow pulses, opacity stutters, and repeated light changes."},{"question":"Can Flickering Text work on mobile?","answer":"Yes, with restraint. Reduce glow intensity, flicker count, blur, and contrast shifts so the headline remains readable on smaller screens."},{"question":"Can Hyperiux adapt Flickering Text for a real brand system?","answer":"Yes. A custom version should define flicker rhythm, glow treatment, contrast limits, trigger behavior, mobile tuning, accessibility handling, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/flickering-text","demoUrl":"https://vault.hyperiux.com/demo/flickering-text","related":[{"slug":"drop-text","title":"Drop Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/drop-text"},{"slug":"typing-text","title":"Typing Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/typing-text"},{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"text-stream","title":"Text Stream","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-stream"}]},{"slug":"focus-text","title":"Focus Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A focused text reveal for hero statements, editorial intros, product claims, and brand pages where copy should move from atmosphere into clarity.","description":"Focus Text for React sharpens lines into view one by one for hero statements, editorial intros, and brand copy that needs controlled emphasis.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add focus-text","usage":"import FocusText from \"@/components/effects/focus-text\";\n\nconst page = () => {\n return (\n <>\n <FocusText/>\n </>\n )\n}\n\n\nexport default page","props":[{"name":"backgroundColor","type":"string","default":"#000000","description":"Background color."},{"name":"textColor","type":"string","default":"#ffffff","description":"Text color."},{"name":"fontSize","type":"number","default":4.5,"description":"Text size in vw units."},{"name":"characterStagger","type":"number","default":0.05,"description":"Delay between each character reveal."},{"name":"revealDuration","type":"number","default":3.2,"description":"Duration of each character reveal."},{"name":"startScale","type":"number","default":0.4,"description":"Starting scale before characters settle."},{"name":"blurAmount","type":"number","default":18,"description":"Initial blur amount in pixels."},{"name":"holdDuration","type":"number","default":1.2,"description":"Pause duration after the full reveal completes."},{"name":"loop","type":"boolean","default":false,"description":"Automatically replay the animation on a loop."},{"name":"scrub","type":"boolean","default":false,"description":"Links the reveal to scroll progress instead of playing on mount. Disables looping and the replay button."},{"name":"scrollStart","type":"string","default":"top 80%","description":"ScrollTrigger start value used when scrub is enabled."},{"name":"scrollEnd","type":"string","default":"bottom 20%","description":"ScrollTrigger end value used when scrub is enabled."},{"name":"showReplayButton","type":"boolean","default":true,"description":"Shows the built-in replay button inside the component."},{"name":"text","type":"string","default":"Built for seamless interactions.\nDesigned with thoughtful motion.\nMade to feel unforgettable.","description":"Text to reveal; \\n starts a new line."}],"overview":["Focus Text turns a stacked message into a controlled reading sequence.","Each line begins softened, blurred, or visually held back. As the animation progresses, the active line sharpens into full clarity, then the next line receives the same treatment. The result is a quiet progression of attention: one thought comes into focus, then the next, then the complete statement resolves.","Use Focus Text when a page needs to slow the eye without slowing the user. It works for hero copy, campaign statements, portfolio intros, product positioning, studio manifestos, launch lines, and brand-led sections where the writing deserves a measured arrival.","The page job is clarity. The animation should help the visitor read the message in the intended order. It should not turn a simple sentence into a vision test with typography."],"exampleUseCase":["A product landing page can use Focus Text in the hero to introduce a three-line positioning statement. The first line sharpens, the second follows, and the final line resolves the argument before the visitor reaches the CTA.","The outcome is pacing. The message feels intentional without needing a loud transition, a heavy 3D scene, or a full-screen animation that steals attention from the copy.","A creative studio can use the same pattern for a manifesto-style section where each line carries one part of the brand promise: craft, motion, and commercial clarity."],"bestFor":["Hero statements where each line should land in sequence.","Campaign and editorial intros where the writing has a clear rhythm.","Portfolio and studio pages where typography needs controlled atmosphere.","Product positioning sections where the final statement should resolve from several short claims.","Dark or minimal layouts where focus, blur, and timing can carry the visual treatment."],"notFor":["Not for body copy, legal text, documentation, error messages, form labels, pricing details, or instructions.","Not for long paragraphs. If every line needs time to focus, the page is not cinematic. It is slow.","Not for copy that is weak without motion. Focus Text can pace a good statement; it cannot make a vague one meaningful."],"performance":["Keep the animated text short, reserve the final text area, animate opacity, transform, and blur with restraint, and avoid repeated replay on minor scroll changes. Large blur values across big text can become expensive, especially on low-power devices.","Let the animation finish and rest. A focused message should not keep breathing beside the CTA like it is nervous."],"accessibility":["Expose the complete message once to assistive technology. Do not announce line fragments, duplicate layers, or intermediate blur states. On mobile, reduce blur distance, stagger length, and scale movement so the text remains easy to read.","For reduced motion, render the final clear text immediately or use a short fade. Remove blur travel, line sequencing, scale movement, and repeated replay."],"commonMistakes":["Using Focus Text on long paragraphs.","Making blurred lines too hard to read for too long.","Letting line breaks change mid-animation across breakpoints.","Duplicating text layers without hiding decorative copies from assistive technology.","Replaying the focus sequence every time the user scrolls near it.","Treating focus motion as a substitute for clear writing."],"faq":[{"question":"What is Focus Text?","answer":"Focus Text is a React text animation that brings lines of copy into clarity one by one using blur, opacity, scale, or focus-style motion."},{"question":"When should I use Focus Text?","answer":"Use it when a short stacked statement needs a controlled reading sequence: hero copy, campaign intros, product claims, studio positioning, or editorial section openers."},{"question":"Is Focus Text the same as Blur Text?","answer":"Not exactly. Blur Text usually reveals a phrase or group of words through a soft blur-in. Focus Text is more sequential: it guides attention line by line as each part of the message sharpens."},{"question":"How much copy should Focus Text include?","answer":"Keep it short. Two to four lines work best. More than that starts to feel like the user is waiting for the page to read itself."},{"question":"How do I keep Focus Text accessible?","answer":"Render the full message as real text and expose it once. Hide decorative duplicate layers from assistive technology where needed, and avoid making screen readers experience the animation sequence."},{"question":"Does Focus Text affect SEO?","answer":"Show the final readable text immediately or with a minimal fade. Remove blur travel, staggered focus movement, scaling, and repeated loops."},{"question":"What should reduced motion do for Focus Text?","answer":"Show the final readable text immediately or with a minimal fade. Remove blur travel, staggered focus movement, scaling, and repeated loops."},{"question":"Can Hyperiux adapt Focus Text for a real brand system?","answer":"Yes. A custom version should define line structure, blur intensity, timing, typography rules, trigger behavior, accessibility handling, mobile tuning, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/focus-text","demoUrl":"https://vault.hyperiux.com/demo/focus-text","related":[{"slug":"text-fill-animation","title":"Text Fill Animation","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-fill-animation"},{"slug":"overflow-text-reveal","title":"Overflow Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/overflow-text-reveal"},{"slug":"perspective-text-reveal","title":"Perspective Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/perspective-text-reveal"},{"slug":"glowing-text","title":"Glowing Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glowing-text"}]},{"slug":"glitchy-text","title":"Glitchy Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A cyber-style text animation that fractures characters before resolving them into readable, crawlable headline copy.","description":"Glitchy Text for React fractures characters before resolving for cyber, AI, and developer-tool headlines with edge. Keeps content crawlable and accessible.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add glitchy-text","usage":"import GlitchyText from '@/components/effects/glitchy-text'\n\nconst page = () => {\n  return (\n   <>\n   <GlitchyText/>\n   </>\n  )\n}\n\nexport default page","props":[{"name":"baseTextColor","type":"string","default":"#ffffff","description":"Base text layer color."},{"name":"glitchColor","type":"string","default":"#eab308","description":"Accent color for the glitch layers and replay button."},{"name":"stagger","type":"number","default":0.025,"description":"Delay between consecutive characters in seconds."},{"name":"duration","type":"number","default":0.6,"description":"Duration of each character's slide in seconds."},{"name":"ease","type":"string","default":"power2.inOut","description":"GSAP ease for the slide."}],"fixedText":true,"overview":["Glitchy Text helps important words arrive with intent: characters fracture before resolving.","Use it for headlines, launch claims, short section openers, and one-line proof points. Do not use it on long body copy, error messages, legal text, or instructions where legibility is non-negotiable.","The production risk is losing the text to the animation. The final phrase must remain real DOM text, screen readers should not hear every animated character, and reduced-motion users should see the readable final state immediately."],"exampleUseCase":["A hero headline for a studio or product landing page, where the chromatic swap plays once on load and the visitor can trigger it again."],"bestFor":["Cyber, AI, and developer-tool headlines where a brief fracture supports the tone.","One-line claims that can resolve quickly into stable DOM text.","Glitchy Text makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Not for body copy, labels, error messages, legal copy, or any text users need to read immediately."],"performance":["Animate only the phrase that matters, reserve layout space, and avoid expensive filters over large text blocks."],"accessibility":["Expose the complete phrase once for assistive technology. If characters are split visually, hide duplicated spans with aria-hidden when appropriate."],"commonMistakes":["Using Glitchy Text on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Glitchy Text?","answer":"Use it when a cyber, AI, or developer-tool headline needs characters fracturing before they resolve."},{"question":"How do I keep Glitchy Text accessible?","answer":"Keep the final phrase in the DOM and expose it once. Hide duplicated animated fragments from assistive technology when needed."},{"question":"Does Glitchy Text affect SEO?","answer":"Not if the final text is real HTML and not hidden inside canvas or client-only animation."},{"question":"How do I avoid layout shift with Glitchy Text?","answer":"Reserve final text space and keep line breaks stable across breakpoints."},{"question":"What should reduced motion do for Glitchy Text?","answer":"Show the final readable state immediately, with no scramble, stagger, or looping motion."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text","demoUrl":"https://vault.hyperiux.com/demo/glitchy-text","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"mask-text-reveal","title":"Mask Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal"},{"slug":"overflow-text-reveal","title":"Overflow Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/overflow-text-reveal"}]},{"slug":"glowing-text","title":"Glowing Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A sequential glow text animation for technical intros, product-status messages, AI interfaces, security pages, and premium landing sections where copy should feel like it is being transmitted, verified, or unlocked.","description":"Glowing Text for React reveals letters word by word with a soft active glow for technical intros, launch messages, and premium hero copy.","tags":["CSS"],"dependencies":[],"install":"npx hyperiux add glowing-text","usage":"import GlowingText from \"@/components/effects/glowing-text\";\n\nconst page = () => {\n return (\n <>\n <GlowingText/>\n </>\n )\n}\n\n\nexport default page","props":[{"name":"textColor","type":"string","default":"#d8d8d8","description":"Base text color."},{"name":"glowColor","type":"string","default":"#ffffff","description":"Glow and scan color."},{"name":"backgroundColor","type":"string","default":"#0b0d0e","description":"Background color."},{"name":"fontSize","type":"number","default":2.2,"description":"Body text size in vw units."},{"name":"letterSpacing","type":"number","default":0.08,"description":"Letter spacing in em units."},{"name":"lineHeight","type":"number","default":1.55,"description":"Body line height."},{"name":"glowIntensity","type":"number","default":0.7,"description":"Glow strength."},{"name":"characterStagger","type":"number","default":0.045,"description":"Delay between each character starting its reveal."},{"name":"revealDuration","type":"number","default":0.5,"description":"How long each character takes to fade in and settle."},{"name":"lineGap","type":"number","default":0.15,"description":"Extra pause after a line's last word before the next line starts."},{"name":"text","type":"string","default":"Connection established with Hyperiux Vault,\nDecrypting premium component signatures,\nMotion presets verified and ready to ship,\nWelcome in. Build something that glows.","description":"Body text revealed line by line; \\n separates lines."}],"overview":["Glowing Text turns a line of copy into a controlled word-by-word reveal. Characters appear in sequence, the active word carries a soft glow while it forms, and the sentence resolves into a stable readable state.","Use it when a short message needs to feel transmitted, activated, or unlocked without becoming a fake loader. It fits technical intros, AI product sections, cybersecurity pages, private-beta moments, and dark hero panels where the text should arrive with rhythm.","The page job is controlled anticipation. The visitor should feel the message arriving with intent, but the final copy still needs to land quickly, remain readable, and stop moving once the idea has been delivered."],"exampleUseCase":["A cybersecurity landing page can use Glowing Text in a hero panel to introduce a short trust sequence: connection established, policy verified, assets protected, access granted. The animation makes the copy feel procedural without replacing the actual security explanation.","The outcome is signal. The product feels technical and composed before the visitor reaches the main CTA, but the message still resolves into clear readable copy.","A developer-tool page can use the same pattern to introduce CLI setup or component readiness. The glow gives the system voice a premium edge without needing a heavy WebGL scene."],"bestFor":["Developer-tool and AI pages where system-style messaging fits the product language.","Product launch sections where a short message should arrive with rhythm and atmosphere.","Dark hero panels where a soft glow can create focus without overpowering the headline.","Onboarding, private-beta, or access-state moments where the copy can feel transmitted or verified."],"notFor":["Not for body copy, documentation, legal text, form labels, error messages, checkout flows, pricing details, or long explanations.","Not for fake security, fake loading, fake encryption, or fake verification claims. A glowing word does not make a weak claim more credible. It only makes the weakness easier to see."],"performance":["Keep the animated copy short, reserve the final text area, avoid layout shifts as characters appear, and clean up timers or intervals when the component unmounts. Limit glow blur and shadow intensity, especially on dark pages where large text-shadow values can become expensive.","Avoid looping long sequences near conversion areas. Once the message has arrived, let it rest."],"accessibility":["Expose the completed message once to assistive technology. Do not announce every character as it appears. If the animation uses decorative character spans, mark duplicates as hidden where needed.","On mobile, reduce glow radius, character delay, and line count. Long terminal-style lines should wrap predictably and remain readable. For reduced motion, render the final text immediately or use a brief fade without character-by-character arrival or glowing word progression."],"commonMistakes":["Treating the glow as selective keyword emphasis instead of sequential arrival behavior.","Typing too much copy one character at a time.","Making screen readers hear every animated character.","Letting the glow blur the word until it becomes harder to read.","Looping the transmission beside a CTA forever.","Using system-style language for a product section that is not technical, secure, procedural, or command-led."],"faq":[{"question":"What is Glowing Text?","answer":"Glowing Text is a React text animation where letters appear sequentially and the active word glows while it is being formed."},{"question":"Is Glowing Text the same as Typing Text?","answer":"Not exactly. Typing Text focuses on the character-by-character typewriter rhythm. Glowing Text adds a word-level visual glow during arrival, making the reveal feel more atmospheric and premium."},{"question":"When should I use Glowing Text?","answer":"Use it for short technical intros, launch messages, AI or cybersecurity hero panels, product-status sequences, and dark landing-page moments where copy should feel transmitted or verified."},{"question":"Should Glowing Text highlight only important words?","answer":"No. The glow is part of the reveal behavior, not a selective emphasis system. If specific keywords need emphasis, use a different text treatment or combine the final state with a clear typographic hierarchy."},{"question":"How do I keep Glowing Text accessible?","answer":"Render the final message as real text and expose it once. Hide decorative character or glow layers from assistive technology where needed, and avoid announcing every animated letter."},{"question":"Does Glowing Text affect SEO?","answer":"Not if the final copy renders as real HTML. Avoid trapping the meaningful text inside canvas, images, or client-only decorative fragments."},{"question":"What should reduced motion do for Glowing Text?","answer":"Show the final readable message immediately or with a short fade. Remove character sequencing, glow progression, cursor blinking, and repeated loops."},{"question":"Can Hyperiux adapt Glowing Text for a real brand system?","answer":"Yes. A custom version should define message structure, character timing, word glow behavior, typography rules, accessibility handling, mobile tuning, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glowing-text","demoUrl":"https://vault.hyperiux.com/demo/glowing-text","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"typing-text","title":"Typing Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/typing-text"},{"slug":"drop-text","title":"Drop Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/drop-text"},{"slug":"chromatic-text","title":"Chromatic Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/chromatic-text"}]},{"slug":"mask-text-reveal","title":"Mask Text Reveal","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A clean masked text reveal that wipes real DOM text into view line by line for SaaS headlines, section intros, and polished landing-page copy.","description":"Mask Text Reveal for React wipes real DOM text in through angled masks for polished SaaS headlines and section intros. Falls back to a simple fade for reduced motion.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add mask-text-reveal","usage":"import MaskTextReveal from \"@/components/effects/mask-text-reveal\";\n\nconst page = () => {\n  return (\n    <>\n    <MaskTextReveal scrub={false} className=\"w-full \">\n    <h1 className=\"w-full max-w-6xl text-[clamp(3.5rem,8vw,8.5rem)] font-black uppercase leading-[0.82] text-[#111111] max-md:text-[clamp(3.2rem,9vw,6.5rem)] max-md:leading-[0.84] max-sm:text-[3.25rem] max-sm:leading-[0.86]\">\n      Pull the words from the noise.\n    </h1>\n  </MaskTextReveal>\n</>\n  )\n}","props":[{"name":"animateOnScroll","type":"boolean","default":true,"description":"Runs reveal on scroll."},{"name":"stagger","type":"number","default":0.2,"description":"Delay between animated lines."},{"name":"duration","type":"number","default":5.5,"description":"Mask reveal duration."},{"name":"delay","type":"number","default":0,"description":"Animation delay."},{"name":"scrub","type":"boolean","default":false,"description":"Links the reveal to scroll progress."},{"name":"maskAngle","type":"number","default":150,"description":"Angle of the wipe in degrees."},{"name":"maskSoftness","type":"number","default":33.3,"description":"Softness of the wipe's edge, as a % of the gradient (0 = hard edge)."},{"name":"textColor","type":"string","default":"#ffffff","description":"Text color. Unset inherits from the surrounding text."}],"overview":["Mask Text Reveal helps important words arrive with intent: each line is wiped in through a soft, angled mask.","Reach for it on headlines, launch claims, section openers, and one-line proof. Keep it away from body copy, error messages, legal text, and instructions, where reading has to be effortless.","The risk in production is that the words get lost in the motion. The resolved phrase has to be real DOM text, the animation must not spell itself out to a screen reader, and a reduced-motion visitor should get the final, readable text with a simple fade."],"exampleUseCase":["A B2B fintech homepage can use Mask Text Reveal for its hero headline and the short intros above each feature section. Each line is wiped into view through a soft, angled mask, one after another, so a two or three line claim arrives in a controlled order.","The outcome is clarity. The motion feels clean and finished rather than playful, which suits a product that has to earn trust, and the headline settles into ordinary text that stays readable and indexable."],"bestFor":["Polished SaaS headlines and section intros that need controlled line-by-line emphasis.","Short copy blocks where the reveal should feel clean, not noisy.","Mask Text Reveal makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Not for body text, labels, errors, legal copy, or anything a user must read right away."],"performance":["Limit motion to the phrase that earns it, hold its layout space ahead of time, and keep heavy filters off large blocks of text."],"accessibility":["Make the whole phrase available to assistive technology a single time; the text is split into line wrappers only, and the component keeps those lines readable rather than hiding them."],"commonMistakes":["Using Mask Text Reveal on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Mask Text Reveal?","answer":"Use it when a polished SaaS section needs lines wiping in through a clean, angled mask."},{"question":"How do I keep Mask Text Reveal accessible?","answer":"Ship the final phrase in the DOM and surface it a single time, hiding duplicated animated fragments from assistive technology where needed."},{"question":"Does Mask Text Reveal affect SEO?","answer":"Not when the final text ships as real HTML rather than living inside canvas or client-only animation."},{"question":"How do I avoid layout shift with Mask Text Reveal?","answer":"Pre-reserve the final text's space so line breaks stay put across breakpoints."},{"question":"What should reduced motion do for Mask Text Reveal?","answer":"The component skips the mask wipe and fades the settled, legible text in as one block, with no scrambling, staggering, or looping."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal","demoUrl":"https://vault.hyperiux.com/demo/mask-text-reveal","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"},{"slug":"overflow-text-reveal","title":"Overflow Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/overflow-text-reveal"}]},{"slug":"number-counter","title":"Number Counter","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"Give important numbers a visible moment of arrival, so metrics feel noticed without becoming noisy or hard to trust.","description":"Number Counter for React animates numbers into readable proof for metrics, launch stats, and product results while keeping the final value crawlable.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add number-counter","usage":"import NumberCounter from '@/components/effects/number-counter';\n\nconst page = () => {\n  return (\n    <>\n    <NumberCounter/>\n    </>\n  )\n}","props":[{"name":"duration","type":"number","default":1.5,"description":"Digit roll duration in seconds for all three counters."},{"name":"stagger","type":"number","default":0.1,"description":"Delay between digit columns in seconds for all three counters."},{"name":"textColor","type":"string","default":"#021A54","description":"Counter text color for all three counters."}],"fixedText":true,"overview":["Number Counter gives numbers a moment of arrival. The metric does not just appear; it resolves into proof.","Use Number Counter when a number deserves attention: revenue lift, active users, conversion improvement, uptime, launch progress, speed gain, or product adoption. The page job is proof: the animation should make the figure feel noticed, not make it harder to read.","The production risk is credibility. A counter that spins too long, loops forever, or animates every number on the page starts to feel like theatre around evidence. The final value must settle quickly, remain readable as real text, and avoid pretending that decorative motion is data."],"exampleUseCase":["A SaaS landing page can use Number Counter in a proof band below the hero: onboarding lift, deployment time saved, and uptime. The outcome is credibility: the numbers get a controlled beat of attention before the visitor reaches the CTA."],"bestFor":["Metric bands where a small set of proof points needs emphasis.","Launch pages where numbers support the claim without becoming the whole story.","SaaS, AI, and developer-tool pages where quantitative proof deserves a visible arrival."],"notFor":["Not for financial dashboards, compliance tables, legal figures, or analytics screens where exact reading speed matters more than animation.","Not for pages where every number spins. That is not proof; that is a slot machine with a marketing degree."],"performance":["Limit animated counters to the numbers that matter, avoid continuous loops, reserve layout width for the final value, and stop animation once the metric has resolved."],"accessibility":["Expose the final number and label as readable text. Do not make screen readers listen to every intermediate digit. On mobile and reduced motion, show the final value immediately or use a very short opacity change."],"commonMistakes":["Animating every statistic on the page.","Letting the number shift layout as digits change.","Making the animation more memorable than the metric."],"faq":[{"question":"When should I use Number Counter?","answer":"Use Number Counter when a small number of metrics needs a clear arrival moment: proof bands, launch stats, adoption numbers, or product outcomes."},{"question":"Should Number Counter loop?","answer":"No. Metrics should resolve, settle, and stay readable. Looping proof figures makes them feel decorative instead of trustworthy."},{"question":"How should Number Counter handle large values?","answer":"Format values clearly with suffixes, separators, or units. Reserve enough width for the final value so the layout does not jump during animation."},{"question":"Does Number Counter affect SEO?","answer":"Not if the final number and label render as real HTML. Avoid hiding the only meaningful value inside client-only animation."},{"question":"What should reduced motion do for Number Counter?","answer":"Show the final value immediately, or use a minimal fade. Do not roll digits, scramble values, or run a long count-up sequence."},{"question":"Can Hyperiux adapt Number Counter for a real brand system?","answer":"Yes. A custom version should define number formatting, motion timing, proof hierarchy, accessibility behavior, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/number-counter","demoUrl":"https://vault.hyperiux.com/demo/number-counter","related":[{"slug":"text-fill-animation","title":"Text Fill Animation","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-fill-animation"},{"slug":"text-convergence","title":"Text Convergence","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/text-convergence"},{"slug":"character-trail","title":"Character Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/character-trail"},{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"}]},{"slug":"overflow-text-reveal","title":"Overflow Text Reveal","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A clipped text reveal animation that lifts short copy into view without disturbing layout, readability, or page structure.","description":"Overflow Text Reveal for React lifts text into view without layout chaos for landing pages that need readable motion. Mobile and reduced-motion paths included.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add overflow-text-reveal","usage":"import OverflowTextReveal from \"@/components/effects/overflow-text-reveal\";\n\nexport default function Page() {\n  return (\n<>\n <OverflowTextReveal direction=\"bottom\" scrub={false}>\n            <h1 className=\"text-8xl font-black text-white leading-[0.9] tracking-tighter uppercase max-sm:text-5xl\">\n              Characters<br />Rise From<br />Below\n            </h1>\n          </OverflowTextReveal>\n</>\n)\n\n}","props":[{"name":"animateOnScroll","type":"boolean","default":true,"description":"Runs the reveal when scrolled into view."},{"name":"delay","type":"number","default":0,"description":"Animation delay."},{"name":"scrub","type":"boolean","default":false,"description":"Links the animation to scroll progress."},{"name":"direction","type":"string","default":"bottom","description":"Reveal direction."},{"name":"splitBy","type":"string","default":"words","description":"Animate per character, per word, or per line (each piece is masked)."},{"name":"startOpacity","type":"number","default":0,"description":"Opacity each piece starts from before it reveals."},{"name":"startRotation","type":"number","default":8,"description":"Starting tilt in degrees; the sign follows the direction."},{"name":"duration","type":"number","default":0.5,"description":"Duration of each piece's reveal in seconds."},{"name":"stagger","type":"number","default":0.03,"description":"Delay between consecutive pieces in seconds."},{"name":"ease","type":"string","default":"power3.out","description":"GSAP ease for the reveal."}],"overview":["Overflow Text Reveal helps important words arrive with intent: text lifts into view without layout chaos.","Use it for headlines, launch claims, short section openers, and one-line proof points. Do not use it on long body copy, error messages, legal text, or instructions where legibility is non-negotiable.","The thing to watch is losing the text to the animation. The final phrase must remain real DOM text, screen readers should not hear every animated character, and reduced-motion users should see the readable final state immediately."],"exampleUseCase":["A furniture ecommerce store can use Overflow Text Reveal on collection landing pages, for headlines such as a new season's name or a short line about craft. The words lift into place from behind a clipped edge as the section scrolls into view, without pushing the layout around.","The outcome is restraint. The page gains a sense of arrival while product grids, prices, and delivery details stay as static content that shoppers can scan straight away."],"bestFor":["Landing-page headlines that should lift into place without layout chaos.","Section intros where motion needs to feel composed and restrained.","Overflow Text Reveal makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Not for body copy, labels, error messages, legal copy, or any text users need to read immediately."],"performance":["Animate only the phrase that matters, reserve layout space, and avoid expensive filters over large text blocks."],"accessibility":["Expose the complete phrase once for assistive technology. If characters are split visually, hide duplicated spans with aria-hidden when appropriate."],"commonMistakes":["Using Overflow Text Reveal on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Overflow Text Reveal?","answer":"Use it when a clean landing page needs text lifting into view without layout chaos."},{"question":"How do I keep Overflow Text Reveal accessible?","answer":"Keep the final phrase in the DOM and expose it once. Hide duplicated animated fragments from assistive technology when needed."},{"question":"Does Overflow Text Reveal affect SEO?","answer":"Not if the final text is real HTML and not hidden inside canvas or client-only animation."},{"question":"How do I avoid layout shift with Overflow Text Reveal?","answer":"Reserve final text space and keep line breaks stable across breakpoints."},{"question":"What should reduced motion do for Overflow Text Reveal?","answer":"Show the final readable state immediately, with no scramble, stagger, or looping motion."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/overflow-text-reveal","demoUrl":"https://vault.hyperiux.com/demo/overflow-text-reveal","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"},{"slug":"mask-text-reveal","title":"Mask Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal"}]},{"slug":"perspective-text-reveal","title":"Perspective Text Reveal","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A spatial text reveal animation that gives headlines and launch claims a subtle depth-led arrival.","description":"Perspective Text Reveal for React gives headlines spatial arrival for campaign sections and portfolio intros. Ships with a reduced-motion fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add perspective-text-reveal","usage":"import PerspectiveTextReveal from \"@/components/effects/perspective-text-reveal\";\n\nconst page = () => {\n  return (\n    <>\n       <PerspectiveTextReveal scrub={false}>\n                  <h1 className=\"text-[7vw] font-black uppercase leading-[0.84] text-white max-sm:text-[8vw] max-sm:leading-[0.88]\">\n                    Lines fall into depth.\n                  </h1>\n                </PerspectiveTextReveal>\n    </>\n  )\n}","props":[{"name":"animateOnScroll","type":"boolean","default":true,"description":"Runs reveal on scroll."},{"name":"delay","type":"number","default":0,"description":"Animation delay in seconds."},{"name":"duration","type":"number","default":0.8,"description":"Line reveal duration in seconds."},{"name":"stagger","type":"number","default":0.08,"description":"Delay between revealed lines."},{"name":"scrub","type":"boolean","default":false,"description":"Links the reveal to scroll progress."},{"name":"startOpacity","type":"number","default":0,"description":"Opacity the text starts from before it reveals."},{"name":"direction","type":"string","default":"top","description":"Side the text swings in from."},{"name":"splitBy","type":"string","default":"lines","description":"Animate per character, per word, or per line."},{"name":"rotation","type":"number","default":70,"description":"Starting tilt in degrees; its sign follows the direction."},{"name":"ease","type":"string","default":"power3.out","description":"GSAP ease for the reveal."},{"name":"perspective","type":"number","default":800,"description":"Perspective distance in px - lower values give a stronger 3D effect."}],"overview":["Perspective Text Reveal helps important words arrive with intent: letters arrive with depth.","Reach for it on headlines, launch claims, section openers, and one-line proof. Keep it away from body copy, error messages, legal text, and instructions, where reading has to be effortless.","The main risk is that the words get lost in the motion. The resolved phrase has to be real DOM text, the animation must not spell itself out to a screen reader, and a reduced-motion visitor should land on the final, readable state at once."],"exampleUseCase":["A boutique hotel website can use Perspective Text Reveal for the short lines that introduce rooms, dining, and the spa. Each line rotates out of depth into place as the section comes into view, giving the copy a quiet, dimensional entrance that fits a premium brand.","The outcome is presence. The headings feel crafted without slowing the visitor down, and room rates, booking dates, and policies remain plain text that reads immediately."],"bestFor":["Premium headlines where subtle depth fits the brand system.","Short statements that can tolerate spatial motion without losing readability.","Perspective Text Reveal makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Not for body text, labels, errors, legal copy, or anything a user must read right away."],"performance":["Limit motion to the phrase that earns it, hold its layout space ahead of time, and keep heavy filters off large blocks of text."],"accessibility":["Make the whole phrase available to assistive technology a single time; where the text is split into per-character spans, mark the duplicates aria-hidden."],"commonMistakes":["Using Perspective Text Reveal on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Perspective Text Reveal?","answer":"Use it when a headline needs letters arriving with depth."},{"question":"How do I keep Perspective Text Reveal accessible?","answer":"Ship the final phrase in the DOM and surface it a single time, hiding duplicated animated fragments from assistive technology where needed."},{"question":"Does Perspective Text Reveal affect SEO?","answer":"Not when the final text ships as real HTML rather than living inside canvas or client-only animation."},{"question":"How do I avoid layout shift with Perspective Text Reveal?","answer":"Pre-reserve the final text's space so line breaks stay put across breakpoints."},{"question":"What should reduced motion do for Perspective Text Reveal?","answer":"Render the settled, legible text at once, with no scrambling, staggering, or looping."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/perspective-text-reveal","demoUrl":"https://vault.hyperiux.com/demo/perspective-text-reveal","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"},{"slug":"mask-text-reveal","title":"Mask Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal"}]},{"slug":"pixel-text-fill","title":"Pixel Text Fill","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A text animation for long headlines and brand statements where key words fill, light up, or resolve with a pixel-led treatment while the full sentence remains readable.","description":"Pixel Text Fill for React turns pixelated text into fully filled typography as users scroll, giving headlines a digital reveal without losing readability.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add pixel-text-fill","usage":"import PixelTextFill from \"@/components/effects/pixel-text-fill\";\n\nconst page = () => {\n  return (\n    <>\n    <PixelTextFill/>\n</>\n  )\n}","props":[{"name":"direction","type":"string","default":"up","description":"Fill direction."},{"name":"pixelSize","type":"number","default":3,"description":"Pixel cell size used by the dither edge."},{"name":"stagger","type":"number","default":32,"description":"Character stagger window for the fill head."},{"name":"bandFraction","type":"number","default":1.15,"description":"Soft pixel band width as a fraction of each glyph."},{"name":"effectWidth","type":"number","default":1.4,"description":"Pixelated fill band width multiplier."},{"name":"settleBlend","type":"number","default":0.45,"description":"How early the final text color blends in behind the pixel edge."},{"name":"textColor","type":"string","default":"#ffffff","description":"Final text color."},{"name":"primaryColor","type":"string","default":"#ff5f00","description":"Pixel dither edge color."},{"name":"dimColor","type":"string","default":"#272727","description":"Initial dim text color."},{"name":"backgroundColor","type":"string","default":"#101113","description":"Section background color."},{"name":"fontSize","type":"number","default":3.2,"description":"Font size in vw units."},{"name":"fontWeight","type":"number","default":500,"description":"Font weight."},{"name":"lineHeight","type":"number","default":1.18,"description":"Text line height."},{"name":"textAlign","type":"string","default":"center","description":"Text alignment."},{"name":"maxWidth","type":"number","default":80,"description":"Text wrapper width as a percentage of the section."},{"name":"text","type":"string","default":"Build with calm motion.\nKeep the rhythm crisp and clear.\nMake each screen feel alive.\nLet every detail guide focus.","description":"Text drawn and filled on canvas; \\n forces line breaks."}],"overview":["Pixel Text Fill makes text feel like it is being assembled in front of the visitor.","The words begin in a pixelated, incomplete, or block-fragmented state. As the user scrolls, the fill becomes stronger, cleaner, and more complete until the text resolves into solid readable typography. The movement gives the headline a digital sense of construction: the message starts as texture, then becomes signal.","Use Pixel Text Fill when a page needs to turn a headline into a moment of resolution. It works for AI products, developer tools, cybersecurity pages, gaming-adjacent brands, creative portfolios, technical launches, and experimental landing pages where pixel language fits the product or visual system.","The page job is transformation. The visitor should feel the text moving from fragmented to complete, but the final message still has to arrive quickly, stay readable, and support the page argument. Pixelation is the entrance. The readable sentence is the point."],"exampleUseCase":["A developer-tool homepage can use Pixel Text Fill in the hero or first proof section to make the headline resolve as the visitor scrolls. The phrase begins as fragmented pixel texture, then fills into a clear claim as the section comes into focus.","The outcome is signal. The page visually moves from low-resolution noise to a complete product message, which fits technical brands that want the interface to feel constructed, computed, or unlocked.","A creative portfolio can use the same effect for a project intro where the first line should feel digital before it becomes fully legible."],"bestFor":["AI, developer-tool, cybersecurity, and technical landing pages where pixel language supports the brand.","Hero or section headlines where the message should resolve through scroll.","Campaign pages that need a digital transition from visual noise to clear copy.","Portfolio intros where typography can carry a low-resolution to high-resolution transformation.","Short statements that can tolerate a brief fragmented state before becoming fully readable."],"notFor":["Not for body copy, legal text, documentation, pricing details, form labels, instructions, error messages, or any copy that users must read instantly.","Not for long paragraphs. Pixelation is useful for a headline, not for making someone decode a terms-of-service page like it is a corrupted cartridge.","Not for brands where clarity, calm, and immediate trust matter more than digital texture."],"performance":["Keep the animated text short, limit pixel density, reserve the final text space, and avoid layout shifts while the fill progresses. If scroll drives the effect, throttle updates, clean up observers or timelines on unmount, and avoid expensive per-frame layout reads.","Do not run multiple large Pixel Text Fill blocks in the same viewport unless the page is deliberately built around kinetic typography."],"accessibility":["Expose the final text once as readable HTML. Do not make assistive technology read decorative pixel fragments, duplicated layers, or intermediate fill states.","On mobile, reduce pixel density and shorten the scroll distance required to complete the fill. For reduced motion, render the final filled text immediately or use a short fade. Do not force users to scroll through a fragmented text state when they have asked for less motion."],"commonMistakes":["Describing Pixel Text Fill as selective keyword highlighting.","Leaving text pixelated for too long.","Making the final phrase unavailable as real HTML.","Using heavy pixel density that causes scroll jank.","Letting line breaks change while the fill progresses.","Making the scroll distance too long for a short headline.","Treating unreadability as the effect instead of the starting state."],"faq":[{"question":"What is Pixel Text Fill?","answer":"Pixel Text Fill is a React text animation where typography starts in a pixelated or fragmented fill state and becomes fully filled as the user scrolls."},{"question":"When should I use Pixel Text Fill?","answer":"Use it for short headlines, hero statements, and technical brand moments where the message should resolve from digital noise into readable clarity."},{"question":"Is Pixel Text Fill a keyword highlight effect?","answer":"No. Pixel Text Fill affects the full text reveal. The words move from pixelated or partially filled to solid and readable. It is not meant to highlight only selected keywords."},{"question":"Should Pixel Text Fill be scroll-driven?","answer":"It works especially well when tied to scroll because the user physically resolves the text. It can also be triggered on entry, but scroll gives the effect a stronger sense of progression."},{"question":"How do I keep Pixel Text Fill accessible?","answer":"Render the final phrase as real text and expose it once to assistive technology. Hide decorative pixel layers or duplicated fragments where needed."},{"question":"Does Pixel Text Fill affect SEO?","answer":"Not if the final text renders as real HTML. Avoid putting the only meaningful copy inside canvas, image layers, or decorative pixel fragments."},{"question":"What should reduced motion do for Pixel Text Fill?","answer":"Show the final fully filled text immediately or with a minimal fade. Remove scroll-linked pixel progression, fragmented fill movement, and repeated animation."},{"question":"Can Hyperiux adapt Pixel Text Fill for a real brand system?","answer":"Yes. A custom version should define pixel density, scroll progress, fill timing, typography rules, contrast limits, mobile behavior, accessibility handling, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/pixel-text-fill","demoUrl":"https://vault.hyperiux.com/demo/pixel-text-fill","related":[{"slug":"scramble-text","title":"Scramble Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/scramble-text"},{"slug":"drop-text","title":"Drop Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/drop-text"},{"slug":"text-fill-animation","title":"Text Fill Animation","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-fill-animation"}]},{"slug":"rectangular-text-reveal","title":"Rectangular Text Reveal","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A boxed-mask text reveal that introduces short statements through a rectangular frame for graphic brand and campaign sections.","description":"Rectangular Text Reveal for React uses a boxed mask to reveal short statements for graphic brand and campaign sections. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add rectangular-text-reveal","usage":"import RectangularTextReveal from \"@/components/effects/rectangular-text-reveal\";\n\nexport default function Page() {\n return (\n <RectangularTextReveal\n overlayEnterDuration={0.35}\n overlayExitDuration={0.35}\n direction=\"bottom\"\n coverDuration={0.4}\n revealDuration={0.5}\n baseColor=\"#ff6b00\"\n overlayColor=\"#111111\"\n className=\"max-w-6xl\"\n >\n <h1 className=\"text-6xl max-sm:text-3xl leading-[0.95] font-semibold\">\n A directional rectangular reveal built for expressive,\n editorial motion systems.\n </h1>\n </RectangularTextReveal>\n );\n}","props":[{"name":"baseColor","type":"string","default":"#ea580c","description":"Base reveal rectangle color."},{"name":"overlayColor","type":"string","default":"#111111","description":"Overlay reveal rectangle color."},{"name":"useOverlay","type":"boolean","default":true,"description":"Enables the overlay pass."},{"name":"stagger","type":"number","default":0.2,"description":"Delay between line reveals."},{"name":"coverDuration","type":"number","default":0.34,"description":"Cover animation duration."},{"name":"revealDuration","type":"number","default":0.42,"description":"Reveal animation duration."},{"name":"direction","type":"string","default":"left","description":"Reveal direction."},{"name":"overlayEnterDuration","type":"number","default":0.24,"description":"Overlay rectangle cover duration in seconds."},{"name":"overlayExitDuration","type":"number","default":0.28,"description":"Overlay rectangle uncover duration in seconds."}],"overview":["Rectangular Text Reveal helps important words arrive with intent: a rectangular mask controls the entrance.","Best on short, high-emphasis text: headlines, launch lines, section openers, proof points. Avoid it on body copy, errors, legal text, or instructions, where legibility cannot be negotiable.","The production risk is the text disappearing into the effect. Ship the final phrase as genuine HTML, keep per-character motion out of the accessibility tree, and serve the settled, legible text immediately when motion is reduced."],"exampleUseCase":["A music festival site can use Rectangular Text Reveal for its lineup announcement and section headers. Each line is covered by a solid block in the festival colors, which then pulls away to leave the text in place, line after line.","The outcome is impact. The reveal matches the bold, block-based look of the festival's print campaign, while dates, ticket tiers, and venue rules stay as plain text that reads on sight."],"bestFor":["Graphic brand pages where a framed or block-based reveal matches the design language.","Campaign lines where the mask is an art-direction choice, not a gimmick.","Rectangular Text Reveal makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Avoid it on body copy, labels, error and legal text, or any wording that has to be read on sight."],"performance":["Move only the words that carry weight, pre-reserve their space to avoid shift, and skip costly filters on large text blocks."],"accessibility":["Assistive technology should hear the phrase once, not character by character; visually split fragments are hidden from the accessibility tree with aria-hidden."],"commonMistakes":["Using Rectangular Text Reveal on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Rectangular Text Reveal?","answer":"Use it when a heading needs a rectangular mask controlling its entrance."},{"question":"How do I keep Rectangular Text Reveal accessible?","answer":"Keep the resolved phrase in the DOM, exposed once; mark any duplicated animated fragments hidden from assistive technology."},{"question":"Does Rectangular Text Reveal affect SEO?","answer":"Not as long as the resolved text is genuine HTML and never trapped in canvas or client-only animation."},{"question":"How do I avoid layout shift with Rectangular Text Reveal?","answer":"Hold the finished text's footprint so wrapping does not jump between breakpoints."},{"question":"What should reduced motion do for Rectangular Text Reveal?","answer":"Land directly on the finished, readable text: no character scramble, no stagger, no loop."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/rectangular-text-reveal","demoUrl":"https://vault.hyperiux.com/demo/rectangular-text-reveal","related":[{"slug":"overflow-text-reveal","title":"Overflow Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/overflow-text-reveal"},{"slug":"text-convergence","title":"Text Convergence","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/text-convergence"},{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"rolling-text","title":"Rolling Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/rolling-text"},{"slug":"focus-text","title":"Focus Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/focus-text"}]},{"slug":"rolling-text","title":"Rolling Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A character-level text animation for logos, hero words, product names, launch titles, and technical brand moments where the final word should feel assembled rather than simply faded in.","description":"Rolling Text for React rotates characters into place for logos, hero words, and technical headlines while keeping the final phrase readable.","tags":["GSAP"],"dependencies":["@gsap/react","gsap"],"install":"npx hyperiux add rolling-text","usage":"import RollingText from \"@/components/effects/rolling-text\";\n\nconst page = () => {\n return (\n <>\n <RollingText/>\n </>\n )\n}\n\nexport default page","props":[{"name":"text","type":"string","default":"HYPERIUX","description":"The word rendered by the reel."},{"name":"textColor","type":"string","default":"#ffffff","description":"Letter color."},{"name":"minCycles","type":"number","default":3,"description":"Minimum whole letter-heights a character travels before landing."},{"name":"cycleVariance","type":"number","default":3,"description":"Extra random cycles added on top of minCycles."},{"name":"duration","type":"number","default":2.4,"description":"Base spin duration in seconds."},{"name":"durationVariance","type":"number","default":1.2,"description":"Extra random duration added per character, in seconds."}],"overview":["Rolling Text turns a short word or phrase into a controlled character reveal.","Each letter moves through a rolling transition before settling into its final position. The effect can feel like a slot mechanism, system readout, rotating glyph strip, or mechanical title sequence depending on timing and typography. The final state is the important part: the word resolves cleanly and stays readable.","Use Rolling Text when a brand word, product name, headline fragment, or short label deserves a sharper arrival. It works for developer tools, AI products, cyber interfaces, portfolio intros, launch pages, studio identities, and experimental hero sections where the typography should feel constructed, technical, or engineered.","The page job is identity. The visitor should remember the word, not the effort it took to read it. Rolling motion is useful when it gives the text presence. It becomes friction when the word keeps moving after the message has already landed."],"exampleUseCase":["A developer-tool homepage can use Rolling Text on the product name or primary hero word. The characters roll into place, resolve quickly, and give the brand name a technical, deliberate entrance before the supporting copy and CTA appear.","The outcome is memorability. The word feels constructed without becoming a puzzle.","A creative studio can use the same effect for project category labels, launch titles, or selected campaign headings where the typography needs a little mechanical energy without becoming a full kinetic sequence."],"bestFor":["Product names, logo-style wordmarks, and short hero words.","Developer-tool, AI, cyber, and technical brand pages where mechanical text motion fits the tone.","Portfolio and studio intros where the title needs a more authored entrance.","Campaign headings that should feel engineered, assembled, or activated.","Short labels where character motion can add craft without slowing the page."],"notFor":["Not for body copy, long headlines, legal text, documentation, form labels, pricing details, error messages, or instructions.","Not for phrases where every word carries essential information and needs immediate readability.","Not for endless loops beside a CTA. A rolling word is memorable once. After the fifth loop, it is just nervous typography."],"performance":["Keep the animated phrase short, animate transform and opacity, avoid layout-changing character movement, and clean up timers or animation instances when the component unmounts.","Do not run multiple Rolling Text effects in the same viewport unless the page is intentionally built around kinetic typography. Too many rolling words turn hierarchy into machinery noise."],"accessibility":["Expose the final word or phrase once to assistive technology. Do not make screen readers read every rolling character layer or transitional glyph.","On mobile, reduce stagger, travel distance, and replay behavior so the word resolves quickly on smaller screens. For reduced motion, render the final text immediately or use a short fade with no rolling character movement."],"commonMistakes":["Using Rolling Text on long sentences.","Letting character movement cause layout shift.","Making the rolling sequence too slow for a simple word.","Duplicating character layers without hiding decorative copies from assistive technology.","Looping the animation endlessly near important CTAs.","Using the effect on a word that is not important enough to earn the attention."],"faq":[{"question":"What is Rolling Text?","answer":"Rolling Text is a React text animation where letters roll, cycle, or shift into position before resolving into a readable word or short phrase."},{"question":"When should I use Rolling Text?","answer":"Use it for product names, logo-style text, short hero words, launch titles, and technical brand moments where the text should feel assembled or activated."},{"question":"Is Rolling Text good for long headlines?","answer":"No. Rolling Text works best on short display copy. Long headlines become harder to read when every character has to perform before the sentence lands."},{"question":"How do I keep Rolling Text accessible?","answer":"Render the final phrase as real text and expose it once. Hide duplicated rolling layers or decorative character fragments from assistive technology where needed."},{"question":"Does Rolling Text affect SEO?","answer":"Not if the final text renders as real HTML. Avoid placing the meaningful word only inside canvas, image layers, or decorative animation fragments."},{"question":"Should Rolling Text loop?","answer":"Usually no. Let the word roll in, settle, and stay readable. Looping should be reserved for controlled demo or decorative contexts, not primary page copy."},{"question":"What should reduced motion do for Rolling Text?","answer":"Show the final word immediately or with a minimal fade. Remove rolling movement, character cycling, stagger, and repeated replay."},{"question":"Can Hyperiux adapt Rolling Text for a real brand system?","answer":"Yes. A custom version should define typography rules, roll direction, stagger timing, character behavior, layout reservation, accessibility handling, mobile tuning, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/rolling-text","demoUrl":"https://vault.hyperiux.com/demo/rolling-text","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"text-convergence","title":"Text Convergence","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/text-convergence"},{"slug":"text-stream","title":"Text Stream","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-stream"}]},{"slug":"scramble-text","title":"Scramble Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A decode-style text animation where characters scramble briefly before resolving into readable, crawlable HTML text.","description":"Scramble Text for React: characters scramble, then resolve into real, crawlable HTML. Best for AI and developer-tool headlines, with a static fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add scramble-text","usage":"import ScrambleText from \"@/components/effects/scramble-text\";\n\nconst page = () => {\n  return (\n    <>\n     <ScrambleText\n                textSize={6}\n                textColor=\"#121212\"\n                align=\"left\"\n                className=\"font-black uppercase mb-8 leading-[0.88] max-md:leading-[1.2] max-sm:leading-[0.92]\"\n              />\n    </>\n  )\n}","props":[{"name":"speed","type":"number","default":0.6,"description":"Scramble character cycling speed."},{"name":"charType","type":"string","default":"uppercase","description":"Character set used while scrambling."},{"name":"textColor","type":"string","default":"#111111","description":"Text color."},{"name":"align","type":"string","default":"left","description":"Text alignment."},{"name":"duration","type":"number","default":0.7,"description":"Scramble reveal duration in seconds."},{"name":"stagger","type":"number","default":0.04,"description":"Delay between scrambled characters."},{"name":"textSize","type":"number","default":6,"description":"Headline size in vw (clamped between 2rem and 9rem)."},{"name":"initialOpacity","type":"number","default":0,"description":"Opacity of the characters before they decode (0 = hidden, 1 = fully visible)."}],"fixedText":true,"overview":["Scramble Text helps important words arrive with intent: letters resolve from noise into meaning.","Use it for headlines, launch claims, short section openers, and one-line proof points. Do not use it on long body copy, error messages, legal text, or instructions where legibility is non-negotiable.","The risk in production is losing the text to the animation. The final phrase must remain real DOM text, screen readers should not hear every animated character, and reduced-motion users should see the readable final state immediately."],"exampleUseCase":["An AI startup can use Scramble Text on its launch headline. When the line scrolls into view, each character cycles through random characters before settling, so the claim resolves from noise into a clear statement about what the model does.","The outcome is signal. The effect plays once and then leaves crawlable HTML text in place, so the headline still works for search and for visitors who arrive after the animation has finished."],"bestFor":["AI, developer-tool, and cyber headlines where signal resolving into meaning supports authority.","Short hero claims that can settle quickly into readable HTML text.","Scramble Text makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Not for body copy, labels, error messages, legal copy, or any text users need to read immediately."],"performance":["Animate only the phrase that matters, reserve layout space, and avoid expensive filters over large text blocks."],"accessibility":["Expose the complete phrase once for assistive technology. If characters are split visually, hide duplicated spans with aria-hidden when appropriate."],"commonMistakes":["Using Scramble Text on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Scramble Text?","answer":"Use it when a technical header needs letters resolving from noise into meaning."},{"question":"How do I keep Scramble Text accessible?","answer":"Keep the final phrase in the DOM and expose it once. Hide duplicated animated fragments from assistive technology when needed."},{"question":"Does Scramble Text affect SEO?","answer":"Not if the final text is real HTML and not hidden inside canvas or client-only animation."},{"question":"How do I avoid layout shift with Scramble Text?","answer":"Reserve final text space and keep line breaks stable across breakpoints."},{"question":"What should reduced motion do for Scramble Text?","answer":"Show the final readable state immediately, with no scramble, stagger, or looping motion."},{"question":"Can Hyperiux adapt Scramble Text for a real brand system?","answer":"Yes. A custom version should define motion rules, visual treatment, performance budget, fallback behavior, source handoff, and implementation notes for the specific page or launch context."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/scramble-text","demoUrl":"https://vault.hyperiux.com/demo/scramble-text","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"},{"slug":"mask-text-reveal","title":"Mask Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal"}]},{"slug":"slide-text-reveal","title":"Slide Text Reveal","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A restrained slide-in text animation for SaaS headlines, agency section intros, launch claims, and proof statements.","description":"Slide Text Reveal for React moves text into place for clean product sections where emphasis should stay readable. Reduced-motion and touch fallbacks included.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add slide-text-reveal","usage":"import SlideTextReveal from '@/components/effects/slide-text-reveal'\n\nconst page = () => {\n  return (\n   <>\n     <SlideTextReveal\n            animateOnScroll={false}\n            className=\"text-center\"\n          >\n            <h1 className=\"text-8xl max-md:text-6xl font-black leading-[0.92] tracking-tight text-white\">\n              Slide From Right\n            </h1>\n          </SlideTextReveal>\n   </>\n  )\n}","props":[{"name":"animateOnScroll","type":"boolean","default":true,"description":"Runs reveal on scroll."},{"name":"delay","type":"number","default":0,"description":"Animation delay in seconds."},{"name":"duration","type":"number","default":0.5,"description":"Character reveal duration in seconds."},{"name":"horizontalOffset","type":"number","default":20,"description":"Starting horizontal offset in pixels."},{"name":"stagger","type":"number","default":0.03,"description":"Delay between revealed characters."},{"name":"variant","type":"string","default":"right","description":"Slide direction."}],"overview":["Slide Text Reveal helps important words arrive with intent: text moves into place with restraint.","Reach for it on headlines, launch claims, section openers, and one-line proof. Keep it away from body copy, error messages, legal text, and instructions, where reading has to be effortless.","In production, the risk is that the words get lost in the motion. The resolved phrase has to be real DOM text, the animation must not spell itself out to a screen reader, and a reduced-motion visitor should land on the final, readable state at once."],"exampleUseCase":["A branding agency can use Slide Text Reveal on its case study pages, for the short line that opens each project and the headers between chapters. The characters slide in from the side and fade in as the section enters view, giving each chapter a quiet sense of momentum.","The outcome is pace. Visitors feel the story move forward, and once the motion ends the text reads instantly, alongside project credits and body copy that stay still."],"bestFor":["SaaS and agency section intros where the claim should arrive with quiet momentum.","Short launch copy that benefits from motion but still reads instantly afterward.","Slide Text Reveal makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Not for body text, labels, errors, legal copy, or anything a user must read right away."],"performance":["Limit motion to the phrase that earns it, hold its layout space ahead of time, and keep heavy filters off large blocks of text."],"accessibility":["Make the whole phrase available to assistive technology a single time; where the text is split into per-character spans, mark the duplicates aria-hidden."],"commonMistakes":["Using Slide Text Reveal on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Slide Text Reveal?","answer":"Use it when a heading needs text moving into place with restraint."},{"question":"How do I keep Slide Text Reveal accessible?","answer":"Ship the final phrase in the DOM and surface it a single time, hiding duplicated animated fragments from assistive technology where needed."},{"question":"Does Slide Text Reveal affect SEO?","answer":"Not when the final text ships as real HTML rather than living inside canvas or client-only animation."},{"question":"How do I avoid layout shift with Slide Text Reveal?","answer":"Pre-reserve the final text's space so line breaks stay put across breakpoints."},{"question":"What should reduced motion do for Slide Text Reveal?","answer":"Render the settled, legible text at once, with no scrambling, staggering, or looping."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/slide-text-reveal","demoUrl":"https://vault.hyperiux.com/demo/slide-text-reveal","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"},{"slug":"mask-text-reveal","title":"Mask Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal"}]},{"slug":"spotlight-text","title":"Spotlight Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A moving-highlight text effect that guides attention across selected words, metrics, and short product claims.","description":"Spotlight Text for React lights selected words for short claims, product proof, and landing-page emphasis. Built to stay readable with motion off.","tags":["Vanilla JS"],"dependencies":[],"install":"npx hyperiux add spotlight-text","usage":"import SpotlightText from \"@/components/effects/spotlight-text\";\n\nconst page = () => {\n  return (\n    <>\n      <div className=\"h-screen flex flex-col items-center mx-auto justify-center gap-25 bg-black\">\n     <SpotlightText\n          size=\"text-3xl\"\n          className=\"max-w-4xl mx-auto max-sm:w-[80%] max-md:w-[90%]\"\n        />\n      </div>\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"baseTextColor","type":"string","default":"#525252","description":"Dim base text color."},{"name":"spotlightColor","type":"string","default":"#ffffff","description":"Text color inside the spotlight."},{"name":"lerp","type":"number","default":0.08,"description":"Pointer-follow smoothing amount; higher values track faster."},{"name":"spotlightSize","type":"number","default":220,"description":"Spotlight radius in pixels."},{"name":"smoothness","type":"number","default":0.12,"description":"Spotlight opacity smoothing amount."},{"name":"size","type":"string","default":"text-3xl md:text-5xl","description":"Tailwind font-size classes for the text."}],"fixedText":true,"overview":["Spotlight Text helps important words arrive with intent: a highlight moves across the words.","Best on short, high-emphasis text: headlines, launch lines, section openers, proof points. Avoid it on body copy, errors, legal text, or instructions, where legibility cannot be negotiable.","The thing to watch is the text disappearing into the effect. Ship the final phrase as genuine HTML, keep per-character motion out of the accessibility tree, and serve the settled, legible text immediately when motion is reduced."],"exampleUseCase":["A sustainability report microsite can use Spotlight Text on a short impact statement near the top of the page. The sentence starts in a muted tone, and a soft highlight follows the visitor's cursor, brightening the words underneath as they read across the claim.","The outcome is focus. On touch devices and smaller screens the full sentence shows in the highlight color instead, so the statement never depends on hover to be read. Detailed figures and methodology sit below as ordinary text."],"bestFor":["Short claims, metrics, or product phrases where one phrase needs guided emphasis.","Text moments where the highlight supports attention without hiding the sentence.","Spotlight Text makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Avoid it on body copy, labels, error and legal text, or any wording that has to be read on sight."],"performance":["Move only the words that carry weight, pre-reserve their space to avoid shift, and skip costly filters on large text blocks."],"accessibility":["Assistive technology should hear the phrase once, not character by character; visually split fragments are hidden from the accessibility tree with aria-hidden."],"commonMistakes":["Using Spotlight Text on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Spotlight Text?","answer":"Use it when a headline needs a highlight moving across the words."},{"question":"How do I keep Spotlight Text accessible?","answer":"Keep the resolved phrase in the DOM, exposed once; mark any duplicated animated fragments hidden from assistive technology."},{"question":"Does Spotlight Text affect SEO?","answer":"Not as long as the resolved text is genuine HTML and never trapped in canvas or client-only animation."},{"question":"How do I avoid layout shift with Spotlight Text?","answer":"Hold the finished text's footprint so wrapping does not jump between breakpoints."},{"question":"What should reduced motion do for Spotlight Text?","answer":"Land directly on the finished, readable text: no character scramble, no stagger, no loop."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/spotlight-text","demoUrl":"https://vault.hyperiux.com/demo/spotlight-text","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"},{"slug":"mask-text-reveal","title":"Mask Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal"}]},{"slug":"text-cloning","title":"Text Cloning","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A layered canvas text animation that stacks outline copies of a short word behind it and shifts them with the pointer to create depth, motion, and experimental headline energy.","description":"Text Cloning for React stacks outline copies of a word on a canvas and shifts them with the pointer for experimental headings. Pair it with a real HTML heading.","tags":["Canvas"],"dependencies":[],"install":"npx hyperiux add text-cloning","usage":"import TextCloning from \"@/components/effects/text-cloning\";\n\nconst page = () => {\n  return (\n    <>\n     <TextCloning />\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"cloneCount","type":"number","default":9,"description":"Number of text clone layers rendered."},{"name":"offset","type":"number","default":220,"description":"Maximum pointer parallax distance between clone layers."},{"name":"textColor","type":"string","default":"#f5f5f5","description":"Clone and center text color."},{"name":"textSize","type":"number","default":1,"description":"Text size multiplier."}],"fixedText":true,"overview":["Text Cloning gives important words pointer-driven depth: duplicated outline text shifts as the cursor or finger moves.","Use it for wordmarks, brand names, and one or two word display moments in a full-screen hero. Do not use it on long body copy, error messages, legal text, or instructions where legibility is non-negotiable.","The main risk is losing the text to the animation. The phrase is drawn on a canvas, not as DOM text, so add it once as real HTML or an aria-label, and know that reduced-motion users still see up to three layers that follow the pointer without easing."],"exampleUseCase":["A record label can use Text Cloning for an artist's name on a release page. Layered copies of the name stack back into depth behind the main word and shift as the visitor moves the pointer or touches the screen, turning a simple wordmark into a moving piece of artwork.","The outcome is energy. The canvas is decorative, so pair it with a real HTML heading carrying the same name, and keep track listings, tour dates, and ticket links in normal text."],"bestFor":["Wordmarks, brand names, and short claims where duplicated layers can create motion depth.","Brand moments where you also render the phrase as hidden HTML text, since the canvas itself exposes nothing to assistive technology.","Text Cloning gives a short phrase pointer-driven depth, so pair it with a real HTML heading to keep the words readable and indexable."],"notFor":["Not for body copy, labels, error messages, legal copy, or any text users need to read immediately."],"performance":["Animate only the phrase that matters, reserve layout space, and avoid expensive filters over large text blocks."],"accessibility":["Expose the complete phrase once for assistive technology. The canvas has no label and no DOM text, so add an aria-label or a visually hidden heading; on touch screens the layers follow the finger."],"commonMistakes":["Using Text Cloning on long body copy.","Shipping the canvas alone without a real HTML copy of the phrase.","Using a long phrase, since the text shrinks to fit the viewport width on one line."],"faq":[{"question":"When should I use Text Cloning?","answer":"Use it when a display heading needs duplicated text creating motion depth."},{"question":"How do I keep Text Cloning accessible?","answer":"The phrase is drawn on a canvas, so add it once as real HTML text or as an aria-label on the canvas. The clones are pixels and are never announced."},{"question":"Does Text Cloning affect SEO?","answer":"Yes, the text is drawn inside a canvas, so search engines do not see it. Render the same phrase as real HTML, such as a visually hidden h1."},{"question":"How do I avoid layout shift with Text Cloning?","answer":"The canvas is fixed to the full viewport, so it does not shift layout. The text sits on one line and scales to fit the screen width."},{"question":"What should reduced motion do for Text Cloning?","answer":"Under prefers-reduced-motion it drops to three layers and follows the pointer without easing, so nothing drifts. The layers still shift when the pointer moves."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-cloning","demoUrl":"https://vault.hyperiux.com/demo/text-cloning","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"},{"slug":"mask-text-reveal","title":"Mask Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal"}]},{"slug":"text-fill-animation","title":"Text Fill Animation","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A text fill animation that adds visual emphasis to short phrases, metrics, proof points, and high-impact statements.","description":"Text Fill for React fills short phrases with motion for metrics, proof points, and statements that need a visual charge. Keeps content crawlable and accessible.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add text-fill-animation","usage":"import TextFillAnimation from \"@/components/effects/text-fill-animation\";\n\nconst page = () => {\n  return (\n    <>\n      <TextFillAnimation\n         text=\"Design systems should feel effortless, not like you're fighting your own components every time you build.\"\n         textSize=\"3vw\"\n         textWidth=\"60%\"\n         textColor=\"#111111\"\n         primaryColor=\"#ff6b00\"\n         dimColor=\"#AAAAAA\"\n         backgroundColor=\"#F0EFE9\"\n         id=\"hero-break\"\n         containerClassName=\"\"\n         mobileTextSize=\"8vw\"\n         mobileTextWidth=\"92%\"\n         tabletTextSize=\"6vw\"\n         tabletTextWidth=\"88%\"\n       />\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"text","type":"string","default":"Design systems should feel effortless, not like you're fighting your own components every time you build.","description":"Text filled on scroll."},{"name":"textColor","type":"string","default":"#111111","description":"Final text color."},{"name":"primaryColor","type":"string","default":"#ff6b00","description":"Highlight color."},{"name":"dimColor","type":"string","default":"#AAAAAA","description":"Initial dimmed text color."},{"name":"backgroundColor","type":"string","default":"#F0EFE9","description":"Section background color."},{"name":"duration","type":"number","default":0.4,"description":"Character fill animation duration in seconds."},{"name":"stagger","type":"number","default":0.05,"description":"Delay offset between each animated character."},{"name":"fillWidth","type":"number","default":1,"description":"Width of the color fill sweep band applied to each character."},{"name":"textSize","type":"string","default":"5vw","description":"Desktop font size as a CSS length."},{"name":"textWidth","type":"string","default":"80%","description":"Desktop text block width as a CSS length."},{"name":"tabletTextSize","type":"string","default":"6.5vw","description":"Font size as a CSS length at 768-1024px."},{"name":"tabletTextWidth","type":"string","default":"88%","description":"Text block width as a CSS length at 768-1024px."},{"name":"mobileTextSize","type":"string","default":"8vw","description":"Font size as a CSS length below 768px."},{"name":"mobileTextWidth","type":"string","default":"95%","description":"Text block width as a CSS length below 768px."}],"overview":["Text Fill helps important words arrive with intent: text fill.","Reach for it on headlines, launch claims, section openers, and one-line proof. Keep it away from body copy, error messages, legal text, and instructions, where reading has to be effortless.","The production risk is that the words get lost in the motion. The resolved phrase has to be real DOM text, the animation must not spell itself out to a screen reader, and a reduced-motion visitor should land on the final, readable state at once."],"exampleUseCase":["A product design agency can use Text Fill Animation for the one-sentence belief statement on its about page. The section holds in place while the visitor scrolls, and the characters fill in sequence from a dim tone, through a brief accent color, to the final text color.","The outcome is emphasis. The statement is read at the pace of the scroll, so the agency's position lands before the team bios and client list begin."],"bestFor":["Hero and pricing phrases where fill progression can reinforce emphasis.","Short statements where colour or weight changes support meaning without replacing it.","Text Fill makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Not for body text, labels, errors, legal copy, or anything a user must read right away."],"performance":["Limit motion to the phrase that earns it, hold its layout space ahead of time, and keep heavy filters off large blocks of text."],"accessibility":["Make the whole phrase available to assistive technology a single time; where the text is split into per-character spans, mark the duplicates aria-hidden."],"commonMistakes":["Using Text Fill on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Text Fill?","answer":"Use it when a headline needs its fill animating in to add emphasis."},{"question":"How do I keep Text Fill accessible?","answer":"Ship the final phrase in the DOM and surface it a single time, hiding duplicated animated fragments from assistive technology where needed."},{"question":"Does Text Fill affect SEO?","answer":"Not when the final text ships as real HTML rather than living inside canvas or client-only animation."},{"question":"How do I avoid layout shifts with Text Fill?","answer":"Pre-reserve the final text's space so line breaks stay put across breakpoints."},{"question":"What should reduced motion do for Text Fill?","answer":"Render the settled, legible text at once, with no scrambling, staggering, or looping."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-fill-animation","demoUrl":"https://vault.hyperiux.com/demo/text-fill-animation","related":[{"slug":"split-canvas","title":"Split Canvas","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/split-canvas"},{"slug":"interactive-list-preview","title":"Interactive List Preview","docsUrl":"https://vault.hyperiux.com/effects/components/interactive-list-preview"},{"slug":"stack-loader","title":"Stack Loader","docsUrl":"https://vault.hyperiux.com/effects/loaders/stack-loader"}]},{"slug":"text-hover","title":"Text Hover Expand","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"An interactive text effect that expands short words or labels on hover for editorial links, playful navigation, and desktop brand moments.","description":"Text Hover Expand for React stretches short labels on hover for editorial links and playful navigation moments. Degrades cleanly on low-power devices.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add text-hover","usage":"import TextHover from '@/components/effects/text-hover'\n\nconst page = () => {\n  return (\n   <>\n   <TextHover/>\n   </>\n  )\n}","props":[{"name":"bgColor","type":"string","default":"#0a0a0a","description":"Section background color."},{"name":"textColor","type":"string","default":"#ffffff","description":"Inactive text and description color."},{"name":"hoverColor","type":"string","default":"#ffffff","description":"Active text and corner-frame color."},{"name":"duration","type":"number","default":0.35,"description":"Hover frame animation duration in seconds."}],"fixedText":true,"overview":["Text Hover Expand helps important words arrive with intent: hover expands the word without replacing it.","Best on short, high-emphasis text: headlines, launch lines, section openers, proof points. Avoid it on body copy, errors, legal text, or instructions, where legibility cannot be negotiable.","The risk in production is the text disappearing into the effect. Ship the final phrase as genuine HTML, keep per-character motion out of the accessibility tree, and serve the settled, legible text immediately when motion is reduced."],"exampleUseCase":["A creative studio can use Text Hover Expand for a services index on its homepage. Each discipline is listed as a short uppercase label, and hovering one swaps it for a larger version, opens a one-line description beneath it, and moves a corner-bracket frame onto the active item.","The outcome is exploration. The list stays compact until a visitor shows interest, and on touch screens each label opens with a tap, so nothing is locked behind hover."],"bestFor":["Optional hover labels, nav accents, or editorial links where expansion adds exploration.","Desktop moments that still keep the word readable without hover.","Text Hover Expand makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Avoid it on body copy, labels, error and legal text, or any wording that has to be read on sight."],"performance":["Move only the words that carry weight, pre-reserve their space to avoid shift, and skip costly filters on large text blocks."],"accessibility":["Assistive technology should hear the phrase once, not character by character; visually split fragments are hidden from the accessibility tree with aria-hidden."],"commonMistakes":["Using Text Hover Expand on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Text Hover Expand?","answer":"Use it when an interactive heading needs hover to expand a word without replacing it."},{"question":"How do I keep Text Hover Expand accessible?","answer":"Keep the resolved phrase in the DOM, exposed once; mark any duplicated animated fragments hidden from assistive technology."},{"question":"Does Text Hover Expand affect SEO?","answer":"Not as long as the resolved text is genuine HTML and never trapped in canvas or client-only animation."},{"question":"How do I avoid layout shift with Text Hover Expand?","answer":"Hold the finished text's footprint so wrapping does not jump between breakpoints."},{"question":"What should reduced motion do for Text Hover Expand?","answer":"Land directly on the finished, readable text: no character scramble, no stagger, no loop."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-hover","demoUrl":"https://vault.hyperiux.com/demo/text-hover","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"},{"slug":"mask-text-reveal","title":"Mask Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal"}]},{"slug":"text-stream","title":"Text Stream","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"pro","summary":"A signal-like text animation that makes short technical headlines feel like data, motion, or language flowing through a line.","description":"Text Stream for React gives copy a signal-like flow for technical, AI, and developer-tool hero lines. Source you own, with a static fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add text-stream","usage":"import TextStream from \"@/components/effects/text-stream\";\n\nconst page = () => {\n  return (\n    <>\n      <TextStream />\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"speed","type":"number","default":1,"description":"Streaming speed multiplier."},{"name":"verticalSpacing","type":"number","default":0.08,"description":"Vertical spacing between streamed lines."},{"name":"textColor","type":"string","default":"#ffffff","description":"Text color."},{"name":"backgroundColor","type":"string","default":"#000000","description":"Background color behind the stream."},{"name":"autoplay","type":"boolean","default":true,"description":"Keeps the stream drifting on its own when idle."},{"name":"runOnScroll","type":"boolean","default":true,"description":"Boosts and reverses the stream in response to scroll or wheel input."}],"fixedText":true,"overview":["Text Stream helps important words arrive with intent: text flows like signal through a line.","Use it for headlines, launch claims, short section openers, and one-line proof points. Do not use it on long body copy, error messages, legal text, or instructions where legibility is non-negotiable.","In production, the risk is losing the text to the animation. The final phrase must remain real DOM text, screen readers should not hear every animated character, and reduced-motion users should see the readable final state immediately."],"exampleUseCase":["A data infrastructure startup can use Text Stream in its homepage hero. The company name stays fixed on the left while short phrases about what the platform does stream vertically beside it, with one line highlighted at a time to complete the sentence.","The outcome is momentum. The stream runs on its own and speeds up when the visitor scrolls, so the hero feels like live signal rather than a static tagline. It works best with short phrases that each make sense on their own."],"bestFor":["Technical launch lines where streaming motion reinforces signal, data, or computation.","Short hero phrases that can move once and settle cleanly.","Text Stream makes a short phrase arrive with timing while keeping the final text readable and indexable."],"notFor":["Not for body copy, labels, error messages, legal copy, or any text users need to read immediately."],"performance":["Animate only the phrase that matters, reserve layout space, and avoid expensive filters over large text blocks."],"accessibility":["Expose the complete phrase once for assistive technology. If characters are split visually, hide duplicated spans with aria-hidden when appropriate."],"commonMistakes":["Using Text Stream on long body copy.","Removing the readable text from the DOM.","Letting split text cause layout shift."],"faq":[{"question":"When should I use Text Stream?","answer":"Use it when a technical heading needs text flowing like signal through a line."},{"question":"How do I keep Text Stream accessible?","answer":"Keep the final phrase in the DOM and expose it once. Hide duplicated animated fragments from assistive technology when needed."},{"question":"Does Text Stream affect SEO?","answer":"Not if the final text is real HTML and not hidden inside canvas or client-only animation."},{"question":"How do I avoid layout shift with Text Stream?","answer":"Reserve final text space and keep line breaks stable across breakpoints."},{"question":"What should reduced motion do for Text Stream?","answer":"Show the final readable state immediately, with no scramble, stagger, or looping motion."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-stream","demoUrl":"https://vault.hyperiux.com/demo/text-stream","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"},{"slug":"mask-text-reveal","title":"Mask Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/mask-text-reveal"}]},{"slug":"typing-text","title":"Typing Text","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A typewriter-style text animation for developer tools, AI products, security pages, and technical brand moments where the copy should feel like it is being executed, not merely displayed.","description":"Typing Text for React types short lines into view with a cursor-led rhythm for developer tools, AI pages, security sections, and product intros.","tags":["CSS"],"dependencies":[],"install":"npx hyperiux add typing-text","usage":"import TypingText from \"@/components/effects/typing-text\";\n\nconst page = () => {\n  return (\n    <>\n    <TypingText/>\n</>\n  )\n}","props":[{"name":"variant","type":"string","default":"sequential","description":"Typing sequence variant."},{"name":"textColor","type":"string","default":"#d8d8d8","description":"Typed text color."},{"name":"cursorColor","type":"string","default":"#f59e0b","description":"Cursor color."},{"name":"backgroundColor","type":"string","default":"#121212","description":"Background color."},{"name":"fontSize","type":"number","default":2.4,"description":"Text size in vw units."},{"name":"fontWeight","type":"number","default":500,"description":"Font weight."},{"name":"lineHeight","type":"number","default":1.55,"description":"Line height."},{"name":"textAlign","type":"string","default":"left","description":"Text alignment."},{"name":"maxWidth","type":"number","default":80,"description":"Maximum text block width in vw units."},{"name":"charactersPerSecond","type":"number","default":18,"description":"Typing speed."},{"name":"animationDuration","type":"number","default":1,"description":"Multiplier applied to each line typing duration."},{"name":"lineDelay","type":"number","default":0.5,"description":"Delay between line starts."},{"name":"holdDuration","type":"number","default":1.4,"description":"Hold time before loop reset."},{"name":"typingDirection","type":"string","default":"left-to-right","description":"Direction the text types from."},{"name":"blur","type":"number","default":0,"description":"Starting blur in pixels."},{"name":"rotate","type":"number","default":0,"description":"Starting X rotation in degrees."},{"name":"scale","type":"number","default":1,"description":"Starting scale before the line settles."},{"name":"perspective","type":"number","default":800,"description":"Perspective depth for rotated typing."},{"name":"cursorStyle","type":"string","default":"bar","description":"Cursor visual style."},{"name":"cursorWidth","type":"number","default":3,"description":"Cursor thickness in pixels."},{"name":"showCursor","type":"boolean","default":true,"description":"Shows the animated cursor."},{"name":"lines","type":"string[]","default":["Opening the vault handshake...","Verifying encrypted component keys.","Loading protected motion presets.","Vault access granted. Hyperiux assets are ready."],"description":"Lines to type, one string per line."}],"overview":["Typing Text reveals short lines of copy one character at a time.","The effect gives a message a technical cadence. It can make a product intro feel like a terminal output, a system check, a command sequence, or a status readout. It works best when the language already belongs to that world.","Use Typing Text when a product message benefits from procedural rhythm. It works well for developer tools, cybersecurity products, AI interfaces, onboarding moments, product intros, command-line references, and brand sections where the language already fits a system-like tone.","The page job is controlled anticipation. The visitor should feel the message arriving step by step without being forced to wait for basic comprehension. The typing effect can create tension, but the final copy still has to land quickly and remain readable."],"exampleUseCase":["A developer-tool landing page can use Typing Text in a hero section to introduce an install sequence, product capability, or system-status metaphor. The typed lines create a small sense of technical progress before the CTA appears.","The outcome is signal. The page feels more native to a developer audience because the copy behaves like a system interaction rather than a marketing headline dressed as one."],"bestFor":["Developer-tool and CLI pages where command-like or system-like copy fits naturally.","Cybersecurity and infrastructure pages where status messages support the product language.","AI product sections where typed output can frame automation, reasoning, or setup.","Short onboarding or hero moments where staged text helps build attention."],"notFor":["Not for body copy, legal text, error messages, instructions, long explanations, pricing details, or anything users need to read immediately.","Not for fake security, fake loading, fake progress, or fake system claims. A typing cursor does not make a vague claim more technical. It only makes it arrive slower."],"performance":["Keep the number of animated lines small, avoid updating layout-heavy state on every character when unnecessary, reserve the final text area, and clean up timers when the component unmounts. Do not loop long typed sequences near important reading or conversion areas."],"accessibility":["Expose the final text once. Do not make screen readers announce every character as it types. On mobile, reduce line count, keep line breaks stable, and avoid tiny terminal-style copy that becomes hard to read. For reduced motion, show the final text immediately or use a short fade."],"commonMistakes":["Typing long paragraphs character by character.","Making the animation loop endlessly beside a CTA.","Using terminal language for a product that has nothing to do with technical workflows.","Announcing every typed character to assistive technology.","Letting line wrapping change while the text types.","Using fake progress language that implies a real system check."],"faq":[{"question":"What is Typing Text?","answer":"Typing Text is a React text animation that reveals short lines of copy character by character with a cursor-led typewriter or terminal rhythm."},{"question":"When should I use Typing Text?","answer":"Use it when the copy benefits from a system-like cadence: developer tools, AI products, cybersecurity pages, command references, onboarding sequences, or technical brand moments."},{"question":"Should Typing Text loop?","answer":"Usually no. Let the message type once, resolve, and stay readable. Looping can work in a demo, but on a production page it often becomes distracting."},{"question":"How do I keep Typing Text accessible?","answer":"Expose the final phrase or line group once to assistive technology. Avoid making screen readers announce every character, cursor blink, or intermediate typing state."},{"question":"Does Typing Text affect SEO?","answer":"Not if the final text renders as real HTML. Avoid trapping the only meaningful copy inside client-only animation state."},{"question":"What should reduced motion do for Typing Text?","answer":"Show the final text immediately or use a short fade. Remove character-by-character typing, cursor blinking, long delays, and repeated loops."},{"question":"Can Hyperiux adapt Typing Text for a real brand system?","answer":"Yes. A custom version should define line structure, typing rhythm, cursor style, timing rules, technical language boundaries, accessibility handling, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/typing-text","demoUrl":"https://vault.hyperiux.com/demo/typing-text","related":[{"slug":"scramble-text","title":"Scramble Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/scramble-text"},{"slug":"drop-text","title":"Drop Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/drop-text"},{"slug":"pixel-text-fill","title":"Pixel Text Fill","docsUrl":"https://vault.hyperiux.com/effects/text-animations/pixel-text-fill"},{"slug":"text-stream","title":"Text Stream","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-stream"},{"slug":"glitchy-text","title":"Glitchy Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/glitchy-text"}]},{"slug":"variable-text-proximity","title":"Variable Text Proximity","category":{"id":"text","slug":"text-animations","name":"Text Animations"},"tier":"free","summary":"A cursor-reactive text animation for hero copy, editorial statements, portfolio intros, and technical landing pages where typography should feel responsive without losing readability.","description":"Variable Text Proximity for React makes letters respond to cursor distance with variable-font weight for interactive hero copy and editorial text.","tags":["Motion"],"dependencies":["motion"],"install":"npx hyperiux add variable-text-proximity","usage":"import VariableTextProximity from \"@/components/effects/variable-text-proximity\";\n\nconst page = () => {\n return (\n <>\n <VariableTextProximity/>\n </>\n )\n}\n\n\nexport default page","props":[{"name":"radius","type":"number","default":100,"description":"Pointer influence radius."},{"name":"falloff","type":"string","default":"linear","description":"How quickly the font variation fades with distance."},{"name":"baseWeight","type":"number","default":300,"description":"Font weight away from the pointer."},{"name":"hoverWeight","type":"number","default":800,"description":"Font weight nearest the pointer."},{"name":"backgroundColor","type":"string","default":"#080808","description":"Demo background color."},{"name":"textColor","type":"string","default":"#ffffff","description":"Text color."},{"name":"fontSize","type":"number","default":55,"description":"Paragraph font size in pixels."},{"name":"lineHeight","type":"number","default":1.18,"description":"Paragraph line height."},{"name":"width","type":"number","default":80,"description":"Paragraph width as a percentage of its container."},{"name":"italic","type":"boolean","default":false,"description":"Slant nearby letters toward italic on pointer proximity."}],"fixedText":true,"overview":["Variable Text Proximity turns a paragraph into a responsive typographic surface.","Each character reacts to its distance from the pointer. Letters closest to the cursor gain visual weight first, nearby glyphs respond with softer intensity, and the full line settles back when the pointer moves away. The effect makes the text feel alive without changing the words, breaking the sentence, or turning the paragraph into a decorative canvas.","Use Variable Text Proximity when the page needs a subtle interaction layer around important copy. It works for short hero statements, creative portfolio intros, technical brand lines, studio manifestos, experimental editorial blocks, and product pages where the typography should reward exploration.","The page job is tactile reading. The visitor should still read the message normally, but the text should feel like it knows where attention is moving. The interaction is not there to hide the copy. It is there to make the copy feel closer."],"exampleUseCase":["A creative studio homepage can use Variable Text Proximity on a short manifesto line. As the visitor moves across the copy, the nearest words gain weight and settle back, making the statement feel physically responsive.","The outcome is attention with touch. The visitor experiences craft at the typography level without losing the sentence, the CTA, or the page structure.","A developer-tool or AI product page can use the same effect for a short technical claim, especially when the brand wants the interface to feel precise, reactive, and engineered rather than simply animated."],"bestFor":["Hero statements where the copy should feel responsive to the visitor’s attention.","Creative portfolio intros where typographic interaction is part of the brand signal.","Developer-tool, AI, and technical pages where proximity behavior supports a precise interface mood.","Editorial sections where one short paragraph can carry a tactile interaction.","Brand manifestos where the words need subtle motion without becoming unreadable."],"notFor":["Not for long body copy, documentation, legal text, pricing details, error messages, form labels, instructions, or dense educational content.","Not for mobile-first pages where pointer proximity cannot be reproduced meaningfully.","Not for weak copy. Variable text can make a sentence feel alive; it cannot make a vague sentence worth reading."],"performance":["Keep the text block short, throttle pointer work with requestAnimationFrame, avoid React state updates for every character on every pointer event, and clean up listeners on unmount. Cache character positions and recalculate only when layout changes.","Avoid applying proximity calculations to long paragraphs or multiple large text blocks in the same viewport. Every letter does not need its own gym membership."],"accessibility":["Expose the full sentence once as readable text. Do not make screen readers read every individually wrapped character. Maintain text selection, contrast, focus visibility, and normal reading order.","On touch devices, use a static final text state, a tap-safe simplified interaction, or disable proximity behavior entirely. For reduced motion, remove pointer-reactive changes and render the normal readable text without weight shifting."],"commonMistakes":["Splitting every character without preserving accessible text.","Using the effect on long paragraphs where reading speed matters.","Updating layout-heavy state on every pointer move.","Choosing a font that does not support the intended variable axis.","Making letters change so dramatically that the sentence becomes harder to read.","Forgetting that touch users do not have cursor proximity."],"faq":[{"question":"What is Variable Text Proximity?","answer":"Variable Text Proximity is a React text animation where letters respond to cursor distance, often by changing variable-font weight, width, grade, or optical size."},{"question":"When should I use Variable Text Proximity?","answer":"Use it for short hero copy, editorial statements, portfolio intros, technical brand lines, and interactive typography moments where the text should react to attention."},{"question":"Does Variable Text Proximity require a variable font?","answer":"It works best with a variable font because the weight or width can interpolate smoothly. Without one, the effect may need a simpler font-weight, scale, opacity, or class-based fallback."},{"question":"Is Variable Text Proximity good for paragraphs?","answer":"Only short display paragraphs. It is not meant for long reading, documentation, policy copy, or dense product explanations."},{"question":"How do I keep Variable Text Proximity accessible?","answer":"Keep the complete phrase available as readable text and expose it once to assistive technology. If characters are individually wrapped for animation, hide decorative duplicates or provide a clean accessible label."},{"question":"How should it behave on mobile?","answer":"Disable cursor proximity, show a stable text state, or use a simplified tap-safe version. Do not force desktop pointer behavior onto touch screens."},{"question":"What should reduced motion do?","answer":"Remove pointer-reactive weight shifting and show the normal readable text. A static variable-font setting is fine; continuous proximity motion should be disabled."},{"question":"Can Hyperiux adapt Variable Text Proximity for a real brand system?","answer":"Yes. A custom version should define font selection, variable axes, proximity radius, weight range, smoothing, layout constraints, accessibility handling, mobile fallback, reduced-motion behavior, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/text-animations/variable-text-proximity","demoUrl":"https://vault.hyperiux.com/demo/variable-text-proximity","related":[{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"text-convergence","title":"Text Convergence","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/text-convergence"},{"slug":"text-stream","title":"Text Stream","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-stream"}]},{"slug":"dither-canvas","title":"Dither Canvas","category":{"id":"backgrounds","slug":"backgrounds","name":"Animated Backgrounds"},"tier":"pro","summary":"A grainy canvas background that adds computational texture behind hero copy, product sections, and technical brand moments.","description":"Dither Canvas for React adds grainy computational texture behind short hero copy for technical, editorial, and AI brand pages. Includes a clean mobile fallback.","tags":["Canvas shader"],"dependencies":[],"install":"npx hyperiux add dither-canvas","usage":"import DitherCanvas from \"@/components/effects/dither-canvas\";\n\nexport default function Page() {\n  return (\n    <main className=\"relative min-h-screen w-screen overflow-hidden bg-black\">\n       <DitherCanvas\n        charColumns={100}\n        colorizeFromVideo\n        videoZoom={1.9}\n        charZoom={0.9}\n        spellBrightChars\n      />\n    </main>\n  );\n}","props":[{"name":"videoSrc","type":"string","default":"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/binary-effect-video.mp4","description":"Video source URL used by the effect."},{"name":"charColumns","type":"number","default":145,"description":"Controls the density of generated character columns."},{"name":"colorizeFromVideo","type":"boolean","default":false,"description":"Uses video color data instead of fixed monochrome characters."},{"name":"videoZoom","type":"number","default":1,"description":"Zoom level applied to the video source."},{"name":"charZoom","type":"number","default":1,"description":"Scale factor for the rendered character grid."},{"name":"spellBrightChars","type":"boolean","default":false,"description":"Uses bright sampled areas to spell the configured character phrase."},{"name":"colorBoost","type":"number","default":1.4,"description":"Boosts sampled color intensity."},{"name":"disableMobileCursor","type":"boolean","default":true,"description":"Disables cursor interaction on mobile layouts."},{"name":"cursorHint","type":"string","default":"Move your cursor to see the binary fluid distortion effect.","description":"Instructional cursor hint text."},{"name":"showMobileMessage","type":"boolean","default":true,"description":"Shows or hides the mobile message overlay."},{"name":"className","type":"string","default":"","description":"Additional class names for the root canvas element."}],"overview":["Dither Canvas creates a supporting surface: a grainy digital texture gives the hero signal.","Use it behind hero copy, product sections, and technical brand moments where the background should make the page feel engineered without asking the browser to run a cinematic universe.","The main risk is readability. Headlines, body copy, fields, and CTAs must stay clear above the layer. The effect should be easy to freeze, lower in density, or replace with a static texture on mobile and reduced-motion contexts."],"exampleUseCase":["A robotics company can use Dither Canvas behind the hero of a product announcement. A short clip of the machine in motion is rendered as a dense field of characters, and moving the cursor distorts the field like fluid while the headline sits in clear HTML on top.","The outcome is texture with signal. The page feels computational before the visitor reads a word. In production, preserve readable HTML above the surface, cap animation cost, pause offscreen work, and provide a static fallback."],"bestFor":["Technical and editorial heroes where grain, signal, or computational texture supports the claim.","Short, high-contrast sections that can pause animation or swap to a static texture.","Dither Canvas adds atmosphere behind the message without making the background the product."],"notFor":["Not for low-contrast text sections, long reading pages, or pages already carrying heavy video/WebGL cost."],"performance":["Keep density low enough to protect text, pause animated canvas work offscreen, and provide a static CSS/image fallback."],"accessibility":["Decorative backgrounds should be hidden from assistive technology. On mobile, reduce density and keep foreground contrast high."],"commonMistakes":["Letting Dither Canvas compete with foreground text.","Animating canvas work offscreen.","Choosing canvas/WebGL when CSS would do the job."],"faq":[{"question":"When should I use Dither Canvas?","answer":"Use it when a grainy digital texture gives the hero signal supports the foreground message without harming readability."},{"question":"Can Dither Canvas ship without WebGL?","answer":"Yes if the visual can be handled with CSS or canvas. Do not reach for WebGL unless the hero needs shader-led depth."},{"question":"How do I protect text contrast with Dither Canvas?","answer":"Use masks, fades, lower opacity, and density controls around headings, forms, and CTAs."},{"question":"Should Dither Canvas pause offscreen?","answer":"Animated canvas variants should pause offscreen and when the tab is hidden."},{"question":"What is the mobile fallback for Dither Canvas?","answer":"Reduce density, disable pointer reaction, or switch to a static texture."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dither-canvas","demoUrl":"https://vault.hyperiux.com/demo/dither-canvas","related":[{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"},{"slug":"gooey-counter","title":"Gooey Counter","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter"}]},{"slug":"dot-transition","title":"Dot Transition","category":{"id":"backgrounds","slug":"backgrounds","name":"Animated Backgrounds"},"tier":"free","summary":"A dot-matrix text animation for logo reveals, technical intros, loading-adjacent moments, and digital brand sections where typography should feel constructed from a grid.","description":"Dot Transition for React forms letters from a field of animated dots for logo reveals, technical intros, and digital brand moments.","tags":["Canvas"],"dependencies":[],"install":"npx hyperiux add dot-transition","usage":"import DotTransition from '@/components/effects/dot-transition'\n\nconst page = () => {\n return (\n <div>\n <DotTransition/>\n </div>\n )\n}\n\nexport default page","props":[{"name":"spacing","type":"number","default":26,"description":"Distance between grid cells, in px."},{"name":"dotSize","type":"number","default":2.4,"description":"Resting dot size, in px."},{"name":"maxDotSize","type":"number","default":10,"description":"Fully \"on\" dot size, in px."},{"name":"growDuration","type":"number","default":1.8,"description":"Seconds for a shape to grow in from the resting grid."},{"name":"holdDuration","type":"number","default":0.05,"description":"Seconds a fully formed shape holds before shrinking away."},{"name":"shrinkDuration","type":"number","default":1.8,"description":"Seconds for a shape to shrink back down to the resting grid."},{"name":"gapDuration","type":"number","default":0.2,"description":"Seconds of plain resting grid between shrink and the next grow."},{"name":"revealAnchor","type":"number","default":0.5,"description":"Where shapes grow from / collapse into, as a fraction of height (0 = top, 1 = bottom)."},{"name":"dotColor","type":"string","default":"#ffffff","description":"Hex color used for the dots."},{"name":"backgroundColor","type":"string","default":"#000000","description":"Background color behind the dot grid."}],"overview":["Dot Transition turns text into a grid-based reveal.","Dots grow, shrink, brighten, and settle to form letters or short symbols. The surrounding grid can remain visible as a quiet technical surface while selected dots become the active letterform. The result feels mechanical, computational, and precise without requiring a full canvas-heavy scene.","Use Dot Transition when a brand mark, initial, product name, or short word should appear through a structured digital system. It fits AI products, developer tools, cybersecurity pages, infrastructure brands, data products, technical portfolios, and launch screens where a dot grid already belongs to the visual language.","The page job is formation. The visitor should feel the letter being built from smaller units, then read the result immediately. The effect should create a moment of assembly, not a puzzle where the user waits for dots to finish discussing their career options."],"exampleUseCase":["A developer-tool landing page can use Dot Transition as a product mark reveal near the hero or loading-adjacent intro. The letters form from a grid, hold briefly, then settle or hand off to the main headline.","The outcome is system identity. The brand feels technical because the typography behaves like it was generated from structure, not because someone added a random glow to a heading.","A cybersecurity page can use the same effect for access states, initials, short command labels, or section transitions where the grid language supports trust and precision."],"bestFor":["Logo initials, short brand marks, and compact product labels.","AI, cybersecurity, developer-tool, infrastructure, and data product pages.","Technical intros where text should form from a grid.","Loading-adjacent moments where the animation is decorative, not fake progress.","Dark interfaces where dot contrast can create a clean digital reveal."],"notFor":["Not for long words, paragraphs, documentation, legal text, pricing details, instructions, form labels, or critical messages.","Not for text that must be read instantly. Dot-matrix formation is atmospheric; it should not delay comprehension of important content.","Not for brands where the visual language is soft, editorial, luxury, or calm unless the dot system has been carefully styled to fit."],"performance":["Control grid density, dot size, and active dot count. Animate transform and opacity rather than layout properties. Cache grid positions where possible and avoid recalculating the whole matrix on every frame.","On lower-power devices, reduce spacing density, maximum dot scale, or transition frequency. A dot grid should feel engineered, not like it is mining cryptocurrency in the footer."],"accessibility":["Expose the actual character, word, or label as accessible text. Do not make assistive technology interpret decorative dots as content.","On mobile, reduce grid density, increase letter clarity, and shorten transition duration. For reduced motion, show the final readable text, static dot-letter state, or a non-animated mark without dot growth and shrink cycles."],"commonMistakes":["Using dot-matrix text for long copy.","Making dots too small or too dense to read.","Forgetting to provide a readable text equivalent.","Animating too many dots at once without performance limits.","Making the hold duration too short for the letter to register.","Treating the dot grid as a real loading indicator when it is only decorative."],"faq":[{"question":"What is Dot Transition?","answer":"Dot Transition is a React text animation that forms letters, initials, or symbols from a grid of animated dots."},{"question":"When should I use Dot Transition?","answer":"Use it for logo reveals, technical intros, short labels, brand initials, product marks, and digital sections where grid-based typography fits the visual system."},{"question":"Is Dot Transition good for full sentences?","answer":"No. It works best for initials, short words, compact labels, and symbolic text. Full sentences become slow and hard to read."},{"question":"Does Dot Transition require canvas?","answer":"It depends on the implementation. A dot grid can be built with DOM, SVG, or Canvas. Confirm the shipped component before assuming the rendering method."},{"question":"How do I keep Dot Transition accessible?","answer":"Expose the meaningful letter or word as real text or an accessible label. Decorative dots should not be announced individually."},{"question":"What should reduced motion do?","answer":"Reduced motion should show the final text or a static dot-letter state. Remove dot growth, shrink, repeated cycling, and long transition sequences."},{"question":"Can Dot Transition be used as a loader?","answer":"Only if it is tied to a real loading state. Do not use it to imply fake progress. For decorative intros, describe it as a reveal, not a loader."},{"question":"Can Hyperiux adapt Dot Transition for a real brand system?","answer":"Yes. A custom version should define grid density, dot size, character mapping, transition rhythm, contrast rules, mobile scaling, accessibility handling, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dot-transition","demoUrl":"https://vault.hyperiux.com/demo/dot-transition","related":[{"slug":"dither-canvas","title":"Dither Canvas","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dither-canvas"},{"slug":"donut-particles","title":"Donut Particles","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/donut-particles"}]},{"slug":"dotted-grid","title":"Dotted Grid Background","category":{"id":"backgrounds","slug":"backgrounds","name":"Animated Backgrounds"},"tier":"free","summary":"A lightweight dotted grid background that gives SaaS, AI, developer-tool, and technical landing pages a clean structural layer.","description":"Dotted Grid for React: a quiet technical grid behind readable SaaS, AI, and developer-tool hero copy, with no video or WebGL cost and a static fallback.","tags":["Canvas"],"dependencies":[],"install":"npx hyperiux add dotted-grid","usage":"import DottedGrid from '@/components/effects/dotted-grid';\n\nconst Page = () => {\n    return (\n        <>\n        <DottedGrid />\n        </>\n    )\n}\n\nexport default Page;","props":[{"name":"spacing","type":"number","default":24,"description":"Controls the distance between dots."},{"name":"baseRadius","type":"number","default":7.2,"description":"Sets the base dot size."},{"name":"mouseRadius","type":"number","default":380,"description":"Sets the dark cursor influence radius."},{"name":"trailLength","type":"number","default":456,"description":"Limits how many cursor trail samples are kept."},{"name":"trailRadius","type":"number","default":230,"description":"Controls the width of the cursor trail influence."},{"name":"trailFadeMs","type":"number","default":1200,"description":"Sets how long trail marks remain visible."},{"name":"backgroundColor","type":"color","default":"#000000","description":"Colors the canvas background."},{"name":"showDesktopHint","type":"boolean","default":true,"description":"Shows or hides the desktop hint."},{"name":"desktopHint","type":"string","default":"Click anywhere to change the pattern.","description":"Desktop hint text."},{"name":"mobileHint","type":"string","default":"Works best on desktop","description":"Mobile hint text shown above the touch instruction."},{"name":"className","type":"string","default":"","description":"Additional class names for the root section."}],"overview":["Dotted Grid gives SaaS, AI, and developer-tool heroes a quiet technical structure behind readable foreground copy.","Use it when the page needs an engineered surface without video, WebGL, or heavy animation. The grid should support the message, not compete with it.","The production risk is readability. Headlines, body copy, fields, and CTAs must stay clear above the layer. The effect should be easy to freeze, lower in density, or replace with a static texture on mobile and reduced-motion contexts."],"exampleUseCase":["An API platform can use Dotted Grid Background behind its homepage hero. The dots form geometric shapes that change on their own or when the visitor clicks, and the cursor leaves a soft glowing trail that fades behind it.","The outcome is structure. The hero gets a technical surface without video or WebGL, and the headline and signup field stay clearly readable above it. In production, preserve readable HTML above the surface, cap animation cost, pause offscreen work, and provide a static fallback."],"bestFor":["SaaS and AI hero sections that need quiet technical structure behind readable copy.","Developer-tool pages where a lightweight engineered surface is better than video, particles, or WebGL.","Technical brand sections where the grid supports the message instead of competing with it."],"notFor":["Not for low-contrast text sections, long reading pages, or pages already carrying heavy video/WebGL cost."],"performance":["Keep density low enough to protect text, pause animated canvas work offscreen, and provide a static CSS/image fallback."],"accessibility":["Decorative backgrounds should be hidden from assistive technology. On mobile, reduce density and keep foreground contrast high."],"commonMistakes":["Letting Dotted Grid compete with foreground text.","Animating canvas work offscreen.","Choosing canvas/WebGL when CSS would do the job."],"faq":[{"question":"When should I use Dotted Grid?","answer":"Use it when Dotted Grid supports the foreground message without harming readability."},{"question":"Can Dotted Grid ship without WebGL?","answer":"Yes if the visual can be handled with CSS or canvas. Do not reach for WebGL unless the hero needs shader-led depth."},{"question":"How do I protect text contrast with Dotted Grid?","answer":"Use masks, fades, lower opacity, and density controls around headings, forms, and CTAs."},{"question":"Should Dotted Grid pause offscreen?","answer":"Animated canvas variants should pause offscreen and when the tab is hidden."},{"question":"What is the mobile fallback for Dotted Grid?","answer":"Reduce density, disable pointer reaction, or switch to a static texture."},{"question":"Can Hyperiux adapt Dotted Grid for a real brand system?","answer":"Yes. A custom version should define motion rules, visual treatment, performance budget, fallback behavior, source handoff, and implementation notes for the specific page or launch context."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dotted-grid","demoUrl":"https://vault.hyperiux.com/demo/dotted-grid","related":[{"slug":"dither-canvas","title":"Dither Canvas","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dither-canvas"},{"slug":"grid-lift","title":"Grid Lift","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/grid-lift"},{"slug":"grid-tunnel","title":"Grid Tunnel","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/grid-tunnel"}]},{"slug":"grid-lift","title":"Grid Lift","category":{"id":"backgrounds","slug":"backgrounds","name":"Animated Backgrounds"},"tier":"pro","summary":"A structured WebGL grid effect that raises a technical surface into subtle depth for AI, developer-tool, and product hero sections.","description":"Grid Lift for React raises a structured WebGL surface for engineered heroes that need depth without a 3D showroom. Degrades cleanly on low-power devices.","tags":["Canvas"],"dependencies":[],"install":"npx hyperiux add grid-lift","usage":"import GridLift from '@/components/effects/grid-lift'\n\nconst page = () => {\n return (\n <>\n <GridLift/>\n </>\n  )\n}\n\nexport default page","props":[{"name":"maskScale","type":"number","default":1.08,"description":"Scale applied to the text/SVG mask."},{"name":"fontSize","type":"number","default":350,"description":"Base font size used to fit the text mask (Text mode only)."},{"name":"fontWeight","type":"number","default":200,"description":"Font weight used for the text mask (Text mode only)."},{"name":"interactionRange","type":"number","default":120,"description":"Distance from the mask shape at which cursor interaction starts registering."},{"name":"hoverRadius","type":"number","default":550,"description":"Radius of cursor influence over grid cells."},{"name":"hoverFalloff","type":"number","default":1.55,"description":"Falloff curve power applied across the hover radius."},{"name":"liftRotation","type":"number","default":-88,"description":"Direction, in degrees, that lifted cells are extruded toward."},{"name":"liftHeight","type":"number","default":58,"description":"Maximum extrusion distance for lifted cells."},{"name":"liftSmoothness","type":"number","default":0.08,"description":"Lerp smoothing factor applied to the lift animation."},{"name":"gridSpacing","type":"number","default":13,"description":"Spacing between grid cells, in pixels."},{"name":"strokeSize","type":"number","default":1.15,"description":"Line width for the grid strokes."},{"name":"baseOpacity","type":"number","default":1,"description":"Opacity of the resting (unlifted) grid."},{"name":"hoverOpacity","type":"number","default":0.6,"description":"Opacity of the lifted grid highlight."},{"name":"backgroundColor","type":"color","default":"#000000","description":"Canvas background color."},{"name":"gridColor","type":"color","default":"#272727","description":"Color of the resting grid lines."},{"name":"hoverColor","type":"color","default":"#ffffff","description":"Color of the lifted grid highlight."}],"overview":["Grid Lift raises a structured surface just enough to make the hero feel engineered without turning it into a 3D showroom.","Use it for technical brands, AI platforms, and developer-tool launches where structured motion should signal engineering taste. The page job is controlled lift: the grid adds depth while the copy stays in charge.","In production, the risk is jitter. Too many moving cells make the surface feel noisy, especially on lower-power devices."],"exampleUseCase":["An AI infrastructure startup can use Grid Lift in its launch hero, with the product wordmark or logo set as the mask. As the visitor's cursor moves near the shape, grid cells lift toward the pointer and settle back as it moves away, while the headline and CTA stay in HTML above the surface.","The outcome is precision. The brand feels engineered from the first frame without turning the hero into a 3D scene.","A design engineer's portfolio can use the same pattern behind a name or monogram on the opening screen."],"bestFor":["Technical product heroes where grid structure supports the brand's engineering signal.","AI and developer-tool launches where depth should feel precise, not cinematic.","Portfolio surfaces where a disciplined grid adds motion without becoming a scene."],"notFor":["Not for low-power-first pages, dense content, dashboards, checkout, or routes where performance is the main conversion lever."],"performance":["Cap DPR at 1.0 on touch/mobile and up to 1.5 on mid-range desktop. Pause Grid Lift offscreen and in hidden tabs, reduce postprocessing before shipping, and keep texture sizes controlled."],"accessibility":["Keep meaningful content in HTML outside the canvas. On mobile, reduce shader quality and switch to a poster if the scene cannot hold frame rate."],"commonMistakes":["Animating too many cells at once and turning structure into jitter.","Using the grid as the only visual hierarchy in the hero.","Skipping a still frame fallback when the grid motion is decorative."],"faq":[{"question":"What GPU budget should Grid Lift use on mobile and desktop?","answer":"Lifting a grid into depth scales with the number of cells animated, so cap DPR at 1.0 on mobile and 1.5 on desktop and keep the grid density reasonable. Reduce cell count or motion on weaker devices. Measure with your real grid size rather than a sparse demo."},{"question":"What poster fallback should replace Grid Lift when WebGL fails?","answer":"Show the grid in its flat, resting arrangement as a static image so the structure still reads without the lift. The surrounding HTML content is unaffected. The flat grid is a clean, honest substitute."},{"question":"How should Grid Lift pause when offscreen or in a hidden tab?","answer":"Pause the lift animation and render loop when the canvas leaves the viewport or the tab is hidden, then resume on return. Use demand rendering once the grid settles. Don't keep animating a grid no one is looking at."},{"question":"Which content should stay outside the Grid Lift canvas?","answer":"Any labels or links tied to grid items belong in the DOM, not in the rendered cells, so they stay readable and clickable. The lift is a visual flourish over real content. Keep interactive items as focusable elements."},{"question":"When should I choose a static image instead of Grid Lift?","answer":"Use a static grid when the depth adds nothing functional, when optimizing for mobile, or when the cells carry information users must read precisely. If the lift is pure decoration, the flat layout is leaner. Reserve it for hero or feature moments."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/grid-lift","demoUrl":"https://vault.hyperiux.com/demo/grid-lift","related":[{"slug":"grid-tunnel","title":"Grid Tunnel","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/grid-tunnel"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"},{"slug":"curved-plane","title":"Curved Plane","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/curved-plane"},{"slug":"inertia-img","title":"Inertia Image","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/inertia-img"},{"slug":"infinite-carousel","title":"Infinite Carousel","docsUrl":"https://vault.hyperiux.com/effects/carousels/infinite-carousel"}]},{"slug":"spider-particles","title":"Spider Particles Background","category":{"id":"backgrounds","slug":"backgrounds","name":"Animated Backgrounds"},"tier":"free","summary":"A connected particle background where moving points form a light network field behind technical product content.","description":"Spider Particles for React creates a light particle web behind concise hero copy with density caps and offscreen pause. Built to stay readable with motion off.","tags":["Three.js"],"dependencies":["three"],"install":"npx hyperiux add spider-particles","usage":"import SpiderParticles from '@/components/effects/spider-particles'\n\nconst spiderParticlesProps = {\n particleCount:180,\n gridGap:0,\n particleSize:20.0,\n mouseConnectDist:160,\n spotlightRadius:300,\n particlesGlow:false,\n glowColor:0xffffff,\n particleColor:0xffffff,\n webColor:0xffffff,\n centerColor:0xffffff,\n}\n\nconst page = () => {\n return (\n <div>\n <SpiderParticles {...spiderParticlesProps} />\n </div>\n )\n}\n\nexport default page","props":[{"name":"particleCount","type":"number","default":180,"description":"Controls how many particles are drawn."},{"name":"gridGap","type":"number","default":0,"description":"Switches to a spaced lattice when above zero."},{"name":"particleSize","type":"number","default":20,"description":"Makes each dot larger or smaller."},{"name":"mouseConnectDist","type":"number","default":160,"description":"Sets the web connection radius around the cursor."},{"name":"spotlightRadius","type":"number","default":300,"description":"Controls the cursor spotlight falloff."},{"name":"particleColor","type":"color","default":"#ffffff","description":"Colors the particles."},{"name":"webColor","type":"color","default":"#ffffff","description":"Colors the cursor connection lines."},{"name":"centerColor","type":"color","default":"#ffffff","description":"Colors the cursor center point."},{"name":"showWeb","type":"boolean","default":true,"description":"Turns the connection lines on or off."},{"name":"particlesGlow","type":"boolean","default":false,"description":"Enables glow rendering for particles and cursor points."},{"name":"glowColor","type":"color","default":"#ffffff","description":"Glow color used when particle glow is enabled."}],"overview":["Spider Particles creates a supporting surface: a light particle web adds controlled motion.","Use it behind hero copy, product sections, and technical brand moments where the background should make the page feel engineered without asking the browser to run a cinematic universe.","The risk in production is readability. Headlines, body copy, fields, and CTAs must stay clear above the layer. The effect should be easy to freeze, lower in density, or replace with a static texture on mobile and reduced-motion contexts."],"exampleUseCase":["A network monitoring SaaS can use Spider Particles Background behind its homepage hero. Points drift across the section, and lines connect them around the visitor's cursor, which suggests a live network without showing a literal diagram.","The outcome is quiet motion. The hero feels technical, and the product claim and signup CTA remain the clearest things on screen. In production, preserve readable HTML above the surface, cap animation cost, pause offscreen work, and provide a static fallback."],"bestFor":["Short hero sections where a light network field adds controlled atmosphere behind the message.","Pages that can cap density, pause offscreen, and keep text contrast protected.","Spider Particles adds atmosphere behind the message without making the background the product."],"notFor":["Not for low-contrast text sections, long reading pages, or pages already carrying heavy video/WebGL cost."],"performance":["Keep density low enough to protect text, pause animated canvas work offscreen, and provide a static CSS/image fallback."],"accessibility":["Decorative backgrounds should be hidden from assistive technology. On mobile, reduce density and keep foreground contrast high."],"commonMistakes":["Letting Spider Particles compete with foreground text.","Animating canvas work offscreen.","Choosing canvas/WebGL when CSS would do the job."],"faq":[{"question":"When should I use Spider Particles?","answer":"Use it when a light particle web adds controlled motion supports the foreground message without harming readability."},{"question":"Can Spider Particles ship without WebGL?","answer":"Yes if the visual can be handled with CSS or canvas. Do not reach for WebGL unless the hero needs shader-led depth."},{"question":"How do I protect text contrast with Spider Particles?","answer":"Use masks, fades, lower opacity, and density controls around headings, forms, and CTAs."},{"question":"Should Spider Particles pause offscreen?","answer":"Animated canvas variants should pause offscreen and when the tab is hidden."},{"question":"What is the mobile fallback for Spider Particles?","answer":"Reduce density, disable pointer reaction, or switch to a static texture."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/spider-particles","demoUrl":"https://vault.hyperiux.com/demo/spider-particles","related":[{"slug":"dither-canvas","title":"Dither Canvas","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dither-canvas"},{"slug":"grid-tunnel","title":"Grid Tunnel","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/grid-tunnel"},{"slug":"milky-way","title":"Milky Way","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/milky-way"},{"slug":"progressive-bloom-valley","title":"Progressive Bloom Valley","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/progressive-bloom-valley"}]},{"slug":"animated-toggle","title":"Animated Toggle","category":{"id":"buttons","slug":"buttons","name":"Animated Buttons"},"tier":"pro","summary":"A set of three animated icon toggle buttons, a chevron flip, a cross, and a plus-to-minus, whose box switches between inactive and active colors.","description":"Animated Toggle for React animates chevron, cross, and plus-to-minus icon buttons for expand, collapse, and dismiss controls. Ships with a reduced-motion fallback.","tags":["CSS"],"dependencies":[],"install":"npx hyperiux add animated-toggle","usage":"import AnimatedToggle from \"@/components/effects/animated-toggle\";\n\nexport default function AnimatedTogglePage() {\n  return (\n    <>\n      <section className=\"min-h-dvh w-full flex items-center relative justify-center\">\n          <div className=\"flex gap-8 justify-center\">\n            <AnimatedToggle/>\n          </div>\n      </section>\n    </>\n  );\n}","props":[{"name":"size","type":"number","default":96,"description":"Overall toggle box size in pixels."},{"name":"activeColor","type":"color","default":"#ff5f00","description":"Box color when a toggle is active."},{"name":"inactiveColor","type":"color","default":"#a1a1aa","description":"Box color when a toggle is inactive."},{"name":"duration","type":"number","default":0.32,"description":"Icon transition duration in seconds."}],"overview":["Animated Toggle gives a button or link a small, useful moment of feedback: a binary choice confirms state.","Use it where an icon control needs to feel responsive and intentional, not theatrical. A button should confirm action, state, or direction; it should not become a tiny stage play that delays the click.","The thing to watch is keeping the markup honest. Use genuine button and anchor elements, preserve focus, fire instantly, and make loading and disabled states obvious. The animation decorates the action; it is never the action."],"exampleUseCase":["A furniture retailer can use Animated Toggle on its product pages for the controls that open and close detail panels: a plus that turns into a minus for care instructions, a chevron that flips for the size guide, and a cross for dismissing a delivery note. Each box also switches between its inactive and active color.","The outcome is clarity of state. Shoppers can see at a glance which panels are open, and each control is a real button that responds on the first press."],"bestFor":["Expand, collapse, and dismiss controls where an open or closed state needs visible confirmation.","Interfaces where the selected state matters more than hover decoration.","Animated Toggle adds feedback to an action without weakening semantics, focus, or activation speed."],"notFor":["Not for destructive actions, unclear states, or places where animation hides the label or delays activation."],"performance":["Keep feedback fast, avoid layout-triggering letter movement, and preserve instant activation."],"accessibility":["Use real buttons or anchors, visible focus-visible styles, and clear loading/disabled states. Touch targets should stay large enough on mobile."],"commonMistakes":["Building Animated Toggle with divs instead of real buttons or links.","Hiding the label during hover.","Forgetting loading and disabled states."],"faq":[{"question":"When should I use Animated Toggle?","answer":"Use it when an expand, collapse, or dismiss control needs a binary choice that confirms state without delaying the action."},{"question":"Should Animated Toggle use a real button or link?","answer":"Yes. Use `<button>` for actions and `<a>` for navigation."},{"question":"How should Animated Toggle handle focus?","answer":"Use visible focus-visible styles and support keyboard activation."},{"question":"How should loading states work with Animated Toggle?","answer":"Loading should be visually clear and programmatically communicated without hiding the label."},{"question":"What should reduced motion do for Animated Toggle?","answer":"Remove long staggers, scrambles, and looping emphasis while keeping instant state feedback."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/buttons/animated-toggle","demoUrl":"https://vault.hyperiux.com/demo/animated-toggle","related":[{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"},{"slug":"milky-way","title":"Milky Way","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/milky-way"},{"slug":"fractal-glass","title":"Fractal Glass","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass"}]},{"slug":"arrow-fill-button","title":"Arrow Fill Button","category":{"id":"buttons","slug":"buttons","name":"Animated Buttons"},"tier":"free","summary":"A directional CTA button where the arrow and fill animation reinforce click intent without delaying the action.","description":"Arrow Fill Button for React adds directional feedback to primary CTAs for product pages and launch sections. Includes a clean mobile fallback.","tags":["Lucide"],"dependencies":["lucide-react"],"install":"npx hyperiux add arrow-fill-button","usage":"import ArrowFillButton from \"@/components/effects/arrow-fill-button\";\n\nexport default function Page() {\n    return (\n  <>\n        <div className=\"h-screen w-screen flex items-center justify-center relative\">\n                   <ArrowFillButton\n                        className=\"bg-linear-to-r from-[#ff6b00] to-[#ff5f00]\"\n                        href=\"#\"\n                        btnText=\"Hover me\"\n                    />\n        </div>\n        </>\n    );\n}","props":[{"name":"btnText","type":"string","default":"Hover Me","description":"Button label text."},{"name":"bgColor","type":"color","default":"#ff5f00","description":"Resting button background color."},{"name":"textColor","type":"color","default":"#ffffff","description":"Resting label color."},{"name":"fillBgColor","type":"color","default":"#ffffff","description":"Circle fill color before hover."},{"name":"fillTextColor","type":"color","default":"#ff5f00","description":"Label color inside the fill before hover."},{"name":"hoverFillBgColor","type":"color","default":"#ffffff","description":"Expanded fill color on hover."},{"name":"hoverFillTextColor","type":"color","default":"#ff5f00","description":"Label color inside the expanded fill on hover."},{"name":"arrowColor","type":"color","default":null,"description":"Arrow color before hover. Falls back to fillTextColor when unset."},{"name":"hoverArrowColor","type":"color","default":null,"description":"Arrow color after hover. Falls back to hoverFillTextColor when unset."},{"name":"href","type":"string","default":"#","description":"Link destination URL for the anchor."}],"overview":["Arrow Fill Button gives a button or link a small, useful moment of feedback: the arrow and fill move as one CTA signal.","Use it where a CTA needs to feel responsive and intentional, not theatrical. A button should confirm action, state, or direction; it should not become a tiny stage play that delays the click.","The main risk is not letting motion stand in for the control. Real buttons and anchors, visible focus, instant response, and clear loading and disabled states come first; the effect is a layer on top of a control that already works."],"exampleUseCase":["A SaaS product homepage can use Arrow Fill Button for the main hero CTA, such as Start free trial. On hover the fill sweeps out from the small circle at the right edge to cover the whole button, the label switches color inside it, and the arrow slides through to reinforce direction.","The outcome is confidence. The primary action reads as one clear signal, and the link still responds immediately so the motion never stands between the visitor and sign-up."],"bestFor":["Primary CTAs where direction, fill, and label should read as one confident action.","Hero and product sections where feedback must remain faster than hesitation.","Arrow Fill Button adds feedback to an action without weakening semantics, focus, or activation speed."],"notFor":["Not for destructive actions, unclear states, or places where animation hides the label or delays activation."],"performance":["Keep feedback fast, avoid layout-triggering letter movement, and preserve instant activation."],"accessibility":["Use real buttons or anchors, visible focus-visible styles, and clear loading/disabled states. Touch targets should stay large enough on mobile."],"commonMistakes":["Building Arrow Fill Button with divs instead of real buttons or links.","Hiding the label during hover.","Forgetting loading and disabled states."],"faq":[{"question":"When should I use Arrow Fill Button?","answer":"Use it when a primary CTA needs arrow and fill moving as one direction-and-feedback signal without delaying the action."},{"question":"Should Arrow Fill Button use a real button or link?","answer":"Yes. Use `<button>` for actions and `<a>` for navigation."},{"question":"How should Arrow Fill Button handle focus?","answer":"Use visible focus-visible styles and support keyboard activation."},{"question":"How should loading states work with Arrow Fill Button?","answer":"Loading should be visually clear and programmatically communicated without hiding the label."},{"question":"What should reduced motion do for Arrow Fill Button?","answer":"Remove long staggers, scrambles, and looping emphasis while keeping instant state feedback."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/buttons/arrow-fill-button","demoUrl":"https://vault.hyperiux.com/demo/arrow-fill-button","related":[{"slug":"dot-fill-button","title":"Dot Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/dot-fill-button"},{"slug":"char-stagger-primary-button","title":"Character Stagger Primary Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/char-stagger-primary-button"},{"slug":"link-button","title":"Link Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/link-button"},{"slug":"scramble-link-button","title":"Scramble Link Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/scramble-link-button"},{"slug":"animated-toggle","title":"Animated Toggle","docsUrl":"https://vault.hyperiux.com/effects/buttons/animated-toggle"}]},{"slug":"char-stagger-button","title":"Character Stagger Button","category":{"id":"buttons","slug":"buttons","name":"Animated Buttons"},"tier":"pro","summary":"A typographic button effect where characters lift or stagger on interaction for polished secondary links and CTAs.","description":"Character Stagger Button for React gives secondary links a fast typographic hover without delaying activation. Reduced-motion and touch fallbacks included.","tags":["Lucide"],"dependencies":["lucide-react"],"install":"npx hyperiux add char-stagger-button","usage":"import CharStaggerButton from \"@/components/effects/char-stagger-button\";\n\nexport default function Page() {\n    return (\n        <>  \n        <div className=\"h-screen w-screen flex items-center justify-center relative\">\n                      <CharStaggerButton\n                        href=\"#\"\n                        showLine\n                        text=\"Hover me\"\n                        hoverColor=\"#ff6b00\"\n                        className=\"  scale-150\"\n                        textClassName=\"text-[2vw] max-md:text-[3vw] max-sm:text-[4.5vw]\"\n                    />\n        </div>\n         </>\n    );\n}","props":[{"name":"text","type":"string","default":"Hover me","description":"Button label text."},{"name":"staggerStep","type":"number","default":0.01,"description":"Delay between each character's hover motion."},{"name":"showLine","type":"boolean","default":true,"description":"Shows the animated underline."},{"name":"hoverColor","type":"color","default":"#ff6b00","description":"Text color while hovered."},{"name":"showArrow","type":"boolean","default":false,"description":"Shows the optional arrow icon."},{"name":"href","type":"string","default":"#","description":"Link destination URL for the anchor."}],"overview":["Character Stagger Button gives a button or link a small, useful moment of feedback: letters lift as the link responds.","Use it where a CTA needs to feel responsive and intentional, not theatrical. A button should confirm action, state, or direction; it should not become a tiny stage play that delays the click.","The production risk is semantics. Keep real button and anchor elements, visible focus, instant activation, and clear loading/disabled states. Motion sits on top of the action; it does not replace it."],"exampleUseCase":["A brand design agency can use Character Stagger Button for the links in its footer and project pages, such as See the case study or Get in touch. On hover each letter rolls up in quick sequence, the label takes the hover color, and an underline draws in beneath it.","The outcome is craft. Small links carry the same typographic care as the agency's headlines, while the label stays readable and the link opens the moment it is clicked."],"bestFor":["Secondary links where typographic motion fits the brand and the label stays readable.","Editorial or agency pages where a small letter lift adds craft without slowing navigation.","Character Stagger Button adds feedback to an action without weakening semantics, focus, or activation speed."],"notFor":["Not for destructive actions, unclear states, or places where animation hides the label or delays activation."],"performance":["Keep feedback fast, avoid layout-triggering letter movement, and preserve instant activation."],"accessibility":["Use real buttons or anchors, visible focus-visible styles, and clear loading/disabled states. Touch targets should stay large enough on mobile."],"commonMistakes":["Building Character Stagger Button with divs instead of real buttons or links.","Hiding the label during hover.","Forgetting loading and disabled states."],"faq":[{"question":"When should I use Character Stagger Button?","answer":"Use it when a secondary link can carry letters lifting as it responds — without delaying the action."},{"question":"Should Character Stagger Button use a real button or link?","answer":"Yes. Use `<button>` for actions and `<a>` for navigation."},{"question":"How should Character Stagger Button handle focus?","answer":"Use visible focus-visible styles and support keyboard activation."},{"question":"How should loading states work with Character Stagger Button?","answer":"Loading should be visually clear and programmatically communicated without hiding the label."},{"question":"What should reduced motion do for Character Stagger Button?","answer":"Remove long staggers, scrambles, and looping emphasis while keeping instant state feedback."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/buttons/char-stagger-button","demoUrl":"https://vault.hyperiux.com/demo/char-stagger-button","related":[{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"mouse-pixelation","title":"Mouse Pixelation","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/mouse-pixelation"},{"slug":"milky-way","title":"Milky Way","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/milky-way"},{"slug":"hover-stack","title":"Hover Stack","docsUrl":"https://vault.hyperiux.com/effects/components/hover-stack"}]},{"slug":"char-stagger-primary-button","title":"Character Stagger Primary Button","category":{"id":"buttons","slug":"buttons","name":"Animated Buttons"},"tier":"pro","summary":"A primary CTA button with controlled character-stagger motion for hero sections, launch pages, and conversion-focused actions.","description":"Character Stagger Primary Button for React makes hero CTAs feel polished while preserving focus, label, and click speed. Built to stay readable with motion off.","tags":["Lucide"],"dependencies":["lucide-react"],"install":"npx hyperiux add char-stagger-primary-button","usage":"import CharStaggerPrimaryButton from \"@/components/effects/char-stagger-primary-button\";\n\nexport default function Page() {\n    return (\n        <>\n        <div className=\"h-screen w-screen flex items-center justify-center relative\">\n              <CharStaggerPrimaryButton\n                        href=\"#\"\n                        text=\"Hover me\"\n                        btnClassName=\"rounded-full bg-[#ff6b00] text-[1.2vw] max-sm:text-[4.5vw]\"\n                    />\n        </div>\n          </>\n    );\n}","props":[{"name":"text","type":"string","default":"Hover me","description":"Button label text."},{"name":"staggerStep","type":"number","default":0.01,"description":"Delay between each character's hover motion."},{"name":"hoverColor","type":"color","default":"#ffffff","description":"Text color while hovered."},{"name":"bgColor","type":"color","default":"#ff6b00","description":"Background color of the button."},{"name":"showArrow","type":"boolean","default":false,"description":"Shows the optional arrow icon."},{"name":"href","type":"string","default":"#","description":"Link destination URL for the anchor."}],"overview":["Character Stagger Primary Button gives a button or link a small, useful moment of feedback: a primary CTA gets a controlled typographic lift.","Use it where a CTA needs to feel responsive and intentional, not theatrical. A button should confirm action, state, or direction; it should not become a tiny stage play that delays the click.","The risk in production is keeping the markup honest. Use genuine button and anchor elements, preserve focus, fire instantly, and make loading and disabled states obvious. The animation decorates the action; it is never the action."],"exampleUseCase":["A consumer hardware startup can use Character Stagger Primary Button for the Join the waitlist CTA on its launch page. On hover each letter of the label rolls up in quick sequence, the background settles inward slightly, and an optional arrow slides in beside the text.","The outcome is polish without delay. The most important action on the page gets a considered response, and the link still fires the moment it is clicked."],"bestFor":["Hero CTAs where the primary action needs a polished but immediate response.","Launch pages that want typographic craft without making conversion wait.","Character Stagger Primary Button adds feedback to an action without weakening semantics, focus, or activation speed."],"notFor":["Not for destructive actions, unclear states, or places where animation hides the label or delays activation."],"performance":["Keep feedback fast, avoid layout-triggering letter movement, and preserve instant activation."],"accessibility":["Use real buttons or anchors, visible focus-visible styles, and clear loading/disabled states. Touch targets should stay large enough on mobile."],"commonMistakes":["Building Character Stagger Primary Button with divs instead of real buttons or links.","Hiding the label during hover.","Forgetting loading and disabled states."],"faq":[{"question":"When should I use the Character Stagger Primary Button?","answer":"Use it when a hero CTA needs a controlled typographic lift — without delaying the action."},{"question":"Should Character Stagger Primary Button use a real button or link?","answer":"Yes. Use `<button>` for actions and `<a>` for navigation."},{"question":"How should Character Stagger Primary Button handle focus?","answer":"Use visible focus-visible styles and support keyboard activation."},{"question":"How should loading states work with Character Stagger Primary Button?","answer":"Loading should be visually clear and programmatically communicated without hiding the label."},{"question":"What should reduced motion do for Character Stagger Primary Button?","answer":"Remove long staggers, scrambles, and looping emphasis while keeping instant state feedback."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/buttons/char-stagger-primary-button","demoUrl":"https://vault.hyperiux.com/demo/char-stagger-primary-button","related":[{"slug":"char-stagger-button","title":"Character Stagger Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/char-stagger-button"},{"slug":"donut-particles","title":"Donut Particles","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/donut-particles"},{"slug":"arrow-fill-button","title":"Arrow Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/arrow-fill-button"},{"slug":"grid-tunnel","title":"Grid Tunnel","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/grid-tunnel"}]},{"slug":"dot-fill-button","title":"Dot Fill Button","category":{"id":"buttons","slug":"buttons","name":"Animated Buttons"},"tier":"pro","summary":"A compact animated button where a dot expands into a fill state for card actions, graphic CTAs, and branded interfaces.","description":"Dot Fill Button for React expands a dot into CTA feedback for compact card actions and graphic brand systems. Keeps content crawlable and accessible.","tags":["CSS"],"dependencies":[],"install":"npx hyperiux add dot-fill-button","usage":"import DotFillBtn from \"@/components/effects/dot-fill-button\";\n\nexport default function Page() {\n    return (\n\n        <div className=\"h-screen w-screen flex items-center justify-center relative\">\n                   <DotFillBtn\n                    className=\"\"\n                        href=\"#\"\n                        btnText=\"Try demo\"\n                        bgColor=\"#ff6b00\"\n                        textColor=\"#ffffff\"\n                        hoverTextColor=\"#ff6b00\"\n                    />\n        </div>\n\n    );\n}","props":[{"name":"btnText","type":"string","default":"Try demo","description":"Button label text."},{"name":"bgColor","type":"color","default":"#ff6b00","description":"Resting button background color."},{"name":"textColor","type":"color","default":"#ffffff","description":"Resting label color."},{"name":"hoverTextColor","type":"color","default":"#ff6b00","description":"Label color while filled."},{"name":"dotColor","type":"color","default":"#ffffff","description":"Dot color."},{"name":"href","type":"string","default":"#","description":"Link destination URL for the anchor."}],"overview":["Dot Fill Button gives a button or link a small, useful moment of feedback: a dot expands into feedback.","Use it where a CTA needs to feel responsive and intentional, not theatrical. A button should confirm action, state, or direction; it should not become a tiny stage play that delays the click.","In production, the risk is not letting motion stand in for the control. Real buttons and anchors, visible focus, instant response, and clear loading and disabled states come first; the effect is a layer on top of a control that already works."],"exampleUseCase":["An online learning platform can use Dot Fill Button for the Try demo action on each course card. On hover the small dot beside the label expands to fill the whole button, and the label rolls to its new color, giving each card a compact, graphic response.","The outcome is consistency. Every card action shares one recognizable interaction, the button never moves out from under the pointer, and the link opens straight away."],"bestFor":["Compact card actions and graphic CTA systems where dot expansion matches the visual language.","Interfaces where the fill can confirm hover or focus without moving the target.","Dot Fill Button adds feedback to an action without weakening semantics, focus, or activation speed."],"notFor":["Not for destructive actions, unclear states, or places where animation hides the label or delays activation."],"performance":["Keep feedback fast, avoid layout-triggering letter movement, and preserve instant activation."],"accessibility":["Use real buttons or anchors, visible focus-visible styles, and clear loading/disabled states. Touch targets should stay large enough on mobile."],"commonMistakes":["Building Dot Fill Button with divs instead of real buttons or links.","Hiding the label during hover.","Forgetting loading and disabled states."],"faq":[{"question":"When should I use Dot Fill Button?","answer":"Use it when a compact CTA or card action needs a dot expanding into feedback without delaying the action."},{"question":"Should Dot Fill Button use a real button or link?","answer":"Yes. Use `<button>` for actions and `<a>` for navigation."},{"question":"How should Dot Fill Button handle focus?","answer":"Use visible focus-visible styles and support keyboard activation."},{"question":"How should loading states work with Dot Fill Button?","answer":"Loading should be visually clear and programmatically communicated without hiding the label."},{"question":"What should reduced motion do for Dot Fill Button?","answer":"Remove long staggers, scrambles, and looping emphasis while keeping instant state feedback."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/buttons/dot-fill-button","demoUrl":"https://vault.hyperiux.com/demo/dot-fill-button","related":[{"slug":"grid-tunnel","title":"Grid Tunnel","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/grid-tunnel"},{"slug":"hover-slider","title":"Hover Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hover-slider"},{"slug":"phantom-image-trail","title":"Phantom Image Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/phantom-image-trail"},{"slug":"circular-split-roll","title":"Circular Split Roll","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/circular-split-roll"},{"slug":"scroll-distortion","title":"Scroll Distortion","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-distortion"}]},{"slug":"link-button","title":"Link Button","category":{"id":"buttons","slug":"buttons","name":"Animated Buttons"},"tier":"free","summary":"A lightweight animated link button for navigation, secondary actions, and product pages that need subtle interaction feedback.","description":"Link Button for React adds a lightweight interaction state to navigation and secondary actions without changing semantics. Ships with a reduced-motion fallback.","tags":["Lucide"],"dependencies":["lucide-react"],"install":"npx hyperiux add link-button","usage":"import LinkButton from \"@/components/effects/link-button\";\n\nexport default function Page() {\n    return (\n        <>\n        <div className=\"h-screen w-screen flex items-center justify-center relative\">\n                <div className=\"w-fit mx-auto\">\n                     <LinkButton\n                        text=\"Hover me\"\n                        href=\"#\"\n                        iconClassName=\"size-[2vw] mt-[0.2vw] max-sm:size-[4vw]\"\n                        className=\"text-[2vw] hover:text-[#ff6b00] max-sm:text-[4.5vw]\"\n                    />\n            </div>\n        </div>\n        </>\n\n    );\n}","props":[{"name":"text","type":"string","default":"Hover me","description":"Button label text."},{"name":"mobileText","type":"string","default":"Click me","description":"Label used on compact viewports."},{"name":"textColor","type":"color","default":"#ffffff","description":"Resting label and underline color."},{"name":"hoverColor","type":"color","default":"#ff6b00","description":"Hover label and underline color."},{"name":"clickedColor","type":"color","default":"#ff6b00","description":"Compact viewport color after tapping."},{"name":"underlineHeight","type":"number","default":1.5,"description":"Underline thickness in pixels."},{"name":"showIcon","type":"boolean","default":true,"description":"Shows or hides the arrow icon."},{"name":"transitionDuration","type":"number","default":0.5,"description":"Animation duration in seconds."},{"name":"href","type":"string","default":"#","description":"Link destination URL, also read in the screen-reader label."}],"overview":["Link Button gives a button or link a small, useful moment of feedback: a link earns a small interaction state.","Use it where a CTA needs to feel responsive and intentional, not theatrical. A button should confirm action, state, or direction; it should not become a tiny stage play that delays the click.","The thing to watch is semantics. Keep real button and anchor elements, visible focus, instant activation, and clear loading/disabled states. Motion sits on top of the action; it does not replace it."],"exampleUseCase":["A developer documentation site can use Link Button for the secondary links at the end of each guide: read the API reference, view the changelog, open the next tutorial. On hover the underline draws in, the label shifts to the accent color, and an optional arrow points toward the next step.","The outcome is orientation. Readers get a clear signal that a link leads somewhere useful, while the anchor still behaves like a normal link and activates instantly."],"bestFor":["Secondary actions and navigation links that need a small designed state, not drama.","Product and docs pages where lightweight feedback supports orientation.","Link Button adds feedback to an action without weakening semantics, focus, or activation speed."],"notFor":["Not for destructive actions, unclear states, or places where animation hides the label or delays activation."],"performance":["Keep feedback fast, avoid layout-triggering letter movement, and preserve instant activation."],"accessibility":["Use real buttons or anchors, visible focus-visible styles, and clear loading/disabled states. Touch targets should stay large enough on mobile."],"commonMistakes":["Building Link Button with divs instead of real buttons or links.","Hiding the label during hover.","Forgetting loading and disabled states."],"faq":[{"question":"When should I use Link Button?","answer":"Use it when a navigation or secondary link needs a small, lightweight interaction state — without delaying the action."},{"question":"Should Link Button use a real button or link?","answer":"Yes. Use `<button>` for actions and `<a>` for navigation."},{"question":"How should Link Button handle focus?","answer":"Use visible focus-visible styles and support keyboard activation."},{"question":"How should loading states work with Link Button?","answer":"Loading should be visually clear and programmatically communicated without hiding the label."},{"question":"What should reduced motion do for Link Button?","answer":"Remove long staggers, scrambles, and looping emphasis while keeping instant state feedback."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/buttons/link-button","demoUrl":"https://vault.hyperiux.com/demo/link-button","related":[{"slug":"arrow-fill-button","title":"Arrow Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/arrow-fill-button"},{"slug":"scramble-link-button","title":"Scramble Link Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/scramble-link-button"},{"slug":"dot-fill-button","title":"Dot Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/dot-fill-button"},{"slug":"char-stagger-primary-button","title":"Character Stagger Primary Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/char-stagger-primary-button"}]},{"slug":"metallic-button","title":"Metallic Button","category":{"id":"buttons","slug":"buttons","name":"Animated Buttons"},"tier":"free","summary":"A premium button component for luxury interfaces, product launches, portfolio CTAs, pricing actions, and dark landing pages where the button should feel tactile, weighty, and deliberately finished.","description":"Metallic Button for React gives CTA buttons a polished chrome-and-glass surface for premium interfaces, landing pages, and product actions.","tags":["Lucide"],"dependencies":["lucide-react"],"install":"npx hyperiux add metallic-button","usage":"import MetallicButton from \"@/components/effects/metallic-button\";\n\nexport default function Page() {\n    return (\n        <>\n        <div className=\"h-screen w-screen flex items-center justify-center relative\">\n                  <MetallicButton />\n</div>\n        </>\n    \n    );\n}","props":[{"name":"label","type":"string","default":"Get Started","description":"Button label text."},{"name":"viewMode","type":"string","default":"text","description":"Renders the label or a single sparkle icon."},{"name":"baseColor","type":"color","default":"#000000","description":"Dark base the metal sits on."},{"name":"sheenColor","type":"color","default":"#ffffff","description":"Overlay tint; sets how warm or cold the chrome reads."},{"name":"bandCount","type":"number","default":4,"description":"Density of the stripe bands."},{"name":"edgeBlur","type":"number","default":0.5,"description":"Colour transition sharpness: 0 is a hard edge, 1 a smooth gradient."},{"name":"flowAngle","type":"number","default":45,"description":"Direction the pattern flows, in degrees."},{"name":"zoom","type":"number","default":8,"description":"Zoom into the pattern; higher reads as brighter chrome."},{"name":"warp","type":"number","default":0,"description":"Noise warp over the stripe pattern."},{"name":"redFringe","type":"number","default":0.3,"description":"Red-channel dispersion; drives the warm edge fringing."},{"name":"blueFringe","type":"number","default":0.3,"description":"Blue-channel dispersion; drives the cool edge fringing."},{"name":"idleSpeed","type":"number","default":0.6,"description":"Sweep speed at rest."},{"name":"hoverSpeed","type":"number","default":1,"description":"Sweep speed while hovered."},{"name":"clickSpeed","type":"number","default":2.4,"description":"Sweep speed kicked on click, before settling back."}],"overview":["Metallic Button turns a simple action into a refined surface.","The component uses a dark rounded base, metallic rim, specular highlights, and soft moving light to make the button feel physically polished. The label stays quiet and readable while the surface carries the premium treatment.","Use Metallic Button when the CTA belongs inside a high-craft interface: luxury products, creative studios, premium SaaS pages, AI launches, design portfolios, waitlists, product previews, and campaign pages with a darker, more cinematic visual system.","The page job is materiality. The button should feel like an object with finish, depth, and touch response. The effect should make the action feel considered, not make the interface look like it ordered chrome from a plugin marketplace and used the whole bottle."],"exampleUseCase":["A premium agency homepage can use Metallic Button as the primary inquiry CTA inside a dark hero. The chrome edge catches attention, the surface feels tactile, and the label stays calm enough for the page to retain a refined tone.","The outcome is confidence. The CTA feels more valuable without shouting at the visitor.","A product page can use the same button for paid templates, early access, booking flows, or high-intent actions where the interface should feel polished and deliberate."],"bestFor":["Premium hero CTAs and conversion sections.","Luxury, fashion, creative studio, AI, cyber, and high-craft SaaS pages.","Portfolio contact buttons and launch-page actions.","Dark UI environments where chrome highlights create clear separation.","Product preview, request access, and paid purchase buttons."],"notFor":["Not for low-priority links, dense dashboards, destructive actions, form field controls, documentation navigation, or pages that need a plain utility interface.","Not for every CTA. Metallic treatment works because it feels rare. Use it everywhere and the page becomes a showroom for button anxiety.","Not for tiny buttons where the material detail cannot be seen."],"performance":["Keep the highlight system lightweight. Prefer CSS gradients, shadows, transforms, and opacity over heavy filters or large blurred layers. Avoid running pointer updates when the button is inactive, offscreen, or on touch devices.","Keep shadow and blur values controlled. Metallic surfaces need crispness. Too much glow turns chrome into fog."],"accessibility":["Use real button or anchor semantics, visible focus states, sufficient contrast, and clear labels. Provide disabled and loading states that remain understandable without relying on color alone.","On mobile, use a stable highlight or simplified pressed state. Pointer-follow reflections should be disabled or simplified on touch devices. For reduced motion, freeze reflection movement, remove hover travel, and keep a static metallic surface."],"commonMistakes":["Making the label too low-contrast.","Using metallic shine without clear button boundaries.","Forgetting keyboard focus styles.","Applying chrome treatment to too many actions.","Letting pointer-follow highlights block clicks.","Making the hover state look like loading.","Using a premium material style on a page with no matching visual system."],"faq":[{"question":"What is Metallic Button?","answer":"Metallic Button is a React button component with a chrome-like border, glossy surface, and reflective highlight treatment."},{"question":"When should I use Metallic Button?","answer":"Use it for premium CTAs in hero sections, product launches, portfolio pages, agency inquiry flows, template purchases, and dark landing pages."},{"question":"Is Metallic Button the same as a glassmorphism button?","answer":"No. Glassmorphism usually suggests translucency and blur. Metallic Button focuses on polished material, chrome edge highlights, and reflective surface lighting."},{"question":"Can Metallic Button respond to cursor movement?","answer":"Yes, depending on implementation. The highlight can follow pointer position to make the surface feel reflective and tactile."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove moving reflections, cursor-follow highlights, shimmer travel, and repeated light sweeps. Use a static metallic surface instead."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/buttons/metallic-button","demoUrl":"https://vault.hyperiux.com/demo/metallic-button","related":[{"slug":"shiny-button","title":"Shiny Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/shiny-button"},{"slug":"border-beam","title":"Border Beam","docsUrl":"https://vault.hyperiux.com/effects/components/border-beam"},{"slug":"arrow-fill-button","title":"Arrow Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/arrow-fill-button"},{"slug":"dot-fill-button","title":"Dot Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/dot-fill-button"}]},{"slug":"scramble-link-button","title":"Scramble Link Button","category":{"id":"buttons","slug":"buttons","name":"Animated Buttons"},"tier":"free","summary":"A technical link button effect where text briefly scrambles before resolving for AI, cyber, and developer-tool CTAs.","description":"Scramble Link Button for React adds a technical text flicker to links for AI, dev-tool, and cyber landing pages. Includes a clean mobile fallback.","tags":["Lucide"],"dependencies":["lucide-react"],"install":"npx hyperiux add scramble-link-button","usage":"import ScrambleLinkButton from \"@/components/effects/scramble-link-button\";\n\nexport default function Page() {\n    return (\n        <>\n        <div className=\"h-screen w-screen flex items-center justify-center relative\">\n                  <ScrambleLinkButton\n                        href=\"#\"\n                        text=\"Hover me\"\n                        showLine={true}\n                        stepMs={50}\n                        className=\"text-[2vw] max-sm:text-[4.5vw]\"\n                    />\n</div>\n        </>\n    \n    );\n}","props":[{"name":"text","type":"string","default":"Hover me","description":"Button label text."},{"name":"textColor","type":"color","default":"#ffffff","description":"Default text color."},{"name":"hoverColor","type":"color","default":"#ff6b00","description":"Text color while hovered or pressed."},{"name":"showLine","type":"boolean","default":true,"description":"Shows the animated underline."},{"name":"showArrow","type":"boolean","default":false,"description":"Shows the optional arrow icon."},{"name":"scrambleDuration","type":"number","default":1000,"description":"Total scramble duration in milliseconds."},{"name":"stepMs","type":"number","default":50,"description":"Delay between scramble frames."},{"name":"revealStagger","type":"number","default":1.4,"description":"Controls how characters resolve across the word."},{"name":"href","type":"string","default":"#","description":"Link destination URL for the anchor."}],"overview":["Scramble Link Button gives a button or link a small, useful moment of feedback: a link scrambles briefly before settling.","Use it where a CTA needs to feel responsive and intentional, not theatrical. A button should confirm action, state, or direction; it should not become a tiny stage play that delays the click.","The main risk is keeping the markup honest. Use genuine button and anchor elements, preserve focus, fire instantly, and make loading and disabled states obvious. The animation decorates the action; it is never the action."],"exampleUseCase":["A cybersecurity company can use Scramble Link Button for secondary links in its hero and product sections, such as View the threat report or Read the docs. On hover the letters cycle through random glyphs and resolve from left to right, with an underline drawing in beneath the label.","The outcome is technical tone. The link feels like part of a decoding system, but it settles quickly and remains a real anchor that fires on the first click.","An AI developer tool can use the same component in its navigation to give links a coded feel without adding a heavier visual layer."],"bestFor":["Technical brand links where a fast decode effect supports the visual tone.","Secondary CTAs that can settle instantly before the user loses the label.","Scramble Link Button adds feedback to an action without weakening semantics, focus, or activation speed."],"notFor":["Not for destructive actions, unclear states, or places where animation hides the label or delays activation."],"performance":["Keep feedback fast, avoid layout-triggering letter movement, and preserve instant activation."],"accessibility":["Use real buttons or anchors, visible focus-visible styles, and clear loading/disabled states. Touch targets should stay large enough on mobile."],"commonMistakes":["Building Scramble Link Button with divs instead of real buttons or links.","Hiding the label during hover.","Forgetting loading and disabled states."],"faq":[{"question":"When should I use Scramble Link Button?","answer":"Use it when a link can scramble briefly before settling as feedback — without delaying the action."},{"question":"Should Scramble Link Button use a real button or link?","answer":"Yes. Use `<button>` for actions and `<a>` for navigation."},{"question":"How should Scramble Link Button handle focus?","answer":"Use visible focus-visible styles and support keyboard activation."},{"question":"How should loading states work with Scramble Link Button?","answer":"Loading should be visually clear and programmatically communicated without hiding the label."},{"question":"What should reduced motion do for Scramble Link Button?","answer":"Remove long staggers, scrambles, and looping emphasis while keeping instant state feedback."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/buttons/scramble-link-button","demoUrl":"https://vault.hyperiux.com/demo/scramble-link-button","related":[{"slug":"char-stagger-button","title":"Character Stagger Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/char-stagger-button"},{"slug":"arrow-fill-button","title":"Arrow Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/arrow-fill-button"},{"slug":"link-button","title":"Link Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/link-button"},{"slug":"dot-fill-button","title":"Dot Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/dot-fill-button"}]},{"slug":"shiny-button","title":"Shiny Button","category":{"id":"buttons","slug":"buttons","name":"Animated Buttons"},"tier":"free","summary":"A glossy animated button component for hero CTAs, pricing actions, upgrade prompts, product launches, and conversion sections where the primary action needs a little more pull.","description":"Shiny Button for React adds a glossy animated shine to CTA buttons for pricing pages, hero sections, SaaS flows, and premium product actions.","tags":[],"dependencies":[],"install":"npx hyperiux add shiny-button","usage":"import ShinyButton from \"@/components/effects/shiny-button\";\n\nexport default function Page() {\n    return (\n        <>\n        <div className=\"h-screen w-screen flex items-center justify-center relative\">\n                  <ShinyButton/>\n</div>\n        </>\n    \n    );\n}","props":[{"name":"label","type":"string","default":"Get Started","description":"Button label text."},{"name":"fillColor","type":"color","default":"#000000","description":"Button fill colour inside the animated border."},{"name":"labelColor","type":"color","default":"#ffffff","description":"Label colour."},{"name":"accentColor","type":"color","default":"#ff5f00","description":"Colour of the rotating border arc, inner shimmer, and hover glow."},{"name":"accentSoftColor","type":"color","default":"#ff9253","description":"Shine colour the border eases into while hovered."},{"name":"sweepDuration","type":"number","default":3,"description":"Seconds for one full rotation of the border gradient."},{"name":"easeDuration","type":"number","default":0.8,"description":"Seconds for the hover ease into the wider, brighter border."},{"name":"arcWidth","type":"number","default":5,"description":"Resting width of the bright border arc, as a percentage."},{"name":"cornerRadius","type":"number","default":32,"description":"Corner radius in pixels; 32 and above render as a full pill at the default height."},{"name":"showSpeckle","type":"boolean","default":true,"description":"Shows the masked dot pattern layer."},{"name":"showSheen","type":"boolean","default":true,"description":"Shows the rotating inner sheen."},{"name":"speckleOpacity","type":"number","default":0.4,"description":"Strength of the dot pattern layer."}],"overview":["Shiny Button gives a standard CTA a controlled light pass.","The button uses glow, gradient movement, surface shine, and soft edge illumination to create a polished interaction state. The label remains stable while the visual surface moves around it, so the user still reads the action clearly.","Use Shiny Button when a page needs one CTA to feel more desirable than the surrounding interface. It works for SaaS pricing pages, account upgrade flows, premium-access prompts, product launches, checkout starts, waitlist buttons, and hero sections where the primary action needs a stronger visual cue.","The page job is conversion emphasis. The shine should make the button feel active and intentional. It should not make the user wonder whether the CTA is clickable, loading, disabled, or auditioning for a sci-fi dashboard."],"exampleUseCase":["A SaaS pricing page can use Shiny Button on the paid-plan CTA. The surrounding interface stays calm, while the main action carries a subtle animated gloss that reinforces priority.","The outcome is hierarchy. Visitors understand which button matters most without the page needing another arrow, badge, or desperate “most popular” treatment trying to carry the whole conversion path.","A product launch page can use the same component for a waitlist or early-access CTA where the action should feel alive but still trustworthy."],"bestFor":["Primary CTAs in hero sections.","Pricing, checkout, upgrade, and premium-access actions.","Launch pages where one action needs stronger pull.","SaaS, AI, developer-tool, and digital-product interfaces.","Dark UI sections where glow and shine can create clean contrast."],"notFor":["Not for every button on the page.","Not for destructive actions, legal confirmations, subtle secondary links, dense dashboards, form controls, or navigation items that should stay quiet.","Not for CTAs with unclear copy. Shine can attract attention, but it cannot make “Click here” worth clicking."],"performance":["Keep the visual layer lightweight. Prefer CSS gradients, masks, opacity, and transform over heavy filters or constant JavaScript-driven animation. Avoid running pointer calculations when the button is offscreen or inactive.","Limit glow blur and animated texture density. A CTA should feel polished, not like it brought its own rendering engine to a checkout flow."],"accessibility":["Use real button or anchor semantics, readable labels, visible focus states, and sufficient contrast. The shine should never reduce label clarity.","On touch devices, use a stable active or hover-safe visual state instead of relying on cursor position. For reduced motion, freeze the shine, remove continuous movement, or show a static polished surface."],"commonMistakes":["Applying shiny treatment to every CTA.","Letting the animated surface reduce label readability.","Using divs instead of real buttons or anchors.","Forgetting focus-visible states.","Making the shine look like a loading indicator.","Running pointer-driven animation on touch devices without fallback.","Styling a weak CTA instead of improving the action copy."],"faq":[{"question":"What is Shiny Button?","answer":"Shiny Button is a React button component that adds a glossy animated shine, glow, or light-pass treatment to a CTA."},{"question":"When should I use Shiny Button?","answer":"Use it for primary actions that deserve extra visual emphasis, such as pricing CTAs, upgrade buttons, product launch actions, checkout starts, and premium-access prompts."},{"question":"Should every button use Shiny Button?","answer":"No. Use it on one or two high-priority actions. Too many shiny buttons weaken hierarchy and make the page feel noisy."},{"question":"Does Shiny Button work with links?","answer":"Yes. If the action navigates to another page, render it as an anchor. If it performs an action, render it as a button."},{"question":"How do I keep Shiny Button accessible?","answer":"Use semantic elements, readable labels, visible focus styles, sufficient contrast, and decorative shine layers that do not block interaction or duplicate text."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/buttons/shiny-button","demoUrl":"https://vault.hyperiux.com/demo/shiny-button","related":[{"slug":"border-beam","title":"Border Beam","docsUrl":"https://vault.hyperiux.com/effects/components/border-beam"},{"slug":"arrow-fill-button","title":"Arrow Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/arrow-fill-button"},{"slug":"dot-fill-button","title":"Dot Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/dot-fill-button"},{"slug":"char-stagger-primary-button","title":"Character Stagger Primary Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/char-stagger-primary-button"}]},{"slug":"spotlight-button","title":"Spotlight Button","category":{"id":"buttons","slug":"buttons","name":"Animated Buttons"},"tier":"pro","summary":"A cursor-reactive button component for hero CTAs, product actions, pricing sections, waitlist prompts, and premium landing pages where the primary action should feel lit, focused, and ready to press.","description":"Spotlight Button for React adds a cursor-led light sweep to CTA buttons for hero sections, product pages, pricing actions, and premium interfaces.","tags":["CSS"],"dependencies":[],"install":"npx hyperiux add spotlight-button","usage":"// Built using Hyperiux Vault: https://vault.hyperiux.com\n\nimport SpotlightButton from \"@/components/effects/spotlight-button\";\n\nexport default function Page() {\n    return (\n        <>\n        <div className=\"h-screen w-screen flex items-center justify-center relative\">\n                  <SpotlightButton />\n</div>\n        </>\n    \n    );\n}","props":[{"name":"haloColor","type":"string","default":"#ff5f00","description":"Main color of the orbiting halo."},{"name":"haloCoreColor","type":"string","default":"#ff9253","description":"Bright core color on hover and keyboard focus."},{"name":"spotlightIntensity","type":"number","default":1,"description":"Strength of the border spotlight and glow."},{"name":"orbitDuration","type":"number","default":3,"description":"Seconds for one full orbit."},{"name":"settleDuration","type":"number","default":0.8,"description":"Hover and focus transition duration in seconds."},{"name":"haloWidth","type":"number","default":5,"description":"Width of each halo gradient segment as a percentage of the sweep."},{"name":"size","type":"\"sm\" | \"md\" | \"lg\"","default":"md","description":"Button size: small, medium, or large."},{"name":"overlayColor","type":"string","default":"bg-black/30","description":"Tailwind class for the tint layered over the inner spotlight."}],"overview":["Spotlight Button turns a normal CTA into a focused interaction surface.","The button uses a moving highlight, soft glow, border illumination, and surface fill to create the feeling of light travelling across the action. The label remains readable while the spotlight treatment gives the button a stronger sense of depth and attention.","Use Spotlight Button when one action needs to feel more active than the rest of the interface. It works for SaaS hero sections, AI product launches, premium-access prompts, pricing CTAs, template purchases, booking actions, waitlist flows, and dark interface sections where light can create clear hierarchy.","The page job is attention direction. The button should feel like the obvious next action without becoming noisy. A good spotlight makes the CTA feel considered. A bad one makes the button look like it is being interrogated."],"exampleUseCase":["A SaaS homepage can use Spotlight Button as the main hero CTA. The surrounding interface stays calm, while the primary action receives a focused light treatment that responds to attention and reinforces hierarchy.","The outcome is pull. The button feels more deliberate without needing extra arrows, badges, or loud supporting copy.","A product launch page can use the same component for early access, template previews, demo booking, or premium upgrades where the CTA needs a stronger visual finish but still has to feel trustworthy."],"bestFor":["Primary CTAs in hero sections.","Pricing, upgrade, booking, and premium-access actions.","SaaS, AI, developer-tool, and digital-product pages.","Dark UI sections where light can create strong button separation.","Product launches and waitlist flows where the CTA needs more presence."],"notFor":["Not for every button on the page.","Not for destructive actions, legal confirmations, dense dashboards, quiet navigation links, or form controls that need utility more than atmosphere.","Not for unclear CTA copy. A spotlight can draw attention to the button, but it cannot make “Submit” feel like a strategy."],"performance":["Keep the spotlight effect lightweight. Prefer CSS gradients, opacity, transform, and masks over heavy filters or constant JavaScript work. If pointer tracking is used, throttle updates or keep motion outside React state where possible.","Disable pointer-follow calculations when the button is offscreen, inactive, disabled, or on touch devices. The button should feel responsive, not like a tiny lighting engine with conversion goals."],"accessibility":["Use real button or anchor semantics, readable labels, visible focus states, sufficient contrast, and clear disabled or loading states. The spotlight should never reduce label clarity.","On touch devices, use a static highlight, pressed state, or simplified glow instead of cursor-led movement. For reduced motion, freeze the spotlight, remove sweeping light movement, and keep a static illuminated surface."],"commonMistakes":["Applying spotlight treatment to every CTA.","Letting the glow reduce label readability.","Using pointer-follow lighting without a mobile fallback.","Forgetting keyboard focus states.","Making the spotlight look like a loading state.","Letting decorative layers block clicks.","Using the effect to compensate for weak CTA hierarchy."],"faq":[{"question":"What is Spotlight Button?","answer":"Spotlight Button is a React button component that adds a moving light, glow, or cursor-reactive highlight to a CTA surface."},{"question":"When should I use Spotlight Button?","answer":"Use it for high-priority actions such as hero CTAs, pricing buttons, product launch actions, upgrade prompts, waitlist buttons, and booking CTAs."},{"question":"Should every CTA use Spotlight Button?","answer":"No. Use it sparingly. Spotlight Button works best when one action needs to stand out from quieter secondary actions."},{"question":"Does Spotlight Button need JavaScript?","answer":"The base visual treatment can be CSS-driven. Cursor-reactive spotlight movement usually needs client-side pointer handling in React."},{"question":"Can Spotlight Button work as a link?","answer":"Yes. If the CTA navigates to another page, render it as an anchor. If it performs an action, render it as a button."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove cursor-follow movement, sweeping highlights, and animated glow travel. Use a static illuminated state instead."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/buttons/spotlight-button","demoUrl":"https://vault.hyperiux.com/demo/spotlight-button","related":[{"slug":"metallic-button","title":"Metallic Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/metallic-button"},{"slug":"border-beam","title":"Border Beam","docsUrl":"https://vault.hyperiux.com/effects/components/border-beam"},{"slug":"shiny-button","title":"Shiny Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/shiny-button"}]},{"slug":"arc-flow-carousel","title":"Arc Flow Carousel","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"free","summary":"A curved image carousel for portfolios, campaign galleries, editorial showcases, product stories, and brand sections where visual cards should feel like they are moving through a shared arc.","description":"Arc Flow Carousel for React arranges visual cards along a curved arc for portfolios, campaign galleries, product showcases, and brand-led sections.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add arc-flow-carousel","usage":"import ArcFlowCarousel from '@/components/effects/arc-flow-carousel'\n\nconst Page = () => {\n return (\n <>\n <ArcFlowCarousel/>\n </>\n )\n}\n\nexport default Page","props":[{"name":"smoothing","type":"number","default":5.5,"description":"How fast the fan catches up to the pointer. Higher feels snappier."},{"name":"momentum","type":"number","default":1,"description":"Flick distance multiplier after release."},{"name":"dragSensitivity","type":"number","default":1.2,"description":"How far the fan travels per pixel dragged or scrolled."},{"name":"autoRotateSpeed","type":"number","default":0,"description":"Constant idle drift in rad/s. Positive drifts new cards in from the left."},{"name":"pauseOnHover","type":"boolean","default":true,"description":"Pauses the idle drift while a pointer hovers the carousel."},{"name":"snap","type":"boolean","default":false,"description":"Snaps to the nearest card once a flick or wheel input settles."},{"name":"radiusRatio","type":"number","default":0.85,"description":"Circle radius as a multiple of the container width. Bigger is a flatter arc."},{"name":"cardRatio","type":"number","default":0.21,"description":"Card width as a fraction of the container width, clamped by min/max card width."},{"name":"maxCardWidth","type":"number","default":320,"description":"Upper bound on card width, in pixels."},{"name":"cardAspect","type":"number","default":0.62,"description":"Card width divided by height."},{"name":"overlap","type":"number","default":-0.04,"description":"0 = cards touch edge to edge, 0.3 = overlap by 30%, negative = a gap between them."},{"name":"arcOffset","type":"number","default":0.5,"description":"Vertical position of the leading card's centre, as a fraction of height."},{"name":"surfaceColor","type":"string","default":"#000000","description":"Shared hex color for the carousel background and wheel surface."}],"overview":["Arc Flow Carousel turns a row of cards into a flowing visual stage.","Instead of placing images in a flat strip, the carousel positions cards along an arc. Each item tilt, shift, and scale as it moves through the curve, creating a sense of depth and procession. The active area feels selected, while the surrounding cards remain visible enough to suggest what came before and what is coming next.","Use Arc Flow Carousel when a visual sequence should feel more cinematic than a standard slider. It works for portfolio highlights, campaign assets, product imagery, editorial stories, fashion lookbooks, creative archives, and landing-page sections where the image set deserves atmosphere.","The page job is guided browsing. The visitor should understand that this is a sequence, feel invited to move through it, and still retain orientation. The arc should add rhythm, not make the carousel feel like the images are trying to escape the layout."],"exampleUseCase":["A creative studio can use Arc Flow Carousel on a homepage to present selected projects as a cinematic visual band. Each card moves through the arc, giving every project a moment of presence while still showing the broader collection.","The outcome is momentum. The visitor sees the work as a curated flow rather than a static grid.","A product company can use the same component to present feature visuals, template previews, launch assets, or product-world imagery. The curve adds depth and editorial pacing without turning the section into a heavy 3D scene."],"bestFor":["Portfolio and case-study highlights where visuals need a staged presentation.","Campaign galleries, lookbooks, and editorial image sequences.","Product showcases where each image deserves a focused card moment.","Brand-led landing pages where motion and composition are part of the selling point.","Visual archives that need more theatre than a grid but more structure than scattered cards."],"notFor":["Not for dense ecommerce catalogues, pricing tables, testimonial lists, documentation, comparison sections, or content that users need to scan quickly.","Not for large uncurated image sets. A curved carousel should feel selected, not like a folder view with ambition.","Not for pages where direct comparison matters more than presentation. Use a grid when users need to compare items side by side."],"performance":["Keep the number of visible cards controlled, optimise images, reserve carousel dimensions, and animate transform and opacity rather than layout properties. Avoid excessive blur, oversized shadows, and constant recalculation during drag or scroll.","If the carousel supports dragging, throttle pointer work and avoid React state updates on every tiny movement. The interaction should feel fluid before it feels elaborate."],"accessibility":["Use real buttons for navigation and provide clear labels for previous, next, and active item states. Preserve keyboard navigation, visible focus styles, and a logical reading order.","On mobile, reduce arc depth, overlap, and card rotation. A flatter swipe-friendly layout may be better than forcing the full desktop arc into a narrow screen. For reduced motion, switch between cards with a minimal fade, instant state change, or simplified translate without depth rotation."],"commonMistakes":["Using too many cards.","Making the curve so dramatic that images become hard to inspect.","Letting cards overlap captions or controls.","Ignoring keyboard navigation.","Using inconsistent image ratios without a layout rule.","Treating the carousel as storage for every unused visual.","Keeping autoplay active near important reading or conversion sections."],"faq":[{"question":"What is Arc Flow Carousel?","answer":"Arc Flow Carousel is a React carousel effect that arranges visual cards along a curved arc, giving the image set a panoramic and depth-led motion pattern."},{"question":"When should I use Arc Flow Carousel?","answer":"Use it for curated visual sequences such as portfolio highlights, campaign galleries, product showcases, editorial image sets, and brand-led landing sections."},{"question":"Is Arc Flow Carousel good for large image libraries?","answer":"No. It works best with a focused set of strong visuals. Large libraries usually need filtering, search, pagination, or grid-based browsing."},{"question":"Can the cards include captions?","answer":"Yes. Captions work well when they are short and placed consistently. Avoid long text blocks inside the card itself."},{"question":"How do I keep Arc Flow Carousel accessible?","answer":"Use semantic navigation controls, visible focus states, keyboard support, accessible labels, meaningful image alt text, and real DOM captions where needed."},{"question":"What should reduced motion do?","answer":"Reduced motion should simplify or remove curved depth movement. Use a fade, instant switch, or minimal translate while keeping the same content available."},{"question":"Does Arc Flow Carousel work on mobile?","answer":"Yes, with adaptation. Reduce card rotation, overlap, and arc depth. A flatter swipe layout may be more usable on smaller screens."},{"question":"Can Hyperiux adapt Arc Flow Carousel for a real brand system?","answer":"Yes. A custom version should define arc geometry, card spacing, image ratios, interaction model, keyboard behavior, mobile fallback, accessibility states, reduced-motion handling, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/arc-flow-carousel","demoUrl":"https://vault.hyperiux.com/demo/arc-flow-carousel","related":[{"slug":"infinite-carousel","title":"Infinite Carousel","docsUrl":"https://vault.hyperiux.com/effects/carousels/infinite-carousel"},{"slug":"interactive-list-preview","title":"Interactive List Preview","docsUrl":"https://vault.hyperiux.com/effects/components/interactive-list-preview"},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"}]},{"slug":"clippath-slider","title":"Clip Path Slider","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"pro","summary":"A carousel effect that reveals images through clip-path masks for portfolios, lookbooks, campaign visuals, and product showcases.","description":"Clip Path Slider for React reveals images through masks for portfolios, lookbooks, and campaign visuals with visible controls. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add clippath-slider","usage":"import ClipPathSlider from '@/components/effects/clippath-slider'\n\nconst Page = () => {\n return (\n <>\n <ClipPathSlider/>\n </>\n )\n}\n\nexport default Page","props":[{"name":"slides","type":"array","default":[{"name":"Motion Systems","description":"Crafting immersive motion-driven interfaces with smooth transitions, interactive timelines, and modern animation systems.","image":"https://picsum.photos/seed/1/800/600"},{"name":"Creative Components","description":"A curated collection of expressive UI components designed for futuristic web experiences and rapid development.","image":"https://picsum.photos/seed/2/800/600"},{"name":"Visual Interactions","description":"Building visually rich interactions with hover effects, layered depth, dynamic layouts, and fluid user feedback.","image":"https://picsum.photos/seed/3/800/600"},{"name":"Future Interfaces","description":"Exploring next-generation interface patterns that blend cinematic motion with minimal and functional design.","image":"https://picsum.photos/seed/4/800/600"},{"name":"Design Engine","description":"Creating scalable design systems and reusable interface architectures optimized for modern frontend workflows.","image":"https://picsum.photos/seed/5/800/600"},{"name":"Scroll Experiences","description":"Designing immersive scroll-based storytelling experiences powered by fluid motion and seamless transitions.","image":"https://picsum.photos/seed/6/800/600"},{"name":"Interactive Layers","description":"Combining lighting, gradients, and layered compositions to create premium interactive web experiences.","image":"https://picsum.photos/seed/7/800/600"}],"description":"Slides rendered by the clip-path sweep transition (name, description, image)."},{"name":"clueText","type":"string","default":"Click either side and watch the next scene cut through.","description":"Instructional hint shown above the slider."},{"name":"showClue","type":"boolean","default":true,"description":"Shows the instructional clue text above the slider."},{"name":"cursorBg","type":"color","default":"#ff5f00","description":"Background color of the custom directional cursor."},{"name":"cursorLineColor","type":"color","default":"#ffffff","description":"Color of the arrow lines inside the custom cursor."},{"name":"duration","type":"number","default":0.75,"description":"Clip-path transition duration."}],"overview":["Clip Path Slider creates a controlled visual sequence: shape masks reveal each slide.","Use it for equal-weight images, portfolio work, campaign visuals, or product shots where browsing is the point. If users must compare everything, read everything, or convert from every item, use a grid instead.","The production risk is hiding important content. Keep controls visible, support keyboard and swipe, announce meaningful slide changes politely, and pause autoplay when the visitor interacts."],"exampleUseCase":["A boutique hotel group can use Clip Path Slider to showcase its properties on the homepage. Each full-screen image is cut away by a sweeping arc to reveal the next, and the property name and a short line of description animate in with it.","The outcome is a sense of place. Visitors browse locations as a sequence of scenes, while booking, rates, and room comparisons stay in a regular grid outside the slider.","A creative agency can use the same component to present its capabilities, one service per slide."],"bestFor":["Portfolio and campaign showcases where shape masks are part of the art direction.","Equal-weight visual slides with visible controls, swipe, and a non-carousel fallback for critical proof.","Clip Path Slider supports visual browsing when a grid would feel flat and comparison is not the priority."],"notFor":["Not for critical proof, pricing, feature comparisons, or content users must see to convert."],"performance":["Optimize images, lazy-load offscreen slides carefully, and pause autoplay when inactive or offscreen."],"accessibility":["Use visible controls, keyboard navigation, swipe, and aria-live=\"polite\" for meaningful slide changes. Mobile controls must remain reachable."],"commonMistakes":["Using Clip Path Slider to hide critical conversion content.","Autoplaying without pause controls.","Skipping keyboard and swipe support."],"faq":[{"question":"When should I use Clip Path Slider?","answer":"Use it when users browsing equal-weight visuals need shape masks revealing each slide."},{"question":"Should Clip Path Slider autoplay?","answer":"Only with pause controls and only if autoplay stops on hover, focus, touch, and reduced motion."},{"question":"How should Clip Path Slider announce slides?","answer":"Use a labelled region and aria-live=\"polite\" for meaningful user-initiated changes."},{"question":"When is a grid better than Clip Path Slider?","answer":"Use a grid when users need to compare, scan, read, or see all items to convert."},{"question":"How should Clip Path Slider behave on mobile?","answer":"Support swipe, keep controls reachable, and reduce depth or masking where it hurts clarity."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/clippath-slider","demoUrl":"https://vault.hyperiux.com/demo/clippath-slider","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"},{"slug":"scroll-distortion","title":"Scroll Distortion","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-distortion"},{"slug":"phantom-image-trail","title":"Phantom Image Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/phantom-image-trail"}]},{"slug":"depth-card-stack","title":"Depth Card Stack","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"pro","summary":"A layered card stack component that adds shallow depth to service, feature, and proof card groups.","description":"Depth Card Stack for React layers service, proof, or feature cards where shallow depth improves browsing without hiding content.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add depth-card-stack","usage":"import DepthCardStack from '@/components/effects/depth-card-stack'\n\nconst Page = () => {\n return (\n <>\n <DepthCardStack/>\n </>\n )\n}\n\nexport default Page","props":[{"name":"duration","type":"number","default":0.55,"description":"Card navigation transition duration."},{"name":"mouseInteraction","type":"boolean","default":true,"description":"Enables pointer tilt and texture reveal on the active card."},{"name":"lerp","type":"number","default":0.18,"description":"Pointer-follow smoothing amount; higher values track faster."},{"name":"smoothness","type":"number","default":0.4,"description":"Hover enter/leave smoothing duration for card tilt and texture reveal."}],"overview":["Depth Card Stack adds motion to a component that already has a job: cards stack with shallow depth.","Use Depth Card Stack when a small group of service, proof, or feature cards should feel deliberately layered. The stack should clarify hierarchy while keeping every card readable as normal HTML.","The main risk is hiding the lower cards behind style. Depth should stay shallow, focus states must remain visible, and the section must collapse into a clean stack on mobile."],"exampleUseCase":["A SaaS service page can use Depth Card Stack to group three or four proof cards into a layered sequence. The depth makes the group feel curated while every card heading, link, and description remains available."],"bestFor":["Service, feature, or proof groups where a small card set should feel layered and curated.","Sections where every card still needs a real heading, copy, and link in document order.","Feature or proof groups where layered depth improves hierarchy without hiding any card."],"notFor":["Not for long comparison sets, dense pricing matrices, or card groups where users need to scan every item quickly."],"performance":["Keep the card count small, animate transform and opacity rather than layout, and avoid re-rendering the entire stack when one card receives focus or hover."],"accessibility":["Cards need real headings and links in source order. On mobile, flatten depth into a simple vertical stack or swipe-free card group."],"commonMistakes":["Using depth to hide lower-priority cards.","Making hover the only way to reveal card content.","Letting stacked cards overlap focus rings or links."],"faq":[{"question":"When should I use Depth Card Stack?","answer":"Use it when a service, feature, or proof group needs layered, shallow-depth browsing."},{"question":"What accessibility details matter for Depth Card Stack?","answer":"Keep each card as normal HTML with a heading, readable copy, link or button where needed, and a visible focus state. Depth should never hide focus rings or make the keyboard order feel different from the DOM order."},{"question":"How should Depth Card Stack behave on mobile?","answer":"Flatten the layout into a clean vertical card stack with shallow or no overlap. Touch users should be able to read and open every card without relying on hover or depth."},{"question":"Can Depth Card Stack improve a proof section?","answer":"Yes, when a small set of service, feature, or proof cards needs stronger hierarchy. It hurts the section when depth hides content or slows scanning."},{"question":"What should reduced motion do for Depth Card Stack?","answer":"Keep state changes visible and instant while removing decorative movement."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/depth-card-stack","demoUrl":"https://vault.hyperiux.com/demo/depth-card-stack","related":[{"slug":"infinite-carousel","title":"Infinite Carousel","docsUrl":"https://vault.hyperiux.com/effects/carousels/infinite-carousel"},{"slug":"progressive-bloom-valley","title":"Progressive Bloom Valley","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/progressive-bloom-valley"},{"slug":"draggable-canvas","title":"Draggable Canvas","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/draggable-canvas"}]},{"slug":"dimensional-switch-slider","title":"Dimensional Switch Slider","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"free","summary":"A 3D-feeling carousel for portfolios, campaign sections, product stories, and brand showcases where each slide should feel like a physical panel entering the scene.","description":"Dimensional Switch Slider for React switches visual cards through depth, tilt, and perspective for portfolios, product stories, and brand showcases.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add dimensional-switch-slider","usage":"import DimensionalSwitchSlider from '@/components/effects/dimensional-switch-slider'\n\nconst Page = () => {\n return (\n <>\n <DimensionalSwitchSlider/>\n </>\n )\n}\n\nexport default Page","props":[{"name":"infinite","type":"boolean","default":true,"description":"Wraps from the last item back to the first (and vice versa) instead of clamping and disabling the prev/next buttons at the ends."},{"name":"direction","type":"string","default":"horizontal","description":"Axis the card flips around - horizontal flips on Y with text sliding/tilting left-right, vertical flips on X with text sliding/tilting up-down."},{"name":"autoplay","type":"boolean","default":true,"description":"Automatically advances to the next slide on a timer."},{"name":"autoplayDelay","type":"number","default":2600,"description":"Time between automatic slide changes in milliseconds."},{"name":"ease","type":"string","default":"cubic-bezier(1, -0.001, 0.159, 0.838)","description":"CSS cubic-bezier(...) string or a plain GSAP ease name - drives the card flip and both text tweens."},{"name":"textColor","type":"string","default":"#ffffff","description":"Color applied to the slide text."},{"name":"textSize","type":"number | string","default":84,"description":"Font size of the slide text. Numbers are treated as pixels; strings can use any CSS length."},{"name":"cardWidth","type":"number | string","default":680,"description":"Width of the card. Numbers are treated as pixels; strings can use any CSS length."},{"name":"cardHeight","type":"number | string","default":460,"description":"Height of the card. Numbers are treated as pixels; strings can use any CSS length."},{"name":"cardBorderRadius","type":"number | string","default":16,"description":"Border radius applied to both card faces. Numbers are treated as pixels; strings can use any CSS length."},{"name":"cardClassName","type":"string","default":"max-md:w-[85vw]! max-md:h-[75vw]! max-lg:w-[85vw]! max-lg:h-[55vw]!","description":"Extra classes appended to the card's own wrapper div."}],"overview":["Dimensional Switch Slider turns a standard card carousel into a spatial transition.","Each item sits as a focused visual panel, then switches through a perspective-led motion when the user moves forward or backward. The outgoing card tilts and rotates while the incoming card takes its place. The result gives each slide a stronger sense of arrival than a simple horizontal transition.","Use Dimensional Switch Slider when the content deserves focus and presentation: featured projects, visual services, campaign ideas, product modules, founder stories, case-study entries, and brand-led landing sections. It works best when every slide has one strong image, one clear title, and a reason to be treated like a standalone moment.","The page job is controlled attention. The slider should make the next item feel selected, not merely swapped. The motion should help the visitor understand that the panel has changed, while keeping the text readable, controls predictable, and layout stable."],"exampleUseCase":["A studio homepage can use Dimensional Switch Slider to present four core capabilities: strategy, design, motion, and frontend implementation. Each capability appears as a card with a visual, a short title, and a focused one-line explanation.","The outcome is presentation. The section feels designed and deliberate without requiring a full case-study grid above the fold.","A product company can use the same pattern to introduce feature pillars, templates, integrations, or launch modules. The dimensional motion gives each item weight while keeping the section compact."],"bestFor":["Portfolio highlights where each project needs a focused visual card.","Product feature groups that deserve more presence than a static list.","Agency and studio service sections where motion can reinforce craft.","Campaign landing pages with a small set of visual story beats.","Premium hero or mid-page sections where slide changes should feel spatial."],"notFor":["Not for long lists, dense feature comparisons, pricing tables, testimonials that need quick scanning, legal information, or documentation.","Not for slides with too much text. A dimensional panel is not a brochure page wearing a mask.","Not for pages where the user needs to compare all items at once. Use a grid when comparison matters more than presentation."],"performance":["Keep the slide count controlled, optimise images, reserve the card dimensions, and animate transform and opacity rather than layout properties. Avoid large shadows, heavy filters, and unnecessary 3D stacking across many elements.","Do not keep offscreen slides doing expensive work. Pause or simplify animation when the section is outside the viewport."],"accessibility":["Use real buttons for previous and next controls. Add clear labels, keyboard support, visible focus states, and predictable slide order. Announce slide changes only when useful; do not spam assistive technology on every decorative motion frame.","On mobile, reduce perspective intensity, simplify card rotation, and keep controls easy to tap. For reduced motion, switch slides with a fade, instant state change, or minimal translate without 3D depth."],"commonMistakes":["Using too many slides.","Making card motion stronger than the content.","Letting slide dimensions jump between items.","Hiding text inside images.","Ignoring keyboard navigation.","Using 3D motion on mobile without simplifying it.","Treating the slider as storage for every idea that did not fit elsewhere."],"faq":[{"question":"What is Dimensional Switch Slider?","answer":"Dimensional Switch Slider is a React carousel effect that transitions between visual cards using perspective, depth, tilt, scale, or 3D-style movement."},{"question":"When should I use Dimensional Switch Slider?","answer":"Use it for curated showcases: portfolio entries, feature pillars, visual services, product modules, campaign beats, and brand-led hero sections."},{"question":"Is Dimensional Switch Slider good for lots of content?","answer":"No. It works best with a small set of strong items. Long lists and dense comparisons are usually better handled with a grid or structured content section."},{"question":"Can the slides include text?","answer":"Yes, but keep it short. A strong title and one concise supporting line usually work better than long paragraphs."},{"question":"How do I keep Dimensional Switch Slider accessible?","answer":"Use semantic buttons, visible focus states, keyboard navigation, accessible slide labels, and real DOM text. Avoid relying only on visual motion to communicate the active item."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove or simplify the perspective transition. Use a quick fade, instant switch, or minimal movement while keeping all content available."},{"question":"Does this effect work on mobile?","answer":"Yes, with tuning. Reduce tilt, depth, and travel distance so the slider feels stable on smaller screens."},{"question":"Can Hyperiux adapt Dimensional Switch Slider for a real brand system?","answer":"Yes. A custom version should define slide structure, image ratios, navigation model, depth intensity, keyboard behavior, mobile fallback, accessibility states, reduced-motion handling, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/dimensional-switch-slider","demoUrl":"https://vault.hyperiux.com/demo/dimensional-switch-slider","related":[{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"stacking-cards","title":"Stacking Cards","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/stacking-cards"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"}]},{"slug":"ellipse-carousel","title":"Ellipse Carousel","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"free","summary":"An elliptical image carousel for portfolios, visual archives, campaign pages, moodboards, and brand-led sections where the collection should feel spatial, light, and explorable.","description":"Ellipse Carousel for React places visual cards around an elliptical path for portfolios, image archives, campaigns, and interactive brand sections.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add ellipse-carousel","usage":"import EllipseCarousel from '@/components/effects/ellipse-carousel'\n\nconst Page = () => {\n return (\n <>\n <EllipseCarousel/>\n </>\n )\n}\n\nexport default Page","props":[{"name":"backgroundColor","type":"string","default":"#eeeeee","description":"Background fill behind the carousel stage."},{"name":"centerLabel","type":"string","default":"Ellipse Carousel","description":"Text shown at the center of the ellipse when enabled."},{"name":"showCenterLabel","type":"boolean","default":true,"description":"Shows or hides the center label."},{"name":"cardWidth","type":"number","default":130,"description":"Card width at the largest active position, in pixels."},{"name":"cardHeight","type":"number","default":180,"description":"Card height at the largest active position, in pixels."},{"name":"minScale","type":"number","default":0.2,"description":"Minimum scale applied to the farthest cards on the ellipse."},{"name":"radiusXRatio","type":"number","default":0.25,"description":"Horizontal ellipse radius as a fraction of the stage width."},{"name":"radiusYRatio","type":"number","default":0.36,"description":"Vertical ellipse radius as a fraction of the stage height."},{"name":"autoPlay","type":"boolean","default":true,"description":"Automatically advances the carousel by one card at a time."},{"name":"holdDuration","type":"number","default":1,"description":"Seconds to hold on the active card before advancing."},{"name":"stepDuration","type":"number","default":0.7,"description":"Seconds for the snap transition between cards."},{"name":"pauseOnHover","type":"boolean","default":true,"description":"Pauses autoplay while hovering a card."},{"name":"draggable","type":"boolean","default":true,"description":"Allows users to drag the ellipse by hand."},{"name":"dragSensitivity","type":"number","default":1,"description":"Multiplier on the carousel's angular drag response."}],"overview":["Ellipse Carousel turns a group of cards into an orbital composition.","Cards sit around an elliptical path, giving the section a sense of distribution rather than linear progression. The centre can hold a brand word, title, product name, or core message while the surrounding cards move as a connected visual field. The result feels airy, editorial, and gallery-like.","Use Ellipse Carousel when the goal is not just to move from slide to slide, but to create a spatial relationship between the central idea and the surrounding visuals. It works for creative portfolios, photography sets, campaign assets, travel and lifestyle galleries, brand moodboards, studio pages, and product-world presentations.","The page job is atmosphere and orientation. The visitor should feel the collection moving around a clear centre, not floating randomly across the screen. Ellipse motion works when the layout feels intentional. Without that centre, it is just scattered cards doing cardio."],"exampleUseCase":["A studio homepage can use Ellipse Carousel to surround the brand name with selected project stills, references, and campaign fragments. The central word remains still while the surrounding cards suggest range, taste, and momentum.","The outcome is brand atmosphere. The visitor gets a sense of the studio’s visual world before reading the service details.","A travel, fashion, or photography page can use the same component to create a lightweight visual archive where images feel connected through motion rather than locked into a conventional grid."],"bestFor":["Creative portfolios and studio homepages where image atmosphere matters.","Campaign, fashion, travel, lifestyle, and photography galleries.","Brand moodboards and visual archives.","Product-world sections where surrounding visuals support one central idea.","Editorial landing pages where the layout should feel spatial without becoming heavy."],"notFor":["Not for dense catalogues, search-driven galleries, pricing content, documentation, comparison tables, forms, or content that needs linear reading.","Not for image sets with no visual relationship. Ellipse Carousel can arrange a collection beautifully, but it cannot create curation where none exists.","Not for sections where the centre message must compete with large moving cards."],"performance":["Control the number of cards, optimise images, set fixed card dimensions, and animate transform and opacity rather than layout properties. Recalculate positions only on meaningful resize changes.","Avoid large shadows, oversized images, and constant animation loops when the carousel is outside the viewport. The field should feel light, not like every card is carrying a rendering invoice."],"accessibility":["Preserve a logical reading order even when cards are visually distributed around the ellipse. Use real controls if the carousel is interactive, and provide accessible labels for image cards, active states, or view changes where applicable.","On mobile, simplify the ellipse into a stacked, swipeable, or flatter orbital layout. Keep the central message visible and avoid placing tiny cards too close to screen edges. For reduced motion, render a static ellipse, a simple grid, or a minimal fade between states."],"commonMistakes":["Making the layout look random instead of elliptical.","Letting cards overlap the central message.","Using too many small images.","Forgetting alt text or accessible treatment for visual cards.","Running continuous motion even when the section is offscreen.","Forcing the desktop ellipse onto mobile.","Using the effect for content that needs direct comparison or filtering."],"faq":[{"question":"What is Ellipse Carousel?","answer":"Ellipse Carousel is a React carousel or visual layout effect that positions image cards around an elliptical path or orbital field."},{"question":"When should I use Ellipse Carousel?","answer":"Use it for portfolios, moodboards, image archives, campaign pages, photography sets, lifestyle galleries, and brand sections where visuals should surround a central idea."},{"question":"Is Ellipse Carousel the same as Orbit Flip Slider?","answer":"No. Orbit Flip Slider focuses on switching between multiple layout modes. Ellipse Carousel focuses on one elliptical spatial arrangement around a central point."},{"question":"Can the centre contain text?","answer":"Yes. The centre can hold a brand name, title, product name, section heading, or short message. Keep it stable and readable."},{"question":"How many cards work best?","answer":"A controlled set works best. Too many cards can make the ellipse feel cluttered, especially on smaller screens."},{"question":"How do I keep Ellipse Carousel accessible?","answer":"Use meaningful alt text for content images, hide decorative cards where appropriate, preserve logical reading order, and provide keyboard-accessible controls when interaction is available."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove orbit travel, repeated floating, and depth movement. Use a static ellipse, simple grid, or minimal fade."},{"question":"Can Hyperiux adapt Ellipse Carousel for a real brand system?","answer":"Yes. A custom version should define ellipse geometry, card size, image ratios, central content behavior, motion rhythm, mobile fallback, accessibility states, reduced-motion handling, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/ellipse-carousel","demoUrl":"https://vault.hyperiux.com/demo/ellipse-carousel","related":[{"slug":"infinite-carousel","title":"Infinite Carousel","docsUrl":"https://vault.hyperiux.com/effects/carousels/infinite-carousel"},{"slug":"hover-slider","title":"Hover Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hover-slider"},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"},{"slug":"hover-stack","title":"Hover Stack","docsUrl":"https://vault.hyperiux.com/effects/components/hover-stack"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"}]},{"slug":"infinite-carousel","title":"Infinite Carousel","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"pro","summary":"Let users drag, tap, or browse through looping cards when the section needs momentum instead of a hard first-to-last ending.","description":"Infinite Carousel for React lets users drag or tap through looping cards for product, property, and campaign showcases with clear controls.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add infinite-carousel","usage":"import InfiniteCarousel from \"@/components/effects/infinite-carousel\";\n\nconst page = () => {\n  return (\n      <InfiniteCarousel />\n  );\n};\n\nexport default page;","props":[{"name":"infinite","type":"boolean","default":true,"description":"Loops the carousel endlessly instead of stopping at the last card."},{"name":"snap","type":"boolean","default":true,"description":"Settles the track on the nearest card after a drag or scroll."},{"name":"draggable","type":"boolean","default":true,"description":"Allows dragging the carousel with pointer and touch input."},{"name":"showNav","type":"boolean","default":true,"description":"Shows or hides the previous and next arrow buttons."},{"name":"autoPlay","type":"boolean","default":false,"description":"Automatically advances the carousel one card at a time."},{"name":"autoPlayInterval","type":"number","default":3000,"description":"Milliseconds between automatic slide advances."},{"name":"tiltOnScroll","type":"boolean","default":false,"description":"Leans the cards into a fast swipe, then springs them back to level."},{"name":"tiltStrength","type":"number","default":4.2,"description":"How far the cards lean when tilt on scroll is enabled."},{"name":"lerpFactor","type":"number","default":0.12,"description":"Easing factor for the track - lower glides longer, higher snaps tighter."},{"name":"dragSensitivity","type":"number","default":0.005,"description":"How far the track moves per pixel of drag."},{"name":"snapStrength","type":"number","default":0.1,"description":"How firmly the track is pulled towards the nearest card."},{"name":"cardWidth","type":"number","default":33.8,"description":"Desktop card width in viewport width units. The default shows 2.8 cards at a time."},{"name":"cardHeight","type":"number","default":60,"description":"Card height in viewport height units."},{"name":"gap","type":"number","default":1.9,"description":"Spacing between cards in viewport width units."},{"name":"bgColor","type":"color","default":"#f4f0ea","description":"Background color behind the carousel."}],"overview":["Infinite Carousel keeps a card sequence in motion. Drag it, tap it, nudge it, and the lineup keeps arriving.","Use Infinite Carousel when a small set of cards should feel browseable without a hard end. It fits product showcases, property listings, campaign cards, feature highlights, and visual collections where the user can explore at their own pace. The page job is momentum: the next card should feel close without hiding the current one.","The production risk is fake infinity. Looping carousels often duplicate slides visually and accidentally confuse focus order, screen readers, analytics, or active-state logic. The loop can be visual; the content model still needs to remain honest."],"exampleUseCase":["A property landing page can use Infinite Carousel to let visitors drag through a set of premium locations and property types. The outcome is momentum: the browsing interaction feels fluid while each card still carries a clear title, description, and decision cue."],"bestFor":["Product, property, and campaign card sets where browsing is exploratory.","Visual collections where drag and arrow controls make the section feel active.","Medium-sized card groups where looping helps movement but does not replace discovery."],"notFor":["Not for pricing, legal copy, critical proof, comparison tables, or content users must see all at once.","Not for long card archives where filtering, search, or a grid would serve the visitor better."],"performance":["Keep card count reasonable, lazy-load heavy media, avoid expensive re-renders during drag, and clean up pointer and animation listeners on unmount."],"accessibility":["Provide arrow buttons, keyboard access, visible focus, and swipe support. Screen readers should encounter each real item once. Reduced-motion users should get a non-looping or static sequence."],"commonMistakes":["Duplicating looped cards in the accessibility tree.","Autoplaying the carousel without pause or user control.","Making drag the only way to reach hidden cards."],"faq":[{"question":"When should I use Infinite Carousel?","answer":"Use it when a card set benefits from continuous, user-controlled browsing rather than a hard first-to-last sequence."},{"question":"How do I keep an infinite loop accessible?","answer":"Keep the source items unique, hide cloned visual duplicates from assistive technology, and maintain predictable focus order."},{"question":"Should Infinite Carousel autoplay?","answer":"Only if it pauses on hover, focus, touch, and reduced motion. User-driven drag and controls are usually better."},{"question":"When is a grid better?","answer":"Use a grid when users need to scan, compare, filter, or see all items before making a choice."},{"question":"What should happen on mobile?","answer":"Support swipe and reachable controls. Keep cards large enough to read and avoid drag behavior that fights vertical page scroll."},{"question":"Can Hyperiux adapt Infinite Carousel for a real product page?","answer":"Yes. A custom version should define card structure, loop behavior, controls, accessibility states, mobile fallback, analytics events, and source handoff."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/infinite-carousel","demoUrl":"https://vault.hyperiux.com/demo/infinite-carousel","related":[{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"},{"slug":"character-trail","title":"Character Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/character-trail"},{"slug":"rotation-slider","title":"Rotation Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/rotation-slider"}]},{"slug":"orbit-flip-slider","title":"Orbit Flip Slider","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"free","summary":"A layout-switching image carousel for portfolios, lookbooks, visual archives, and campaign pages where a group of images should feel rearrangeable rather than locked into one static grid.","description":"Orbit Flip Slider for React reorganizes images between orbit, tilt, flat, and gallery-style layouts for portfolios and visual showcases.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add orbit-flip-slider","usage":"import OrbitFlipSlider from '@/components/effects/orbit-flip-slider'\n\nconst Page = () => {\n return (\n <>\n <OrbitFlipSlider/>\n </>\n )\n}\n\nexport default Page","props":[{"name":"backgroundColor","type":"string","default":"#e9e9ea","description":"Background color behind the ring."},{"name":"imageWidth","type":"number","default":90,"description":"Width of each image card in pixels."},{"name":"imageHeight","type":"number","default":140,"description":"Height of each image card in pixels."},{"name":"imageGap","type":"number","default":0,"description":"Extra spacing between image cards in pixels."},{"name":"roundedness","type":"number","default":0,"description":"Image card corner radius in pixels."},{"name":"enableHoverMovement","type":"boolean","default":true,"description":"Enables the hover lift and perspective tilt on image cards."},{"name":"hoverMoveY","type":"number","default":-8,"description":"Vertical movement applied to the image card on hover, in pixels."},{"name":"perspectiveRotateValue","type":"number","default":180,"description":"How far each card rotates on hover, in degrees."},{"name":"perspectiveRotateDirection","type":"string","default":"right","description":"Direction each card rotates on hover."},{"name":"rotate","type":"boolean","default":true,"description":"Continuously and slowly rotates the ring of cards."},{"name":"rotateSpeed","type":"number","default":4,"description":"Speed of the automatic rotation, in degrees per second."},{"name":"stopRotationOnHover","type":"boolean","default":true,"description":"Pauses the automatic rotation while the pointer is hovering the slider."},{"name":"flatRadiusX","type":"number","default":1.6,"description":"Horizontal stretch of the flat circle, as a multiplier of its base radius."},{"name":"flatRadiusY","type":"number","default":1.2,"description":"Vertical stretch of the flat circle, as a multiplier of its base radius."},{"name":"flatScale","type":"number","default":1,"description":"Uniform zoom on the flat circle as a whole - position spread and card size together."},{"name":"ringRotateX","type":"number","default":31,"description":"Rotates the ring's plane on the x axis, in degrees. Swings the near/far cards vertically apart."},{"name":"ringRotateY","type":"number","default":56,"description":"Rotates the ring on the y axis, in degrees. Spins which card faces the camera."},{"name":"ringRotateZ","type":"number","default":-25,"description":"Rotates the whole projected ring on the z axis, in degrees. Spins the composition in place, like a wheel face."},{"name":"ringRadiusX","type":"number","default":1.5,"description":"Horizontal stretch of the ring, as a multiplier of its base radius."},{"name":"ringRadiusY","type":"number","default":1.2,"description":"Vertical stretch of the ring, as a multiplier of its base radius."},{"name":"ringScale","type":"number","default":1,"description":"Uniform zoom on the ring as a whole - position spread and card size together, like moving the camera closer or further on the z axis."},{"name":"tiltRotateX","type":"number","default":70,"description":"Rotates the tilt view's ring on the x axis, in degrees."},{"name":"tiltRotateY","type":"number","default":0,"description":"Rotates the tilt view's ring on the y axis, in degrees. Shifts which part of the upper arc is centered."},{"name":"tiltRotateZ","type":"number","default":0,"description":"Rotates the whole projected tilt composition on the z axis, in degrees."},{"name":"tiltRadiusX","type":"number","default":1.9,"description":"Horizontal stretch of the tilt view, as a multiplier of its base radius."},{"name":"tiltRadiusY","type":"number","default":1.5,"description":"Vertical stretch of the tilt view, as a multiplier of its base radius."},{"name":"tiltScale","type":"number","default":1.2,"description":"Uniform zoom on the tilt view as a whole."},{"name":"tiltMoveY","type":"number","default":300,"description":"Pans the tilt view up or down, in pixels, without affecting its rotation, stretch or zoom."},{"name":"galleryRotateX","type":"number","default":10,"description":"Rotates the gallery coverflow's ring on the x axis, in degrees."},{"name":"galleryRotateY","type":"number","default":0,"description":"Rotates the gallery coverflow on the y axis, in degrees. Spins which card faces the camera."},{"name":"galleryRotateZ","type":"number","default":0,"description":"Rotates the whole projected gallery composition on the z axis, in degrees."},{"name":"galleryRadiusX","type":"number","default":1.3,"description":"Horizontal stretch of the gallery coverflow, as a multiplier of its base radius."},{"name":"galleryRadiusY","type":"number","default":1.5,"description":"Vertical stretch of the gallery coverflow, as a multiplier of its base radius."},{"name":"galleryScale","type":"number","default":1.2,"description":"Uniform zoom on the gallery coverflow as a whole."}],"overview":["Orbit Flip Slider turns an image set into a shape-shifting visual system.","The same group of cards can reorganize across different viewing modes: a ring-like orbit, a tilted spatial arrangement, a flatter row, or a gallery-style spread. Cards move, flip, rotate, and settle into the selected layout while preserving the image collection as one connected set.","Use Orbit Flip Slider when the experience is about browsing a visual collection, not just moving from slide one to slide two. It works for portfolio indexes, photography sets, campaign assets, fashion and lifestyle lookbooks, creative archives, moodboards, studio pages, and editorial galleries where the arrangement itself can become part of the interaction.","The page job is exploration. The visitor should feel that the collection can be inspected from different visual systems without losing orientation. The effect should make the gallery feel alive, not make the user wonder where half the images went."],"exampleUseCase":["A photography portfolio can use Orbit Flip Slider to let visitors shift a visual series between ring, flat, and gallery arrangements. The same images stay present, but the layout changes how the collection feels: curated, exploratory, cinematic, or scan-friendly.","The outcome is agency over presentation. The visitor can experience the work as a sequence, a constellation, or a gallery without leaving the section.","A fashion campaign or creative studio page can use the same effect for launch assets, moodboards, behind-the-scenes stills, or project visuals where arrangement contributes to the story."],"bestFor":["Photography portfolios and visual case-study sections.","Fashion, lifestyle, art, and campaign galleries.","Studio pages where a visual archive needs a more interactive presentation.","Product image sets where multiple viewing modes help exploration.","Editorial pages where layout change is part of the experience."],"notFor":["Not for dense product grids, ecommerce catalogues, comparison tables, pricing content, documentation, testimonials that need quick scanning, or image sets with hundreds of items.","Not for pages where users need predictable sorting and fast filtering. A visual orbit is not a replacement for information architecture.","Not for low-quality images. Motion can arrange a weak image set, but it cannot make it worth studying."],"performance":["Keep the image count controlled, optimise image assets, lazy-load where appropriate, and animate transform and opacity instead of layout properties. Avoid expensive filters, unbounded 3D transforms, or constant recalculation across every pointer move.","Do not render full-resolution images for every card if smaller display sizes are enough. The slider should feel fluid before it feels fancy."],"accessibility":["Use semantic buttons for view-mode controls. Provide visible focus states, active states, and readable labels. Preserve a logical reading and tab order even when the visual layout changes.","On mobile, simplify layouts. A full orbit may become cramped, so use a flat, stacked, or swipe-friendly version. For reduced motion, switch layouts instantly or with a minimal fade and no flip, orbit, or depth movement."],"commonMistakes":["Using too many images.","Making view modes visually impressive but functionally confusing.","Hiding active control state.","Letting cards overlap important text or controls.","Ignoring mobile layout simplification.","Applying the effect to image sets that need filtering, sorting, or direct comparison.","Forgetting to optimise image sizes."],"faq":[{"question":"What is Orbit Flip Slider?","answer":"Orbit Flip Slider is a React image carousel that rearranges cards between different visual layouts such as orbit, tilt, flat, and gallery-style views."},{"question":"When should I use Orbit Flip Slider?","answer":"Use it for portfolios, visual archives, lookbooks, campaign galleries, photography sets, and creative pages where the image arrangement is part of the experience."},{"question":"Is Orbit Flip Slider the same as a normal carousel?","answer":"No. A normal carousel usually moves through one item or row. Orbit Flip Slider changes the layout state of the image collection itself."},{"question":"How many images work best?","answer":"A controlled set works best. Around 8 to 16 images is usually easier to manage than a large catalogue, depending on layout and performance."},{"question":"Can Orbit Flip Slider work on mobile?","answer":"Yes, but the layout should simplify. Use a flatter, stacked, or swipe-friendly arrangement instead of forcing a full orbit into a small screen."},{"question":"How do I keep Orbit Flip Slider accessible?","answer":"Use real buttons for layout controls, visible focus states, active state labels, meaningful image alt text, and a logical reading order that does not depend on the visual orbit."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove flips, orbit transitions, depth movement, and long layout travel. Switch states instantly or with a minimal fade."},{"question":"Can Hyperiux adapt Orbit Flip Slider for a real brand system?","answer":"Yes. A custom version should define image ratios, layout modes, card physics, control behavior, mobile fallback, accessibility handling, reduced-motion states, image optimisation, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/orbit-flip-slider","demoUrl":"https://vault.hyperiux.com/demo/orbit-flip-slider","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"scroll-distortion","title":"Scroll Distortion","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-distortion"},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"}]},{"slug":"parallax-strip-slider","title":"Parallax Strip Slider","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"free","summary":"A split-image carousel for portfolios, campaign pages, product showcases, editorial visuals, and brand-led landing sections where image transitions should feel designed rather than simply swapped.","description":"Parallax Strip Slider for React transitions images through layered moving strips for portfolios, campaign pages, product stories, and visual showcases.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add parallax-strip-slider","usage":"import ParallaxStripSlider from \"@/components/effects/parallax-strip-slider\";\n\nexport default function page() {\n  return (\n    <>\n        <ParallaxStripSlider />\n    </>\n  );\n}","props":[{"name":"stripCount","type":"number","default":12,"description":"Number of vertical strips the incoming slide is revealed through."},{"name":"revealDuration","type":"number","default":0.5,"description":"Duration of each strip's clip-path wipe, in seconds."},{"name":"stripStagger","type":"number","default":0.04,"description":"Delay between consecutive strips as they wipe in, in seconds."},{"name":"zoomFrom","type":"number","default":1.2,"description":"Starting scale of the incoming image before it settles to 1 (Ken-Burns zoom)."},{"name":"zoomDuration","type":"number","default":0.9,"description":"Duration of the image zoom settle, in seconds."},{"name":"autoplay","type":"boolean","default":false,"description":"Auto-advance slides on a 5s timer. Paused while a transition is running and under reduced motion."},{"name":"showProgressBar","type":"boolean","default":true,"description":"Show the thin progress bar across the top of the slider."},{"name":"showCounter","type":"boolean","default":true,"description":"Show the numeric slide counter in the bottom-right."},{"name":"showControls","type":"boolean","default":true,"description":"Enable the click-to-navigate overlay and its circular cursor (left half = previous, right half = next)."},{"name":"mobNavButton","type":"boolean","default":true,"description":"Show the manual previous/next buttons under the title on tablet and mobile. Requires showControls."},{"name":"showClue","type":"boolean","default":true,"description":"Show the hint pill telling the viewer to click either side to navigate."},{"name":"accentColor","type":"color","default":"#ffffff","description":"Color of the slide title, progress bar fill, caption text, counter, and control borders."}],"overview":["Parallax Strip Slider turns a normal image slider into a layered motion sequence.","Instead of moving one flat image in and out, the visual can be divided into strips that travel, offset, or resolve at slightly different speeds. This creates a parallax-like handoff between slides, where the image feels rebuilt through layers rather than replaced in one plain movement.","Use Parallax Strip Slider when a visual sequence deserves more craft than a standard carousel. It works for campaign stills, product photography, portfolio projects, fashion lookbooks, editorial spreads, launch visuals, agency case studies, and image-led product sections.","The page job is cinematic transition. The visitor should feel the image change, understand the selected slide, and keep browsing without losing orientation. The strip motion should make the handoff memorable, not make the image feel like it was shredded for decoration."],"exampleUseCase":["A portfolio page can use Parallax Strip Slider to present selected case studies. Each project image transitions through layered strips, giving the work a cinematic reveal before the title and CTA appear.","The outcome is polish. The section feels more authored than a static grid, but it still keeps the visitor focused on the project rather than the transition mechanic.","A product company can use the same component to showcase template previews, feature visuals, dashboard states, or launch imagery where each slide needs a premium handoff."],"bestFor":["Portfolio highlights and case-study showcases.","Campaign visuals, editorial spreads, and launch imagery.","Product renders, dashboard previews, and template galleries.","Fashion, lifestyle, visual identity, and photography-led pages.","Hero sections where slide transitions need more depth than a flat fade."],"notFor":["Not for dense catalogues, pricing tables, documentation, testimonial lists, product comparison grids, or content users need to scan quickly.","Not for weak images. Strip motion can make a good image feel premium; it cannot rescue a mediocre asset wearing too much transition perfume.","Not for pages where users need immediate image comparison. Use a grid when comparison matters more than presentation."],"performance":["Keep the slide count controlled, optimise images, reserve carousel dimensions, and limit strip count. Animate transform and opacity rather than layout properties. Avoid heavy filters, oversized images, and unnecessary per-frame recalculation.","Do not render full-resolution images for every strip when smaller display sizes are enough. A strip slider should feel fluid before it feels elaborate."],"accessibility":["Use real buttons for previous and next controls. Provide visible focus states, accessible labels, and predictable keyboard behavior. Keep slide order logical and ensure captions remain readable outside the visual transition.","On mobile, reduce strip count, parallax distance, and transition duration. For reduced motion, switch slides with a fade, instant state change, or minimal translate without segmented movement."],"commonMistakes":["Using too many strips.","Letting the transition hide the image for too long.","Mixing inconsistent image ratios without a cropping rule.","Making navigation unclear.","Hiding meaningful text inside image assets.","Keeping autoplay active near important reading or conversion sections.","Treating the strip effect as the content instead of the handoff."],"faq":[{"question":"What is Parallax Strip Slider?","answer":"Parallax Strip Slider is a React image carousel effect that transitions between slides using segmented image strips with layered parallax-style movement."},{"question":"When should I use Parallax Strip Slider?","answer":"Use it for portfolios, campaign visuals, product showcases, editorial imagery, template previews, and image-led sections where slide transitions should feel premium."},{"question":"Is Parallax Strip Slider good for large galleries?","answer":"No. It works best for curated image sets. Large galleries usually need filtering, grid browsing, lazy loading, or pagination."},{"question":"Can the slider include captions?","answer":"Yes. Captions work well when they are short and placed outside or consistently over the image. Keep important text as real HTML where possible."},{"question":"How do I keep Parallax Strip Slider accessible?","answer":"Use semantic navigation buttons, visible focus states, accessible labels, meaningful image alt text, and real DOM captions. Do not rely only on visual motion to communicate slide changes."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove segmented strip movement and parallax travel. Use a simple fade, instant switch, or minimal slide transition."},{"question":"Does this effect work on mobile?","answer":"Yes, with tuning. Reduce strip count, transition distance, and visual complexity so the slider remains smooth and readable on smaller screens."},{"question":"Can Hyperiux adapt Parallax Strip Slider for a real brand system?","answer":"Yes. A custom version should define strip direction, image ratios, slide timing, navigation behavior, mobile fallback, accessibility states, reduced-motion handling, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/parallax-strip-slider","demoUrl":"https://vault.hyperiux.com/demo/parallax-strip-slider","related":[{"slug":"strip-slider","title":"Strip Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/strip-slider"},{"slug":"clippath-slider","title":"Clip Path Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/clippath-slider"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"}]},{"slug":"ring-carousel","title":"Ring Carousel","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"pro","summary":"Arrange a small visual set around a circular focus point, keeping the active item prominent while the collection stays in view.","description":"Ring Carousel for React arranges images around a circular gallery for portfolios, campaigns, and visual showcases with usable controls.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add ring-carousel","usage":"import RingCarousel from \"@/components/effects/ring-carousel\";\n\nconst page = () => {\n  return (\n    <>\n        <RingCarousel />\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"snap","type":"boolean","default":true,"description":"Snaps the ring to the nearest item after drag."},{"name":"autoPlay","type":"boolean","default":true,"description":"Rotates the carousel automatically."},{"name":"pauseOnHover","type":"boolean","default":true,"description":"Pauses autoplay while the carousel is hovered."},{"name":"showNavigation","type":"boolean","default":true,"description":"Shows previous and next buttons."},{"name":"showDots","type":"boolean","default":true,"description":"Shows pagination dots."},{"name":"cardSize","type":"number","default":1,"description":"Multiplier applied to carousel card width and height."},{"name":"cardWidth","type":"number","default":720,"description":"Carousel card width in pixels."},{"name":"cardHeight","type":"number","default":450,"description":"Carousel card height in pixels."},{"name":"roundedness","type":"number","default":20,"description":"Carousel card corner radius in pixels."}],"overview":["Ring Carousel turns a slide set into a circular gallery. The active image takes focus while the rest of the set stays in orbit.","Use Ring Carousel when a visual showcase should feel spatial but still controlled. It works for portfolios, campaign imagery, product moods, and curated galleries where the relationship between images matters. The page job is focus with context: the current item should lead, but the surrounding set should still feel present.","The production risk is orientation. Circular layouts can confuse users if the active slide, controls, and reading order are not obvious. The carousel needs visible navigation, a clear active state, and a flat fallback that preserves every item."],"exampleUseCase":["A creative portfolio can use Ring Carousel to present six selected project images around a central focus. The outcome is context: visitors can browse one image at a time while still sensing the full collection."],"bestFor":["Curated visual galleries where a circular composition fits the art direction.","Portfolio or campaign sections with a small number of equal-weight images.","Pages where one active item should stay framed by the surrounding set."],"notFor":["Not for large archives, pricing, testimonials, dense text, or product sets that require side-by-side comparison.","Not for mobile-first pages unless the ring collapses into a simple swipeable or stacked layout."],"performance":["Keep the slide count controlled, pre-size images, animate transforms instead of layout, and avoid heavy blur or shadow effects across the full ring."],"accessibility":["Use real controls, keyboard support, visible focus states, and a logical slide order. On mobile, flatten the ring into a swipeable carousel or stacked gallery. Reduced-motion users should get the same images without circular motion."],"commonMistakes":["Making the circular layout the only way to understand the slide order.","Hiding controls because the ring looks “obvious.”","Using too many images until the carousel becomes a decorative wheel."],"faq":[{"question":"When should I use Ring Carousel?","answer":"Use it when a small visual set should feel spatial, circular, and curated rather than linear."},{"question":"How many items work best?","answer":"A small set works best. Five to eight images usually keeps the ring readable; large archives should use a grid."},{"question":"Should Ring Carousel support keyboard navigation?","answer":"Yes. Arrow keys, visible buttons, or clear tab/focus behavior should reach every slide predictably."},{"question":"What should happen on mobile?","answer":"Use swipe controls, stacked images, or a simpler flat carousel. Do not force a crowded ring onto a narrow screen."},{"question":"What should reduced motion do?","answer":"Remove circular rotation and show a static active slide, simple fade, or flat list."},{"question":"Can Hyperiux adapt Ring Carousel for a real brand system?","answer":"Yes. A custom version should define ring geometry, image treatment, controls, accessibility behavior, mobile fallback, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/ring-carousel","demoUrl":"https://vault.hyperiux.com/demo/ring-carousel","related":[{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"webgl-slider","title":"WebGL Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/webgl-slider"},{"slug":"stacking-cards","title":"Stacking Cards","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/stacking-cards"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"}]},{"slug":"webgl-slider","title":"WebGL Slider","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"pro","summary":"Move image slides through shader-led transitions so campaign visuals, product shots, and portfolio frames feel authored rather than swapped.","description":"WebGL Slider for React turns image slides into a shader-led visual sequence for portfolios, campaigns, and launch pages.","tags":["GSAP","Lenis","Three.js"],"dependencies":["gsap","lenis","three"],"install":"npx hyperiux add webgl-slider","usage":"import WebGLSlider from '@/components/effects/webgl-slider'\n\nconst page = () => {\n  return (\n    <>\n    <WebGLSlider/>    \n    </>\n  )\n}","props":[{"name":"distortionStrength","type":"number","default":1,"description":"Strength of the shader fold distortion as slides scroll past."},{"name":"transitionDuration","type":"number","default":0.6,"description":"Duration of the scroll-snap settle animation."},{"name":"enableHoverEffect","type":"boolean","default":true,"description":"Enables the pointer-driven hover bend on each slide."},{"name":"imageWidth","type":"number","default":3.2,"description":"WebGL slide plane width."},{"name":"imageHeight","type":"number","default":3,"description":"WebGL slide plane height."}],"overview":["WebGL Slider gives a carousel a real visual engine. Slides do not just move; they distort, blend, and transition as a designed surface.","Use WebGL Slider when a visual sequence needs more atmosphere than a standard carousel can provide. It fits portfolios, launch campaigns, fashion visuals, product storytelling, and experimental editorial pages where the transition itself is part of the art direction. The page job is presentation: each slide should feel authored without hiding controls.","The production risk is hiding content behind a canvas. A WebGL slider can look expensive while failing as a carousel if slide text, controls, links, and fallback states are weak. The images can live in WebGL; the meaning still needs usable HTML."],"exampleUseCase":["A campaign page can use WebGL Slider to move between ten visual frames with shader-led transitions. The outcome is presentation: the images feel like a designed sequence rather than a stack of assets in a carousel shell."],"bestFor":["Portfolio and campaign visuals where transition quality is part of the brand.","Image-led case studies that need a richer slide change than a translateX animation.","Launch pages where the slider is a feature visual, not a hidden content drawer."],"notFor":["Not for pricing, testimonials, critical proof, legal content, or anything users must compare side by side.","Not for pages where a static grid would help users decide faster."],"performance":["Compress images, cap DPR, lazy-load non-critical textures, pause rendering offscreen, avoid heavy postprocessing by default, and dispose of textures on route change."],"accessibility":["Use visible controls, keyboard navigation, swipe support, and polite announcements for meaningful user-initiated slide changes. On reduced motion, remove shader distortion and use a simple static or fading transition."],"commonMistakes":["Putting slide labels and links only inside WebGL.","Autoplaying without pause controls.","Making the shader transition more important than the slide content."],"faq":[{"question":"When should I use WebGL Slider?","answer":"Use it when a visual carousel needs shader-led transitions and a premium image sequence, not when users need fast comparison."},{"question":"Does WebGL Slider need normal controls?","answer":"Yes. Provide visible next/previous controls, keyboard access, swipe support, and predictable focus behavior."},{"question":"What should happen if WebGL fails?","answer":"Render the same slides as a normal image slider or gallery. The content should not disappear with the canvas."},{"question":"Should WebGL Slider autoplay?","answer":"Only with clear pause behavior, and never when autoplay hides important information or conflicts with reduced motion."},{"question":"What should reduced motion do?","answer":"Remove shader distortion, heavy depth, and continuous movement. Use static slides, instant changes, or a short fade."},{"question":"Can Hyperiux adapt WebGL Slider for a real brand system?","answer":"Yes. A custom version should define shader style, slide data, controls, fallback behavior, performance budget, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/webgl-slider","demoUrl":"https://vault.hyperiux.com/demo/webgl-slider","related":[{"slug":"ring-carousel","title":"Ring Carousel","docsUrl":"https://vault.hyperiux.com/effects/carousels/ring-carousel"},{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"}]},{"slug":"zoom-slider","title":"Zoom Slider","category":{"id":"carousels","slug":"carousels","name":"Carousel Effects"},"tier":"free","summary":"A visual carousel where the active slide moves forward with depth for product imagery, case studies, and image-led sections.","description":"Zoom Slider for React pushes the active image forward for product showcases and image-led case studies with swipe support. Ships with a reduced-motion fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add zoom-slider","usage":"import ZoomSlider from '@/components/effects/zoom-slider'\n\nconst page = () => {\n  return (\n    <>\n    <ZoomSlider/>\n    </>\n  )\n}","props":[{"name":"scaleOnHover","type":"boolean","default":true,"description":"Enables the image scale-up effect on hover."},{"name":"textOnHover","type":"boolean","default":true,"description":"Enables the hover text reveal above each slide."},{"name":"size","type":"number","default":1,"description":"Multiplier applied to zoom slider card width and height."},{"name":"easeScrollPercentage","type":"number","default":100,"description":"Controls how much scroll distance the card uses to grow and shrink. Higher values make the zoom change more gradually."}],"overview":["Zoom Slider creates a controlled visual sequence: the active slide moves forward with depth.","Use it for equal-weight images, portfolio work, campaign visuals, or product shots where browsing is the point. If users must compare everything, read everything, or convert from every item, use a grid instead.","The risk in production is hiding important content. Keep controls visible, support keyboard and swipe, announce meaningful slide changes politely, and pause autoplay when the visitor interacts."],"exampleUseCase":["A sneaker ecommerce brand can use Zoom Slider to introduce a new collection on its homepage. Product shots loop horizontally, the active card grows as it moves into place, and hovering a card reveals its name above the image.","The outcome is browsing momentum. The collection feels curated and easy to scan, while the full catalog with sizes and prices lives on the product listing page.","A design studio can use the same carousel to preview case studies before visitors open them."],"bestFor":["Product and project showcases where the active image should step forward with controlled depth.","Visual browsing sections where comparison is optional and controls stay obvious.","Zoom Slider supports visual browsing when a grid would feel flat and comparison is not the priority."],"notFor":["Not for critical proof, pricing, feature comparisons, or content users must see to convert."],"performance":["Optimize images, lazy-load offscreen slides carefully, and pause autoplay when inactive or offscreen."],"accessibility":["Use visible controls, keyboard navigation, swipe, and aria-live=\"polite\" for meaningful slide changes. Mobile controls must remain reachable."],"commonMistakes":["Using Zoom Slider to hide critical conversion content.","Autoplaying without pause controls.","Skipping keyboard and swipe support."],"faq":[{"question":"When should I use Zoom Slider?","answer":"Use it when a product showcase needs the active slide moving forward with depth so one image holds focus."},{"question":"Should Zoom Slider autoplay?","answer":"Only with pause controls and only if autoplay stops on hover, focus, touch, and reduced motion."},{"question":"How should Zoom Slider announce slides?","answer":"Use a labelled region and aria-live=\"polite\" for meaningful user-initiated changes."},{"question":"When is a grid better than Zoom Slider?","answer":"Use a grid when users need to compare, scan, read, or see all items to convert."},{"question":"How should Zoom Slider behave on mobile?","answer":"Support swipe, keep controls reachable, and reduce depth or masking where it hurts clarity."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider","demoUrl":"https://vault.hyperiux.com/demo/zoom-slider","related":[{"slug":"clippath-slider","title":"Clip Path Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/clippath-slider"},{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"},{"slug":"rotation-slider","title":"Rotation Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/rotation-slider"}]},{"slug":"cards-runway","title":"Cards Runway","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"Turn a group of feature or story cards into a staged runway sequence where each idea gets a clean moment before the next one arrives.","description":"Cards Runway for React turns feature cards into a staged runway sequence for product stories, AI sections, and guided content reveals.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add cards-runway","usage":"import CardsRunway from '@/components/effects/cards-runway'\n\nconst Page = () => {\n  return (\n    <>\n    <h2 className=\"text-[4vw] fixed top-[6vw] max-sm:top-[22vw] max-sm:text-[10vw] max-md:top-[20vw] inset-x-0 max-md:text-[6vw] mx-auto w-[90vw] text-center text-white z-30 pointer-events-none\">\n      Cards Runway\n    </h2>\n    <p className='fixed bottom-[5%] hidden max-md:block translate-x-[-50%] left-1/2 text-center text-white z-30 text-lg'>\n        Drag\n    </p>\n    <CardsRunway />\n    </>\n  )\n}\n\nexport default Page","props":[{"name":"accentColor","type":"color","default":"#ff5f00","description":"Accent color used by the runway card bars."},{"name":"cardColor","type":"color","default":"#161616","description":"Background color of each card."},{"name":"textColor","type":"color","default":"#ffffff","description":"Color of the card text."},{"name":"ease","type":"string","default":"power1.out","description":"GSAP ease for the cards popping up into place."},{"name":"gap","type":"number","default":48,"description":"Spacing between runway cards in pixels."}],"overview":["Card Drift gives a set of cards a slow, low-amplitude drift so a proof grid or feature row feels alive without asking for attention.","Use Card Drift on testimonial walls, logo or feature grids, and portfolio tiles where a hint of independent motion adds life to otherwise static cards. The drift should earn its place through state clarity, semantics, and task usefulness, not decoration.","In production, the risk is distraction. The drift has to stay subtle, pause when the section is offscreen or motion is reduced, and never pull focus from the card content or its links, and every state change should remain clear under keyboard, mobile, and reduced-motion conditions."],"exampleUseCase":["An AI product landing page can use Cards Runway to explain five everyday AI shifts: assistant behavior, recommendations, translation, creativity, and coding help. The outcome is pacing: each idea gets a clean beat instead of collapsing into a flat feature grid."],"bestFor":["AI, SaaS, and product sections where multiple related benefits need staged attention.","Editorial explainers where each card is one chapter in a short argument.","Service or feature groups where a flat grid feels too passive but a full carousel feels too heavy."],"notFor":["Not for comparison tables, pricing cards, legal content, dense documentation, or long card copy that users need to scan quickly.","Not for sections where every card needs to be visible at once before a decision can be made."],"performance":["Keep card count controlled, animate transform and opacity instead of layout, pre-size the card container, and avoid expensive blur or shadow effects on every card during movement. Clean up scroll or pointer listeners when the component unmounts."],"accessibility":["Cards should be real HTML in the intended reading order. On mobile, switch to a clean vertical stack, simple swipe, or static cards. Reduced-motion users should see the same content without runway movement, stagger, or large transforms."],"commonMistakes":["Writing cards like paragraphs instead of sharp content beats.","Using too many cards until the sequence loses its rhythm.","Letting z-index or overlap hide focus states, links, or card text.","Keeping desktop card movement on small touch screens without a fallback."],"faq":[{"question":"When should I use Cards Runway?","answer":"Use Cards Runway when a group of feature, product, or editorial cards needs a staged sequence instead of a static grid."},{"question":"How many cards work best?","answer":"Four to six cards usually work best. Fewer cards may not justify the runway behavior; too many cards make the section feel slow."},{"question":"Should each card have a CTA?","answer":"Only if the card represents a real next step. For educational sequences, one CTA after the runway is often cleaner."},{"question":"How should Cards Runway behave on mobile?","answer":"Use a vertical stack, simple swipe, or static card list. Do not force overlapping desktop motion onto a narrow viewport."},{"question":"Does Cards Runway affect SEO?","answer":"Not if every heading and paragraph is real HTML in the DOM. Avoid rendering meaningful card content only inside canvas or client-only animation."},{"question":"What should reduced motion do?","answer":"Show the cards in their final readable order with no large transforms, runway movement, or scroll-linked motion."},{"question":"Can Hyperiux adapt Cards Runway for a real product section?","answer":"Yes. A custom version should define card content, order, motion rhythm, mobile fallback, accessibility states, performance budget, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/cards-runway","demoUrl":"https://vault.hyperiux.com/demo/cards-runway","related":[{"slug":"clippath-slider","title":"Clip Path Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/clippath-slider"},{"slug":"card-drift","title":"Card Drift","docsUrl":"https://vault.hyperiux.com/effects/components/card-drift"},{"slug":"gooey-counter","title":"Gooey Counter","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter"},{"slug":"number-counter","title":"Number Counter","docsUrl":"https://vault.hyperiux.com/effects/text-animations/number-counter"}]},{"slug":"circular-slider","title":"Circular Slider","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A circular carousel effect that rotates visual items into focus for campaigns, portfolios, testimonials, and feature highlights.","description":"Circular Slider for React adds angled slide rotation for campaigns and portfolios where motion supports browsing, not comparison.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add circular-slider","usage":"import CircularSlider from '@/components/effects/circular-slider'\n\nconst Page = () => {\n return (\n <>\n<CircularSlider/>\n </>\n )\n}\n\nexport default Page","props":[{"name":"items","type":"array","default":[],"description":"Cards arranged around the circular carousel."},{"name":"title","type":"string","default":"Interfaces that react.","description":"Primary heading shown above the rotating carousel."},{"name":"subtitle","type":"string","default":"Built for motion, crafted for experience.","description":"Supporting text shown below the rotating carousel."},{"name":"showBottomText","type":"boolean","default":true,"description":"Shows or hides the bottom supporting text."},{"name":"verticalOffset","type":"number","default":0,"description":"Moves the whole slider wheel up (negative) or down (positive), in vh."},{"name":"gap","type":"number","default":24,"description":"Additional spacing between cards along the wheel arc."},{"name":"cardWidth","type":"number","default":320,"description":"Desktop width of each orbiting card in pixels."},{"name":"cardHeight","type":"number","default":360,"description":"Desktop height of each orbiting card in pixels."},{"name":"cardColorCount","type":"number","default":5,"description":"How many card background colors to cycle through the cards (1 to the number of cards)."},{"name":"cardColor1","type":"string","default":"#655A7C","description":"Card background color 1."},{"name":"cardColor2","type":"string","default":"#AB92BF","description":"Card background color 2."},{"name":"cardColor3","type":"string","default":"#AFC1D6","description":"Card background color 3."},{"name":"cardColor4","type":"string","default":"#CEF9F2","description":"Card background color 4."},{"name":"cardColor5","type":"string","default":"#D6CA98","description":"Card background color 5."},{"name":"cardColor6","type":"string","default":"#F2B5A7","description":"Card background color 6."},{"name":"textColorCount","type":"number","default":5,"description":"How many card text colors to cycle through the cards (1 to the number of cards)."},{"name":"textColor1","type":"string","default":"#2A2433","description":"Card text color 1."},{"name":"textColor2","type":"string","default":"#3D2E50","description":"Card text color 2."},{"name":"textColor3","type":"string","default":"#2C3E52","description":"Card text color 3."},{"name":"textColor4","type":"string","default":"#1A5C53","description":"Card text color 4."},{"name":"textColor5","type":"string","default":"#4A3F1A","description":"Card text color 5."},{"name":"textColor6","type":"string","default":"#5C2A1F","description":"Card text color 6."}],"overview":["Circular Slider gives scroll a circular rhythm. Each item rotates into attention before making room for the next.","Use Circular Slider when visual browsing needs a stronger mechanic than a plain slider. Portfolio pages, product visuals, and campaign galleries can use it when rotation reinforces the art direction. The page job is motion identity: the way items move becomes part of the brand surface.","In production, the risk is control clarity. Rotation must not hide the active slide, disorient keyboard users, or autoplay important content past the visitor."],"exampleUseCase":["A portfolio page using a circular visual system: Circular Slider makes the browsing mechanic match the brand geometry. The outcome is motion identity: the interaction feels designed into the system, not attached later."],"bestFor":["Equal-weight testimonials or features where taking turns suits the content better than comparison.","Testimonial or feature sets where items take turns holding focus.","Circular Slider creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for important proof, pricing, or long text where rotation makes content feel optional.","Not for testimonials or features that should remain visible as proof at all times."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Rotating important proof out of view too quickly.","Shipping continuous motion without pause or static fallback.Letting the turning cadence overpower the item content."],"faq":[{"question":"What makes Circular Slider different from a standard scroll reveal?","answer":"Each item rotates into attention and then makes room for the next, giving scroll a circular rhythm instead of a single entrance. The turning cadence paces the section. Use it when items should take turns holding focus."},{"question":"How should Circular Slider simplify on mobile devices?","answer":"Replace scroll-driven rotation with native swipe and clear controls, since rotation transforms are hard to follow on a phone. Keep one item dominant at a time. Reduced-motion users should get a static, swipeable list."},{"question":"What should developers test before shipping a Circular Slider?","answer":"Confirm keyboard access to every item, an accessible name and controls, and that rotation doesn't break focus order or trap the user. Add pause/rotation behavior where motion is continuous. Verify the static fallback includes all items."},{"question":"Which content structure works best with Circular Slider?","answer":"A modest set of equal-weight items like testimonials, features, or shots where taking turns suits the content. It's wrong for long lists or for anything users must compare at once. Keep each item self-contained."},{"question":"When should I avoid Circular Slider even if the preview looks good?","answer":"Avoid it when users need to see items side by side, when the set is large, or when continuous rotation would distract. If order matters and rotation obscures it, use a list. Skip it where a static grid is clearer."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/circular-slider","demoUrl":"https://vault.hyperiux.com/demo/circular-slider","related":[{"slug":"liquid-glass-cursor","title":"Liquid Glass Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/liquid-glass-cursor"},{"slug":"split-canvas","title":"Split Canvas","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/split-canvas"},{"slug":"scroll-distortion","title":"Scroll Distortion","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-distortion"},{"slug":"file-encryption","title":"File Encryption","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/file-encryption"},{"slug":"elevate-navbar","title":"Elevate Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/elevate-navbar"}]},{"slug":"circular-split-roll","title":"Circular Split Roll","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"free","summary":"A spatial slider that moves related items around a central focus point for product groups, service clusters, and curated showcases.","description":"Circular Split Roll for React moves items around a controlled orbit for visual showcases where sequence should feel spatial. Built to stay readable with motion off.","tags":["GSAP","Lenis"],"dependencies":["gsap","lenis"],"install":"npx hyperiux add circular-split-roll","usage":"import CircularSplitRoll from \"@/components/effects/circular-split-roll\";\n\nexport default function Page() {\n  return (\n    <>\n      <CircularSplitRoll />\n    </>\n  );\n}","props":[{"name":"radius","type":"number","default":500,"description":"Radius of both rotating rings."},{"name":"cardSize","type":"number","default":205,"description":"Size of the right-rail image cards."},{"name":"textSideScale","type":"number","default":0.68,"description":"Title scale away from the center."},{"name":"textSideOpacity","type":"number","default":0.18,"description":"Title opacity away from the center."}],"overview":["Circular Split Roll moves items around a center of attention. It is useful when the work should feel collected, not scattered.","Use Circular Split Roll when content should rotate through focus instead of sliding in a straight line. Portfolio and product showcases can use it when the relationship between items matters as much as the active item. The page job is hierarchy: the current item takes focus while the surrounding set remains visible.","The risk in production is orientation. Orbit motion can confuse users if the active item, controls, and reading order are not obvious after each rotation."],"exampleUseCase":["A product showcase page grouping related modules: Circular Split Roll keeps the active module in focus while showing the surrounding set as context. The outcome is hierarchy: visitors see what matters now without losing the system around it."],"bestFor":["Small product or service groups where one active item should stay framed by its surrounding context.","Small groups of related services or products gathered around a theme.","Circular Split Roll creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for large product sets, pricing choices, or items that users need to compare side by side.","Not for product groups where orbiting motion makes hierarchy less obvious."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Creating an orbit without a meaningful center.","Letting surrounding items obscure the active item.","Using circular motion for content that needs fast scanning."],"faq":[{"question":"What makes Circular Split Roll different from a standard scroll reveal?","answer":"Items move around a shared center of attention, so the set feels collected around a focal point rather than listed. Circular implies orbit, relationship and gravity. Use it when work should feel gathered, not scattered."},{"question":"How should Circular Split Roll simplify on mobile devices?","answer":"Circular arrangements crowd a small screen, so collapse the orbit into a linear, swipeable sequence. Keep one item clearly primary at a time. Reduced-motion users see the items as a static ordered set."},{"question":"What should developers test before shipping Circular Split Roll?","answer":"Confirm the rotation doesn't disturb focus order, that orbiting items don't overlap illegibly, and that the effect cleans up on navigation. Test with the real number of items. Verify the linear fallback is complete."},{"question":"Which content structure works best with Circular Split Roll?","answer":"A small group of related items that share a theme; services around a value, products around a hero. It's wrong for long or unrelated lists. Keep the center meaningful so the orbit has a reason."},{"question":"When should I avoid Circular Split Roll even if the preview looks good?","answer":"Avoid it for many items, for content that must be scanned quickly, or where the circular motion competes with reading. If there's no genuine center to orbit, the layout is just spinning. Skip it on utility pages."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/circular-split-roll","demoUrl":"https://vault.hyperiux.com/demo/circular-split-roll","related":[{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"},{"slug":"rotation-slider","title":"Rotation Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/rotation-slider"},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"},{"slug":"hover-slider","title":"Hover Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hover-slider"}]},{"slug":"grid-scale","title":"Grid Scale","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A scroll-linked grid effect that scales selected cards to guide attention toward the most important item.","description":"Grid Scale for React enlarges structured card grids on scroll for product galleries and portfolio sections without reflow chaos.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add grid-scale","usage":"import GridScale from '@/components/effects/grid-scale'\n\nconst page = () => {\n  return (\n    <>\n    <GridScale/>\n    </>\n  )\n}\n\nexport default page","props":[{"name":"bgColor","type":"color","default":"#242424","description":"Background color of the section."},{"name":"panelColor","type":"color","default":"#ffffff","description":"Background color of the expanding center panel."},{"name":"convergeStagger","type":"number","default":0.7,"description":"Total stagger spread (seconds) as the floating keyword pills converge to center."}],"overview":["Grid Scale makes a product grid choose its emphasis. The most important card grows at the moment it should be noticed.","Use Grid Scale when a feature grid needs one item to gain weight at the right scroll moment. SaaS feature grids and product callout sections are the right fit because the effect can guide priority without replacing the grid. The page job is emphasis: the differentiating capability becomes harder to miss.","The main risk is transform overflow. Scale values must not create layout-affecting overflow, clipped focus outlines, or cumulative layout shift during scroll."],"exampleUseCase":["A SaaS team building a pricing page with a feature comparison grid: Grid Scale anchors each row with a scale event so the most important capability arrives with weight rather than sitting flat in a table. The outcome is emphasis: the differentiating feature is harder to scroll past."],"bestFor":["Pricing or feature grids where one card deserves emphasis without breaking the table structure.","Pricing or product grids where one featured item deserves a beat of prominence.","Turns feature-grid scanning into emphasis, making the differentiating card harder to miss."],"notFor":["Not for dense matrices where every row and column needs equal scanning weight.","Not for grids where emphasis would misrepresent feature priority or pricing logic."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Scaling with width or height instead of transform.","Letting enlarged cards clip focus outlines or overlap neighbors.","Emphasizing a card that is not actually the priority."],"faq":[{"question":"What makes Grid Scale different from a standard scroll reveal?","answer":"Rather than revealing items, it lets a grid choose emphasis: the key card grows at the moment it should be noticed while the others hold. The scaling directs attention within an existing layout. Use it when one item in a set deserves a beat of prominence as the user reaches it."},{"question":"How should Grid Scale simplify on mobile devices?","answer":"On a single-column phone layout there's no grid to emphasize, so reduce scaling to a subtle highlight or drop it and present the cards in order. Avoid scale transforms that cause reflow. Reduced-motion users see the grid at its resting size."},{"question":"What should developers test before shipping Grid Scale?","answer":"Confirm scaling uses transforms (not width/height) so it doesn't trigger layout shift, that the enlarged card doesn't overlap neighbors or clip, and that focus order is unchanged. Test across breakpoints where the grid reflows. Verify the static layout reads well on its own."},{"question":"Which content structure works best with Grid Scale?","answer":"A grid where one item is genuinely more important a featured plan, a hero product, a primary capability. It's pointless when all items are equal. Make the emphasized item the one you actually want clicked."},{"question":"When should I avoid Grid Scale even if the preview looks good?","answer":"Avoid it when every card is equal weight, when scaling would obscure adjacent content, or on a single-column layout. If the emphasis doesn't map to a real priority, it just adds noise. Skip it where a static highlight communicates the same thing."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/grid-scale","demoUrl":"https://vault.hyperiux.com/demo/grid-scale","related":[{"slug":"clippath-slider","title":"Clip Path Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/clippath-slider"},{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"phantom-image-trail","title":"Phantom Image Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/phantom-image-trail"},{"slug":"dither-canvas","title":"Dither Canvas","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dither-canvas"}]},{"slug":"helix-slider","title":"Helix Slider","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A Three.js-powered image slider for portfolios, campaign pages, visual archives, product showcases, and experimental landing pages where cards should move through space instead of sitting in a flat row.","description":"Helix Slider for React uses Three.js and React Three Fiber to arrange image panels along a dimensional helix for portfolios, galleries, and visual showcases.","tags":["React Three Fiber","Three.js"],"dependencies":["@react-three/fiber","three"],"install":"npx hyperiux add helix-slider","usage":"import HelixSlider from '@/components/effects/helix-slider'\n\nconst page = () => {\n  return (\n    <>\n   <HelixSlider />\n    </>\n  )\n}","props":[{"name":"autoplaySpeed","type":"number","default":0.12,"description":"Idle movement speed; 0 stops autoplay."},{"name":"radius","type":"number","default":2.8,"description":"Width of the spiral."},{"name":"turns","type":"number","default":3.3,"description":"Number of spiral twists."},{"name":"cardScale","type":"number","default":1,"description":"Scales image cards proportionally."},{"name":"dragSensitivity","type":"number","default":0.006,"description":"How strongly the gallery responds to dragging."},{"name":"scrollIntensity","type":"number","default":1,"description":"Multiplier for how far each wheel or trackpad scroll spins the helix."},{"name":"inertiaDecay","type":"number","default":2.2,"description":"Higher values stop movement sooner after release."},{"name":"background","type":"color","default":"#0d0d0d","description":"Gallery background."}],"overview":["Helix Slider turns a collection of visuals into a spatial image system.","Cards are positioned along a helix-like path, giving the gallery vertical rhythm, depth, rotation, and layered movement. Instead of treating each image as a flat slide, the component places the collection inside a 3D scene where panels can orbit, drift, face the camera, and pass through focus as the animation runs.","Use Helix Slider when a page needs a stronger visual world than a conventional carousel can provide. It works for creative portfolios, digital galleries, launch visuals, motion-led case studies, product-world imagery, interactive archives, WebGL-heavy landing pages, and experimental brand sections where depth is part of the story.","The page job is dimensional browsing. The visitor should feel that the image set has space, rhythm, and movement, but still understand what they are looking at. The helix should make the gallery feel authored, not make the content look like it was launched into orbit without supervision."],"exampleUseCase":["A creative studio can use Helix Slider as a visual archive section where selected projects rotate through a dimensional spiral. Each card becomes part of a larger field, giving the page a sense of range, movement, and technical craft before the visitor enters the full work index.","The outcome is visual presence. The section does not behave like another flat carousel; it turns the image set into a spatial product moment.","A SaaS or AI product page can use the same component for interface fragments, generative visuals, workflow screens, or product-world panels where the brand wants to signal technical depth without building a full interactive 3D environment from scratch."],"bestFor":["Creative portfolios and agency pages where image presentation needs depth.","WebGL-led landing pages where a normal carousel would feel too flat.","Campaign galleries, digital archives, and product-world sections.","AI, developer-tool, cyber, and experimental brand pages where 3D motion supports the identity.","Visual showcases where the collection matters as a system, not only as individual slides."],"notFor":["Not for dense ecommerce catalogues, documentation, pricing sections, comparison tables, forms, testimonials, or content users need to scan quickly.","Not for weak or inconsistent image sets. A helix can make strong visuals feel dimensional; it cannot turn random assets into a curated world.","Not for pages that cannot afford WebGL cost. If the site already has heavy shaders, video backgrounds, and scroll scenes, adding another 3D gallery without budgets is not ambition. It is a performance incident with better lighting."],"performance":["Cap DPR, optimise textures, limit visible panels, and avoid unnecessary geometry. Use useFrame carefully; do not push expensive React state updates through the render loop. Keep per-frame work inside Three.js refs wherever possible.","Pause or reduce motion when the section is offscreen. Avoid loading large textures before the section is likely to be viewed. On lower-power devices, reduce panel count, texture size, rotation speed, and any expensive material treatment.","A practical target is to keep the scene visually rich but operationally boring: stable frame pacing, limited GPU pressure, no memory spikes, and no surprise battery tax."],"accessibility":["Provide a non-WebGL content equivalent when the gallery communicates meaningful work, products, or projects. The images should have meaningful alt text or supporting DOM content outside the canvas where appropriate, because canvas-rendered imagery is not automatically accessible as structured page content.","On mobile, simplify the scene. Reduce panel count, camera movement, rotation depth, and texture size. Consider a static preview, horizontal fallback, or simplified DOM carousel if the WebGL version becomes cramped.","For reduced motion, stop continuous rotation, remove pointer-reactive drift, and show a stable gallery state or static fallback. The user should not have to orbit through motion to understand the section."],"commonMistakes":["Treating a WebGL slider like a normal CSS carousel.","Loading oversized textures for small panels.","Updating React state inside useFrame on every tick.","Making the helix too dense for the images to be understood.","Forgetting a mobile fallback.","Putting meaningful content only inside canvas without an accessible equivalent.","Running the scene continuously when it is offscreen.","Using 3D depth when the page only needed a clean image grid."],"faq":[{"question":"What is Helix Slider?","answer":"Helix Slider is a React and Three.js image slider that arranges visual panels along a spiral or helix-like 3D path."},{"question":"What stack does Helix Slider use?","answer":"Helix Slider uses three and @react-three/fiber. The key React Three Fiber APIs are Canvas, useFrame, and useThree."},{"question":"When should I use Helix Slider?","answer":"Use it for portfolios, campaign galleries, product-world visuals, creative archives, WebGL landing pages, and experimental brand sections where an image set should feel dimensional."},{"question":"Is Helix Slider the same as a normal carousel?","answer":"No. A normal carousel usually moves DOM slides in a flat sequence. Helix Slider renders panels inside a WebGL scene and positions them in 3D space."},{"question":"Does Helix Slider work with Next.js?","answer":"Yes, but it should run as a client component. Three.js scenes, pointer tracking, viewport measurement, and frame-loop animation should stay out of server components."},{"question":"How do I keep Helix Slider performant?","answer":"Optimise textures, cap DPR, limit panel count, avoid React state updates inside useFrame, clean up resources, and pause or simplify the scene when it is offscreen."},{"question":"How do I keep Helix Slider accessible?","answer":"Do not rely on the canvas as the only source of meaningful content. Provide alt text, captions, labels, or a DOM-based content equivalent where the images communicate important information."},{"question":"What should reduced motion do?","answer":"Reduced motion should stop continuous rotation, pointer-reactive drift, depth travel, and long camera movement. Show a stable scene, static image set, or simpler fallback."},{"question":"Can Helix Slider work on mobile?","answer":"Yes, with tuning. Reduce panel count, texture size, rotation intensity, and camera movement. For some layouts, a simpler DOM carousel may be the better mobile fallback."},{"question":"Can Hyperiux adapt Helix Slider for a real brand system?","answer":"Yes. A custom version should define helix geometry, texture rules, camera behavior, pointer interaction, DPR limits, mobile fallback, accessibility treatment, reduced-motion behavior, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider","demoUrl":"https://vault.hyperiux.com/demo/helix-slider","related":[{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"},{"slug":"orbit-flip-slider","title":"Orbit Flip Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/orbit-flip-slider"},{"slug":"ring-carousel","title":"Ring Carousel","docsUrl":"https://vault.hyperiux.com/effects/carousels/ring-carousel"},{"slug":"ellipse-carousel","title":"Ellipse Carousel","docsUrl":"https://vault.hyperiux.com/effects/carousels/ellipse-carousel"}]},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"free","summary":"A horizontal feature reveal scroll animation that moves visitors sideways through chaptered content while they continue scrolling vertically.","description":"Horizontal Feature Reveal Scroll for React turns vertical pages into horizontal chapters for campaigns, portfolios, and product stories with mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add horizontal-feature-reveal","usage":"import HorizontalFeatureReveal from \"@/components/effects/horizontal-feature-reveal\";\n\nconst Page = () => {\n  return (\n    <HorizontalFeatureReveal />\n  );\n};\n\nexport default Page;","props":[{"name":"bgColor","type":"color","default":"#ffffff","description":"Background color of the section."},{"name":"textColor","type":"color","default":"#000000","description":"Color of the section text."},{"name":"translateX","type":"number","default":30,"description":"Image parallax travel as a percentage of the image width. Each image starts at -translateX% and scrolls to +translateX%."},{"name":"cardGap","type":"number","default":15,"description":"Gap between industry cards, in vw."}],"overview":["Horizontal Feature Reveal moves visitors sideways through chapters - each one a complete argument before the next begins.","Use Horizontal Feature Reveal when a page needs horizontal chapters inside a vertical journey. Agency brand narratives, editorial features, and campaign pages are the strongest fit because the layout can make each principle or scene feel like a deliberate act. The page job is authority: the sequence should feel authored, not assembled.","The thing to watch is the mobile collapse. Horizontal panels must become a clean vertical stack or swipe path without losing the narrative order."],"exampleUseCase":["An agency building a brand methodology page for a pitch process: Horizontal Feature Reveal wraps each principle in a horizontal chapter so the argument reads as a designed sequence rather than a bulleted list. The outcome is authority: the page feels authored, not assembled."],"bestFor":["Campaign and agency narratives that need a small set of horizontal chapters with a vertical fallback.","Campaign and agency narratives told as a small set of horizontal chapters.","Turns a methodology or campaign page into a chaptered sequence that feels authored rather than assembled."],"notFor":["Not for long mobile-first pages, docs, pricing, or routes where sideways movement would hide orientation.","Not for mobile audiences without a well-tested vertical fallback - horizontal scroll fatigue on touch is real and fast."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Forgetting a visible progress cue when panels move sideways.","Letting horizontal motion fight anchor links or browser restoration.","Keeping wide desktop panels on touch instead of stacking chapters."],"faq":[{"question":"How do I keep Horizontal Feature Reveal from feeling too long on mobile?","answer":"Horizontal panels translate vertical scroll into sideways travel, which can feel endless on a small screen, so cut the chapter count for touch and shorten each panel. Often the right mobile fallback is to abandon horizontal movement entirely and stack the chapters vertically. Cap the number of panels so the section has a clear end."},{"question":"How many horizontal chapters can a page support clearly?","answer":"Three to five complete arguments is the sweet spot; beyond that, visitors lose track of where they are in the sideways journey. Each chapter should be a self-contained idea, not a fragment that only makes sense in sequence. If you need more, consider two shorter sections instead of one long lane."},{"question":"How should Horizontal Feature Reveal handle in-page anchor links?","answer":"Because horizontal position is driven by vertical scroll, an anchor must resolve to the scroll offset that brings its panel into view, not just to a DOM position. Map each panel to a target offset and test that every link lands correctly. On the vertical mobile fallback, anchors behave normally."},{"question":"Can search engines crawl content inside horizontal panels?","answer":"Yes, as long as the panel content is real HTML in the DOM and not painted into a canvas or injected only on interaction. Keep headings, copy, and links present and ordered so crawlers and screen readers read the chapters regardless of the horizontal transform. The sideways motion should be presentation only."},{"question":"When is vertical pinning better than Horizontal Feature Reveal?","answer":"Vertical pinning is better when each step builds on the last and you want the reader anchored while evidence changes, since it keeps a familiar reading direction. Horizontal Feature Reveal Scroll suits chaptered, gallery-like narratives where lateral movement signals \"next exhibit.\" If the content is dense or text-heavy, vertical pinning is the safer, more readable choice."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal","demoUrl":"https://vault.hyperiux.com/demo/horizontal-feature-reveal","related":[{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"},{"slug":"rotation-slider","title":"Rotation Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/rotation-slider"},{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"}]},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"free","summary":"A depth-led infinite slider that adds perspective, motion, and continuity to portfolio showcases, launch pages, and visual sequences.","description":"Infinite Perspective Slider for React adds depth-led slide momentum for portfolios and launch pages without full WebGL cost. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add infinite-perspective-slider","usage":"import InfinitePerspectiveSlider from \"@/components/effects/infinite-perspective-slider\";\n\nexport default function Page() {\n  return (\n    <>\n      <InfinitePerspectiveSlider />\n    </>\n  );\n}","props":[{"name":"cardWidth","type":"number","default":320,"description":"Desktop card width."},{"name":"cardGap","type":"number","default":24,"description":"Spacing between cards."},{"name":"perspective","type":"number","default":2200,"description":"3D perspective depth."},{"name":"scrollSpeed","type":"number","default":1,"description":"Scroll and drag movement multiplier."},{"name":"scrollLerp","type":"number","default":0.1,"description":"How quickly the slider catches its target."},{"name":"maxRotation","type":"number","default":80,"description":"Maximum card tilt angle."}],"overview":["Infinite Perspective Slider turns a scroll lane into depth. The visitor reads the sequence as motion, not pagination.","Use Infinite Perspective Slider when a showcase needs the feeling of forward motion without a full 3D scene. Agency showcases, portfolio chapters, and AI launch pages can use the effect to keep visual momentum while the visitor stays in a familiar scroll path. The page job is continuity: the work should keep arriving without feeling like a carousel bolted onto the page.","The main risk is loop management. Perspective lanes can disorient visitors if duplicated slides, focus order, or reduced-motion states do not make the current item obvious."],"exampleUseCase":["An AI launch page presenting product capabilities as visual chapters: Infinite Perspective Slider keeps the next proof point in motion while the current one remains readable. The outcome is continuity: momentum stays high without forcing a heavy WebGL scene."],"bestFor":["Portfolio and AI launch sequences that need depth without committing to a full WebGL scene.","Portfolio chapters and launch pages that want depth without a full WebGL scene.","Infinite Perspective Slider creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for dense product lists, accessibility-critical sequences, or pages where perspective makes the active item harder to judge.","Not for routes where search traffic lands mid-sequence and needs immediate context."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Duplicating loop items without making the active item obvious.","Letting perspective clipping create horizontal overflow.","Treating depth as a substitute for a real sequence."],"faq":[{"question":"What makes Infinite Perspective Slider different from a standard scroll reveal?","answer":"A standard reveal fades or slides one element into place; this turns the whole scroll lane into receding depth so the sequence reads as continuous motion rather than pagination. The perspective is the message momentum, not a series of discrete reveals. Use it when the feeling of moving through a sequence matters more than any single item landing."},{"question":"How should Infinite Perspective Slider simplify on mobile devices?","answer":"Strong perspective on a narrow screen reads as distortion, so flatten the depth and present the items as a clean vertical or swipeable sequence. Keep the loop honest: don't trap the user in motion they can't escape. Reduced-motion users should get the same items as a static list in DOM order."},{"question":"What should developers test before shipping Infinite Perspective Slider?","answer":"Verify the \"infinite\" loop doesn't accumulate transformed nodes or listeners over time, that it cleans up on route change, and that focus order follows the DOM rather than the visual depth. Check that perspective doesn't clip adjacent content or trigger horizontal overflow. Confirm the static fallback carries the same content."},{"question":"Which content structure works best with Infinite Perspective Slider?","answer":"A medium-length run of comparable items like portfolio chapters, capability tiles, or launch milestones, where depth implies a journey. It's weakest with one or two items, where the lane has nothing to travel through. Each item should stand alone so the loop never depends on a fixed start."},{"question":"When should I avoid Infinite Perspective Slider even if the preview looks good?","answer":"Avoid it on dense, text-heavy, or utility pages where reading speed beats spectacle, and on routes where people land mid-content from search. If the perspective makes the sequence harder to parse than a plain list would, the effect is working against the page. Skip it when there isn't a real sequence to move through."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider","demoUrl":"https://vault.hyperiux.com/demo/infinite-perspective-slider","related":[{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"},{"slug":"rotation-slider","title":"Rotation Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/rotation-slider"}]},{"slug":"parallax-footer","title":"Parallax Footer","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A footer reveal effect that turns the end of a page into a polished final scroll moment.","description":"Parallax Footer for React reveals the footer as a final page beat for portfolios, agencies, and long-form brand pages. Degrades cleanly on low-power devices.","tags":["Lucide"],"dependencies":["lucide-react"],"install":"npx hyperiux add parallax-footer","usage":"import ParallaxFooter from \"@/components/effects/parallax-footer\";\n\nconst page = () => {\n  return (\n    <ParallaxFooter />\n  );\n};\n\nexport default page;","props":[{"name":"containerBgColor","type":"string","default":"#ff6b00","description":"Background color of the intro container above the footer reveal."},{"name":"footerBgColor","type":"string","default":"#1a1a1a","description":"Background color of the fixed footer panel."}],"overview":["Parallax Footer turns the end of the page into a final handoff. It makes the exit feel placed rather than dropped.","Use Parallax Footer when the end of the page should feel like a final scene rather than a hard stop. Agency, brand, and editorial pages benefit when the footer carries a little depth without delaying contact or navigation. The page job is finish: the exit should feel designed and still remain useful.","The production risk is footer utility. If the parallax layer hides links, contact details, or legal navigation, the flourish is working against the page."],"exampleUseCase":["An agency site closing a long case-study page: Parallax Footer lets the final contact section arrive with depth instead of dropping in as a utility block. The outcome is finish: the page lands with polish while the contact path stays obvious."],"bestFor":["Long pages where the final CTA or footer should feel arrived at, not bolted on.","Long pages where the final CTA or sitemap should feel arrived at, not dropped.","Parallax Footer creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for utility footers where visitors need immediate links, legal pages, or task flows that should end quickly.","Not for footers that primarily serve as a fast sitemap or legal navigation block."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Letting the reveal delay access to legal, contact, or sitemap links.","Creating gaps or overlap at the bottom of the scroll range.","Using footer motion on short pages where the footer is already visible."],"faq":[{"question":"What makes Parallax Footer different from a standard scroll reveal?","answer":"It treats the end of the page as a deliberate handoff: the footer slides into place beneath the content rather than simply appearing, so the exit feels placed instead of dropped. The motion is about closure, not entrance. Use it to give the final screen a sense of arrival."},{"question":"How should Parallax Footer simplify on mobile devices?","answer":"Reduce or remove the offset so the footer settles cleanly without a gap, since there's little room for layered movement on a phone. The footer's links and information must remain fully usable. Reduced-motion users should see a normal, static footer."},{"question":"What should developers test before shipping Parallax Footer?","answer":"Confirm the footer never leaves a gap or overlaps the last section at the bottom of the scroll range, that it re-measures on resize, and that all footer links and controls stay reachable. Test with both short and long page bodies. Verify the static fallback is clean."},{"question":"Which content structure works best with Parallax Footer?","answer":"A substantial footer worth arriving at a final CTA, sitemap, or brand sign-off on a page long enough to build momentum toward the end. It does little on a short page where the footer is already in view. Keep the footer content genuinely useful."},{"question":"When should I avoid Parallax Footer even if the preview looks good?","answer":"Avoid it on short pages, on utility routes, or anywhere the motion could delay access to footer links. If the reveal risks a layout gap on some viewports, prefer a static footer. Skip it when it's decoration with no functional payoff."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-footer","demoUrl":"https://vault.hyperiux.com/demo/parallax-footer","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"}]},{"slug":"parallax-gallery","title":"Parallax Gallery","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A multi-column parallax gallery where images drift at different speeds to create depth for editorial, fashion, photography, and visual campaign pages.","description":"Parallax Gallery for React: image columns drift at different speeds. Best for editorial, fashion, and photography pages. Ships with a reduced-motion fallback.","tags":["GSAP","Lenis"],"dependencies":["gsap","lenis"],"install":"npx hyperiux add parallax-gallery","usage":"import ParallaxGallery from '@/components/effects/parallax-gallery'\n\nconst page = () => {\n  return (\n    <>\n    <ParallaxGallery />\n    </>\n  )\n}","props":[{"name":"bgColor","type":"color","default":"#111111","description":"Background color of the gallery section."},{"name":"borderColor","type":"color","default":"rgba(255, 255, 255, 0.5)","description":"Color of the dashed border around the center frame."},{"name":"rotationDeg","type":"number","default":6,"description":"Max rotation (degrees) applied to off-center slides as they scroll past."},{"name":"offscreenScale","type":"number","default":1.2,"description":"Scale applied to off-center slides relative to the centered one."},{"name":"frameScale","type":"number","default":1,"description":"Multiplier on the center frame's width/height."}],"overview":["Depth before explanation: Parallax Gallery is how atmosphere starts before a word is read.","Use Parallax Gallery when visual atmosphere matters more than step-by-step explanation. Editorial teams, fashion brands, photography studios, and image-led campaigns benefit most because the effect makes a collection feel curated rather than arranged. The page job is atmosphere: visitors should sense depth and pace before they begin comparing images.","In production, the risk is parallax distance. Too much offset creates layout shift, weakens text alignment, and turns the gallery into motion noise on mobile."],"exampleUseCase":["A photography studio relaunching its portfolio page: Parallax Gallery lets image columns drift at different depths, giving the impression of a curated body of work rather than a flat grid. The outcome is atmosphere: visitors browse longer before deciding whether to make contact."],"bestFor":["Editorial or lifestyle galleries where atmosphere should arrive before detailed product comparison.","Editorial, fashion, and lifestyle pages that want atmosphere before the spec sheet.","Extends editorial or fashion pages without requiring more copy - the depth is the argument."],"notFor":["Not for ecommerce catalogues, image-heavy archives, or pages where speed-to-grid matters more than atmosphere.","Not for pages where image loading speed is the primary conversion variable - parallax offsets add render cycles."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Setting column offset so large that images partially exit the viewport before the section ends.","Running the same multi-speed drift on touch instead of reducing it to a stable image stack.","Loading unoptimized images into parallax columns - parallax adds render cost; unoptimized images multiply it."],"faq":[{"question":"How much parallax offset is too much on small viewports?","answer":"On phones, large offsets create visible gaps and judder because there's little vertical room for layers to separate, so reduce the per-column speed delta sharply or drop to a single speed. A few percent of differential is usually enough to read as depth without breaking the layout. If the columns can't separate cleanly, collapse to a static gallery."},{"question":"Does Parallax Gallery create layout shift on initial render?","answer":"It can, if image dimensions aren't reserved before load — the layered columns shift as media arrives and that hits CLS. Set explicit width/height or aspect-ratio on every image and size the column containers up front. Done right, the parallax is a transform applied after layout, not a change to layout itself."},{"question":"What image loading strategy protects Core Web Vitals?","answer":"Reserve space for every image, prioritize the first in-view column for LCP, and lazy-load the rest as they approach the viewport. Serve appropriately sized, compressed assets so a multi-column gallery doesn't ship oversized files. Transforms should touch only compositor properties so scrolling stays off the main thread."},{"question":"How should Parallax Gallery columns collapse on mobile?","answer":"Stack the columns into a single readable sequence in DOM order and either remove the speed differential or keep a very gentle one. The point on mobile is the imagery, not the depth trick, so prioritize fast, stable rendering. Reduced-motion users should see the same images as a static gallery."},{"question":"Is Parallax Gallery suitable for product photography pages?","answer":"Yes, when atmosphere should precede the spec sheet — editorial, fashion, and lifestyle product pages benefit from the slow drift. It's a poor fit where shoppers need to compare items precisely, since differential motion makes side-by-side scanning harder. Use it for the hero or story section, then hand off to a static grid for the catalogue."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery","demoUrl":"https://vault.hyperiux.com/demo/parallax-gallery","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"}]},{"slug":"parallax-image-animation","title":"Parallax Image","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A lightweight single-image parallax effect that adds subtle scroll depth to hero visuals, product photography, and section breaks.","description":"Parallax Image for React adds single-image depth on scroll for editorial heroes, product visuals, and lightweight story sections.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add parallax-image-animation","usage":"import ParallaxImageAnimation from\"@/components/effects/parallax-image-animation\";\n\nconst page = () => {\n return (\n <>\n<ParallaxImageAnimation\n src=\"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/v-05.jpg\"\n wrapperClassName=\"w-[27vw] h-[37vw] max-md:h-[65vh] max-md:w-full max-sm:h-[120vw]\"\n imageClassName=\"scale-[1.4] -translate-y-[30%]\"\n /> \n</>\n );\n};\n\nexport default page;","props":[{"name":"translateY","type":"number","default":30,"description":"Parallax travel as a percentage of the image height. The image starts at -translateY% and scrolls to +translateY%."},{"name":"enableScale","type":"boolean","default":false,"description":"Enables scale animation while scrolling."},{"name":"scaleFrom","type":"number","default":1.6,"description":"Initial image scale."},{"name":"scaleTo","type":"number","default":1.2,"description":"Final image scale."}],"overview":["Parallax Image gives one visual a slower pulse than the page around it. The effect is small; the pacing signal is not.","Use Parallax Image when a single visual needs depth without becoming a gallery or scene. Editorial, brand, and product photography pages can use it to make one image feel tied to the scroll pace. The page job is focus: one visual earns attention without asking for a full interaction system.","The thing to watch is image cropping and offset. If the parallax distance exceeds the safe crop area, the image exposes empty edges or shifts against the surrounding copy."],"exampleUseCase":["A brand page introducing a hero product photograph: Parallax Image gives the image a slight scroll depth while the copy remains still. The outcome is focus: the product visual feels intentional without turning the section into a showpiece."],"bestFor":["Hero visuals and section breaks where a single image needs quiet depth without stealing the copy.","Hero and section-break visuals that need a quiet sense of weight.","Parallax Image creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for image-critical shopping, documentation, or pages where the picture must stay perfectly stable for evaluation.","Not for pages where motion makes product detail harder to inspect than a still image."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Setting offsets larger than the safe crop area.","Adding parallax where precise image inspection matters.","Forgetting to reserve image dimensions before motion starts."],"faq":[{"question":"What makes Parallax Image different from a standard scroll reveal?","answer":"It's not an entrance animation at all, one image simply moves at a slower rate than the page around it, creating a quiet depth cue rather than a reveal. The effect is small by design; it signals pacing, not spectacle. Use it to give a single hero or section image a sense of weight."},{"question":"How should Parallax Image simplify on mobile devices?","answer":"The depth differential is barely perceptible on a short viewport and can cause cropping or gaps, so reduce the offset heavily or pin the image in place. Often the cleanest mobile behavior is a static image. Reduced-motion users should always see it static."},{"question":"What should developers test before shipping Parallax Image?","answer":"Reserve the image's dimensions to avoid layout shift, confirm the transform touches only compositor properties, and check there's no clipping at the top or bottom of its range. Verify it stays smooth during fast scroll. Confirm the static fallback looks intentional, not accidental."},{"question":"Which content structure works best with Parallax Image?","answer":"A single strong visual anchoring a hero, section break, or quote — one image with room above and below to move. It adds nothing to a gallery or a tight grid. Pair it with restrained surrounding copy so the subtle motion isn't lost."},{"question":"When should I avoid Parallax Image even if the preview looks good?","answer":"Avoid it where the image must stay precisely aligned with adjacent text or where any cropping would hide detail. On content-dense pages the effect is too quiet to justify the risk. Skip it if the only reason to add it is that the preview looked nice."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-image-animation","demoUrl":"https://vault.hyperiux.com/demo/parallax-image-animation","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"}]},{"slug":"parallax-slider","title":"Parallax Slider","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A layered scroll slider that adds parallax depth to visual case studies, product showcases, and campaign galleries.","description":"Parallax Slider for React moves slides at layered depths for visual case studies, product showcases, and campaign galleries. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add parallax-slider","usage":"import ParallaxSlider from '@/components/effects/parallax-slider'\n\nconst page = () => {\n return (\n <>\n <ParallaxSlider images={[\n'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-01.jpg',\n'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-02.jpg',\n'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-03.jpg',\n'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-07.jpg',\n'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-05.jpg',\n'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-06.jpg',\n'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-07.jpg',\n'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-08.jpg',\n ]} />\n </>\n )\n}\n\nexport default page","props":[{"name":"parallaxAmount","type":"number","default":25,"description":"Percent horizontal shift each image parallaxes as it crosses the viewport."},{"name":"slideGap","type":"number","default":1.6,"description":"Gap between slides, in vw."},{"name":"scrub","type":"number","default":1,"description":"GSAP ScrollTrigger scrub value on the main horizontal track - higher lags/smooths more, lower tracks scroll 1:1."},{"name":"images","type":"string[]","default":["https://picsum.photos/seed/h01/1600/1200","https://picsum.photos/seed/h02/1600/1200","https://picsum.photos/seed/h03/1600/1200","https://picsum.photos/seed/h07/1600/1200","https://picsum.photos/seed/h05/1600/1200","https://picsum.photos/seed/h06/1600/1200"],"description":"Image URLs for the slides; even-indexed slides render wide, odd ones narrow."}],"overview":["Parallax Slider gives a slide sequence depth without leaving the scroll path. It suits pages where browsing should feel guided but not trapped.","Use Parallax Slider when a visual sequence needs motion depth but not a heavy 3D system. Portfolio projects, product galleries, and campaign visuals can use it to make each slide feel layered. The page job is exploration: the visitor should keep moving through the sequence because the next image feels close, not hidden.","The risk in production is slide readability. Parallax offsets must not obscure captions, controls, or active-state context, especially on touch devices."],"exampleUseCase":["A product marketing team presenting campaign visuals: Parallax Slider gives each slide a layered reveal while keeping controls and captions available. The outcome is exploration: visitors move through the sequence without losing orientation."],"bestFor":["Case-study or product-angle sequences that need guided browsing inside the normal scroll path.","Case-study and product-angle sequences that stay on the normal scroll path.","Parallax Slider creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for critical comparisons, pricing, or long product lists where a static gallery would be faster.","Not for slide sets where users must compare every item before acting."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Letting layer offsets obscure captions or controls.","Using a slider where visitors need side-by-side comparison.","Treating scroll-linked depth like a carousel that traps the page."],"faq":[{"question":"What makes Parallax Slider different from a standard scroll reveal?","answer":"It adds depth to a slide sequence without taking users off the scroll path, so browsing feels guided but never trapped in a separate mode. Layers within each slide move at different rates as you scroll through. Use it when you want slide-like presentation that still respects normal page scrolling."},{"question":"How should Parallax Slider simplify on mobile devices?","answer":"Flatten the internal parallax and let slides advance with native swipe or a simple stack, since layered depth reads poorly on a narrow screen. Keep the sequence escapable by ordinary scrolling. Reduced-motion users get the slides as a static, ordered set."},{"question":"What should developers test before shipping Parallax Slider?","answer":"Check that scroll never feels hijacked, that layers don't clip at slide edges, and that focus and DOM order follow the slide sequence. Verify smooth performance across the full slide count. Confirm the swipe/static fallback carries every slide."},{"question":"Which content structure works best with Parallax Slider?","answer":"A handful of visual slides which includes case studies, product angles, or campaign frames where light depth adds polish to browsing. It's not for dense text or for long catalogues. Keep each slide focused on one image and a short caption."},{"question":"When should I avoid Parallax Slider even if the preview looks good?","answer":"Avoid it when users need to scan many items quickly or compare them precisely, and on text-heavy pages. If the parallax makes the slides feel like a hijacked carousel, drop it. Skip it where a plain gallery would be faster to use."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-slider","demoUrl":"https://vault.hyperiux.com/demo/parallax-slider","related":[{"slug":"liquid-glass-cursor","title":"Liquid Glass Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/liquid-glass-cursor"},{"slug":"progressive-bloom-valley","title":"Progressive Bloom Valley","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/progressive-bloom-valley"},{"slug":"file-encryption","title":"File Encryption","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/file-encryption"},{"slug":"expanding-navbar","title":"Expanding Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/expanding-navbar"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"}]},{"slug":"ribbon-drift","title":"Ribbon Drift","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"Shape selected work into a guided showcase where each project has room to earn the click before the visitor moves on.","description":"Ribbon Drift for React turns selected work into a drifting portfolio ribbon for studios, agencies, and visual showcases with a clean fallback.","tags":["GSAP","Lenis"],"dependencies":["gsap","lenis"],"install":"npx hyperiux add ribbon-drift","usage":"import RibbonDrift from '@/components/effects/ribbon-drift'\n\nconst page = () => {\n  return (\n  <>\n  <RibbonDrift/>\n  </>\n  )\n}","props":[{"name":"driftSpeed","type":"number","default":1,"description":"Speed of the ribbon drift."},{"name":"blockSize","type":"number","default":1,"description":"Size of the card blocks that hold the images in the ribbon strips."},{"name":"showNames","type":"boolean","default":true,"description":"Shows project names on hover. When off, the card hover effect is disabled too."},{"name":"textColor","type":"color","default":"#ffffff","description":"Color of the project name revealed inside a card block on hover."},{"name":"borderWidth","type":"number","default":0,"description":"Border width of the card blocks in pixels."},{"name":"borderColor","type":"string","default":"#ffffff","description":"Border color of the card blocks."},{"name":"borderRadius","type":"number","default":0,"description":"Corner radius of the card blocks in pixels."}],"overview":["Ribbon Drift is built for pages where a portfolio needs motion before the click. Project cards, visuals, titles, and fragments of work move like a drifting ribbon across the section, creating a sense of flow without turning the page into a full carousel or WebGL scene.","Use Ribbon Drift when a studio, agency, or creative brand wants selected work to feel curated, alive, and connected. The page job is momentum: the visitor should sense the range of work while still knowing where to click, what each project is, and how to continue.","The production risk is turning the portfolio into decoration. A drifting ribbon can look premium and still fail if project names, links, focus states, and mobile fallback are weak. The motion should support discovery, not hide the actual work."],"exampleUseCase":["A creative studio can use Ribbon Drift on its homepage to preview selected work before the visitor reaches the full portfolio. Project visuals drift across the section with short labels and clear links. The outcome is appetite: visitors get a moving sense of the studio’s range without being forced into a heavy gallery."],"bestFor":["Agency and studio homepages where selected work needs movement before the portfolio link.","Campaign pages where visual fragments should drift through the section as proof of craft.","Portfolio teasers where motion creates energy but each project still has a real title, context, and link."],"notFor":["Not for large work archives, comparison-heavy portfolios, filterable case-study libraries, or pages where visitors need to scan every project quickly.","Not for project sections where the ribbon hides titles, makes links hard to reach, or turns real work into background texture."],"performance":["Keep the media set controlled, pre-size images, compress assets, animate transforms instead of layout, and pause ribbon movement when the section is offscreen. Avoid loading a whole portfolio archive into a decorative strip."],"accessibility":["Project items need readable names, links, and focus states in DOM order. On mobile, collapse the ribbon into stacked cards, a simple horizontal scroll, or a tap-safe project list. Reduced-motion users should see the same work without drifting movement."],"commonMistakes":["Making the ribbon the only way to access project links.","Moving items so quickly that titles and visuals cannot be understood.","Loading too many large images before the section enters the viewport.","Forgetting that hover-rich portfolio effects still need focus and touch equivalents."],"faq":[{"question":"When should I use Ribbon Drift?","answer":"Use Ribbon Drift when a portfolio or campaign section needs a moving band of selected work instead of a static project row."},{"question":"Is Ribbon Drift a carousel?","answer":"Not exactly. It can behave like a visual showcase, but the goal is a drifting portfolio strip, not a slide-by-slide carousel that traps the section."},{"question":"How many projects should Ribbon Drift include?","answer":"Keep it curated. Four to eight strong items usually work better than a long archive. If the visitor needs to scan many projects, use a portfolio grid."},{"question":"Should project titles be visible?","answer":"Yes. Project names, short context, and links should remain readable and accessible. The motion can add energy, but it should not make the work harder to understand."},{"question":"How should Ribbon Drift behave on mobile?","answer":"Use stacked project cards, native horizontal scroll, or a simplified tap-friendly list. Do not force a desktop drifting ribbon onto a narrow screen."},{"question":"What should reduced motion do for Ribbon Drift?","answer":"Stop the drifting motion and show the project items in a stable layout. A short fade is fine, but continuous movement should be removed."},{"question":"Can Hyperiux adapt Ribbon Drift for a real portfolio?","answer":"Yes. A custom version should define project data, ribbon direction, speed, visual treatment, focus behavior, mobile fallback, performance budget, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/ribbon-drift","demoUrl":"https://vault.hyperiux.com/demo/ribbon-drift","related":[{"slug":"rectangular-text-reveal","title":"Rectangular Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/rectangular-text-reveal"},{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"rotation-slider","title":"Rotation Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/rotation-slider"},{"slug":"scroll-distortion","title":"Scroll Distortion","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-distortion"},{"slug":"rope-cursor","title":"Rope Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/rope-cursor"}]},{"slug":"rotation-slider","title":"Rotation Slider","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"free","summary":"A lightweight slider that uses angled rotation between slides for campaign visuals, product shots, and energetic visual sequences.","description":"Rotation Slider for React uses directional rotation between slides for visual stories that need energy without hiding content. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add rotation-slider","usage":"import RotationSlider from \"@/components/effects/rotation-slider\";\n\nexport default function Page() {\n  return (\n    <>\n      <RotationSlider />\n    </>\n  );\n}","props":[{"name":"rotationAmount","type":"number","default":1,"description":"How far each card rotates as it scrolls past."},{"name":"verticalDrift","type":"number","default":1,"description":"How far each card drifts vertically as it scrolls past."},{"name":"scrollSmoothing","type":"number","default":1,"description":"Scroll lag on the track; higher is smoother."},{"name":"perspective","type":"number","default":1200,"description":"Perspective depth in pixels; lower looks deeper."},{"name":"showCaptions","type":"boolean","default":true,"description":"Shows the text caption overlay on each card."},{"name":"textColor","type":"color","default":"#ffffff","description":"Color of the card caption text."}],"overview":["Rotation Slider uses angle instead of distance. It makes a transition feel designed without pretending to be 3D.","Use Rotation Slider when directional rotation should create momentum between slides. Campaign galleries and product visuals are the strongest fit because the motion can make transitions feel graphic and intentional. The page job is energy: the next visual should arrive with force without obscuring controls.","The thing to watch is rotational exaggeration. Too much angle or duration makes the slider harder to track, especially on mobile or reduced-motion settings."],"exampleUseCase":["A launch campaign presenting a short visual sequence: Rotation Slider gives each transition a directional turn that matches the campaign art. The outcome is energy: the sequence feels active without needing autoplay."],"bestFor":["Short visual sequences where an angled transition matches the campaign art direction.","Short visual slide sets that want a crafted, angled transition.","Rotation Slider creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for task-heavy pages or large visual sets where angled transitions slow evaluation.","Not for sections where the transition has more personality than the content."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes"],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Increasing the angle until slide content becomes harder to read.","Using rotation on dense text or task-heavy screens.","Letting decorative motion outlast the user's intent."],"faq":[{"question":"What makes Rotation Slider different from a standard scroll reveal?","answer":"It transitions slides by angle rather than distance, so the change feels designed without pretending to be full 3D. The rotation is a styling choice on a 2D sequence. Use it when you want a crafted transition that stays lightweight."},{"question":"How should Rotation Slider simplify on mobile devices?","answer":"Reduce the rotation angle or switch to a simple swipe so the motion doesn't disorient on a small screen. Keep slide content readable throughout. Reduced-motion users see slides change without rotation."},{"question":"What should developers test before shipping Rotation Slider?","answer":"Confirm rotated slides don't clip or overflow, that focus follows slide order, and that the transition reads cleanly at each breakpoint. Test the angle on real content, not placeholders. Verify the non-rotating fallback works."},{"question":"Which content structure works best with Rotation Slider?","answer":"A short slide set where a directional, angled transition adds character — campaign frames or product angles. It's wrong for text-heavy or comparison content. Keep slides visual and concise."},{"question":"When should I avoid Rotation Slider even if the preview looks good?","answer":"Avoid it where rotation would hurt legibility, on dense content, or where users need fast scanning. If the angle is decorative with no purpose, drop it. Skip it on utility routes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/rotation-slider","demoUrl":"https://vault.hyperiux.com/demo/rotation-slider","related":[{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"},{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"}]},{"slug":"scroll-distortion","title":"Scroll Distortion","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"An experimental scroll effect that bends or warps selected visuals as users move between sections.","description":"Scroll Distortion for React bends visuals under scroll pressure for experimental brand sections where controlled distortion is the hook.","tags":["GSAP","Three.js"],"dependencies":["gsap","three"],"install":"npx hyperiux add scroll-distortion","usage":"import ScrollDistortion from '@/components/effects/scroll-distortion'\n\nconst sections = [\n { text:'SHADOW', src:'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-07.jpg' },\n { text:'FLOWER', src:'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-10.jpg' },\n { text:'RUN!!', src:'https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-02.jpg' },\n]\n\nconst shaderConfig = {\n strength: 0.8,\n rgbShift: 0.05,\n scale: 0.15,\n transitionDuration: 0.8,\n transitionEase:'power3.inOut',\n}\n\nexport default function page() {\n return (\n    <>\n    <ScrollDistortion\n    sections={sections}\n    shaderConfig={shaderConfig}\n    displacementSrc=\"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/distortion-noise.jpg\"\n    />\n    </>\n )\n}","props":[{"name":"distortionStrength","type":"number","default":0.8,"description":"Strength of the displacement distortion during transitions."},{"name":"rgbShift","type":"number","default":0.05,"description":"Amount of RGB channel separation during the distortion."},{"name":"distortionScale","type":"number","default":0.15,"description":"Scale of the fold and stretch distortion while transitioning."},{"name":"transitionDuration","type":"number","default":1.25,"description":"Duration of each image distortion transition."},{"name":"transitionEase","type":"string","default":"power3.inOut","description":"GSAP ease used by each image distortion transition."},{"name":"sections","type":"object[]","default":[{"text":"SHADOW","src":"https://picsum.photos/seed/h02/1600/1200"},{"text":"FLOWER","src":"https://picsum.photos/seed/h03/1600/1200"},{"text":"RUN","src":"https://picsum.photos/seed/h05/1600/1200"}],"description":"Slides as { text, src }: headline text and CORS-enabled image URL."},{"name":"displacementSrc","type":"string","default":"https://picsum.photos/seed/distortionnoise/1600/1200","description":"Displacement map image URL; its red channel drives the transition warp."}],"undocumentedProps":["shaderConfig"],"overview":["Scroll Distortion bends the surface between sections. Use it where the transition is the message.","Use Scroll Distortion when the brand can tolerate a page surface that bends under pressure. Creative studios, AI launches, and experimental brand pages are the right audience because the effect is expressive before it is explanatory. The page job is tension: scroll should make the surface feel reactive without making the message harder to read.","The production risk is distortion strength. If the warp affects text, CTAs, or layout edges too aggressively, the effect stops feeling premium and starts feeling broken."],"exampleUseCase":["A creative studio launching an experimental microsite: Scroll Distortion bends selected visuals as the visitor moves, turning scroll pressure into part of the brand language. The outcome is tension: the page feels alive without sacrificing the headline or CTA."],"bestFor":["Experimental brand pages where distortion is the transition language, not a readability tax.","Experimental brand pages where the transition between sections is the hook.","Gives experimental brand pages a memorable transition surface without pretending the distortion belongs on every route."],"notFor":["Not for reading-heavy sections, product comparison, pricing, or any content where distortion would fight legibility.","Not for pages with body copy visible during the distortion zone - legibility during motion is a WCAG concern."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Warping text, forms, or CTA zones instead of transition surfaces.","Letting sticky headers enter the distorted layer.","Using strong surface bending for visitors who prefer reduced motion."],"faq":[{"question":"What distortion amplitude is safe with nearby body text?","answer":"Keep amplitude low enough that text never visibly warps while it's being read — distortion belongs on the transition between sections, not under a paragraph. If copy sits inside the affected region, reduce the effect or exclude the text from the distorted layer. When in doubt, dial it back; the cue should be felt more than seen."},{"question":"How does Scroll Distortion interact with sticky headers?","answer":"A distorted surface can drag a sticky header into the warp or cause it to jitter at boundaries, so keep the header on its own compositing layer outside the distorted region. Test the handoff at the top and bottom of the effect where sticky elements pin and release. The header must stay legible and stable throughout."},{"question":"Is Scroll Distortion safe for vestibular-sensitive users?","answer":"Surface-bending motion is exactly the kind of effect that can trigger discomfort, so it must honor reduced-motion preferences and present a flat, undistorted fallback. Never make the distortion the only way to access content. Treat the static path as the default and the distortion as an enhancement for users who haven't opted out."},{"question":"What fallback should Scroll Distortion use for reduced motion?","answer":"Replace the warp with a plain transition between sections — a simple fade or an instant cut — keeping all content readable and in order. The sections themselves don't change; only the connective motion is removed. This is a presentation layer, so removing it should never remove meaning."},{"question":"Does Scroll Distortion affect screen reader output?","answer":"No, provided the distortion is a visual layer over real HTML — screen readers traverse the DOM, not the rendered warp. Keep all copy and headings in the document and ensure focus order is unaffected by the effect. If any content exists only inside the distorted render, move it into the DOM."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-distortion","demoUrl":"https://vault.hyperiux.com/demo/scroll-distortion","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"interactive-blur-reveal","title":"Interactive Blur Reveal","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/interactive-blur-reveal"},{"slug":"mouse-pixelation","title":"Mouse Pixelation","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/mouse-pixelation"},{"slug":"split-canvas","title":"Split Canvas","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/split-canvas"}]},{"slug":"scroll-shuffled-cards","title":"Scroll Shuffled Cards","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A scroll-triggered card shuffle effect that adds motion to equal-weight cards while keeping the source order stable.","description":"Scroll Shuffled Cards for React animates equal-weight cards while DOM order stays stable for proof, team, or gallery sections. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add scroll-shuffled-cards","usage":"import ScrollShuffledCards from '@/components/effects/scroll-shuffled-cards'\nimport { ReactLenis } from\"lenis/react\";\n\nconst page = () => {\n  return (\n    <>\n     <ReactLenis root>\n   <ScrollShuffledCards/>\n     </ReactLenis>\n    </>\n  )\n}","props":[{"name":"background","type":"color","default":"#FFFBEB","description":"Background color of the section."},{"name":"cardsGap","type":"number","default":6,"description":"Spacing between cards, in vw."},{"name":"sectionHeight","type":"number","default":400,"description":"Total scroll-track height (vh) - controls how much scrolling the shuffle takes."},{"name":"shuffleIntensity","type":"number","default":1,"description":"Multiplier on how far and how much each card drifts/rotates during the shuffle."}],"overview":["Scroll Shuffled Cards makes a static card group feel edited. The shuffle adds energy while the document order stays honest.","Use Scroll Shuffled Cards when a set should feel rearranged by the visitor’s movement. Testimonial pages, team pages, and product galleries can use it to keep equal-weight cards lively without making a ranking claim. The page job is freshness: the section should feel responsive while source order remains intact.","The main risk is document order. The visual shuffle must not become a real content reorder for screen readers, keyboard users, or reduced-motion visitors."],"exampleUseCase":["A testimonial page with several equal-weight customer quotes: Scroll Shuffled Cards reshuffles the visual order while the source order remains s"],"bestFor":["Equal-weight quote, tag, or gallery groups where motion can add freshness without changing priority.","Equal-weight tag, post, or gallery groups that benefit from kinetic energy.","Scroll Shuffled Cards creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for ordered steps, ranked proof, or content where sequence communicates priority.","Not for cards with dependent order, legal meaning, or cumulative explanation."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Changing perceived priority when the cards are meant to stay equal.","Letting visual shuffle change keyboard or screen-reader order.","Leaving cards mid-shuffle after fast scroll."],"faq":[{"question":"What makes Scroll Shuffled Cards different from a standard scroll reveal?","answer":"The cards appear to reshuffle as you scroll, adding energy, while the underlying document order stays fixed and honest. The shuffle is visual; the reading order doesn't actually change. Use it to make a static card group feel edited and alive."},{"question":"How should Scroll Shuffled Cards simplify on mobile devices?","answer":"Reduce or remove the shuffle so cards present in a calm vertical order, since reordering motion is hard to track on a phone. Keep DOM order authoritative. Reduced-motion users see the cards in their natural order with no shuffle."},{"question":"What should developers test before shipping Scroll Shuffled Cards?","answer":"Confirm the visual shuffle never changes focus or DOM order, that screen readers read a stable sequence, and that the animation settles to a readable layout. Test that fast scroll doesn't leave cards mid-shuffle. Verify the static fallback is orderly."},{"question":"Which content structure works best with Scroll Shuffled Cards?","answer":"A set of equal-weight cards where a little kinetic energy adds personality — tags, posts, or gallery tiles. It's wrong for ranked or sequential content where order carries meaning. Keep cards independent."},{"question":"When should I avoid Scroll Shuffled Cards even if the preview looks good?","answer":"Avoid it whenever card order communicates priority or sequence, or where the motion would distract from reading. If the shuffle makes the group feel chaotic rather than edited, drop it. Skip it on content users need to parse precisely."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-shuffled-cards","demoUrl":"https://vault.hyperiux.com/demo/scroll-shuffled-cards","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"}]},{"slug":"scroll-stack","title":"Scroll Stack","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A pinned scroll animation that turns product tours, feature walkthroughs, and chaptered sections into a paced stacked sequence.","description":"Scroll Stack for React: pin each chapter long enough for the claim to land. Best for product tours and feature walkthroughs, with a clean stacked fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add scroll-stack","usage":"import { ReactLenis } from'lenis/react'\nimport ScrollStack from '@/components/effects/scroll-stack'\n\nconst page = () => {\n return (\n <>\n <ReactLenis root>\n <ScrollStack/>\n </ReactLenis>\n  </>\n )\n}\n\nexport default page","props":[{"name":"sectionBgColor","type":"color","default":"#ffffff","description":"Background color of the section."},{"name":"cardRadius","type":"number","default":45,"description":"Corner rounding on each card, in px (desktop only - tablet/mobile keep their own responsive radius)."}],"overview":["Scroll Stack is the product tour format. Pin each feature long enough for the claim, the proof, and the next step to land - then hand off.","Use Scroll Stack when a product sequence needs to feel like chapters, not cards stacked on a page. SaaS feature teams and product marketers get the most value here because each section can hold attention long enough for the claim, proof, and next step to register. The page job is paced explanation: every handoff should make the feature story easier to follow.","The production risk is whether the pinned sequence survives a coarse pointer, a mid-page viewport resize, and reduced motion without breaking the chapter structure. If pinning fails, the same content must still read as a clean vertical sequence."],"exampleUseCase":["A SaaS feature team building a platform walkthrough: Scroll Stack keeps each feature in view long enough to be read, then hands off cleanly to the next stage. The outcome is clarity: the visitor knows where the product story is going without fighting the scrollbar."],"bestFor":["SaaS feature tours where each chapter needs enough time for claim, proof, and next step.","SaaS feature tours and platform walkthroughs that need each chapter held long enough to read.","Converts passive feature scanning into an ordered product argument - each panel is the next step in a buying decision."],"notFor":["Not for short landing pages, comparison tables, forms, or docs where people need to scan and act quickly.","Not for routes where users frequently land mid-page from search - pinned chapters assume a top-to-bottom read order."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Using more than 6 panels without giving each a distinct claim - stacked chapters without distinct arguments feel like a carousel.","Keeping desktop pinning or horizontal movement on touch devices without a clean fallback.","Leaving pinned sections active in URL history, causing unexpected back-button behavior."],"faq":[{"question":"Can Scroll Stack work without GSAP ScrollTrigger?","answer":"The defining mechanic is pinning each chapter and advancing it as you scroll, so any pin-and-scrub approach can drive it - the engine matters less than holding each panel in view long enough to read. If scroll-linking isn't available, the same sections must still render as a clean vertical stack in DOM order. Confirm which scroll engine the shipped component uses before substituting your own."},{"question":"How do I keep Scroll Stack from breaking same-page anchor navigation?","answer":"Pinned sections change the scroll distance between anchors, so a jump to an in-page target can land mid-pin. Resolve anchor targets against the pinned layout, or release the pin before a programmatic scroll, and re-test every in-page link once the timeline is built. With reduced motion or pinning disabled, anchors behave normally because the content is a plain vertical sequence."},{"question":"What is the minimum panel count that makes Scroll Stack worth using?","answer":"Below three or four chapters the pin-and-hold rhythm costs more attention than it returns, and a normal section reveal reads faster. Use it when you have at least three feature chapters that each carry a distinct claim, proof, and next step. Past six panels, split into two sequences rather than stretching one."},{"question":"How should Scroll Stack behave on iOS Safari?","answer":"iOS Safari's dynamic toolbar changes viewport height mid-scroll, which can jump a pinned chapter, so size pins to a stable viewport unit and re-measure on resize. Where pinning feels unstable on touch, fall back to stacked sections or native swipe so the chapters still read in order. Validate on a real device rather than a desktop emulator."},{"question":"When is Scroll Stack better than a feature comparison table?","answer":"Use Scroll Stack when the story is sequential and each feature builds toward a buying decision. Use a comparison table when visitors are weighing parallel options and need to scan side by side. If users frequently arrive mid-page from search, the table is safer, because Scroll Stack assumes a top-to-bottom read."},{"question":"Can I adapt Scroll Stack to my brand and ship it with confidence?","answer":"Yes. The public effect proves the pattern; brand-adaptation work fits the motion to your design system with motion rules, a performance budget, fallback design, source handoff, and implementation notes. The resulting component lives in your codebase, so you own it."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack","demoUrl":"https://vault.hyperiux.com/demo/scroll-stack","related":[{"slug":"scroll-distortion","title":"Scroll Distortion","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-distortion"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"}]},{"slug":"split-canvas","title":"Split Canvas","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"free","summary":"A canvas-led scroll effect that splits or reveals visual states for before-after stories, AI launches, and transformation sections.","description":"Split Canvas for React cuts visual states apart on scroll for before-after stories, AI launches, and transformation sections. Includes a clean mobile fallback.","tags":["GSAP","Lenis","Three.js"],"dependencies":["gsap","lenis","three"],"install":"npx hyperiux add split-canvas","usage":"import SplitCanvas from '@/components/effects/split-canvas'\n\nconst page = () => {\n  return (\n    <>\n    <SplitCanvas />\n    </>\n  )\n}","props":[{"name":"bgColor","type":"color","default":"#F5F5F0","description":"Page background color."},{"name":"gridSize","type":"number","default":16,"description":"Pixel-dissolve shader's grid cell size, in px."},{"name":"numSlices","type":"number","default":32,"description":"Number of horizontal slices the pixel-wipe transition is split into."},{"name":"canvasSize","type":"number","default":599,"description":"Size (px) of the central transitioning canvas panel on desktop - mobile/tablet sizes scale proportionally."}],"overview":["Split Canvas makes scroll feel like a cut through the visual field. It is for pages where the transition between states matters.","Use Split Canvas when the page message benefits from a visual split that feels deliberate. Creative studios, AI launches, and experimental brand pages can use it to frame contrast, reveal, or transformation. The page job is contrast: two sides of the idea should feel connected by the interaction.","The production risk is canvas dependency. If the split effect fails, the core message, headline, and CTA must still exist in HTML and remain visually complete."],"exampleUseCase":["An AI launch page contrasting before-and-after product states: Split Canvas frames the transformation as a designed reveal rather than a static comparison. The outcome is contrast: the visitor feels the shift before reading the detail."],"bestFor":["Brand sections where the change between two visual states is the point of the scroll moment.","Before/after and state-change moments where the cut is the message.","Split Canvas creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for content where the before/after state is not obvious without motion.","Not for pages where split motion would hide the CTA or interrupt reading."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Putting meaningful copy only inside a canvas layer.","Letting the seam hide the before/after comparison.","Using a split when there is no real two-state story."],"faq":[{"question":"What makes Split Canvas different from a standard scroll reveal?","answer":"Scroll acts like a cut through the visual field, splitting and shifting the canvas between two states rather than revealing one element. The transition between states is the message. Use it where the change itself is what you want noticed."},{"question":"How should Split Canvas simplify on mobile devices?","answer":"Reduce the split travel and ensure the two states stack or transition cleanly on a narrow screen. Keep any text content in the DOM, not painted into the canvas. Reduced-motion users should see the end state directly."},{"question":"What should developers test before shipping Split Canvas?","answer":"If a real canvas is used, confirm it pauses offscreen, cleans up on route change, and exposes meaningful HTML alongside it. Check the split doesn't clip content at the seam. Verify the static fallback shows the final state."},{"question":"Which content structure works best with Split Canvas?","answer":"A two-state moment — before/after, open/closed, or a strong scene change — where the cut dramatizes a transition. It's wrong for continuous reading or many states. Keep it to a single, clear split."},{"question":"When should I avoid Split Canvas even if the preview looks good?","answer":"Avoid it where the meaning lives in text that would end up inside a canvas, on content-dense pages, or where the seam could hide information. If there's no real two-state story, the cut is empty. Skip it when a fade would do the same job."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/split-canvas","demoUrl":"https://vault.hyperiux.com/demo/split-canvas","related":[{"slug":"scroll-distortion","title":"Scroll Distortion","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-distortion"},{"slug":"interactive-blur-reveal","title":"Interactive Blur Reveal","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/interactive-blur-reveal"},{"slug":"dither-canvas","title":"Dither Canvas","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dither-canvas"},{"slug":"mouse-pixelation","title":"Mouse Pixelation","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/mouse-pixelation"}]},{"slug":"square-translate","title":"Square Translate","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A geometric scroll animation that shifts square elements into place for clean technical sections and graphic brand layouts.","description":"Square Translate for React shifts block geometry on scroll for graphic brand sections that need motion without a full scene. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add square-translate","usage":"import SquareTranslate from \"@/components/effects/square-translate\";\n\nconst page = () => {\n  return (\n    <>\n            <SquareTranslate />\n    </>\n  \n  );\n};\n\nexport default page;","props":[{"name":"translateValue","type":"number","default":55,"description":"Translate distance for the row currently aligned with the square."},{"name":"totalTranslateImpact","type":"number","default":3,"description":"How many neighboring rows ripple outward from the square."},{"name":"maxRotation","type":"number","default":360,"description":"Total rotation the square completes over the scroll track."},{"name":"transitionDuration","type":"number","default":0.4,"description":"Tween duration for the square and row movement on each scroll update."},{"name":"squareColor","type":"color","default":"#FB450F","description":"Color of the translated square marker."},{"name":"squareSize","type":"number","default":12,"description":"Width and height of the square marker in pixels."}],"overview":["Square Translate turns geometry into scroll punctuation. It gives technical pages a clean motion accent without taking over the section.","Use Square Translate when geometric movement should create a clean graphic rhythm. Brand campaigns, launch pages, and interface-led visuals can use it when square motion matches the visual system. The page job is order: movement should feel precise rather than decorative.","The main risk is overflow and focus clipping. Translated squares must not cover text, hide controls, or push visual elements outside safe bounds on smaller screens."],"exampleUseCase":["A graphic brand campaign using modular square layouts: Square Translate moves blocks with directional clarity so the page feels structured rather than static. The outcome is order: the motion reinforces the grid instead of distracting from it."],"bestFor":["Grid-led brand sections where square movement reinforces the visual system without hurting scan speed.","Minimal, technical sections that want a precise motion accent beside the copy.","Square Translate creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for dense grids, forms, or pages where geometric motion would slow comprehension.","Not for grids where movement changes perceived grouping or reading order."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Letting translated squares cover text or controls.","Moving grid pieces so perceived reading order changes.","Using geometric motion without a clear brand or layout role."],"faq":[{"question":"What makes Square Translate different from a standard scroll reveal?","answer":"It uses simple geometric movement — squares translating into place — as a clean motion accent, rather than revealing the section's main content. The geometry is punctuation, not the message. Use it to add a crisp technical touch without dominating the section."},{"question":"How should Square Translate simplify on mobile devices?","answer":"Reduce the travel distance so the shapes settle without overflow on a narrow screen, or drop the accent entirely. The surrounding content must read fine without it. Reduced-motion users see the resting layout."},{"question":"What should developers test before shipping Square Translate?","answer":"Confirm the transforms don't cause horizontal overflow or layout shift, that the accent doesn't pull focus from real content, and that it cleans up on navigation. Test across breakpoints. Verify the static state looks intentional."},{"question":"Which content structure works best with Square Translate?","answer":"Technical or minimal sections that want a small, precise motion accent beside the copy — feature blocks, spec sections, or dividers. It's wrong as a carrier of actual content. Keep it secondary to the message."},{"question":"When should I avoid Square Translate even if the preview looks good?","answer":"Avoid it when it competes with the section's real content, on dense pages, or where any motion is unnecessary. If the accent is purely decorative and adds nothing, leave it out. Skip it on utility routes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/square-translate","demoUrl":"https://vault.hyperiux.com/demo/square-translate","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"}]},{"slug":"stack-spread","title":"Stack Spread","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"free","summary":"A stack-to-spread hero component for portfolios, creative studios, product launches, campaign pages, and brand-led landing sections where imagery should move from compression into expression.","description":"Stack Spread for React expands a stacked set of visual cards into a composed spread around a central message for hero sections, portfolios, and brand pages.","tags":["Motion"],"dependencies":["motion"],"install":"npx hyperiux add stack-spread","usage":"import StackSpread from \"@/components/effects/stack-spread\";\n\nexport default function page() {\n  return (\n    <>\n        <StackSpread />\n    </>\n  );\n}","props":[{"name":"scrollLength","type":"number","default":350,"description":"Total scroll distance the spread plays out over, in vh. Sets the section height."},{"name":"clusterRotation","type":"boolean","default":true,"description":"Fan the clustered stack with each card's own angle, or start every card flat."},{"name":"stackScale","type":"number","default":0.82,"description":"Scale of the cards while clustered, before they spread out to full size."},{"name":"cardRadius","type":"number","default":8,"description":"Corner radius on each card, in px (desktop only - tablet/mobile keep their responsive radius)."},{"name":"bgColor","type":"color","default":"#ececeb","description":"Background color of the section behind the cards."},{"name":"textColor","type":"color","default":"#141414","description":"Color of the centre headline and subtitle."},{"name":"textFadeStart","type":"number","default":0.3,"description":"Scroll progress (0-1) where the centre text starts fading in."}],"overview":["Stack Spread turns a small visual pile into a spatial composition.","A group of cards begins close together, then separates into a wider arrangement around the page’s core message. The spread gives each image room without turning the section into a standard grid. The centre can hold a headline, brand line, product statement, or campaign idea while the surrounding cards create atmosphere, proof, and visual range.","Use Stack Spread when a page needs to introduce a visual world quickly. It works for agency homepages, portfolio intros, campaign launches, editorial landing pages, fashion and lifestyle brands, product-world presentations, creative archives, and image-led SaaS sections where the surrounding visuals support one central claim.","The page job is reveal and composition. The visitor should feel the collection opening up around the message, then immediately understand what the section is saying. The spread should make the headline feel surrounded by proof, not buried under decorative cards."],"exampleUseCase":["A creative studio can use Stack Spread in the hero to introduce its visual range. The cards begin as a compact stack, then spread around a central brand line. The result gives the page a sense of energy, taste, and motion before the visitor reaches the service details.","The outcome is immediate visual positioning. The page does not need to explain that the studio has range; the composition makes that range visible.","A product company can use the same component for launch assets, template previews, customer use cases, dashboard states, or product-world imagery. The stack creates anticipation, while the spread turns the hero into a structured showcase."],"bestFor":["Portfolio and studio hero sections where visual range matters.","Campaign pages that need a strong opening composition.","Product launch pages with multiple supporting visuals.","SaaS or AI landing pages that want image-led proof around a central claim.","Fashion, lifestyle, photography, editorial, and creative brand pages.","Visual archives, moodboards, and selected work sections where composition matters more than grid scanning."],"notFor":["Not for dense galleries, ecommerce catalogues, pricing sections, documentation, comparison tables, forms, or content users need to scan quickly.","Not for weak image sets. Stack Spread can arrange strong visuals beautifully, but it cannot create taste from random assets.","Not for sections where the central message is long. The headline needs space, not a swarm of cards fighting for attention."],"performance":["Keep the number of cards controlled, optimise images, reserve the final section dimensions, and animate transform and opacity rather than layout-heavy properties. Avoid excessive blur, large shadows, and constant recalculation during scroll or pointer movement.","Do not render oversized images if the displayed cards are small. The component should feel light even when the composition feels rich."],"accessibility":["Keep the central headline and supporting text as real DOM content. Give meaningful alt text to image cards when they communicate content. If the images are decorative atmosphere, mark them appropriately.","On mobile, simplify the spread. Use fewer visible cards, reduce rotation, stack some visuals vertically, or switch to a calmer composition that preserves the central message. For reduced motion, show the final spread, a static stack, or a minimal fade without outward card travel."],"commonMistakes":["Letting cards cover the headline or CTA.","Using too many images.","Relying on random placement instead of composed spread positions.","Mixing image ratios without a cropping rule.","Making the initial stack so dense that the visuals are unreadable.","Forcing the full desktop spread onto mobile.","Using the effect as decoration when the image set has no relationship to the message."],"faq":[{"question":"What is Stack Spread?","answer":"Stack Spread is a React component that animates a group of image cards from a compact stack into a wider composed layout around a central message."},{"question":"When should I use Stack Spread?","answer":"Use it for hero sections, portfolio intros, campaign launches, product-world presentations, visual archives, and brand pages where imagery should support one central claim."},{"question":"Is Stack Spread a carousel?","answer":"No. Stack Spread is not primarily for browsing slide by slide. It is a visual composition pattern that opens a card group into a spatial arrangement."},{"question":"How many cards work best?","answer":"A controlled set works best. Six to ten cards is usually enough to create visual range without overwhelming the headline or hurting performance."},{"question":"Can Stack Spread include text cards?","answer":"Yes, but use them carefully. The component works best with image-led cards around a clear central headline. Text-heavy cards can make the layout feel crowded."},{"question":"How do I keep Stack Spread accessible?","answer":"Keep the main headline and supporting copy as real text. Use meaningful alt text for content images, hide decorative images where appropriate, and preserve a logical reading order."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove outward spread travel, rotation, and repeated motion. Show a static final composition, a simplified stack, or a minimal fade."},{"question":"Does Stack Spread work on mobile?","answer":"Yes, with adaptation. Reduce card count, simplify spread positions, avoid tiny cards near screen edges, and keep the central message readable."},{"question":"Can Hyperiux adapt Stack Spread for a real brand system?","answer":"Yes. A custom version should define card count, image ratios, spread geometry, trigger behavior, central content rules, mobile fallback, accessibility states, reduced-motion handling, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/stack-spread","demoUrl":"https://vault.hyperiux.com/demo/stack-spread","related":[{"slug":"information-drawer","title":"Information Drawer","docsUrl":"https://vault.hyperiux.com/effects/components/information-drawer"},{"slug":"timeline","title":"Timeline","docsUrl":"https://vault.hyperiux.com/effects/components/timeline"},{"slug":"cards-runway","title":"Cards Runway","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/cards-runway"},{"slug":"hover-stack","title":"Hover Stack","docsUrl":"https://vault.hyperiux.com/effects/components/hover-stack"}]},{"slug":"stacking-cards","title":"Stacking Cards","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A scroll-based card stack effect where each card accumulates visually as the next item enters the section.","description":"Stacking Cards for React accumulates ordered cards on scroll for process pages, feature steps, and case-study sequences. Built to stay readable with motion off.","tags":["GSAP","Lenis"],"dependencies":["gsap","lenis"],"install":"npx hyperiux add stacking-cards","usage":"import StackingCards from '@/components/effects/stacking-cards'\nimport { ReactLenis } from'lenis/react'\n\nconst page = () => {\n  return (\n   <>\n    <ReactLenis root>\n   <StackingCards/>\n    </ReactLenis>\n   </>\n  )\n}","props":[{"name":"imageZoomEnabled","type":"boolean","default":true,"description":"Enables the image zoom-in effect during card reveals."},{"name":"tiltEnabled","type":"boolean","default":true,"description":"Enables the outgoing card tilt, scale, and rotateX treatment."},{"name":"cardCornerRadius","type":"number","default":48,"description":"Corner radius in pixels applied to the cards as they stack (not the images)."},{"name":"stackPerspective","type":"number","default":1200,"description":"Perspective depth for the tilt. Only applies while tilt is enabled."}],"overview":["Stacking Cards lets proof accumulate. Each card stays in the memory of the section while the next one arrives.","Use Stacking Cards when an ordered set should accumulate pressure as the visitor moves. SaaS teams and agency process pages are the best fit because the effect makes each step feel added to the last rather than replaced. The page job is momentum: the sequence should build confidence without hiding earlier context.","In production, the risk is card order. If pinning fails on older iOS Safari or reduced motion is enabled, the cards must still read in the intended order as normal content."],"exampleUseCase":["An agency explaining a four-step delivery process: Stacking Cards lets each phase accumulate on the page so the method feels built, not merely listed. The outcome is trust: the process feels deliberate before the prospect reaches the CTA."],"bestFor":["Process, proof, and principle sections where each item should accumulate visual weight.","Milestone, principle, or proof sequences where impressions should accumulate.","Lets process steps or proof points accumulate, making the sequence feel heavier with every card."],"notFor":["Not for comparison grids, forms, or pages where accumulated cards would obscure the next action.","Not for card groups where hidden depth would make keyboard focus or link order confusing."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Stacking more cards than can remain legible.","Letting overlap hide keyboard focus or link targets.","Using accumulation for unrelated cards that do not build an argument."],"faq":[{"question":"What makes Stacking Cards different from a standard scroll reveal?","answer":"A reveal shows each card and lets it leave; stacking keeps earlier cards visible underneath as new ones arrive, so proof accumulates instead of scrolling away. The memory of the previous card is the point. Use it when the cumulative impression matters more than any single panel."},{"question":"How should Stacking Cards simplify on mobile devices?","answer":"Deep stacks crowd a small viewport, so reduce the visible stack depth or fall back to a plain vertical list of the same cards. Keep the overlap shallow enough that headings stay readable. Reduced-motion users should see the cards laid out in order without the stacking transform."},{"question":"What should developers test before shipping Stacking Cards?","answer":"Confirm the visual stack order matches DOM order, that z-index and transforms don't make earlier cards unreadable, and that the sequence cleans up on route change. Test with your real maximum card count, not three placeholders. Verify the flat fallback contains every card."},{"question":"Which content structure works best with Stacking Cards?","answer":"Three to six items that build a case; milestones, principles, or proof points where seeing the prior card behind the current one reinforces the argument. It's weak for unrelated items that don't benefit from accumulation. Give each card one clear claim."},{"question":"When should I avoid Stacking Cards even if the preview looks good?","answer":"Avoid it when cards are dense or text-heavy, when there are too many to stack legibly, or when users need to compare them side by side. If stacking hides information the reader needs, a plain grid serves better. Skip it where scanning speed outranks staged progression."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/stacking-cards","demoUrl":"https://vault.hyperiux.com/demo/stacking-cards","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"}]},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"free","summary":"A sticky scroll layout that keeps one core claim fixed while supporting proof, visuals, or steps move beside it.","description":"Sticky Content Wrapper for React pins content while a story unfolds beside it - ideal for SaaS feature walkthroughs and case studies.","tags":["GSAP","Lenis"],"dependencies":["gsap","lenis"],"install":"npx hyperiux add sticky-content-wrapper","usage":"import StickyContentWrapper from \"@/components/effects/sticky-content-wrapper\";\nimport { ReactLenis } from\"lenis/react\";\n\nexport default function Page() {\n return (\n     <ReactLenis root>\n <StickyContentWrapper />\n     </ReactLenis>\n );\n}","props":[{"name":"bgColor","type":"color","default":"#ffffff","description":"Background color of the sticky section, including the gap between the content and image panes."},{"name":"textColor","type":"color","default":"#000000","description":"Color of the text content and the scroll indicator."},{"name":"contentEnterYPercent","type":"number","default":2,"description":"Vertical offset (% of content height) each content block starts from before sliding into place."},{"name":"initialImageScale","type":"number","default":1.5,"description":"Scale of an image before it becomes the active image."},{"name":"activeImageScale","type":"number","default":1.2,"description":"Scale of the image while it is active on screen."},{"name":"exitImageScale","type":"number","default":1,"description":"Scale of an image after it has exited."}],"overview":["Sticky Content Wrapper keeps the argument still while the evidence moves. It is built for product pages that need focus, not fireworks.","Use Sticky Content Wrapper when one idea should stay anchored while proof changes beside it. SaaS feature storytelling and product tours are the natural fit because the visitor can keep the main claim in view while supporting cards, visuals, or steps move around it. The page job is clarity: one idea stays stable while the evidence changes.","The risk in production is reading order. The sticky column must not trap attention, overlap content, or disappear before the supporting material has finished on smaller screens."],"exampleUseCase":["A SaaS team building a product tour: Sticky Content Wrapper keeps the core capability fixed while proof, screenshots, and use cases change beside it. The outcome is clarity: the visitor can connect each supporting detail back to the same product promise."],"bestFor":["Product stories where one central claim should stay anchored while proof changes beside it.","Product pages where one claim stays anchored while proof scrolls past it.","Keeps the core claim visible while proof changes around it, so product tours feel focused instead of scattered."],"notFor":["Not for sections where every item has equal weight or users need to jump straight to a specific answer.","Not for mobile layouts unless the pinned idea becomes a clean vertical sequence."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Making the sticky claim too long to read while evidence moves.","Letting the sticky column overlap its proof on short viewports.","Pairing unrelated evidence with the anchored message."],"faq":[{"question":"What makes Sticky Content Wrapper different from a standard scroll reveal?","answer":"A reveal animates an element in once; this holds one column still while supporting evidence scrolls past it, keeping a claim anchored across several beats of proof. The value is sustained focus, not a single entrance. Use it when an argument needs to stay on screen while examples change beside it."},{"question":"How should Sticky Content Wrapper simplify on mobile devices?","answer":"Two-column sticky layouts rarely fit a phone, so stack the anchored content above or between its evidence and let the page scroll normally. Don't pin on short viewports where the sticky element would cover the content it explains. Reduced-motion users get the same stacked, readable order."},{"question":"What should developers test before shipping Sticky Content Wrapper?","answer":"Check the sticky element releases cleanly at the end of its range, doesn't overlap the footer, and re-measures on viewport resize and dynamic mobile toolbars. Verify it never traps focus or hides the content it describes. Confirm the stacked fallback presents the same material in order."},{"question":"Which content structure works best with Sticky Content Wrapper?","answer":"One stable thesis paired with a sequence of supporting items; a feature explained while screenshots advance, or a claim backed by rotating proof. It needs enough scrolling evidence to justify pinning; a single short pairing doesn't. Keep the sticky side concise so it reads while the rest moves."},{"question":"When should I avoid Sticky Content Wrapper even if the preview looks good?","answer":"Avoid it when both columns are long, when the page is short, or when the sticky element would obscure key content on smaller screens. If the relationship between the anchored claim and the moving evidence isn't obvious, the pin just feels like the page is stuck. Skip it on utility routes where scanning beats focus."},{"question":"Can I adapt Sticky Content Wrapper to my product page and brand?","answer":"Yes, adaptation work tunes the pin range, the pairing logic, and the responsive fallback to your layout, with motion rules, a performance budget, fallback design, source handoff, and implementation notes. You keep the component in your own codebase."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper","demoUrl":"https://vault.hyperiux.com/demo/sticky-content-wrapper","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"stacking-cards","title":"Stacking Cards","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/stacking-cards"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"},{"slug":"hover-stack","title":"Hover Stack","docsUrl":"https://vault.hyperiux.com/effects/components/hover-stack"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"}]},{"slug":"svg-path","title":"SVG Path Marquee","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A scroll-linked SVG text marquee that moves copy along a custom path for campaign signatures, editorial loops, and typographic brand moments.","description":"SVG Path Marquee for React moves text along a drawn path for editorial loops, campaign signatures, and kinetic section dividers.","tags":["Motion"],"dependencies":["motion"],"install":"npx hyperiux add svg-path","usage":"import SVGPath from \"@/components/effects/svg-path\";\n\nconst page = () => {\n  return (\n    <>\n      <SVGPath />\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"bgColor","type":"color","default":"#000000","description":"Background color of the section."},{"name":"baseVelocity","type":"number","default":8,"description":"Marquee scroll speed along the path."},{"name":"dragSensitivity","type":"number","default":0.1,"description":"How much drag movement translates to velocity."},{"name":"slowDownFactor","type":"number","default":0.3,"description":"How much the marquee slows down while hovered."},{"name":"draggable","type":"boolean","default":true,"description":"Enables drag interaction on the marquee."}],"overview":["SVG Path Marquee puts text on a line the page draws itself. The motion is not decoration - it is navigation, brand voice, or proof of craft depending on what you write.","Use SVG Path Marquee when motion should follow a drawn path rather than a straight ticker. Event pages, brand campaigns, and typographic brand pages can use it when the path itself is part of the identity. The page job is character: the line of motion should feel designed, not merely animated.","In production, the risk is SVG scaling. The path must remain crisp on retina viewports, responsive widths, and reduced-motion states without blurring or clipping text."],"exampleUseCase":["A brand campaign page using a custom typographic line: SVG Path Marquee lets copy travel along the drawn route instead of looping in a straight bar. The outcome is character: the motion carries the brand shape as much as the words."],"bestFor":["Editorial or brand strips where text motion should follow a drawn path without hiding the message.","Brand statements that trace a product outline, logo, or custom path.","Makes brand language travel along a designed path, turning a line of copy into a motion signature."],"notFor":["Not for long text, accessibility-critical messages, or sections where motion makes reading harder.","Not for keyword-critical headings or important sentences that need stable layout."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Using tight SVG curves that make text unreadable.","Making a moving path carry keyword-critical copy.","Forgetting a static readable path state for reduced motion."],"faq":[{"question":"How do I synchronize SVG Path Marquee speed with scroll?","answer":"Drive the text's position along the path from scroll progress so it advances as the user scrolls and idles when they stop, rather than running on a fixed clock. Keep the mapping linear enough to feel connected to the gesture. Confirm fast scroll doesn't cause the text to jump along the path."},{"question":"Does the path need to be authored manually?","answer":"The text follows an SVG path you define, so yes — you author or import the path data, and the readability depends on its curvature. Gentle paths keep text legible; tight corners distort letters. Design the path with the text content in mind."},{"question":"What typography settings keep path text readable at speed?","answer":"Favor a sturdy weight, generous letter-spacing, and adequate size so characters stay legible while moving along curves. Avoid thin or condensed faces that smear at speed. Keep the message short so it can be read in a glance as it travels."},{"question":"How should SVG Path Marquee pause for reduced motion?","answer":"For users who prefer reduced motion, hold the text static along the path instead of animating it, keeping the words fully readable. The path and content remain; only the travel stops. Never make the moving state the only way to read the text."},{"question":"Can SVG Path Marquee follow product outlines or logos?","answer":"Yes — any SVG path works, so text can trace a product silhouette, logo outline, or custom shape for brand effect. Keep the outline smooth enough that the text stays readable, and provide the message as plain text for accessibility. Treat the shape as expression, not as the only carrier of meaning."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/svg-path","demoUrl":"https://vault.hyperiux.com/demo/svg-path","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"}]},{"slug":"svg-pixel-reveal","title":"SVG Pixel Reveal","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"pro","summary":"A scroll-linked SVG reveal effect that resolves logos, diagrams, or vector graphics through a pixel-style mask.","description":"SVG Pixel Reveal for React breaks imagery into pixel masks on scroll for campaign sections and technical visual reveals. Keeps content crawlable and accessible.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add svg-pixel-reveal","usage":"import SVGPixelReveal from \"@/components/effects/svg-pixel-reveal\";\n\nexport default function Page() {\n  return (\n    <>\n       <section className=\"flex min-h-[50vh] max-sm:min-h-[70vh] items-center justify-center px-6 py-20\">\n          <SVGPixelReveal\n            src=\"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/v-01.jpg\"\n            alt=\"Nature scene\"\n            className=\" w-full max-sm:max-w-md h-[70vh] max-w-xl\"\n          />\n        </section>\n    </>\n  );\n}","props":[{"name":"intensity","type":"number","default":22,"description":"Starting pixelation intensity before the reveal sharpens the image."},{"name":"scrub","type":"boolean","default":true,"description":"Tie the reveal to scroll position. When off, the reveal plays once when the image enters the viewport."},{"name":"duration","type":"number","default":1.5,"description":"Reveal duration in seconds when scrub is off."},{"name":"src","type":"string","default":"https://picsum.photos/seed/v01/1600/1200","description":"Image URL to pixelate and reveal."},{"name":"alt","type":"string","default":"Image","description":"Alt text for the revealed image."}],"overview":["SVG Pixel Reveal lets scroll uncover a vector image as if the page is resolving signal. It suits technical pages that need a designed reveal without a full scene.","Use SVG Pixel Reveal when a graphic or image should arrive through a designed digital mask. Creative studios, product launches, and technical brands are the right fit because the reveal itself becomes part of the visual identity. The page job is signal: the reveal should make the asset feel engineered, not merely faded in.","The main risk is mask scaling. The SVG and pixel grid must stay sharp across retina screens, responsive widths, and reduced-motion fallbacks."],"exampleUseCase":["A developer-tool launch page revealing a key interface image: SVG Pixel Reveal breaks the asset into a controlled digital entrance before resolving to the final screenshot. The outcome is signal: the product feels technical before the visitor reads the caption."],"bestFor":["Technical reveals for logos, interface shots, or diagrams that should resolve with digital intent.","Technical pages revealing a logo, diagram, or line drawing with intent.","SVG Pixel Reveal creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for essential diagrams, legal copy, or hero content that must be readable before animation completes.","Not for assets that carry essential meaning before the reveal has finished."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Using a pixel reveal for essential diagrams that must be read instantly.","Letting the mask fail to reach the completed artwork on fast scroll.","Forgetting accessible title, description, or adjacent explanatory copy."],"faq":[{"question":"What makes SVG Pixel Reveal different from a standard scroll reveal?","answer":"Instead of fading an element in, it resolves a vector image cell by cell, as if the page is reconstructing a signal — a designed reveal without a full canvas scene. The mechanic is a scroll-linked mask over crisp SVG, so it stays sharp at any resolution. Use it on technical pages that want a considered reveal that's still lightweight."},{"question":"How should SVG Pixel Reveal simplify on mobile devices?","answer":"Shorten the reveal so it completes within a comfortable scroll distance, and reduce the cell count if the animation feels busy on a small screen. If scroll-linking is unreliable, show the finished vector immediately. Reduced-motion users should see the completed image with no animation."},{"question":"What should developers test before shipping SVG Pixel Reveal?","answer":"Confirm the SVG is accessible (title/desc or adjacent text), that the reveal completes even on fast scroll, and that the final state is the full image with no stuck cells. Check performance with the real artwork's node count. Verify the no-motion fallback shows the complete graphic."},{"question":"Which content structure works best with SVG Pixel Reveal?","answer":"A single meaningful vector has a logo, diagram, or product line drawing that benefits from a deliberate arrival. It's wasted on decorative shapes or on raster photography, which won't stay crisp. Give it one focal graphic per section."},{"question":"When should I avoid SVG Pixel Reveal even if the preview looks good?","answer":"Avoid it for photographic imagery, for graphics that must be readable instantly, or where the reveal delays comprehension of important information. If the artwork is complex enough that cell-by-cell reveal stutters, ship it static. Skip it when the reveal adds time but no meaning."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/svg-pixel-reveal","demoUrl":"https://vault.hyperiux.com/demo/svg-pixel-reveal","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"}]},{"slug":"text-convergence","title":"Text Convergence","category":{"id":"scroll","slug":"scroll-effects","name":"Scroll Effects"},"tier":"free","summary":"A scroll text animation that brings scattered words or phrases together into one resolved statement.","description":"Text Convergence for React brings words together on scroll for hero claims and campaign statements that need a staged arrival. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add text-convergence","usage":"import TextConvergence from '@/components/effects/text-convergence'\n\nconst page = () => {\n return (\n <>\n <TextConvergence\n text=\"Build faster. Animate better. Ship smarter. Hyperiux Vault gives you the tools to create high-performance interfaces that look premium and feel effortless.\"\n bgColor=\"bg-[#111111]\"\n />\n </>\n )\n}\n\nexport default page","props":[{"name":"bgColor","type":"color","default":"#111111","description":"Background color of the section."},{"name":"text","type":"string","default":"Build faster. Animate better. Ship smarter. Hyperiux Vault gives you the tools to create high-performance interfaces that look premium and feel effortless.","description":"Headline text; word count also sets the scroll section height."}],"overview":["Text Convergence pulls separate phrases into one claim. The effect works when alignment is the message.","Use Text Convergence when separate ideas should collapse into one claim. Brand campaigns, editorial intros, and technical launch pages can use it to make the final line feel earned. The page job is resolution: scattered words should arrive as one clear statement.","The thing to watch is split-text accessibility and layout shift. The final phrase must exist as readable DOM text, and the animated fragments must not change line height or screen-reader output."],"exampleUseCase":["A brand campaign landing page opening with fragmented value words: Text Convergence pulls them into a single claim before the CTA appears. The outcome is resolution: the message feels assembled by the interaction, not pasted above it."],"bestFor":["Taglines or launch claims that become stronger when fragmented words visibly assemble.","Single high-impact taglines that land harder by visibly assembling.","Text Convergence creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for body copy, instructions, or claims that must be clear before the animation resolves.","Not for phrases that need to be understood instantly above the fold."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Splitting the accessible phrase into fragments for screen readers.","Letting moving words cause horizontal overflow.","Using convergence on claims that need instant comprehension."],"faq":[{"question":"What makes Text Convergence different from a standard scroll reveal?","answer":"Separate words or phrases travel from different positions and lock into a single line as you scroll, so alignment itself is the payoff. A standard reveal just brings finished text in; here the assembly carries the meaning. Use it when a claim lands harder by visibly coming together."},{"question":"How should Text Convergence simplify on mobile devices?","answer":"Large travel distances overflow a narrow screen, so shorten the paths or assemble the line in place. Keep the final, converged text the accessible source so it's never dependent on the animation. Reduced-motion users should see the completed line immediately."},{"question":"What should developers test before shipping Text Convergence?","answer":"Confirm the readable text exists in the DOM as one phrase (so screen readers don't read scattered fragments), that pieces don't cause horizontal overflow mid-travel, and that the line always resolves even on fast scroll. Test the reduced-motion end state. Check timing so the payoff isn't missed."},{"question":"Which content structure works best with Text Convergence?","answer":"One short, high-impact statement — a tagline or single claim — where the act of converging adds weight. It's wrong for paragraphs or for anything users need to read instantly. Keep it to a few words."},{"question":"When should I avoid Text Convergence even if the preview looks good?","answer":"Avoid it on body copy, on anything time-sensitive to read, or where movement would distract from a nearby CTA. If users land mid-page and miss the assembly, the line should still read normally — and if it can't, skip the effect. Don't use it just because the motion is satisfying."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/text-convergence","demoUrl":"https://vault.hyperiux.com/demo/text-convergence","related":[{"slug":"interactive-blur-reveal","title":"Interactive Blur Reveal","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/interactive-blur-reveal"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"},{"slug":"text-stream","title":"Text Stream","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-stream"},{"slug":"video-player","title":"Video Player","docsUrl":"https://vault.hyperiux.com/effects/components/video-player"},{"slug":"webgl-slider","title":"WebGL Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/webgl-slider"}]},{"slug":"animated-faq","title":"Animated FAQ","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"free","summary":"A button-controlled FAQ accordion for pricing pages, product objections, landing pages, and conversion-focused answer sections.","description":"Animated FAQ for React opens pricing and product objections near the CTA with button-controlled accordions and aria-expanded states.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add animated-faq","usage":"import {\n  FAQContent,\n  FAQGroup,\n  FAQTitle,\n  FAQWrapper,\n} from \"@/components/effects/animated-faq\";\n\nexport default function FAQDemo() {\n  const defaultOpenItems = faqItems\n    .filter((item) => item.defaultOpen)\n    .map((item) => item.id);\n\n  return (\n    <>\n    <section className=\"bg-black h-screen px-8 py-20 text-white\">\n        <div className=\"max-w-5xl mx-auto text-center text-white mb-12\">\n                {/* Heading */}\n                <h1 className=\"text-[5.5vw] max-sm:text-[11vw] max-md:text-[8vw]\">\n                Animated Faq\n                </h1>\n        \n                {/* Subtext */}\n                <p className=\"mt-8 text-[1.2vw] max-sm:text-[4.5vw] max-md:mt-4 max-md:text-[3vw]\">\n                  Click on the FAQ triggers\n                </p>\n    \n              </div>\n      <div className=\"mx-auto max-w-4xl space-y-4\">\n        <FAQGroup allowMultiple={false} defaultOpenItems={defaultOpenItems}>\n          {faqItems.map((item) => (\n            <FAQWrapper\n              key={item.id}\n              itemId={item.id}\n              className=\"rounded-md border border-white/20 px-6 py-5\"\n              titleClassName=\"text-[1.1rem] font-medium text-white\"\n              iconSize={16}\n              iconStrokeWidth={2}\n              duration={0.5}\n            >\n              <FAQTitle className=\"pb-0\">{item.title}</FAQTitle>\n\n              <FAQContent className=\"pt-4 text-neutral-400\">\n                {item.content}\n              </FAQContent>\n            </FAQWrapper>\n          ))}\n        </FAQGroup>\n      </div>\n    </section>\n    </>\n  );\n}\nconst faqItems = [\n  {\n    id: \"faq-1\",\n    title: \"What makes this FAQ package more reusable?\",\n    content: (\n      <>\n        You are no longer locked into a plain data object. You can pass rich\n        JSX, custom markup, inline links, badges, icons, or even other\n        components inside the title and content.\n      </>\n    ),\n    defaultOpen: true,\n  },\n  {\n    id: \"faq-2\",\n    title: \"Can I put custom content inside the answer?\",\n    content: (\n      <div className=\"space-y-3\">\n        <p>Yes. This content area accepts full React nodes, not just text.</p>\n        <ul className=\"list-disc pl-5 space-y-1\">\n          <li>Paragraphs</li>\n          <li>Lists</li>\n          <li>Buttons</li>\n          <li>Inline links</li>\n        </ul>\n      </div>\n    ),\n    defaultOpen: false,\n  },\n  {\n    id: \"faq-3\",\n    title: \"Does it use the ChevronBird trigger?\",\n    content: (\n      <>\n        Yes. The open and close state is visually driven by ChevronBird, so your\n        motion language stays consistent across the whole system.\n      </>\n    ),\n    defaultOpen: false,\n  },\n];","props":[{"name":"allowMultiple","type":"boolean","default":false,"description":"Lets more than one FAQ answer stay open at once."},{"name":"duration","type":"number","default":0.5,"description":"Open and close animation duration."},{"name":"showIcon","type":"boolean","default":true,"description":"Shows or hides the FAQ trigger icon."},{"name":"iconPosition","type":"string","default":"right","description":"Side where the trigger icon is rendered."},{"name":"iconMode","type":"string","default":"rotate","description":"Chevron rotation style used by the trigger icon."}],"overview":["Animated FAQ is a button-controlled accordion for objections that appear at the decision point.","Use it on pricing, landing, product, and comparison pages where the visitor needs a specific answer before clicking the CTA. The page job is objection handling: questions open cleanly, answers remain crawlable, and the interaction clarifies state.","In production, the risk is turning answers into hidden decoration. Each question needs a real button, aria-expanded, a labelled answer region, and a reduced-motion state that opens instantly."],"exampleUseCase":["A pricing page can place Animated FAQ below plan cards so questions about contracts, refunds, implementation, and support open exactly where hesitation appears."],"bestFor":["Pricing pages where objections need to open beside the CTA.","Product landing pages where answers should stay crawlable but not dominate the first screen.","Sales pages where accordion state should be clear for keyboard and screen-reader users."],"notFor":["Not for hiding essential policy, pricing, support, or legal details that users must see without opening an accordion."],"performance":["Keep answer panels light, avoid layout-heavy height animation across many open items, and render answer copy as normal HTML so search and no-JS paths still see it."],"accessibility":["Each question needs a real button with aria-expanded and a connected answer panel. On mobile, keep tap targets generous and make open/closed state visually obvious."],"commonMistakes":["Animating an accordion before the button and aria-expanded state are correct.","Hiding the only useful answer inside client-only state.","Letting reduced-motion users wait for height animation."],"faq":[{"question":"What ARIA pattern does Animated FAQ need?","answer":"Use a button-controlled accordion: each question is a button, aria-expanded reflects state, and the answer is associated with the control. Do not use generic div toggles."},{"question":"Where does Animated FAQ help conversion?","answer":"Place it near pricing, lead-capture, or product proof where visitors hesitate. It is strongest for objections, not generic educational content."},{"question":"Should FAQ answers be crawlable?","answer":"Yes. The answer text should exist as HTML so search engines, screen readers, and no-JS users can still access the information."},{"question":"Can Hyperiux adapt Animated FAQ for a real brand system?","answer":"Yes. A custom version should define content structure, accessibility behavior, motion rules, reduced-motion behavior, source handoff, and implementation notes for the specific page job."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/animated-faq","demoUrl":"https://vault.hyperiux.com/demo/animated-faq","related":[{"slug":"file-encryption","title":"File Encryption","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/file-encryption"},{"slug":"animated-toggle","title":"Animated Toggle","docsUrl":"https://vault.hyperiux.com/effects/buttons/animated-toggle"},{"slug":"gooey-counter","title":"Gooey Counter","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter"}]},{"slug":"animated-form","title":"Animated Form","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"An interactive form component with clear animated states for labels, validation, errors, submit progress, and success feedback.","description":"Animated Form for React adds clear animated states for labels, validation, errors, submit progress, and success without slowing input. Includes a clean mobile fallback.","tags":["zod"],"dependencies":["zod"],"install":"npx hyperiux add animated-form","usage":"import AnimatedForm from '@/components/effects/animated-form';\n\nconst page = () => {\n  return (\n    <>\n    <AnimatedForm/>\n    </>\n  )\n}","props":[{"name":"backgroundColor","type":"color","default":"#ffffff","description":"Page background color around the form."},{"name":"textColor","type":"color","default":"#111111","description":"Text color for the form heading and field labels."},{"name":"inputBackgroundColor","type":"color","default":"#ffffff","description":"Background color for inputs, textarea, and select controls."},{"name":"fieldBorderColor","type":"color","default":"#e5e7eb","description":"Default border color for form controls."},{"name":"inputRoundedness","type":"number","default":28,"description":"Border radius for inputs and the submit button in pixels."},{"name":"duration","type":"number","default":0.3,"description":"Transition duration for control focus and button effects in seconds."}],"overview":["Animated Form uses motion to clarify input, validation, submit, error, and success states without slowing the user down.","Use it for lead capture, demo requests, waitlists, onboarding, and contact flows where state clarity matters. The page job is completion: labels, validation, help text, error messages, submit state, and success confirmation should be obvious.","The risk in production is decoration during typing. Animation must never delay input, validation, error discovery, or submission feedback."],"exampleUseCase":["A demo-request page can use Animated Form when the team needs clear labels, inline validation, submit progress, error recovery, and a visible success state without adding friction."],"bestFor":["Lead-capture forms that need validation clarity and visible submit state.","Demo request and waitlist flows where errors must be easy to recover from.","Product pages where the form is the conversion point, not a design flourish."],"notFor":["Not for flows where animation delays typing, validation, error discovery, payment, or submit feedback."],"performance":["Keep typing independent from decorative motion, debounce expensive validation, and avoid re-rendering the full form on every keystroke."],"accessibility":["Every field needs a label or accessible name, errors need field association, and submit state should be perceivable without relying on colour alone. On mobile, keep inputs large and keyboard-friendly."],"commonMistakes":["Animating labels until the accessible name becomes unclear.","Showing errors visually without tying them to fields.","Making users wait for decoration before the form accepts input."],"faq":[{"question":"Which states must the Animated Form page document?","answer":"Label, focus, validation, submit/pending, error, and success states. A form page without state rules is not launch-ready."},{"question":"How should errors be shown?","answer":"Inline, tied to the field, written plainly, and not hidden behind animation. Users should know what failed and how to fix it."},{"question":"Can animated forms improve conversion?","answer":"Only when motion clarifies state. If it delays typing, hides validation, or makes errors feel playful, it hurts completion."},{"question":"Can Hyperiux adapt Animated Form for a real brand system?","answer":"Yes. A custom version should define content structure, accessibility behavior, motion rules, reduced-motion behavior, source handoff, and implementation notes for the specific page job."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/animated-form","demoUrl":"https://vault.hyperiux.com/demo/animated-form","related":[{"slug":"arrow-fill-button","title":"Arrow Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/arrow-fill-button"},{"slug":"animated-toggle","title":"Animated Toggle","docsUrl":"https://vault.hyperiux.com/effects/buttons/animated-toggle"},{"slug":"animated-faq","title":"Animated FAQ","docsUrl":"https://vault.hyperiux.com/effects/components/animated-faq"},{"slug":"card-drift","title":"Card Drift","docsUrl":"https://vault.hyperiux.com/effects/components/card-drift"}]},{"slug":"animated-modal","title":"Animated Modal","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"A focus-managed dialog component for confirmations, demo previews, compact forms, media lightboxes, and contextual help.","description":"Modal for React adds motion to labelled dialogs while preserving focus trap, Escape close, scroll lock, and focus restore. Ships with a reduced-motion fallback.","tags":["Lucide"],"dependencies":["lucide-react"],"install":"npx hyperiux add animated-modal","usage":"import AnimatedModal from \"@/components/effects/animated-modal\";\n\nexport default function Page() {\n  return (\n    <>\n          <AnimatedModal/>\n    </>\n  );\n}","props":[{"name":"showCloseButton","type":"boolean","default":true,"description":"Shows the close (X) button."},{"name":"closeOnBackdrop","type":"boolean","default":true,"description":"Closes the modal when the backdrop is clicked."},{"name":"closeOnEsc","type":"boolean","default":true,"description":"Closes the modal when Escape is pressed."},{"name":"size","type":"number","default":72,"description":"Modal content width as a percentage of the viewport, capped at 960px."},{"name":"overlayOpacity","type":"number","default":0.82,"description":"Opacity of the page overlay."},{"name":"duration","type":"number","default":0.5,"description":"Open and close fade duration in seconds."},{"name":"backgroundColor","type":"color","default":"#ffffff","description":"Modal content background color."},{"name":"textColor","type":"color","default":"#111111","description":"Modal content text color."},{"name":"roundedness","type":"number","default":24,"description":"Modal content border radius in pixels."}],"overview":["Animated Modal is a labelled dialog pattern with motion added after focus, Escape, scroll lock, and restore behavior are solved.","Use it for short, interruptive tasks where a dialog is genuinely better than an inline section: confirmation, demo preview, compact form, media lightbox, or contextual help. The page job is temporary focus, not hiding depth.","The risk in production is broken focus. The dialog must be labelled, focus-trapped while open, closable with Escape, and return focus to the trigger."],"exampleUseCase":["A product page can use Animated Modal for a short demo preview or confirmation flow when the trigger remains obvious and closing returns the visitor to the exact point of action."],"bestFor":["Short dialogs where temporary focus helps the task.","Demo previews, confirmation steps, compact forms, and media lightboxes with clear close behavior.","Desktop interactions that can become drawers or inline sections on mobile."],"notFor":["Not for long pages, dense forms, core pricing details, or content that would work better as an inline section or drawer."],"performance":["Mount heavy modal content only when needed, keep open/close transitions short, and avoid blocking route or scroll restoration after close."],"accessibility":["Label the dialog, trap focus only while open, close with Escape when safe, and restore focus to the trigger. On mobile, use a drawer or inline section when the content is long."],"commonMistakes":["Opening a modal without a clear title or accessible label.","Failing to return focus to the trigger.","Putting long task flows inside a cramped dialog."],"faq":[{"question":"Which accessibility details are non-negotiable for Animated Modal?","answer":"A labelled dialog, focus trap, Escape close, focus restore, visible close control, and scroll lock where supported."},{"question":"When should Animated Modal become inline on mobile?","answer":"When the content is long, form-heavy, or central to the task. A cramped mobile modal is usually worse than a drawer or inline section."},{"question":"What should reduced motion do?","answer":"Remove scale, blur, and dramatic movement. The dialog can appear instantly or with a short opacity change."},{"question":"Can Hyperiux adapt Animated Modal for a real brand system?","answer":"Yes. A custom version should define content structure, accessibility behavior, motion rules, reduced-motion behavior, source handoff, and implementation notes for the specific page job."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/animated-modal","demoUrl":"https://vault.hyperiux.com/demo/animated-modal","related":[{"slug":"arrow-fill-button","title":"Arrow Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/arrow-fill-button"},{"slug":"animated-toggle","title":"Animated Toggle","docsUrl":"https://vault.hyperiux.com/effects/buttons/animated-toggle"},{"slug":"animated-faq","title":"Animated FAQ","docsUrl":"https://vault.hyperiux.com/effects/components/animated-faq"},{"slug":"animated-form","title":"Animated Form","docsUrl":"https://vault.hyperiux.com/effects/components/animated-form"}]},{"slug":"animated-tabs","title":"Animated Tabs","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"A keyboard-friendly animated tabs component for organizing dense product content, use cases, integrations, and equal-weight panels.","description":"Tabs for React organizes dense product content into keyboardable tablist, tab, and tabpanel states with readable panels.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add animated-tabs","usage":"import AnimatedTabs from '@/components/effects/animated-tabs';\n\nconst Page = () => {\n  return (\n   <>\n          <AnimatedTabs/>\n   </>\n  )\n}","props":[{"name":"defaultActiveIndex","type":"number","default":0,"description":"Index of the initially active tab."},{"name":"animationType","type":"string","default":"slide","description":"Panel transition style."},{"name":"slideDistance","type":"number","default":40,"description":"Horizontal travel distance for the slide transition, in pixels."},{"name":"accentColor","type":"color","default":"#ff6b00","description":"Color used for the active tab label and indicator."},{"name":"duration","type":"number","default":0.35,"description":"Panel and indicator transition duration in seconds."}],"overview":["Animated Tabs organize dense product content into a tablist, tabs, and tab panels that stay readable before animation enters.","Use Animated Tabs when related content has equal standing and the first screen would become too heavy if every panel appeared at once. The page job is organized depth: users should understand the available panels and move between them with pointer or keyboard.","In production, the risk is hidden content that cannot be reached predictably. Implement tablist, tab, tabpanel, selected state, and arrow-key behavior before adding panel motion."],"exampleUseCase":["A SaaS product page can use Animated Tabs to organize use cases, integrations, feature groups, or implementation options while keeping each panel crawlable or represented in server-rendered copy."],"bestFor":["Product sections where dense information needs clear grouping.","Integration, pricing-detail, or use-case sections where each panel has equal weight.","Pages where keyboard navigation and selected state are part of trust."],"notFor":["Not for content that must be compared side by side, discovered through search snippets, or read in one continuous flow."],"performance":["Avoid remounting heavy panels on every tab change unless necessary, pre-size panel space where possible, and keep transitions short."],"accessibility":["Expose tablist, tab, selected state, and tabpanel relationships where appropriate. On mobile, switch to stacked sections when horizontal tabs become cramped."],"commonMistakes":["Using tabs for unrelated content.","Hiding important SEO copy in client-only inactive panels.","Skipping keyboard movement between tabs."],"faq":[{"question":"Which keyboard behavior do Animated Tabs need?","answer":"Arrow-key movement between tabs, clear selected state, and predictable activation. Pointer-only tabs are not production-ready."},{"question":"When should animated tabs become stacked sections?","answer":"On mobile or when panel content is long enough that switching hides too much context."},{"question":"Are animated tabs good for SEO?","answer":"They can be if content is present in crawlable HTML or represented clearly in the server-rendered page. Do not bury unique content in client-only panels."},{"question":"Can Hyperiux adapt Animated Tabs for a real brand system?","answer":"Yes. A custom version should define content structure, accessibility behavior, motion rules, reduced-motion behavior, source handoff, and implementation notes for the specific page job."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/animated-tabs","demoUrl":"https://vault.hyperiux.com/demo/animated-tabs","related":[{"slug":"animated-faq","title":"Animated FAQ","docsUrl":"https://vault.hyperiux.com/effects/components/animated-faq"},{"slug":"animated-toggle","title":"Animated Toggle","docsUrl":"https://vault.hyperiux.com/effects/buttons/animated-toggle"},{"slug":"animated-form","title":"Animated Form","docsUrl":"https://vault.hyperiux.com/effects/components/animated-form"},{"slug":"arrow-fill-button","title":"Arrow Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/arrow-fill-button"}]},{"slug":"border-beam","title":"Border Beam","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"free","summary":"Add a moving beam of light around cards, forms, CTAs, and feature panels to guide attention without changing the component’s real structure.","description":"Border Beam for React adds a moving light beam around cards, CTAs, forms, and feature panels without changing the component’s real structure.","tags":["Lucide","CSS"],"dependencies":["lucide-react"],"install":"npx hyperiux add border-beam","usage":"import BorderBeam from '@/components/effects/border-beam'\n\nexport default function Page() {\n  return (\n    <>\n              <div className=\"relative flex justify-center items-center h-screen max-xl:justify-center\">\n              <div className=\"relative w-full max-w-[42vw] max-xl:max-w-[90%] mx-auto\">\n                <BorderBeam />\n              </div>\n            </div>\n    </>\n  )\n}","props":[{"name":"size","type":"string","default":"md","description":"Chooses the beam motion family and sizing preset."},{"name":"colorVariant","type":"string","default":"colorful","description":"Chooses the color palette used by the beam."},{"name":"theme","type":"string","default":"auto","description":"Sets the light, dark, or system-aware beam tuning."},{"name":"active","type":"boolean","default":true,"description":"Turns the beam animation on or off."},{"name":"strength","type":"number","default":2,"description":"Scales the beam intensity."},{"name":"duration","type":"number","default":3.3,"description":"Time for the beam to complete a loop."},{"name":"beamWidth","type":"number","default":9,"description":"Thickness of the animated border beam."},{"name":"backgroundColor","type":"color","default":"#212121","description":"Card or container background color."}],"overview":["Border Beam adds a moving line of light around a real UI surface.","It works best on cards, forms, pricing panels, feature blocks, login boxes, product callouts, and CTAs where the border needs a little attention without turning the whole component into a fire alarm.","Border Beam is not the content. It is the accent. The card, form, button, or panel should already make sense before the beam appears. The page job is emphasis: the moving border should guide the eye toward something useful, trusted, or worth clicking.","The production risk is overuse. A border beam feels premium when one or two surfaces earn it. Put it on every card and the page starts looking like a server rack auditioning for a nightclub."],"exampleUseCase":["A SaaS pricing page can use Border Beam around the recommended plan card. The beam gives the preferred option a quiet premium signal while the plan name, price, features, and CTA remain fully readable. The outcome is emphasis: the eye lands where the decision is supposed to happen."],"bestFor":["Pricing cards, featured plans, and upgrade prompts where one option needs controlled emphasis.","Login, waitlist, and demo-request panels where the container should feel active without hurting form usability.","Product feature cards, proof blocks, and CTAs where the border can guide attention without changing layout."],"notFor":["Not for dense card grids, long reading sections, dashboards, tables, destructive actions, or any UI where every container competes for attention.","Not for forms where the animated border distracts from labels, errors, validation, or submit state."],"performance":["Animate the beam with compositor-friendly transforms where possible, avoid layout-triggering border changes, keep glow blur restrained, and do not run dozens of beams at once. Pause or simplify decorative border motion when the section is offscreen."],"accessibility":["The beam is decorative. Keep it hidden from assistive technology, preserve visible focus states, and make sure the border animation never becomes the only selected, error, or active-state indicator. On mobile and reduced motion, use a static border, subtle highlight, or no beam."],"commonMistakes":["Adding Border Beam to every card on the page.","Letting the glow reduce text contrast or obscure form fields.","Using the beam as the only way to show selection, focus, error, or loading state.","Making the border animation louder than the actual CTA."],"faq":[{"question":"When should I use Border Beam?","answer":"Use Border Beam when one important surface needs a moving border accent: a pricing card, CTA panel, form container, or featured product block."},{"question":"Should Border Beam be used on every card?","answer":"No. It works best as a priority signal. If every card has a beam, no card is important anymore."},{"question":"Can Border Beam wrap a form?","answer":"Yes, but the form must remain fully usable. Labels, inputs, errors, focus states, and submit feedback should stay clearer than the border effect."},{"question":"How should Border Beam behave on reduced motion?","answer":"Use a static border, a subtle glow, or no effect. Do not keep looping border motion for users who prefer reduced motion."},{"question":"Does Border Beam affect SEO?","answer":"No, if it only decorates real HTML content. The wrapped card, form, heading, and CTA should remain normal markup."},{"question":"Can Hyperiux adapt Border Beam for a real brand system?","answer":"Yes. A custom version should define beam color, thickness, radius behavior, motion timing, theme variants, focus safety, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/border-beam","demoUrl":"https://vault.hyperiux.com/demo/border-beam","related":[{"slug":"card-drift","title":"Card Drift","docsUrl":"https://vault.hyperiux.com/effects/components/card-drift"},{"slug":"animated-form","title":"Animated Form","docsUrl":"https://vault.hyperiux.com/effects/components/animated-form"},{"slug":"animated-modal","title":"Animated Modal","docsUrl":"https://vault.hyperiux.com/effects/components/animated-modal"},{"slug":"inertia-img","title":"Inertia Image","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/inertia-img"},{"slug":"magnetic-image-trail","title":"Magnetic Image Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/magnetic-image-trail"}]},{"slug":"card-drift","title":"Card Drift","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"A subtle card-motion component that adds slow independent drift to proof grids, feature rows, logo walls, and portfolio tiles.","description":"Card Drift for React adds subtle motion to proof or feature cards without creating a separate experimental category. Built to stay readable with motion off.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add card-drift","usage":"import CardDrift from '@/components/effects/card-drift'\n\nconst page = () => {\n return (\n <>\n <CardDrift/>\n <div className='absolute bottom-2 translate-x-[-50%] left-1/2  rounded-xl   text-white bg-white/10 px-4 py-2 max-md:bottom-5 text-center backdrop-blur-md'>\n      Grab any card and move it around\n </div>\n </>\n )\n}\n\nexport default page","props":[{"name":"backgroundColor","type":"color","default":"#000000","description":"Background color for the draggable card field."},{"name":"backgroundTextColor","type":"color","default":"#ffffff","description":"Color of the large background label."},{"name":"cardColor","type":"color","default":"#4f46e5","description":"Background color for each draggable card."},{"name":"cardTextColor","type":"color","default":"#ffffff","description":"Text color for each draggable card."},{"name":"barColor","type":"color","default":"#262626","description":"Background color for each card's tag bar."},{"name":"driftAmount","type":"number","default":30,"description":"Initial scatter and drag throw distance for cards."},{"name":"smoothness","type":"number","default":0.7,"description":"Release and scale smoothing duration for each dragged card."}],"overview":["Card Drift gives a set of cards a slow, low-amplitude drift so a proof grid or feature row feels alive without asking for attention.","Use Card Drift on testimonial walls, logo or feature grids, and portfolio tiles where a hint of independent motion adds life to otherwise static cards. The drift should earn its place through state clarity, semantics, and task usefulness, not decoration.","In production, the risk is distraction. The drift has to stay subtle, pause when the section is offscreen or motion is reduced, and never pull focus from the card content or its links, and every state change should remain clear under keyboard, mobile, and reduced-motion conditions."],"exampleUseCase":["A SaaS landing page can use Card Drift on a row of customer-proof cards so the section feels considered rather than static, while every logo, quote, and link stays readable and clickable."],"bestFor":["Proof and testimonial grids where gentle motion makes a static section feel intentional.","Feature or logo rows that would otherwise sit flat, where drift adds life without hiding content.","Portfolio and case-study tiles where subtle independent movement signals craft on the first screen."],"notFor":["Not for pricing, comparison, or dense reading sections where cards need to stay perfectly still for scanning."],"performance":["Keep drift slow and low-amplitude, pause offscreen, animate transform only, and avoid per-card effects that repaint the full grid."],"accessibility":["Do not move focused cards unpredictably. On mobile and reduced motion, freeze the cards or use a static grid."],"commonMistakes":["Letting decorative drift pull attention away from the proof copy.","Animating cards while a keyboard user is focused inside them.","Using drift to compensate for weak card content."],"faq":[{"question":"When should I use Card Drift?","answer":"Use it when a creative content group needs cards drifting just enough to feel alive without harming readability."},{"question":"How should Card Drift stay readable and focus-safe?","answer":"Keep each drifting card as normal HTML with visible headings, text, links, and focus states. Pause or freeze movement while a user is focused inside the card."},{"question":"How should Card Drift simplify on mobile?","answer":"Use a static grid or a very subtle transform-free layout. Card movement should not make small touch targets or proof copy harder to use."},{"question":"Can Card Drift improve proof or feature grids?","answer":"Yes, when a light drift makes proof cards feel alive without competing with the message. It hurts when it becomes motion for weak content."},{"question":"What should reduced motion do for Card Drift?","answer":"Freeze the cards in a clean grid and keep all content, links, and focus states unchanged."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/card-drift","demoUrl":"https://vault.hyperiux.com/demo/card-drift","related":[{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"circular-split-roll","title":"Circular Split Roll","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/circular-split-roll"},{"slug":"text-convergence","title":"Text Convergence","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/text-convergence"},{"slug":"scramble-link-button","title":"Scramble Link Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/scramble-link-button"}]},{"slug":"draggable-marquee","title":"Draggable Marquee","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"A moving marquee strip that users can drag, pause, and explore for logos, proof points, tags, awards, or visual content.","description":"Draggable Marquee for React lets users pull a moving strip of logos, work, or proof while keeping controls readable. Built to stay readable with motion off.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add draggable-marquee","usage":"import DraggableMarquee from \"@/components/effects/draggable-marquee\";\n\nconst page = () => {\n\treturn (\n\t\t<>\n\t\t\t<DraggableMarquee/>\n\t\t</>\n\t);\n};\n\nexport default page;","props":[{"name":"speed","type":"number","default":7.2,"description":"Autoplay movement speed (px per tick)."},{"name":"pauseOnHover","type":"boolean","default":false,"description":"Pauses autoplay while hovered."},{"name":"throwMultiplier","type":"number","default":2.8,"description":"Drag-release momentum strength."},{"name":"throwFriction","type":"number","default":0.975,"description":"Momentum decay rate per frame after a drag release - closer to 1 coasts longer."}],"overview":["Draggable Marquee gives repeated content a second mode: scroll for rhythm, drag for choice.","Use Draggable Marquee when continuous motion should invite interruption. Brand campaigns and editorial pages use it best when visitors can grab a stream of logos, tags, images, or statements and change the pace themselves. The page job is participation: the marquee should feel alive because the visitor can steer it.","In production, the risk is control. If the marquee cannot pause, drag, or reduce motion cleanly, it becomes background noise with a pointer event attached."],"exampleUseCase":["A campaign page showing partner logos and short messages: Draggable Marquee lets visitors interrupt the motion and inspect the stream at their own pace. The outcome is participation: the section feels active without hiding the content."],"bestFor":["Logo, award, partner, or tech-stack strips where visitors may want to pause and inspect the stream.","Logo, tech-stack, and award strips that should drift but also invite a flick.","Draggable Marquee creates a concrete scroll outcome that a static section would not deliver."],"notFor":["Not for mandatory proof, compliance logos, or content users must read in sequence.","Not for logo strips where motion prevents recognition, trust, or partner scanning."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Letting horizontal drag fight native vertical scrolling.","Using motion for logos that must be recognized quickly.","Making the marquee the only way to access important proof."],"faq":[{"question":"What makes Draggable Marquee different from a standard scroll reveal?","answer":"It gives a repeating strip two modes: it drifts on its own for rhythm, and the user can grab and drag it to take control. A standard reveal is a one-way entrance; this is an ongoing, optionally interactive band. Use it for logos, tags, or proof that should move but also invite a flick."},{"question":"How should Draggable Marquee simplify on mobile devices?","answer":"Touch already implies dragging, so make the swipe gesture first-class and ensure horizontal drag doesn't fight vertical page scroll. Keep auto-scroll gentle so it doesn't compete with the user. Reduced-motion users should see a static, readable strip."},{"question":"What should developers test before shipping Draggable Marquee?","answer":"Verify drag and native scroll don't conflict, that momentum settles predictably, and that keyboard users can reach and read every item without the drag. Confirm the loop doesn't leak nodes over time. Check that the content is real, focusable HTML, not painted text."},{"question":"Which content structure works best with Draggable Marquee?","answer":"Short, equal-weight, repeatable items like client logos, technologies, awards, or tags — where order isn't critical. It's wrong for sequential arguments or anything that must be read top to bottom. Keep each item glanceable."},{"question":"When should I avoid Draggable Marquee even if the preview looks good?","answer":"Avoid it for important sequential content, for anything that must be fully read, or where horizontal drag would interfere with scrolling on touch. If the items carry real meaning that order conveys, use a list. Skip it when motion is the only reason it's there."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/draggable-marquee","demoUrl":"https://vault.hyperiux.com/demo/draggable-marquee","related":[{"slug":"pixelated-image-effect","title":"Pixelated Image Effect","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/pixelated-image-effect"},{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"rectangular-text-reveal","title":"Rectangular Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/rectangular-text-reveal"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"},{"slug":"rope-cursor","title":"Rope Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/rope-cursor"}]},{"slug":"elastic-accordion","title":"Elastic Accordion","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"A button-controlled accordion component for FAQ sections, pricing objections, feature explanations, product proof, service pages, and help content where answers should expand cleanly without feeling stiff.","description":"Elastic Accordion for React opens FAQ and detail panels with a soft elastic motion for pricing pages, product explainers, and conversion sections.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add elastic-accordion","usage":"import ElasticAccordion from '@/components/effects/elastic-accordion'\n\nconst page = () => {\n  return (\n    <>\n    <ElasticAccordion/>\n    </>\n  )\n}","props":[{"name":"duration","type":"number","default":0.8,"description":"Expansion animation duration in seconds."},{"name":"gooeyStrength","type":"number","default":9,"description":"Strength of the gooey connection between question and answer."},{"name":"stagger","type":"number","default":0.05,"description":"Delay between answer line reveals in seconds."},{"name":"multiple","type":"boolean","default":false,"description":"Allows multiple answers to remain open."},{"name":"startOpen","type":"number","default":0,"description":"Initially open item index; -1 closes all items."},{"name":"bgColor","type":"color","default":"#ebebe9","description":"Background color."},{"name":"panelColor","type":"color","default":"#101010","description":"Question and answer panel color."},{"name":"textColor","type":"color","default":"#fffaf2","description":"Text and icon color; secondary elements use reduced opacity."},{"name":"ease","type":"string","default":"elastic.out(1,0.82)","description":"GSAP easing for expansion. Available in code only."},{"name":"items","type":"ElasticAccordionItem[]","default":null,"description":"Question and answer items; defaults to the built-in FAQ."},{"name":"className","type":"string","default":"","description":"Additional root class names."},{"name":"onChange","type":"(index: number, isOpen: boolean) => void","default":null,"description":"Called when an item is toggled."}],"overview":["Elastic Accordion turns stacked questions into a compact interactive section.","Each row stays collapsed until selected. When opened, the answer panel expands with an elastic motion that feels responsive rather than mechanical. The interaction gives short explanations a better sense of weight while keeping the page easy to scan.","Use Elastic Accordion when a page needs to hold supporting information without overwhelming the layout. It works for FAQs, pricing questions, product objections, service explainers, feature details, onboarding notes, comparison pages, and conversion sections where visitors need quick access to answers.","The page job is clarity on demand. The accordion should help users open the answer they need, understand it quickly, and keep moving. The elastic motion should make the interaction feel polished, not turn every answer into a little trampoline routine."],"exampleUseCase":["A pricing page can use Elastic Accordion below the plan cards to answer objections about licensing, updates, cancellation, support, refunds, team usage, and implementation fit. The section keeps the pricing area clean while still giving serious buyers the detail they need before conversion.","The outcome is lower friction. Visitors do not have to leave the page, open support, or scan a documentation section just to answer the question blocking the purchase.","A service page can use the same component to explain deliverables, timelines, ownership, collaboration style, and handoff expectations without crowding the main sales narrative."],"bestFor":["Pricing FAQs and purchase objections.","Product pages where technical questions need compact answers.","Service pages where buyers need detail without losing the main narrative.","Comparison pages where objections and fit questions matter.","Documentation summaries, onboarding guidance, and support content.","Conversion sections where answers should stay close to the CTA."],"notFor":["Not for hiding essential information users must see before acting.","Not for long documentation, legal clauses, dense tables, product specs, or content that needs side-by-side comparison.","Not for pages where every section becomes an accordion because the layout has not made a decision. Collapsing everything is not information architecture. It is avoidance with rounded corners."],"performance":["Keep the accordion lightweight. Avoid measuring every panel repeatedly, avoid animating layout-heavy properties across many open items, and clean up resize listeners when used. For long FAQ sets, consider grouping, search, or pagination instead of rendering a massive animated stack.","Animate height, opacity, and transform with restraint. Elastic movement should feel responsive, not slow."],"accessibility":["Use button triggers, visible focus states, keyboard support, and correct expanded state. Keep the answer text in a logical reading order and ensure icons are decorative unless they communicate meaningful state.","On mobile, make rows easy to tap, keep answer width comfortable, and avoid tiny icons. For reduced motion, remove bounce, stretch, spring overshoot, and long panel travel. The answer should simply open."],"commonMistakes":["Using clickable divs instead of buttons.","Hiding important conversion information inside collapsed panels.","Writing answers that are too long.","Making the elastic motion too bouncy.","Forgetting keyboard and focus states.","Breaking FAQ schema by marking up hidden or mismatched content.","Letting panel height animation cause layout jank."],"faq":[{"question":"What is Elastic Accordion?","answer":"Elastic Accordion is a React component for expandable FAQ or detail rows with a soft elastic open and close motion."},{"question":"When should I use Elastic Accordion?","answer":"Use it for FAQs, pricing objections, product questions, service explainers, onboarding notes, and compact support content where users need detail on demand."},{"question":"Is Elastic Accordion accessible?","answer":"It can be, provided the implementation uses real button triggers, keyboard support, visible focus states, correct expanded state, and properly associated answer panels."},{"question":"Should accordion answers be visible to search engines?","answer":"Yes. Important answer text should render as real HTML. Avoid storing meaningful FAQ content only inside decorative animation layers or client-only fragments."},{"question":"Can Elastic Accordion support multiple open items?","answer":"Yes, depending on the implementation. Some accordions allow one item open at a time, while others allow multiple panels to remain expanded."},{"question":"Is Elastic Accordion good for long documentation?","answer":"No. Use accordions for compact answers. Long documentation usually needs headings, anchors, navigation, search, or a dedicated page."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/elastic-accordion","demoUrl":"https://vault.hyperiux.com/demo/elastic-accordion","related":[{"slug":"animated-faq","title":"Animated FAQ","docsUrl":"https://vault.hyperiux.com/effects/components/animated-faq"},{"slug":"animated-tabs","title":"Animated Tabs","docsUrl":"https://vault.hyperiux.com/effects/components/animated-tabs"},{"slug":"gooey-counter","title":"Gooey Counter","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter"},{"slug":"information-drawer","title":"Information Drawer","docsUrl":"https://vault.hyperiux.com/effects/components/information-drawer"}]},{"slug":"globe","title":"Globe","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"An interactive map-and-globe component for SaaS, fintech, logistics, travel, infrastructure, AI, cybersecurity, and global product pages where location data should feel spatial, connected, and alive.","description":"Globe for React presents locations, routes, and global presence through an interactive map and globe interface for SaaS, fintech, logistics, and brand pages.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add globe","usage":"import Globe from \"@/components/effects/globe\";\n\nexport default function page() {\n  return (\n    <>\n        <Globe />\n    </>\n  );\n}","props":[{"name":"autoConnect","type":"boolean","default":false,"description":"Periodically animates a route between two random locations."},{"name":"autoRotate","type":"boolean","default":true,"description":"Continuously rotates the globe when it is idle."},{"name":"rotationSpeed","type":"number","default":4,"description":"Automatic globe rotation speed in degrees per second."},{"name":"routeFrequency","type":"number","default":3.5,"description":"Delay in seconds between automatic route animations."},{"name":"routeDuration","type":"number","default":1.4,"description":"Duration of each animated route in seconds."},{"name":"connections","type":"number","default":3,"description":"Number of nearby routes emitted after selecting a location."},{"name":"dotDensity","type":"number","default":11000,"description":"Number of sphere samples used to build the dotted land field."},{"name":"dotSize","type":"number","default":2.3,"description":"Rendered diameter of each land dot in pixels."},{"name":"markerSize","type":"number","default":5,"description":"Rendered diameter of each location marker in pixels."},{"name":"routeColor","type":"color","default":"#fffaf2","description":"Color of animated connection routes."},{"name":"mapColor","type":"color","default":"#ffffff","description":"Color of the dotted land field."},{"name":"markerColor","type":"color","default":"#fffaf2","description":"Color of location markers and the globe outline."},{"name":"showLabels","type":"boolean","default":true,"description":"Shows location labels around the globe."},{"name":"enableDrag","type":"boolean","default":true,"description":"Allows pointer dragging to rotate the globe."},{"name":"morphDuration","type":"number","default":0.6,"description":"Duration of the globe-to-map projection transition in seconds."}],"overview":["Globe gives global information a stronger visual system than a plain list of cities.","Locations can appear as labelled points across a world map or dimensional globe. Selected regions, city markers, connection lines, route paths, and view controls help visitors understand where a product operates, where teams are located, where infrastructure runs, or how global activity moves across the system.","Use Globe when geography is part of the story. It works for companies showing market coverage, data centers, customer regions, logistics routes, travel networks, expansion plans, founder presence, community distribution, event locations, or global product adoption.","The page job is orientation. The visitor should understand the global footprint quickly, then inspect specific locations without losing context. The globe should make the company feel connected, not turn the page into a dark planet simulator with marketing labels orbiting in confusion."],"exampleUseCase":["A fintech infrastructure company can use Globe to show supported markets, partner regions, and transaction corridors. Visitors can see where the product operates, which regions are active, and how the network connects without reading a long geography paragraph.","The outcome is credibility through orientation. The page communicates scale, reach, and movement in one visual system.","A SaaS company can use the same component to show customer distribution, team locations, data center coverage, or launch regions. The globe gives abstract growth a concrete surface, which helps the visitor understand scope faster."],"bestFor":["Global SaaS, fintech, infrastructure, logistics, travel, and cybersecurity products.","Office, team, customer, or partner location sections.","Route maps, network diagrams, data-flow visuals, and regional coverage pages.","Launch pages showing market expansion or international availability.","Investor, enterprise, or trust pages where operational reach matters.","Community and event pages where geographic spread is part of the proof."],"notFor":["Not for pages where geography is not meaningful.","Not for fake global presence. If the business only operates in one region, use a local map, market section, or customer story instead of pretending the world needs to rotate.","Not for dense operational dashboards, legal coverage lists, compliance matrices, or anything users need to scan with precision. Use tables when exact regional rules matter."],"performance":["Keep location count controlled, optimise route rendering, and avoid excessive label animation. If the component uses Canvas or WebGL, cap device pixel ratio, clean up animation loops, and pause motion when the component is outside the viewport.","Do not animate every marker, label, line, and globe rotation at full intensity at the same time. Global reach should feel impressive without making the browser feel like it has been asked to run air traffic control."],"accessibility":["Provide a readable text alternative for meaningful location data. A visual globe should not be the only way to access supported cities, regions, offices, or routes.","Use accessible controls for view toggles, selected locations, and route interactions. Preserve keyboard access where the component is interactive. On mobile, simplify the layout, reduce label density, shorten animations, and consider a flat map or stacked location list when the globe becomes too cramped.","For reduced motion, pause continuous rotation, remove route drawing, disable camera travel, and show a stable map or static globe state with readable location information."],"commonMistakes":["Showing too many labels at once.","Using route lines with no real meaning.","Making the globe decorative while hiding important location information.","Forgetting a mobile-friendly fallback.","Running continuous animation when the section is offscreen.","Using vague labels like “Global” without specific locations.","Making map controls look polished but unclear.","Treating geography as proof when the data does not support it."],"faq":[{"question":"What is Globe?","answer":"Globe is a React component for presenting locations, routes, global coverage, or regional presence through a map, 3D globe, or switchable geographic interface."},{"question":"When should I use Globe?","answer":"Use it when geography matters to the page: supported markets, customer regions, data centers, office locations, logistics routes, event cities, partner networks, or global community distribution."},{"question":"Is Globe only decorative?","answer":"It should not be. Globe works best when the locations and routes communicate real product, market, infrastructure, or brand information."},{"question":"Can Globe support a flat map and a 3D globe?","answer":"Yes, depending on the implementation. A flat map is often clearer for scanning, while a globe adds spatial atmosphere and global presence."},{"question":"What should reduced motion do?","answer":"Reduced motion should stop continuous rotation, route drawing, camera movement, and animated marker travel. Show a static map, stable globe, or readable location list."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/globe","demoUrl":"https://vault.hyperiux.com/demo/globe","related":[{"slug":"timeline","title":"Timeline","docsUrl":"https://vault.hyperiux.com/effects/components/timeline"},{"slug":"milky-way","title":"Milky Way","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/milky-way"}]},{"slug":"gooey-counter","title":"Gooey Counter","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"free","summary":"A liquid-style metric counter that gives proof numbers expressive motion while keeping final values readable.","description":"Gooey Counter for React gives metric sections a liquid number motion for proof points that can carry brand texture. Reduced-motion and touch fallbacks included.","tags":["Canvas"],"dependencies":[],"install":"npx hyperiux add gooey-counter","usage":"import GooeyCounter from '@/components/effects/gooey-counter'\n\nconst page = () => {\n return (\n    <>\n <GooeyCounter/>\n    </>\n )\n}\n\nexport default page","props":[{"name":"maxValue","type":"number","default":100,"description":"Upper bound of the looping 0..maxValue count sequence."},{"name":"gridSize","type":"number","default":22,"description":"Number of grid columns used by the morphing counter."},{"name":"duration","type":"number","default":1,"description":"Pace multiplier for the count/morph animation (1 = default speed)."},{"name":"roundedness","type":"number","default":0,"description":"Corner rounding for each gooey grid cell."},{"name":"blobColor","type":"color","default":"#111111","description":"Color of the gooey animated blocks."},{"name":"backgroundColor","type":"color","default":"#d1d1d1","description":"Background color behind the counter."}],"overview":["Gooey Counter adds motion to a component that already has a job: numbers move with a liquid feel.","Use Gooey Counter when a small metric row needs a liquid, expressive number treatment. The motion should make proof feel branded while keeping the final value easy to read.","The production risk is unreadable proof. The number has to settle quickly, remain available as text, and avoid looping once the metric has been understood."],"exampleUseCase":["A launch page can use Gooey Counter for one or two headline metrics when the brand can carry a liquid, expressive number treatment. The counter adds texture to proof without making the figure hard to read."],"bestFor":["Metric sections where a small number of proof points can carry an expressive number treatment.","Launch pages where the motion adds brand texture without making the figure hard to read.","Metric bands where brand motion can make proof feel owned without reducing legibility."],"notFor":["Not for financial, compliance, analytics, or dashboard numbers where exact reading speed matters more than expressive motion."],"performance":["Limit the number of animated counters, avoid expensive filters over large text, and stop the animation after the value has resolved."],"accessibility":["Expose the final number once in readable text. On mobile and reduced motion, show the settled metric without gooey transitions."],"commonMistakes":["Animating every statistic on the page.","Making the number hard to read while it matters.","Looping proof metrics after users already understood them."],"faq":[{"question":"When should I use Gooey Counter?","answer":"Use it when a metrics section needs numbers moving with a liquid feel as brand texture."},{"question":"How should Gooey Counter expose the final number?","answer":"Render the final value as readable text and let the motion resolve quickly. Screen readers should get the number, not the animation sequence."},{"question":"How should Gooey Counter simplify on mobile?","answer":"Reduce the liquid deformation, shorten the count, and avoid looping metric motion. The number should stay legible at small sizes."},{"question":"Can Gooey Counter improve proof sections?","answer":"Yes, when one or two headline numbers need brand texture. It hurts credibility when important metrics become hard to read or keep animating after they have been understood."},{"question":"What should reduced motion do for Gooey Counter?","answer":"Show the final metric immediately, or use a very short opacity change without count-up, gooey distortion, or loops."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter","demoUrl":"https://vault.hyperiux.com/demo/gooey-counter","related":[{"slug":"hover-slider","title":"Hover Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hover-slider"},{"slug":"animated-faq","title":"Animated FAQ","docsUrl":"https://vault.hyperiux.com/effects/components/animated-faq"},{"slug":"depth-card-stack","title":"Depth Card Stack","docsUrl":"https://vault.hyperiux.com/effects/carousels/depth-card-stack"}]},{"slug":"gsap-flip-card","title":"GSAP Flip Card","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"free","summary":"A thumbnail-to-preview card component for portfolios, product galleries, case-study visuals, travel stories, editorial pages, and image-led interfaces where the selected card should feel physically connected to its new position.","description":"GSAP Flip Card for React uses FLIP motion to move image cards between thumbnail and large preview states for galleries, portfolios, and visual showcases.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add gsap-flip-card","usage":"import GsapFlipCard from '@/components/effects/gsap-flip-card'\n\nconst page = () => {\n  return (\n    <>\n    <GsapFlipCard/>\n    </>\n  )\n}","props":[{"name":"duration","type":"number","default":0.7,"description":"Card transition duration in seconds."},{"name":"rounded","type":"number","default":20,"description":"Card corner radius in pixels."},{"name":"stackOffsetX","type":"number","default":3,"description":"Horizontal offset per card in the collapsed desktop stack."},{"name":"stackOffsetY","type":"number","default":9,"description":"Vertical offset per card in the collapsed desktop stack."},{"name":"stackRotation","type":"number","default":0,"description":"Rotation per card in the collapsed desktop stack, in degrees."},{"name":"thumbGap","type":"number","default":12,"description":"Spacing between desktop rail thumbnails in pixels."},{"name":"backgroundColor","type":"color","default":"#e9e9e7","description":"Section background color."},{"name":"textColor","type":"color","default":"#111111","description":"Primary text color."},{"name":"mutedColor","type":"color","default":"#8a8a86","description":"Secondary text color."},{"name":"ease","type":"string","default":"power3.inOut","description":"GSAP transition easing."},{"name":"showCounter","type":"boolean","default":true,"description":"Shows the image counter."},{"name":"thumbWidth","type":"number","default":108,"description":"Code-only configuration for thumbWidth."},{"name":"thumbHeight","type":"number","default":120,"description":"Code-only configuration for thumbHeight."},{"name":"heroWidth","type":"number","default":530,"description":"Code-only configuration for heroWidth."},{"name":"heroHeight","type":"number","default":670,"description":"Code-only configuration for heroHeight."},{"name":"captionLines","type":"number","default":2,"description":"Code-only configuration for captionLines."},{"name":"captionFadeDuration","type":"number","default":0.25,"description":"Fade-out duration in seconds for all text sections."},{"name":"captionRevealDuration","type":"number","default":0.55,"description":"Line-reveal duration in seconds for all text sections."},{"name":"captionLineStagger","type":"number","default":0.07,"description":"Stagger between revealed lines across all text sections in seconds."},{"name":"title","type":"string","default":"GSAP Flip Card","description":"Fallback title for items without a title."},{"name":"meta","type":"string","default":"Hyperiux Vault / GSAP Flip / React","description":"Fallback metadata for items without metadata."},{"name":"description","type":"string","default":"A pile of cards that fans into a hero and a rail. Tap any frame and the two trade places, same nodes, measured and tweened, never re-mounted.","description":"Fallback description for items without a description."},{"name":"className","type":"string","default":"","description":"Code-only className."},{"name":"items","type":"GsapFlipCardItem[]","default":null,"description":"Gallery images with optional IDs, alt text, titles, metadata, descriptions and captions; defaults to the built-in gallery."},{"name":"onClose","type":"() => void","default":null,"description":"Called when the gallery closes."}],"overview":["GSAP Flip Card turns image selection into a spatial handoff.","A user selects a thumbnail, and the chosen card animates into a larger preview area without feeling like a disconnected replacement. The movement preserves visual continuity: the selected image feels like the same object travelling from one place in the layout to another.","Use GSAP Flip Card when a gallery needs more craft than a static preview and more continuity than a normal image swap. It works for portfolios, product images, visual archives, travel galleries, editorial image sets, creative case studies, and landing-page sections where selection should feel tactile.","The page job is continuity. The visitor should understand exactly which item they selected, where it moved, and why the preview changed. The animation should make the layout feel intelligent, not make the card perform gymnastics before showing a mountain photo."],"exampleUseCase":["A travel gallery can use GSAP Flip Card to let visitors move selected images from a thumbnail rail into a large preview. The selected image does not simply appear. It travels into focus, making the relationship between thumbnail and preview easy to understand.","The outcome is continuity. The visitor keeps orientation while browsing the set.","A portfolio page can use the same component for project previews. Each thumbnail opens into a larger case-study image, supported by a short caption and CTA. The movement makes the selected project feel important without opening a new page too early."],"bestFor":["Portfolio image galleries where selected work needs a larger preview.","Product galleries where thumbnails should expand into focus.","Travel, photography, fashion, and editorial image sets.","Case-study sections where visual selection should feel connected.","Visual archives where browsing benefits from thumbnail-to-preview continuity.","Landing pages where one selected image should carry the section."],"notFor":["Not for dense ecommerce grids, pricing sections, documentation, long text cards, legal content, or interfaces where users need instant comparison across many items.","Not for unstable layouts where images, captions, or containers constantly change size. FLIP rewards discipline. It punishes chaos with visible weirdness.","Not for content where a simple grid would be faster, clearer, and more useful."],"performance":["Optimise image sizes, keep card count controlled, and avoid triggering layout measurement across a huge DOM subtree. FLIP works by measuring layout states, so keep the animated scope tight.","Avoid running expensive animations on every hover. Use click or deliberate selection where possible. Clean up GSAP timelines and contexts on unmount.","On lower-power devices, reduce shadow intensity, animation duration, and simultaneous card movement."],"accessibility":["Use semantic buttons for thumbnails, meaningful image alt text, visible focus states, and clear selected state. When a card becomes the preview, preserve a logical reading order and avoid moving focus unexpectedly unless the interaction requires it.","On mobile, simplify the layout into a stacked preview with a horizontal thumbnail rail or swipe-friendly sequence. For reduced motion, switch selected images instantly or with a minimal fade, without FLIP travel, scaling, or layout-flight animation."],"commonMistakes":["Forgetting to register the GSAP Flip plugin.","Measuring layout after the state has already changed incorrectly.","Using inconsistent image ratios that make the movement feel broken.","Animating too many cards at once.","Making thumbnails clickable without keyboard support.","Hiding captions inside images.","Using FLIP when a normal image swap would be clearer."],"faq":[{"question":"What is GSAP Flip Card?","answer":"GSAP Flip Card is a React component that uses GSAP’s Flip plugin to animate image cards between thumbnail and large preview states."},{"question":"What does FLIP mean?","answer":"FLIP stands for First, Last, Invert, Play. It is an animation technique where the layout’s before-and-after positions are measured, then animated so the transition feels physically continuous."},{"question":"How do I keep GSAP Flip Card accessible?","answer":"Use real buttons for thumbnails, provide meaningful alt text, maintain visible focus states, expose selected state clearly, and preserve a logical reading order."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove FLIP travel, scaling, and layout-flight animation. Use an instant selection change or a minimal fade."},{"question":"Can Hyperiux adapt GSAP Flip Card for a real brand system?","answer":"Yes. A custom version should define thumbnail layout, preview rules, FLIP timing, image ratios, caption strategy, keyboard behaviour, mobile fallback, accessibility states, reduced-motion handling, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/gsap-flip-card","demoUrl":"https://vault.hyperiux.com/demo/gsap-flip-card","related":[{"slug":"information-drawer","title":"Information Drawer","docsUrl":"https://vault.hyperiux.com/effects/components/information-drawer"},{"slug":"hover-stack","title":"Hover Stack","docsUrl":"https://vault.hyperiux.com/effects/components/hover-stack"},{"slug":"depth-card-stack","title":"Depth Card Stack","docsUrl":"https://vault.hyperiux.com/effects/carousels/depth-card-stack"},{"slug":"interactive-list-preview","title":"Interactive List Preview","docsUrl":"https://vault.hyperiux.com/effects/components/interactive-list-preview"}]},{"slug":"hover-stack","title":"Hover Stack","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"free","summary":"A card interaction component where hover or focus adds shallow depth to service, proof, and feature card groups.","description":"Hover Stack for React layers cards on pointer focus for service groups and proof sections where depth aids browsing. Built to stay readable with motion off.","tags":["Vanilla JS"],"dependencies":[],"install":"npx hyperiux add hover-stack","usage":"import HoverStack from '@/components/effects/hover-stack'\n\nconst page = () => {\n  return (\n    <>\n    <HoverStack/>\n    </>\n  )\n}","props":[{"name":"cardWidth","type":"number","default":280,"description":"Width of each card in pixels."},{"name":"cardHeight","type":"number","default":360,"description":"Height of each card in pixels."},{"name":"overlap","type":"number","default":96,"description":"Horizontal overlap between resting cards in pixels."},{"name":"pushDistance","type":"number","default":235,"description":"Distance neighboring cards are pushed aside on hover."},{"name":"hoverLift","type":"number","default":30,"description":"Vertical lift applied to the hovered card in pixels."},{"name":"spread","type":"number","default":24,"description":"Distance cards spread while hovered."},{"name":"rotation","type":"number","default":7,"description":"Rotation amount applied to stacked items."},{"name":"duration","type":"number","default":0.35,"description":"Hover animation duration."},{"name":"borderColor","type":"color","default":"transparent","description":"Border color shown around the active card. Transparent by default."}],"overview":["Hover Stack adds motion to a component that already has a job: cards respond to hover with depth.","Use Hover Stack when a short group of cards should gain shallow depth on exploration. The hover state should add craft while the default card still contains the full heading, copy, and link.","The main risk is overlap. Hover motion must not cover neighbouring links, hide card copy, or make the section unusable on coarse pointers."],"exampleUseCase":["An agency service page can use Hover Stack to give service cards a shallow sense of depth on exploration. The hover state adds craft while each card still reads as a normal link or content block."],"bestFor":["Service and proof-card groups where depth on hover makes exploration feel crafted.","Desktop sections that still work as a normal stack of cards on touch devices.","Card groups where hover depth adds craft while the non-hover state remains complete."],"notFor":["Not for mobile-first sections, dense comparison cards, or content where hover depth hides information users need to compare."],"performance":["Animate transform and shadow with restraint, keep layers small, and avoid large blur or filter effects on the whole card group."],"accessibility":["Mirror hover states with focus states, keep links reachable in order, and flatten the stack into normal cards on coarse pointers."],"commonMistakes":["Letting hover depth cover neighbouring card links.","Forgetting focus-visible states.","Using hover to reveal required copy."],"faq":[{"question":"When should I use Hover Stack?","answer":"Use it when a card group needs items responding to hover with depth."},{"question":"How should Hover Stack handle focus and links?","answer":"Cards should remain real links or contain real links in DOM order. Focus-visible states must stay visible and cannot be covered by neighbouring cards."},{"question":"How should Hover Stack simplify on mobile?","answer":"Flatten the stack into normal cards with tap-safe spacing. Touch users should not need hover depth to understand the section."},{"question":"Can Hover Stack improve service-card browsing?","answer":"Yes, when depth makes a small card group feel more crafted. It becomes noise when the card copy, links, or focus states are harder to scan."},{"question":"What should reduced motion do for Hover Stack?","answer":"Remove hover depth, delayed transforms, and floating motion while keeping the card layout and focus states intact."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/hover-stack","demoUrl":"https://vault.hyperiux.com/demo/hover-stack","related":[{"slug":"depth-card-stack","title":"Depth Card Stack","docsUrl":"https://vault.hyperiux.com/effects/carousels/depth-card-stack"},{"slug":"hover-slider","title":"Hover Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hover-slider"},{"slug":"hyperiux-glitter","title":"Hyperiux Glitter","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hyperiux-glitter"},{"slug":"interactive-list-preview","title":"Interactive List Preview","docsUrl":"https://vault.hyperiux.com/effects/components/interactive-list-preview"},{"slug":"inertia-img","title":"Inertia Image","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/inertia-img"}]},{"slug":"infinite-grid-gallery","title":"Infinite Grid Gallery","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"Transform image browsing into an endless spatial grid for portfolios, campaigns, and visual archives that need more depth than a flat gallery.","description":"Infinite Grid Gallery for React turns image browsing into an endless WebGL grid for portfolios, campaigns, and visual archives with a clean fallback.","tags":["CSS"],"dependencies":[],"install":"npx hyperiux add infinite-grid-gallery","usage":"import InfiniteGridGallery from \"@/components/effects/infinite-grid-gallery\";\n\nconst page = () => {\n  return (\n    <>\n      <InfiniteGridGallery />\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"images","type":"array","default":[],"description":"Images rendered in the infinite grid."},{"name":"columns","type":"number","default":4,"description":"Desktop grid column count."},{"name":"gap","type":"number","default":44,"description":"Spacing between grid images."},{"name":"speed","type":"number","default":1,"description":"Grid movement speed."},{"name":"imageScale","type":"number","default":1,"description":"Scale applied to gallery images."}],"overview":["Infinite Grid Gallery turns a flat collection of visuals into a field you can move through. The gallery stops feeling like a page section and starts feeling like space.","Use Infinite Grid Gallery when a portfolio, campaign archive, or image-led product story needs more presence than a normal grid. It works best when the visitor is supposed to browse by movement, not compare every item in one glance. The page job is exploration: images should keep arriving without making the user feel trapped in a canvas.","The production risk is orientation. Infinite galleries can become impressive and useless very quickly if the user loses their position, cannot open a real item, or cannot access the same content without WebGL. The fallback should be a clean, crawlable gallery grid in DOM order."],"exampleUseCase":["A creative studio can use Infinite Grid Gallery on a selected-work page where the goal is not fast comparison, but atmosphere and curiosity. The visitor moves through a field of project stills, selects a focused image, and enters the case study. The outcome is exploration: the work feels abundant without dumping every thumbnail into a static wall."],"bestFor":["Portfolio and campaign galleries where visual abundance is the point.","Studio archives that need movement, depth, and a more memorable browsing surface.","Image-led pages where each item can still resolve into a real link, caption, or case study."],"notFor":["Not for ecommerce catalogues, pricing pages, comparison grids, documentation, or routes where users need fast scanning.","Not for image sets where every item must be visible at once before the visitor can make a decision."],"performance":["Cap device pixel ratio, compress textures, lazy-load image assets carefully, pause rendering when offscreen, and dispose of geometries, materials, and textures on route change. Avoid turning one gallery into a GPU donation box."],"accessibility":["The gallery items need text equivalents, real links, and a fallback list or grid. On mobile, reduce camera movement, limit texture count, or switch to a static gallery. Reduced-motion users should get the same images without infinite movement."],"commonMistakes":["Rendering the only gallery content inside WebGL.","Loading too many high-resolution textures before the section is used.","Creating an endless field with no focused item, progress cue, or escape path."],"faq":[{"question":"When should I use Infinite Grid Gallery?","answer":"Use it when an image-led portfolio, campaign archive, or visual showcase needs spatial browsing instead of a standard grid."},{"question":"Does Infinite Grid Gallery need a fallback?","answer":"Yes. The same items should render as a normal HTML gallery or list when WebGL is unavailable, reduced motion is enabled, or the device cannot support the scene smoothly."},{"question":"How many images should it load at once?","answer":"Only the visible and near-visible set should be active. The cost is driven by texture size, draw calls, and how much of the scene stays alive, not just the number of items in your database."},{"question":"How should users open a project from the gallery?","answer":"Every meaningful item should map to a real link, modal, or detail action. The WebGL surface can make the browsing feel dimensional, but the click path still needs standard navigation behavior."},{"question":"What should happen on mobile?","answer":"Use a simplified grid, swipeable gallery, or reduced camera movement. A phone should not be forced through a desktop-scale infinite field."},{"question":"Can Hyperiux adapt Infinite Grid Gallery for a real brand system?","answer":"Yes. A custom version should define image structure, texture treatment, camera rules, fallback layout, performance budget, source handoff, and implementation notes for the specific portfolio or launch context."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/infinite-grid-gallery","demoUrl":"https://vault.hyperiux.com/demo/infinite-grid-gallery","related":[{"slug":"book-flip","title":"Book Flip","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/book-flip"},{"slug":"colliding-models","title":"Colliding Models","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/colliding-models"},{"slug":"donut-particles","title":"Donut Particles","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/donut-particles"},{"slug":"fractal-glass","title":"Fractal Glass","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass"},{"slug":"grid-tunnel","title":"Grid Tunnel","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/grid-tunnel"}]},{"slug":"information-drawer","title":"Information Drawer","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"free","summary":"A card-to-drawer component for team profiles, portfolio entries, product details, service explainers, talent directories, editorial cards, and image-led collections where browsing should stay fast but details still need space.","description":"Information Drawer for React opens detailed profile or item content from a visual grid without sending users to a new page.","tags":["GSAP","Lenis"],"dependencies":["gsap","lenis"],"install":"npx hyperiux add information-drawer","usage":"import InformationDrawer from \"@/components/effects/information-drawer\";\n\nexport default function page() {\n  return (\n    <>\n        <InformationDrawer />\n    </>\n  );\n}","props":[{"name":"duration","type":"number","default":0.65,"description":"Drawer panel and overlay slide duration in seconds."},{"name":"contentDuration","type":"number","default":0.25,"description":"Duration in seconds of the content fade, staged after the panel opens and before it closes."},{"name":"contentDelay","type":"number","default":0.4,"description":"Delay in seconds before the staged content fades in, measured from when the drawer starts opening."},{"name":"ease","type":"string","default":"power2.inOut","description":"GSAP easing used by the drawer panel and overlay."},{"name":"delay","type":"number","default":0,"description":"Delay before the drawer animation starts, in seconds."},{"name":"backgroundColor","type":"color","default":"#ffffff","description":"Background color of the drawer panel."},{"name":"textColor","type":"color","default":"#111111","description":"Text and icon color inside the drawer panel."},{"name":"sidebarWidth","type":"number | string","default":60,"description":"Desktop drawer width. Numbers are treated as viewport-width percentages."},{"name":"overlayOpacity","type":"number","default":0.2,"description":"Backdrop opacity while the drawer is open."}],"overview":["Information Drawer turns a visual grid into an expandable detail system.","Each card can open a side panel containing a larger image, title, role, description, link, or supporting information. The grid remains visible in the background, so the user keeps their place while exploring more detail. The drawer gives the selected item room to breathe without forcing a route change for every click.","Use Information Drawer when a page needs both overview and depth. It works for team pages, agency profiles, portfolio indexes, service libraries, product-card grids, creator directories, feature collections, editorial archives, and marketplace-style browsing where users should be able to inspect an item quickly and return to the grid.","The page job is context retention. The visitor should know what they selected, read the details, close the drawer, and continue browsing without feeling like the interface took them somewhere else."],"exampleUseCase":["An agency can use Information Drawer on its team page. The grid shows portraits and names, while the drawer gives each person space for role, background, working style, and relevant links. Visitors can inspect team depth without loading a separate profile page for every person.","The outcome is speed with substance. The overview stays clean, but the page still has enough detail to build trust.","A SaaS company can use the same pattern for integration cards or feature modules. Each card stays compact, and the drawer explains what the integration does, when to use it, and where to go next."],"bestFor":["Team profile grids and leadership pages.","Portfolio, case-study, and project indexes where each card needs extra context.","Product modules, integrations, or feature libraries.","Service directories where cards need supporting explanation.","Creator, advisor, instructor, or talent directories.","Editorial or visual archives where detail should open without losing browsing context."],"notFor":["Not for critical forms, checkout flows, legal content, dense documentation, long articles, or content that deserves its own permanent URL.","Not for hiding essential information that should be visible on the card itself. The drawer should deepen the item, not rescue an underwritten grid.","Not for mobile layouts where the drawer becomes cramped unless a full-screen or bottom-sheet adaptation is provided."],"performance":["Keep drawer content lightweight, optimize images, and avoid rendering every detailed panel at full cost before it is opened. Animate transform and opacity rather than layout-heavy properties.","If the grid contains many cards, render only the selected drawer content or use a controlled detail panel. Do not ask the browser to carry fifty hidden profile biographies just in case someone feels curious."],"accessibility":["Treat the drawer like a proper interactive disclosure or dialog pattern depending on implementation. Use clear labels, close controls, Escape support, focus management, and focus return to the triggering card. Keep the reading order logical and make selected states understandable.","On mobile, use a full-screen drawer, bottom sheet, or stacked detail view rather than a narrow desktop side panel. For reduced motion, open the drawer instantly or with a minimal fade instead of long slide, blur, or background-shift animations."],"commonMistakes":["Opening details without returning focus to the selected card.","Using non-semantic divs for clickable cards.","Hiding important information inside the drawer.","Making the close button hard to find.","Letting the background scroll unpredictably while the drawer is open.","Using a desktop side drawer on mobile without adaptation.","Filling the drawer with too much copy."],"faq":[{"question":"What is Information Drawer?","answer":"Information Drawer is a React component that opens detailed content from a selected card while keeping the user in the same page context."},{"question":"When should I use Information Drawer?","answer":"Use it for team profiles, portfolio entries, product details, integration cards, service explainers, directories, and visual grids where users need quick access to deeper information."},{"question":"Is Information Drawer the same as a modal?","answer":"Not exactly. A modal usually interrupts the page. A drawer is often more contextual: it slides in beside or over the existing layout while preserving a sense of where the user came from."},{"question":"Should drawer content have its own page?","answer":"If the content is long, SEO-important, shareable, or part of a major conversion path, create a dedicated page. Use Information Drawer for compact detail expansion."},{"question":"How do I keep Information Drawer accessible?","answer":"Use semantic controls, clear labels, keyboard support, Escape close behavior, focus management, focus return, and logical reading order. The close button should be obvious and reachable."},{"question":"How should Information Drawer work on mobile?","answer":"Use a full-screen panel, bottom sheet, or stacked detail view. A narrow side drawer often becomes cramped on mobile screens."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove large slide, blur, or background-shift animations. Open the drawer instantly or with a simple fade."},{"question":"Can Hyperiux adapt Information Drawer for a real brand system?","answer":"Yes. A custom version should define card data, drawer layout, open and close behavior, focus management, mobile pattern, accessibility states, reduced-motion fallback, content rules, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/information-drawer","demoUrl":"https://vault.hyperiux.com/demo/information-drawer","related":[{"slug":"timeline","title":"Timeline","docsUrl":"https://vault.hyperiux.com/effects/components/timeline"},{"slug":"interactive-list-preview","title":"Interactive List Preview","docsUrl":"https://vault.hyperiux.com/effects/components/interactive-list-preview"},{"slug":"infinite-grid-gallery","title":"Infinite Grid Gallery","docsUrl":"https://vault.hyperiux.com/effects/components/infinite-grid-gallery"},{"slug":"gsap-flip-card","title":"GSAP Flip Card","docsUrl":"https://vault.hyperiux.com/effects/components/gsap-flip-card"}]},{"slug":"interactive-list-preview","title":"Interactive List Preview","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"free","summary":"A list-preview component that connects feature names, services, or proof items to visible contextual previews.","description":"Interactive List Preview for React links list items to visible previews for product depth, case studies, and guided exploration.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add interactive-list-preview","usage":"import InteractiveListPreview from '@/components/effects/interactive-list-preview'\n\nconst page = () => {\n  return (\n    <>\n    <InteractiveListPreview/>\n    </>\n  )\n}","props":[{"name":"imageSize","type":"number","default":1,"description":"Scale multiplier for the hover preview image."},{"name":"duration","type":"number","default":0.6,"description":"Preview image reveal and hide duration."},{"name":"smoothness","type":"number","default":0.35,"description":"Highlight and row text transition smoothing duration."},{"name":"lerp","type":"number","default":0.18,"description":"Pointer-follow smoothing amount; higher values track faster."}],"overview":["Interactive List Preview adds motion to a component that already has a job: list items reveal contextual previews.","Use Interactive List Preview when list items need quick visual context, such as feature screenshots, service examples, or proof snippets. The list remains the primary navigation; the preview adds confidence.","The production risk is hidden detail. Previews must be optional support, not the only place where key feature or product information appears."],"exampleUseCase":["A SaaS product page can use Interactive List Preview to pair feature names with screenshots, diagrams, or proof snippets. The preview helps comparison only when keyboard and touch users can open the same content."],"bestFor":["Feature lists that pair short labels with screenshots, diagrams, or proof snippets.","Product pages where preview content helps comparison without requiring pointer-only access.","Product feature lists where previews clarify choices without replacing the list."],"notFor":["Not for lists where every preview contains mandatory content that is inaccessible without pointer movement."],"performance":["Keep preview assets compressed and pre-sized, avoid re-rendering the full list on every hover, and pause media previews when the item is inactive."],"accessibility":["Use focusable controls or links for list items and expose selected or active state clearly. On mobile, use tap-to-preview or stacked detail panels."],"commonMistakes":["Using mouseenter as the only state change.","Making the preview cover the active list item.","Loading heavy previews for items the user never opens."],"faq":[{"question":"When should I use Interactive List Preview?","answer":"Use it when a list-driven page needs items revealing contextual previews."},{"question":"How should Interactive List Preview expose active state?","answer":"The active item needs a visible selected state, keyboard focus state, and a preview relationship that remains understandable when the preview image is not loaded."},{"question":"How should Interactive List Preview work on mobile?","answer":"Use tap-to-preview, stacked detail panels, or inline previews under each item. Avoid hover-only layouts and keep previews from covering the active item."},{"question":"Can Interactive List Preview improve feature comparison?","answer":"Yes, when feature names need quick supporting context. It hurts the decision when previews are heavy, pointer-only, or hide the list being compared."},{"question":"What should reduced motion do for Interactive List Preview?","answer":"Switch previews instantly or with a short fade, and stop image travel, parallax, and animated panel movement."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/interactive-list-preview","demoUrl":"https://vault.hyperiux.com/demo/interactive-list-preview","related":[{"slug":"hover-slider","title":"Hover Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hover-slider"},{"slug":"pixelated-image-effect","title":"Pixelated Image Effect","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/pixelated-image-effect"},{"slug":"hover-stack","title":"Hover Stack","docsUrl":"https://vault.hyperiux.com/effects/components/hover-stack"},{"slug":"depth-card-stack","title":"Depth Card Stack","docsUrl":"https://vault.hyperiux.com/effects/carousels/depth-card-stack"},{"slug":"animated-faq","title":"Animated FAQ","docsUrl":"https://vault.hyperiux.com/effects/components/animated-faq"}]},{"slug":"liquid-shatter","title":"Liquid Shatter","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"An interactive WebGL effect that combines fluid light trails, curved geometry, and particle fragmentation into a responsive visual experience.","description":"Liquid Shatter is an interactive WebGL effect for React and Next.js that transforms flowing liquid visuals into scattered particles through user interaction.","tags":["GSAP","Three.js"],"dependencies":["gsap","three"],"install":"npx hyperiux add liquid-shatter","usage":"import LiquidShatter from '@/components/effects/liquid-shatter'\n\nconst page = () => {\n  return (\n   <>\n   <LiquidShatter/>\n   </>\n  )\n}\n\nexport default page","props":[{"name":"ribbonCount","type":"number","default":7,"description":"Number of nested ribbon rings, from 3 to 9."},{"name":"scale","type":"number","default":1,"description":"Multiplier on the size of the ribbons."},{"name":"ribbonColor","type":"string","default":"#24120a","description":"Base colour of the lacquered ribbons."},{"name":"glowColor","type":"string","default":"#ff6b00","description":"Colour of the hover glow, light streaks, shards and rim light."},{"name":"backgroundColor","type":"string","default":"#111111","description":"Background behind the canvas."},{"name":"metalness","type":"number","default":0.4,"description":"How metallic the ribbon surface is, from 0 to 1."},{"name":"roughness","type":"number","default":0.26,"description":"How rough the ribbon surface is, from 0 to 1."},{"name":"idleMotion","type":"number","default":1,"description":"Strength of the slow idle undulation."},{"name":"streakFrequency","type":"number","default":1,"description":"How often a light runs along a ribbon. 0 turns idle and scroll streaks off."},{"name":"hoverStrength","type":"number","default":1,"description":"Strength of the liquid swell that trails the pointer."},{"name":"tiltStrength","type":"number","default":1,"description":"How far the ribbons tilt toward the pointer."},{"name":"introAnimation","type":"boolean","default":true,"description":"Rings ripple out from the centre on mount. Use Replay to see it again."},{"name":"sound","type":"boolean","default":true,"description":"Plays sounds on tap, hold, shatter and reform. Audio starts on the first press, as browsers require."},{"name":"holdToShatter","type":"boolean","default":true,"description":"Press and hold to shatter the ribbons into stirrable shards (mouse and trackpad only)."},{"name":"holdDuration","type":"number","default":1.9,"description":"Seconds of holding needed to charge a shatter."},{"name":"reformDelay","type":"number","default":3,"description":"Seconds the shards float, stirrable, before they reform into ribbons."},{"name":"particleCount","type":"number","default":11000,"description":"Number of shards the ribbons break into (about half on phones and low-power devices)."},{"name":"holdHint","type":"boolean","default":true,"description":"Shows a small \"Press and hold\" label with a charge bar at the bottom. Mouse and trackpad only."},{"name":"onShatter","type":"() => void","default":null,"description":"Called when a full hold shatters the ribbons."},{"name":"className","type":"string","default":"","description":"Extra classes for the root element. It fills the viewport height by default."},{"name":"children","type":"React.ReactNode","default":null,"description":"Content layered over the canvas. The layer ignores the pointer, so give interactive children pointer-events-auto."}],"overview":["Liquid Shatter transforms an abstract visual composition into a responsive field of movement and particles.","Fluid-like light trails move through a dark environment while curved bands establish depth and structure. As the user interacts with the scene by holding the cursor, the composition shifts, stretches, and eventually breaks apart into scattered particles. The transition from continuous liquid motion to fragmented detail gives the effect its defining character.","Unlike conventional animations that play through a predetermined visual sequence, Liquid Shatter gives the visitor a role in how the experience unfolds. The interaction creates a sense of anticipation before releasing the composition into a more chaotic particle state.","Use Liquid Shatter when visual experimentation is part of the brand experience. It suits creative studios, digital art portfolios, entertainment campaigns, technology launches, and experimental landing pages where the interaction itself deserves attention.","The effect is particularly suited to moments where the user is invited to explore rather than immediately complete a task. Its value comes from the contrast between flowing movement and sudden fragmentation, creating a visual response that feels more physical than a standard hover animation.","The design challenge is restraint. Liquid Shatter can command an entire viewport, but that does not mean it should command the entire website."],"exampleUseCase":["A creative technology studio could use Liquid Shatter as the central interactive moment on a campaign landing page.","Visitors arrive at a dark composition of flowing illuminated forms. A short interaction prompt invites them to engage with the scene. Holding the interaction changes the composition, allowing the fluid structures to deform and fragment into an atmospheric particle field.","Once the interaction completes, the visitor can move towards the next section of the experience, where the studio introduces its work, capabilities, or featured project.","The purpose is to establish creative identity through interaction. Instead of telling visitors that the studio experiments with technology and motion, the page gives them something concrete to experience.","That makes Liquid Shatter a strong candidate for high-craft brand moments. It is less suitable around ordinary product copy, where the rendering cost and visual attention may be difficult to justify."],"bestFor":["Use Liquid Shatter when technical experimentation and motion design are part of the studio's positioning.","Give a launch campaign a responsive visual interaction that communicates discovery, transformation, or creative exploration.","Present Liquid Shatter as an interactive artwork, allowing visitors to engage directly with the visual composition.","Use liquid motion and particle fragmentation to establish atmosphere in music, gaming, film, or event-related experiences.","Introduce the effect as a focused standalone interaction between more conventional content sections."],"notFor":["Liquid Shatter is not a suitable replacement for ordinary navigation, content transitions, product cards, or functional loading indicators.","Avoid using it in checkout flows, dense dashboards, documentation, pricing pages, and interfaces where visitors need to complete tasks quickly. The sustained interaction and visually complex rendering would introduce unnecessary friction.","It is also a poor fit for pages already carrying several demanding WebGL scenes, full-screen video backgrounds, or continuous particle systems without a defined performance budget.","The central question is whether users gain anything from controlling the visual transformation. If the answer is simply that it looks impressive, a lighter animation may be the better production decision."],"performance":["Liquid Shatter deserves particular attention during production because luminous effects, animated geometry, and particle fragmentation can create substantial rendering work.","Set practical limits around particle count, drawing resolution, animation updates, and any expensive post-processing. Verify the actual rendering implementation before optimising specific shader stages or geometry operations.","The scene should respond consistently throughout the interaction, especially when fluid motion changes into particle dispersion. A visually dramatic shatter followed by dropped frames undermines the effect's strongest moment.","Avoid running expensive animation indefinitely when the component is outside the viewport. Test the interaction on integrated graphics, lower-power laptops, and mobile hardware rather than judging performance only on a development workstation.","Where appropriate, reduce rendering resolution or visual complexity on constrained devices. Measure actual frame pacing and memory behaviour before choosing those limits."],"accessibility":["Liquid Shatter is predominantly visual, so its interaction must not become the only way to access meaningful information or navigation.","If a press-and-hold action triggers the effect, provide an equivalent keyboard-accessible control. Users should not need precise pointer movement or a sustained mouse press to complete an essential page action.","For touch devices, review whether the hold gesture conflicts with scrolling, long-press behaviour, or other native interactions. A simplified tap-based activation or reduced visual scene may provide a more predictable experience.","Respect prefers-reduced-motion by avoiding continuous fluid movement and particle explosions when reduced motion is requested. Provide a stable visual state or a simpler transition that preserves the surrounding page content.","Decorative WebGL output should not be announced as meaningful text by assistive technology. Interaction prompts and controls should remain accessible through ordinary HTML elements."],"commonMistakes":["Treating fragmentation as random noise","Overloading the scene with particles","Making interaction instructions unclear","Ignoring interrupted interactions","Running expensive rendering offscreen"],"faq":[{"question":"What is Liquid Shatter?","answer":"Liquid Shatter is an interactive WebGL effect for React and Next.js that combines liquid-like motion, curved visual forms, and particle fragmentation. It creates a responsive composition that can transition from flowing structures into a dispersed particle field."},{"question":"How does Liquid Shatter work?","answer":"The effect presents flowing visual forms that respond to user interaction. A sustained interaction can intensify the deformation and trigger a fragmentation sequence, breaking the composition into smaller particles."},{"question":"Is Liquid Shatter a page transition effect?","answer":"No. Liquid Shatter is primarily an interactive visual component. It can be incorporated into a larger transition experience, but its defining behaviour is the transformation of a fluid composition into scattered particles."},{"question":"Does Liquid Shatter require WebGL?","answer":"The effect uses WebGL-style rendering for its visual composition. The exact rendering packages, shader architecture, and integration requirements should be checked against the shipped source code."},{"question":"Can Liquid Shatter be used in Next.js?","answer":"Liquid Shatter is intended for React and Next.js projects. Its interactive rendering should run client-side, with appropriate handling for initialisation, browser support, and resource cleanup."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/liquid-shatter","demoUrl":"https://vault.hyperiux.com/demo/liquid-shatter","related":[{"slug":"donut-particles","title":"Donut Particles","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/donut-particles"},{"slug":"hyperiux-glitter","title":"Hyperiux Glitter","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hyperiux-glitter"},{"slug":"milky-way","title":"Milky Way","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/milky-way"},{"slug":"dot-transition","title":"Dot Transition","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dot-transition"}]},{"slug":"shear-wipe","title":"Shear Wipe","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"A slanted wipe transition that cuts between routes, sections, or content states with a sharp angled motion.","description":"Shear Wipe for React creates a slanted wipe between page or section states for brand sites, showcases, and editorial transitions.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add shear-wipe","usage":"import ShearWipe from '@/components/effects/shear-wipe'\n\nconst page = () => {\n  return (\n   <>\n    <ShearWipe />\n   </>\n  )\n}\n\nexport default page","props":[{"name":"componentsTextColor","type":"string","default":"#0D47A1","description":"Text color for the Components panel."},{"name":"componentsBackgroundColor","type":"string","default":"#E3F2FD","description":"Background color for the Components panel."},{"name":"showcaseTextColor","type":"string","default":"#ffffff","description":"Text color for the Showcase panel."},{"name":"showcaseBackgroundColor","type":"string","default":"#0D47A1","description":"Background color for the Showcase panel."},{"name":"clipPathDuration","type":"number","default":0.9,"description":"Duration of the shear clip-path wipe between panels."}],"overview":["Shear Wipe lets users move between related content states without leaving the page.","In the demo, the interaction is built around large vertical labels such as Components and Showcase. When the user clicks a label, the related content slides into view from the side through an angled, sheared panel. The result feels more graphic than a standard tabs component, but the job is still simple: show the right content when the user asks for it.","Use Shear Wipe when two or three related content views need to share the same space: components and showcases, features and proof, product story and results, design approach and implementation details. The page job is controlled switching: the visitor should understand which view is active, what changed, and where to click next.","The production risk is treating the visual wipe as the product. The component still needs real buttons, a visible active state, keyboard access, readable content, and a reduced-motion fallback. The angled wipe should make the content change feel designed; it should not make the user decode the interface."],"exampleUseCase":["A product page can use Shear Wipe to switch between Components and Showcase. The Components view explains what the product includes, while the Showcase view presents examples, proof points, screenshots, or outcomes. The angled wipe makes the change feel intentional, but the user remains in control of what appears.","The outcome is focus: the page can show multiple sides of one story without stacking every detail vertically or forcing the visitor into a full carousel."],"bestFor":["Product sections where two or three related views need to share one visual space.","Agency or portfolio pages that want to switch between capability copy and showcase proof.","Feature sections where the selected content should slide into view with more personality than standard tabs.","Landing pages where the content change should feel graphic, but still remain easy to understand."],"notFor":["Not for page transitions, route changes, checkout flows, dashboards, dense documentation, or large tab systems with many panels.","Not for critical information that users must see without clicking.","Not for content where hover is the only trigger. The selected view must be available through click, keyboard, and touch."],"performance":["Animate transform, clipping, and opacity rather than layout. Pre-size the content area where possible so the wipe does not create layout shift. Avoid loading heavy media for every inactive panel upfront, and clean up timers, observers, or animation instances when the component unmounts."],"accessibility":["Use real buttons or a proper tab pattern. Show a clear active state, preserve focus-visible styles, and make every content view reachable by keyboard and touch. The selected panel should have a readable heading or labelled region so users know what changed.","On mobile, collapse the layout into stacked panels, tap-controlled cards, or a simplified tab layout. Reduced-motion users should get an instant content switch or a short fade instead of the angled slide."],"commonMistakes":["Describing Shear Wipe as a page transition when it is a content-switching component.","Making the vertical labels decorative instead of clickable controls.","Hiding the active state, so users cannot tell whether Components or Showcase is selected.","Putting essential copy only inside an animated layer that is hard to access.","Shipping demo metrics or placeholder claims as real proof."],"faq":[{"question":"What is Shear Wipe?","answer":"Shear Wipe is a React content-switching component that reveals different content views through an angled slide-in wipe."},{"question":"Is Shear Wipe a page transition?","answer":"No. It does not change routes. It switches content inside the same component when a user clicks labels such as Components or Showcase."},{"question":"When should I use Shear Wipe?","answer":"Use it when related content views need a shared space and a more graphic switch than normal tabs."},{"question":"Should Shear Wipe use tabs?","answer":"If the views are mutually exclusive and function like tabs, use a proper tab pattern. If the labels behave more like mode switches, use real buttons with clear active state and a labelled content region."},{"question":"How should Shear Wipe behave on mobile?","answer":"Use stacked panels, tap-safe controls, or a simplified tab layout. Avoid forcing large angled side panels onto small screens if they reduce readability."},{"question":"What should reduced motion do for Shear Wipe?","answer":"Remove the angled slide and switch content instantly or with a short fade. The content should remain fully readable without motion."},{"question":"Can Hyperiux adapt Shear Wipe for a real brand system?","answer":"Yes. A custom version should define content structure, trigger labels, active states, wipe direction, angle, timing, responsive behavior, accessibility states, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/shear-wipe","demoUrl":"https://vault.hyperiux.com/demo/shear-wipe","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"animated-toggle","title":"Animated Toggle","docsUrl":"https://vault.hyperiux.com/effects/buttons/animated-toggle"},{"slug":"animated-form","title":"Animated Form","docsUrl":"https://vault.hyperiux.com/effects/components/animated-form"},{"slug":"arrow-fill-button","title":"Arrow Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/arrow-fill-button"}]},{"slug":"testimonial-swiper","title":"Testimonial Swiper","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"A swipeable testimonial component for moving through customer proof with visible controls, keyboard access, and crawlable quote copy.","description":"Testimonial Swiper for React moves proof through visible controls and swipe while keeping testimonial copy crawlable.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add testimonial-swiper","usage":"import TestimonialSwiper from '@/components/effects/testimonial-swiper'\n\nconst page = () => {\n  return (\n   <>\n   <TestimonialSwiper/>\n   </>\n  )\n}\nexport default page","props":[{"name":"bgColor","type":"color","default":"#edeae2","description":"Background color behind the testimonial content."},{"name":"autoplay","type":"boolean","default":true,"description":"Automatically advances testimonials."},{"name":"autoplayDelay","type":"number","default":4500,"description":"Delay between testimonial changes in milliseconds."},{"name":"showNavigation","type":"boolean","default":true,"description":"Shows previous/next controls."},{"name":"imageSize","type":"number","default":1,"description":"Scale multiplier for the testimonial images."}],"overview":["Testimonial Swiper moves proof through a controlled sequence without making trust dependent on autoplay.","Use it when testimonials are equal-weight proof items and the section has visible controls, swipe support, keyboard access, and crawlable testimonial copy. The page job is social proof, not a hiding place for the quote that closes the sale.","The thing to watch is optional proof. If a testimonial is critical to conversion, show it statically or in a grid instead of hiding it behind rotation."],"exampleUseCase":["A SaaS landing page can use Testimonial Swiper for several short customer quotes when controls are visible, autoplay pauses, and the strongest proof is also visible without interaction."],"bestFor":["Landing-page proof sections where several short testimonials have equal weight.","Case-study previews where swipe and controls help browsing.","Pages where testimonial copy remains crawlable and not trapped in autoplay state."],"notFor":["Not for the one testimonial that closes the sale, long proof stories, or evidence users must compare before converting."],"performance":["Optimize testimonial media, avoid loading every offscreen asset eagerly, and pause autoplay when inactive, focused, hovered, or offscreen."],"accessibility":["Provide visible controls, keyboard operation, touch support, current-slide context, and pause behavior. On mobile, consider a stacked proof section when quotes become long."],"commonMistakes":["Hiding the strongest proof behind autoplay.","Removing controls because swipe exists.","Announcing every autoplay tick to assistive technology."],"faq":[{"question":"Should Testimonial Swiper autoplay?","answer":"Only if it pauses on hover, focus, touch interaction, and reduced motion. User control is more important than constant motion."},{"question":"When is a grid better?","answer":"Use a grid when every testimonial matters, users need to compare proof, or the quotes are long."},{"question":"How should testimonial copy be rendered?","answer":"As real, crawlable text with visible attribution. Do not render important proof only inside a canvas or client-only state."},{"question":"Can Hyperiux adapt Testimonial Swiper for a real brand system?","answer":"Yes. A custom version should define content structure, accessibility behavior, motion rules, reduced-motion behavior, source handoff, and implementation notes for the specific page job."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/testimonial-swiper","demoUrl":"https://vault.hyperiux.com/demo/testimonial-swiper","related":[{"slug":"number-counter","title":"Number Counter","docsUrl":"https://vault.hyperiux.com/effects/text-animations/number-counter"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"}]},{"slug":"timeline","title":"Timeline","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"free","summary":"A scroll-friendly timeline component for product roadmaps, company histories, launch stories, case-study progressions, and process pages where time needs to feel designed rather than dumped into a list.","description":"Timeline for React presents milestones along a clean visual path for product stories, roadmaps, company history, process pages, and launch narratives.","tags":["GSAP","Lenis"],"dependencies":["@gsap/react","gsap","lenis"],"install":"npx hyperiux add timeline","usage":"import Timeline from \"@/components/effects/timeline\";\n\nexport default function page() {\n  return (\n    <>\n        <Timeline />\n    </>\n  );\n}","props":[{"name":"textColor","type":"color","default":"#000000","description":"Text color used for the timeline title, dates, and milestone descriptions."},{"name":"mutedTextColor","type":"color","default":"#3f3f46","description":"Secondary text color for descriptions and the period label."},{"name":"activeColor","type":"color","default":"#ff5f00","description":"Accent color shared by the active timeline line, dots, and milestone stems."},{"name":"backgroundColor","type":"color","default":"#ffffff","description":"Background color of the timeline section."}],"overview":["Timeline gives chronological content a clean visual spine.","Milestones sit along a horizontal or structured path, with each entry anchored to a point in the sequence. Dates, titles, and short descriptions appear as the user moves through the section, creating a guided sense of progress without forcing the page into a heavy storytelling format.","Use Timeline when the page needs to explain how something evolved: a product roadmap, company journey, campaign rollout, case-study process, funding history, research phase, implementation sequence, or strategic transformation. The component works best when each milestone has a clear date, one strong label, and one concise explanation.","The page job is sequence. The visitor should understand what happened, when it happened, and why it mattered. The visual line should clarify the story, not decorate a weak list of dates."],"exampleUseCase":["A SaaS company can use Timeline on a product story page to show how the platform moved from research, to prototype, to public launch, to automation, to new-market expansion. Each milestone helps the visitor understand momentum without reading a dense company-history paragraph.","The outcome is credibility. The company feels like it has a real trajectory, not just a homepage claim that says “built for the future” and hopes no one asks follow-up questions.","An agency can use the same component for case-study process pages: discovery, audit, UX direction, interface design, frontend build, launch, and iteration. The visual sequence helps clients understand the work without turning the page into a project-management export."],"bestFor":["Product roadmap and product-history pages.","Company journey, funding, launch, or growth-story sections.","Case studies that need to explain process over time.","Agency methodology and implementation sequences.","Campaign rollouts where each phase needs a clear place in the story.","Onboarding or adoption flows where users need chronological orientation."],"notFor":["Not for dense release notes, legal timelines, documentation tables, long biographies, pricing explanations, or content that needs direct comparison.","Not for weak chronology. If the dates do not tell a meaningful story, a timeline will only make the emptiness more organized.","Not for pages where users need all information immediately visible. Use a table or structured list when scanning matters more than narrative."],"performance":["Keep the milestone count controlled, reserve layout space, animate connector lines and markers with restraint, and avoid measuring every item on every scroll event. If scroll drives progress, throttle updates and clean up observers or timelines on unmount.","Large images inside timeline items should be optimized and lazy-loaded where appropriate. The timeline should feel smooth, not like each milestone is asking the browser to reconsider its life choices."],"accessibility":["Preserve a logical reading order. Screen-reader users should receive the milestones in chronological sequence, with dates and descriptions grouped correctly. Decorative connector lines and markers should not be announced as content.","On mobile, switch to a vertical or stacked layout when horizontal space becomes cramped. Keep touch targets clear, avoid tiny markers, and make dates easy to read. For reduced motion, show the timeline entries without scroll-linked line drawing, marker travel, or staggered reveal."],"commonMistakes":["Adding too many milestones.","Writing milestone descriptions that are too long.","Making the timeline line more important than the story.","Breaking chronological order visually.","Hiding meaningful dates inside images or decorative layers.","Using horizontal layouts on mobile without a simpler fallback.","Making scroll progress feel like fake loading."],"faq":[{"question":"What is Timeline?","answer":"Timeline is a React component for presenting dated milestones, product history, process steps, or chronological stories along a structured visual path."},{"question":"When should I use Timeline?","answer":"Use it when time, sequence, or progression matters: product roadmaps, company histories, case studies, campaign rollouts, launch stories, and implementation processes."},{"question":"Is Timeline better than a normal list?","answer":"Use Timeline when chronology adds meaning. Use a normal list when the items are equal, unrelated, or mainly need quick scanning."},{"question":"How many milestones work best?","answer":"Five to nine milestones usually work well for a page section. More than that may need filtering, grouping, pagination, or a dedicated history page."},{"question":"Can Timeline include images?","answer":"Yes, but keep images purposeful. Use them when they clarify the milestone, not just because the layout has space."},{"question":"How do I keep Timeline accessible?","answer":"Use real text for dates and descriptions, preserve chronological reading order, hide decorative connector lines from assistive technology, and keep keyboard navigation predictable if items are interactive."},{"question":"What should reduced motion do?","answer":"Reduced motion should show the timeline in its final readable state or use minimal fades. Remove scroll-linked line drawing, marker travel, and repeated staggered motion."},{"question":"Can Hyperiux adapt Timeline for a real brand system?","answer":"Yes. A custom version should define milestone structure, orientation, marker style, scroll behavior, mobile layout, accessibility treatment, reduced-motion fallback, content rules, source handoff, and implementation notes."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/timeline","demoUrl":"https://vault.hyperiux.com/demo/timeline","related":[{"slug":"information-drawer","title":"Information Drawer","docsUrl":"https://vault.hyperiux.com/effects/components/information-drawer"},{"slug":"animated-faq","title":"Animated FAQ","docsUrl":"https://vault.hyperiux.com/effects/components/animated-faq"},{"slug":"depth-card-stack","title":"Depth Card Stack","docsUrl":"https://vault.hyperiux.com/effects/carousels/depth-card-stack"}]},{"slug":"video-player","title":"Video Player","category":{"id":"components","slug":"components","name":"Creative Components"},"tier":"pro","summary":"A branded video player component with usable playback controls for demos, case-study videos, captions, and product proof.","description":"Custom Video Player for React keeps branded playback controls usable for demos, case-study videos, captions, and keyboard access.","tags":["Lucide"],"dependencies":["lucide-react"],"install":"npx hyperiux add video-player","usage":"import VideoPlayer from \"@/components/effects/video-player\";\n\nexport default function Page() {\n  return (\n    <>\n        <div className=\"aspect-video h-[27vw] w-[43vw] max-md:h-auto max-md:w-full\">\n          <VideoPlayer />\n        </div>\n    </>\n  );\n}","props":[{"name":"autoPlay","type":"boolean","default":true,"description":"Starts playback automatically when allowed."},{"name":"startMuted","type":"boolean","default":true,"description":"Initial muted state."},{"name":"showCloseButton","type":"boolean","default":true,"description":"Shows the close button on the player."},{"name":"rounded","type":"boolean","default":false,"description":"Rounds the player frame when not fullscreen."},{"name":"preserveAspectRatio","type":"boolean","default":true,"description":"Uses object-contain instead of object-cover for the video."},{"name":"hideControlsDelay","type":"number","default":1800,"description":"Delay before controls auto-hide, in milliseconds."}],"overview":["Custom Video Player gives product demos and case-study videos branded controls without making playback harder.","Use it when a video section needs source, poster, captions, visible controls, keyboard operation, and loading states that match the brand system. The page job is watched proof: the player should make the demo easier to trust and operate.","The thing to watch is inaccessible media chrome. Custom controls must preserve play/pause, mute, seek, captions, focus order, keyboard shortcuts where supported, and a plain fallback if custom UI fails."],"exampleUseCase":["A product demo page can use Custom Video Player when the video is a proof asset: poster loads fast, captions are available, controls are visible, and keyboard users can operate playback without guessing."],"bestFor":["Product demo sections where branded controls must stay keyboard-usable.","Case-study pages where poster, captions, and playback states affect trust.","Landing pages where media loading should not block the rest of the page."],"notFor":["Not for videos that need native reliability more than branded chrome, or for pages where captions, controls, or fallback playback cannot be verified."],"performance":["Load the poster first, avoid blocking surrounding content on video metadata, and lazy-load heavy media only when the section is likely to be used."],"accessibility":["Expose every control to keyboard users, keep captions available where provided, preserve focus order, and avoid hover-only playback controls on touch screens."],"commonMistakes":["Styling controls so heavily that play, pause, mute, seek, or captions become unclear.","Autoplaying proof video without user control.","Letting media loading block the rest of the page."],"faq":[{"question":"What makes Custom Video Player different from a decorative component?","answer":"It controls actual media. Playback, captions, focus, and loading behavior matter more than the animation around the controls."},{"question":"Which accessibility details are required?","answer":"Controls need accessible names, keyboard focus, visible focus states, caption access where captions exist, and predictable play/pause state."},{"question":"Should the video autoplay?","answer":"Avoid autoplay unless the video is muted, non-essential, and does not interfere with reduced-motion or user control expectations."},{"question":"Can Hyperiux adapt Custom Video Player for a real brand system?","answer":"Yes. A custom version should define content structure, accessibility behavior, motion rules, reduced-motion behavior, source handoff, and implementation notes for the specific page job."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/components/video-player","demoUrl":"https://vault.hyperiux.com/demo/video-player","related":[{"slug":"grid-tunnel","title":"Grid Tunnel","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/grid-tunnel"},{"slug":"interactive-list-preview","title":"Interactive List Preview","docsUrl":"https://vault.hyperiux.com/effects/components/interactive-list-preview"},{"slug":"hyperiux-glitter","title":"Hyperiux Glitter","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hyperiux-glitter"},{"slug":"text-stream","title":"Text Stream","docsUrl":"https://vault.hyperiux.com/effects/text-animations/text-stream"}]},{"slug":"directional-menu","title":"Directional Menu","category":{"id":"navigation","slug":"navigation","name":"Navigations"},"tier":"free","summary":"A direction-aware navigation menu where panels enter from pointer movement while preserving click, keyboard, tap, and focus behavior.","description":"Directional Menu for React: panels enter from the pointer's direction for multi-section product and agency navigation, with full keyboard and focus support.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add directional-menu","usage":"import DirectionalMenu from '@/components/effects/directional-menu'\n\nconst page = () => {\n  return (\n   <DirectionalMenu/>\n  )\n}","props":[{"name":"closeDelay","type":"number","default":80,"description":"Delay before closing the menu."},{"name":"panelGap","type":"number","default":20,"description":"Gap between trigger and submenu panel."},{"name":"activeColor","type":"string","default":"#ffffff","description":"Color for active menu state."},{"name":"inactiveColor","type":"string","default":"#ffffff","description":"Color for inactive menu state."},{"name":"duration","type":"number","default":0.35,"description":"Menu transition duration."},{"name":"menuBgColor","type":"string","default":"#ffffff","description":"Background color of the menu dropdown panels."}],"overview":["Directional Menu gives navigation spatial presence: menu panels enter from the pointer direction.","Use it when the site has enough structure to justify a designed menu moment: services, products, resources, docs, use cases, or portfolios. For three links, keep it boring and fast.","The main risk is cleverness in the one place every visitor needs reliability. Build keyboard, click, tap, Escape, focus restore, and mobile behavior before adding directional or overlay motion."],"exampleUseCase":["A SaaS platform with separate products, solutions, and developer resources can use Directional Menu as its main header navigation. When a visitor moves from one top-level item to the next, the panel content slides in from that side, so moving between Products and Solutions reads as travel across one connected menu.","The outcome is orientation. Audience groups such as startups, enterprise, and agencies sit in clearly grouped panels, and on smaller screens the same items collapse into a mobile menu with expandable sections."],"bestFor":["Multi-section marketing sites with services, products, resources, docs, or use cases.","Navigation systems where direction-aware panels enhance grouping but never replace click or keyboard paths.","Directional Menu makes wayfinding feel designed while keeping keyboard and mobile paths clear."],"notFor":["Not for tiny sites, hover-only menus, checkout, forms, or navigation where speed and reliability are the whole job."],"performance":["Keep panel animations short, avoid layout shift, and do not block route transitions or scroll restoration."],"accessibility":["Use real links, aria-expanded triggers, Escape close, and focus restore. Mobile should use a drawer, accordion, or full-screen menu that does not depend on hover."],"commonMistakes":["Relying on hover only for Directional Menu.","Forgetting Escape close and focus restore.","Making a simple three-link site feel overbuilt."],"faq":[{"question":"When should I use Directional Menu?","answer":"Use it when a multi-section marketing site needs menu panels entering from the pointer direction."},{"question":"Can Directional Menu work without hover?","answer":"Yes. It needs click, tap, keyboard, and mobile paths that do not rely on hover."},{"question":"How should Escape and focus restore work for Directional Menu?","answer":"Escape should close the menu and restore focus to the trigger. Trap focus only while overlay menus are open."},{"question":"How should Directional Menu behave on mobile?","answer":"Use a drawer, accordion, or simple full-screen menu that respects touch expectations."},{"question":"What should reduced motion do for Directional Menu?","answer":"Remove direction travel and large shifts; keep simple visible open/closed states."},{"question":"Can Hyperiux adapt Directional Menu for a real brand system?","answer":"Yes. A custom version should define motion rules, visual treatment, performance budget, fallback behavior, source handoff, and implementation notes for the specific page or launch context."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/navigation/directional-menu","demoUrl":"https://vault.hyperiux.com/demo/directional-menu","related":[{"slug":"expanding-navbar","title":"Expanding Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/expanding-navbar"},{"slug":"elevate-navbar","title":"Elevate Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/elevate-navbar"}]},{"slug":"displacement-navbar","title":"Displacement Navbar","category":{"id":"navigation","slug":"navigation","name":"Navigations"},"tier":"pro","summary":"An animated navigation component for portfolios, agency websites, product ecosystems, creative studios, and brand-led interfaces where the menu should feel spatial, editorial, and deliberate.","description":"Displacement Navbar for React opens a wide navigation surface with displaced layout motion, primary links, secondary routes, and preview media.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add displacement-navbar","usage":"import DisaplacementNavbar from '@/components/effects/displacement-navbar'\n\nconst page = () => {\n  return (\n   <DisaplacementNavbar/>\n  )\n}","props":[{"name":"openDuration","type":"number","default":0.65,"description":"Page displacement and bar/mark open duration, in seconds."},{"name":"closeDuration","type":"number","default":0.65,"description":"Page displacement and bar/mark close duration, in seconds. Matches openDuration by default so the close mirrors the open."},{"name":"contentStagger","type":"number","default":0.055,"description":"Delay between each shelf content item fading in on open, and out again on close in reverse order."},{"name":"imageSwapDuration","type":"number","default":0.5,"description":"Duration of the figure image cross-swap on link hover, in seconds."},{"name":"showMedia","type":"boolean","default":true,"description":"Shows the figure image panel next to the primary links."},{"name":"shelfBackground","type":"string","default":"#151515","description":"Shelf and header background color."},{"name":"pageGradientFrom","type":"string","default":"#0D47A1","description":"Start color of the displaced page's gradient."},{"name":"pageGradientTo","type":"string","default":"#E3F2FD","description":"End color of the displaced page's gradient."},{"name":"pageBackground","type":"string","default":null,"description":"Escape hatch for the displaced page background - any CSS background value. Overrides the gradient colors when set."},{"name":"linkColor","type":"string","default":"#f4f3f1","description":"Primary and info link text color."},{"name":"mutedColor","type":"string","default":"rgba(244,243,241,0.38)","description":"Index numerals, captions, and dimmed-state color."},{"name":"hairlineColor","type":"string","default":"rgba(244,243,241,0.14)","description":"Bar seam and footer divider color."},{"name":"charStagger","type":"number","default":0.01,"description":"Per-character reveal delay on link hover, in seconds."},{"name":"showLinkUnderline","type":"boolean","default":true,"description":"Shows the underline draw-in under hovered links."},{"name":"dimInactiveLinks","type":"boolean","default":true,"description":"Dims sibling primary links while one is hovered."},{"name":"primaryLinks","type":"array","default":[{"label":"Components"},{"label":"Templates"},{"label":"Showcase"},{"label":"Docs"}],"description":"Numbered primary navigation links shown in the shelf."},{"name":"infoLinks","type":"array","default":[{"label":"About"},{"label":"Pricing"},{"label":"Changelog"},{"label":"Contact"}],"description":"Secondary info links shown in the shelf."},{"name":"socials","type":"array","default":[{"label":"X"},{"label":"GitHub"},{"label":"Discord"}],"description":"Social links shown in the shelf footer."},{"name":"media","type":"array","default":[{"src":"https://picsum.photos/seed/img01/1600/1200","caption":"Drop-in motion primitives"},{"src":"https://picsum.photos/seed/img02/1600/1200","caption":"Full pages, wired and ready"},{"src":"https://picsum.photos/seed/img03/1600/1200","caption":"Built with Hyperiux in the wild"},{"src":"https://picsum.photos/seed/img04/1600/1200","caption":"Guides, props and recipes"}],"description":"Images and captions shown in the figure panel, matched to primary links."},{"name":"brand","type":"string","default":"Hyperiux","description":"Brand label shown in the header."},{"name":"email","type":"string","default":"hello@hyperiux.com","description":"Contact email shown in the shelf footer."},{"name":"cities","type":"string","default":"Remote / Worldwide","description":"Location label shown in the shelf footer."}],"overview":["Displacement Navbar turns a simple menu trigger into a full navigation composition.","The component opens a large menu surface that visually displaces the page state, giving primary routes more room to breathe. Large navigation links can sit on one side, secondary routes can occupy a quieter column, and preview media or contextual imagery can respond to selected items. The result feels closer to an editorial navigation layer than a standard dropdown.","Use Displacement Navbar when navigation is part of the brand experience. It works for creative studios, portfolio sites, SaaS product ecosystems, template libraries, agency pages, campaign microsites, and design-led product websites where routes need hierarchy, not just placement.","The page job is orientation with presence. The user should immediately understand the primary routes, see supporting options without confusion, and close the menu without friction. The displacement motion should make the menu feel connected to the page, not like a dark panel arrived from another website."],"exampleUseCase":["A creative studio can use Displacement Navbar to turn a minimal header into a strong editorial menu. The compact state keeps the page clean, while the expanded state gives the studio space for Work, Services, About, Journal, Contact, and selected preview imagery.","The outcome is navigation with brand memory. The menu helps users move through the site while reinforcing the studio’s visual language.","A product ecosystem can use the same component to organize Components, Templates, Showcase, Docs, Pricing, and Changelog inside one composed navigation layer. The menu gives each route a clear place without forcing a heavy header onto every page."],"bestFor":["Portfolio and agency websites where navigation should carry visual presence.","SaaS, AI, and product ecosystems with a compact set of primary routes.","Template libraries, component directories, and documentation-adjacent products.","Campaign microsites where the menu should feel authored.","Editorial and design-led websites where route hierarchy benefits from preview content.","Desktop-first brand experiences that still need a sensible mobile fallback."],"notFor":["Not for complex enterprise navigation with deep nesting, admin dashboards, ecommerce mega menus, dense documentation sidebars, or workflows where users need instant utilitarian navigation.","Not for menus with unclear route labels. Motion can make navigation memorable, but it cannot make vague labels useful.","Not for pages where the preview image becomes louder than the route structure. Navigation is not a moodboard with escape-key support."],"performance":["Keep the menu animation lightweight. Animate transform, opacity, clip-path, or height with restraint. Avoid layout-heavy transitions across too many nested elements. Optimise preview images and avoid loading every large media asset before the menu is opened.","If preview media changes on hover, preload carefully or use small optimized images. Clean up event listeners, outside-click handlers, scroll locks, timers, and animation instances when the component unmounts.","Avoid long stagger chains. Navigation should feel polished, not delayed."],"accessibility":["Use a semantic navigation landmark, real links, and button controls. The menu trigger should have a clear accessible label and expanded state. Support keyboard access, visible focus states, Escape-to-close behavior, and focus return to the trigger.","If the menu behaves like an overlay, prevent unsafe background interaction while it is open and keep the focus order predictable. Hover-preview behavior should also work through keyboard focus.","On mobile, simplify the layout into a full-screen menu, stacked panel, or bottom-sheet style pattern. Reduce preview media, increase tap target size, and keep the close control visible. For reduced motion, remove displacement travel, long stagger, preview motion, and panel shifts. Open the menu instantly or with a minimal fade."],"commonMistakes":["Using a div instead of a button for the trigger.","Making hover previews unavailable to keyboard users.","Letting preview images compete with primary route labels.","Hiding important routes in tiny secondary columns.","Forgetting Escape-to-close and focus return.","Loading heavy preview media before the menu opens.","Creating a beautiful menu with no active route state.","Forcing the full desktop layout onto mobile."],"faq":[{"question":"What is Displacement Navbar?","answer":"Displacement Navbar is a React navigation component that opens a large animated menu surface where links, secondary routes, and preview media shift into a composed layout."},{"question":"When should I use Displacement Navbar?","answer":"Use it for portfolios, agency sites, SaaS products, component libraries, template directories, campaign microsites, and brand-led websites where navigation should feel more designed than a standard dropdown."},{"question":"Is Displacement Navbar the same as a full-screen menu?","answer":"Not exactly. A full-screen menu simply covers the page. Displacement Navbar uses spatial layout and motion to make the menu feel connected to the page state."},{"question":"Can Displacement Navbar include preview images?","answer":"Yes. Preview images work well when they clarify or reinforce the selected route. Keep them optimized and avoid making them more important than the navigation itself."},{"question":"Should Displacement Navbar lock background scroll?","answer":"If the menu opens as a large overlay, scroll locking is usually useful. If it opens as an inline header expansion, scroll locking may not be necessary."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove large displacement travel, staggered route motion, preview movement, and panel shifts. The menu should open instantly or with a minimal fade."},{"question":"Is Displacement Navbar good for complex navigation?","answer":"Usually no. It is best for curated route structures. Complex documentation, enterprise products, and ecommerce systems often need mega menus, sidebars, search, filtering, or deeper IA."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/navigation/displacement-navbar","demoUrl":"https://vault.hyperiux.com/demo/displacement-navbar","related":[{"slug":"morphing-dock","title":"Morphing Dock","docsUrl":"https://vault.hyperiux.com/effects/navigation/morphing-dock"},{"slug":"unfold-navbar","title":"Unfold Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/unfold-navbar"},{"slug":"side-navbar","title":"Side Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/side-navbar"},{"slug":"directional-menu","title":"Directional Menu","docsUrl":"https://vault.hyperiux.com/effects/navigation/directional-menu"}]},{"slug":"elevate-navbar","title":"Elevate Navbar","category":{"id":"navigation","slug":"navigation","name":"Navigations"},"tier":"free","summary":"A responsive navbar with animated dropdowns, text-swap hover effects, and a collapsible mobile menu.","description":"Elevate Navbar for React adds image-preview dropdowns and text-swap links for product pages that need structured navigation without clutter. Includes a clean mobile fallback.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add elevate-navbar","usage":"import ElevateNavbar from '@/components/effects/elevate-navbar'\n\nconst page = () => {\n  return (\n    <>\n    <ElevateNavbar/>\n    </>\n  )\n}","props":[{"name":"backgroundColor","type":"string","default":"#d8b4fe","description":"Page background behind the navbar."},{"name":"ctaBackground","type":"string","default":"#ffffff","description":"CTA button background color."},{"name":"ctaHoverBackground","type":"string","default":"#000000","description":"CTA button hover background color."},{"name":"activeColor","type":"string","default":"#ffffff","description":"Active and focused nav link color."},{"name":"inactiveColor","type":"string","default":"rgba(255,255,255,0.5)","description":"Dimmed nav link color while another item is active."},{"name":"duration","type":"number","default":0.35,"description":"Nav, dropdown, and mobile accordion animation duration."},{"name":"ease","type":"string","default":"power2.out","description":"GSAP easing used for nav and dropdown transitions."},{"name":"staggerItems","type":"boolean","default":true,"description":"Reveals dropdown items one by one."}],"overview":["Elevate Navbar gives navigation spatial presence: dropdowns rise in with image previews while link labels swap on hover.","Use it when the site has enough structure to justify a designed menu moment: services, products, resources, docs, use cases, or portfolios. For three links, keep it boring and fast.","The risk in production is cleverness in the one place every visitor needs reliability. Build keyboard, click, tap, Escape, focus restore, and mobile behavior before adding directional or overlay motion."],"exampleUseCase":["A developer-tool marketing site can use Elevate Navbar to organize product areas, tech stacks, and documentation in one header. Dropdowns open with an image preview for each destination, link labels swap on hover, and the call to action changes color when the visitor points at it.","The outcome is polish where it is noticed most. On smaller screens the same structure moves into a collapsible mobile menu, so the docs and installation routes stay one tap away."],"bestFor":["SaaS and product pages where the header needs to group several sections into image-preview dropdowns.","Header navigation that should improve orientation without adding layout shift.","Elevate Navbar makes wayfinding feel designed while keeping the mobile menu clear for keyboard and touch."],"notFor":["Not for tiny sites, hover-only menus, checkout, forms, or navigation where speed and reliability are the whole job."],"performance":["Keep panel animations short, avoid layout shift, and do not block route transitions or scroll restoration."],"accessibility":["Use real links, aria-expanded triggers, Escape close, and focus restore. Mobile should use a drawer, accordion, or full-screen menu that does not depend on hover."],"commonMistakes":["Relying on hover only for Elevate Navbar.","Forgetting Escape close and focus restore.","Making a simple three-link site feel overbuilt."],"faq":[{"question":"When should I use Elevate Navbar?","answer":"Use it when a SaaS or product page needs a header that groups sections into dropdowns with image previews."},{"question":"Can Elevate Navbar work without hover?","answer":"Partly. The mobile menu works by tap and keyboard, but desktop dropdowns open on hover only, so add click and keyboard triggers for them."},{"question":"How should Escape and focus restore work for Elevate Navbar?","answer":"Escape should close the menu and restore focus to the trigger. Trap focus only while overlay menus are open."},{"question":"How should Elevate Navbar behave on mobile?","answer":"Use a drawer, accordion, or simple full-screen menu that respects touch expectations."},{"question":"What should reduced motion do for Elevate Navbar?","answer":"Remove direction travel and large shifts; keep simple visible open/closed states."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/navigation/elevate-navbar","demoUrl":"https://vault.hyperiux.com/demo/elevate-navbar","related":[{"slug":"expanding-navbar","title":"Expanding Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/expanding-navbar"},{"slug":"directional-menu","title":"Directional Menu","docsUrl":"https://vault.hyperiux.com/effects/navigation/directional-menu"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"},{"slug":"link-button","title":"Link Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/link-button"}]},{"slug":"expanding-navbar","title":"Expanding Navbar","category":{"id":"navigation","slug":"navigation","name":"Navigations"},"tier":"pro","summary":"A compact navigation component that expands only when needed for link-dense marketing pages, product sites, and mobile-friendly menus.","description":"Expanding Navbar for React grows compact navigation only when needed for link-dense pages and mobile-friendly menus.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add expanding-navbar","usage":"import ExpandingNavbar from '@/components/effects/expanding-navbar'\n\nconst Page = () => {\n  return (\n    <ExpandingNavbar />\n  )\n}","props":[{"name":"expandedWidth","type":"number","default":98,"description":"Expanded desktop panel width in viewport units."},{"name":"duration","type":"number","default":1,"description":"Expansion animation duration."},{"name":"backgroundColor","type":"string","default":"#ffffff","description":"Navbar background color."},{"name":"activeColor","type":"string","default":"#ff5f00","description":"Hover or active link accent color."},{"name":"menuBackgroundColor","type":"string","default":"#111111","description":"Background color of the menu bar and expanded menu panels."}],"overview":["Expanding Navbar gives navigation spatial presence: a compact nav grows only when needed.","Use it when the site has enough structure to justify a designed menu moment: services, products, resources, docs, use cases, or portfolios. For three links, keep it boring and fast.","In production, the risk is cleverness in the one place every visitor needs reliability. Build keyboard, click, tap, Escape, focus restore, and mobile behavior before adding directional or overlay motion."],"exampleUseCase":["A B2B consultancy can use Expanding Navbar to hold a deep site structure in a small header. The compact bar widens across the screen when opened and reveals columns for expertise, solutions, industries, services, and resources, so each layer of the offer is one step away.","The outcome is room without clutter. The header stays light on every page, and visitors who need the full map can open it, move through the columns, and close it again with Escape."],"bestFor":["Compact headers with enough links to justify expansion on demand.","Space-constrained marketing pages where the menu can grow without hiding the route.","Expanding Navbar makes wayfinding feel designed while keeping keyboard and mobile paths clear."],"notFor":["Not for tiny sites, hover-only menus, checkout, forms, or navigation where speed and reliability are the whole job."],"performance":["Keep panel animations short, avoid layout shift, and do not block route transitions or scroll restoration."],"accessibility":["Use real links, aria-expanded triggers, Escape close, and focus restore. Mobile should use a drawer, accordion, or full-screen menu that does not depend on hover."],"commonMistakes":["Relying on hover only for Expanding Navbar.","Forgetting Escape close and focus restore.","Making a simple three-link site feel overbuilt."],"faq":[{"question":"When should I use Expanding Navbar?","answer":"Use it when a space-constrained page with enough links needs a compact nav that grows only when needed."},{"question":"Can Expanding Navbar work without hover?","answer":"Yes. It needs click, tap, keyboard, and mobile paths that do not rely on hover."},{"question":"How should Escape and focus restore work for Expanding Navbar?","answer":"Escape should close the menu and restore focus to the trigger. Trap focus only while overlay menus are open."},{"question":"How should Expanding Navbar behave on mobile?","answer":"Use a drawer, accordion, or simple full-screen menu that respects touch expectations."},{"question":"What should reduced motion do for Expanding Navbar?","answer":"Remove direction travel and large shifts; keep simple visible open/closed states."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/navigation/expanding-navbar","demoUrl":"https://vault.hyperiux.com/demo/expanding-navbar","related":[{"slug":"scroll-distortion","title":"Scroll Distortion","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-distortion"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"},{"slug":"directional-menu","title":"Directional Menu","docsUrl":"https://vault.hyperiux.com/effects/navigation/directional-menu"},{"slug":"elevate-navbar","title":"Elevate Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/elevate-navbar"}]},{"slug":"immersive-full-screen-nav","title":"Immersive Full-Screen Navigation","category":{"id":"navigation","slug":"navigation","name":"Navigations"},"tier":"free","summary":"A full-screen navigation overlay for portfolio, agency, and brand websites where opening the menu becomes a designed brand moment.","description":"Immersive Full Screen Navigation for React turns menus into a full-screen brand moment with keyboard and focus-restore rules.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add immersive-full-screen-nav","usage":"import ImmersiveFullscreenNav from '@/components/effects/immersive-full-screen-nav'\n\nconst page = () => {\n  return (\n    <>\n    <ImmersiveFullscreenNav/>\n    </>\n  )\n}","props":[{"name":"overlayBg","type":"string","default":"#ff5f00","description":"Fullscreen overlay background color."},{"name":"headerOpenColor","type":"string","default":"#ffffff","description":"Hamburger bar color while open."},{"name":"linkColor","type":"string","default":"#ffffff","description":"Navigation link color."},{"name":"linkHoverColor","type":"string","default":"#a3a3a3","description":"Navigation link hover color."},{"name":"clipOrigin","type":"string","default":"bottom","description":"Edge where the overlay reveals from."},{"name":"openDuration","type":"number","default":1.2,"description":"Overlay open duration."},{"name":"closeDuration","type":"number","default":1.2,"description":"Overlay close duration."},{"name":"ease","type":"string","default":"power4.inOut","description":"Overlay reveal easing."},{"name":"linkStagger","type":"number","default":0.07,"description":"Delay between nav links."},{"name":"imageStagger","type":"number","default":0.02,"description":"Delay between overlay images."},{"name":"socialStagger","type":"number","default":0.06,"description":"Delay between social links."}],"overview":["Immersive Full Screen Navigation gives navigation spatial presence: navigation becomes a full-screen brand moment.","Use it when the site has enough structure to justify a designed menu moment: services, products, resources, docs, use cases, or portfolios. For three links, keep it boring and fast.","The production risk is cleverness in the one place every visitor needs reliability. Build keyboard, click, tap, Escape, focus restore, and mobile behavior before adding directional or overlay motion."],"exampleUseCase":["A film production company can use Immersive Full-Screen Navigation to make opening the menu part of its showreel experience. The overlay expands to fill the screen, then the links, preview stills, and social channels stagger into view.","The outcome is a brand moment that still works as navigation. Focus stays inside the menu while it is open, Escape closes it, and focus returns to the trigger, so visitors still reach the work, directors, and contact page without friction."],"bestFor":["Portfolio and brand sites where opening the menu is intentionally part of the experience.","Menus that can trap focus while open, close on Escape, and restore focus to the trigger.","Immersive Full Screen Navigation makes wayfinding feel designed while keeping keyboard and mobile paths clear."],"notFor":["Not for tiny sites, hover-only menus, checkout, forms, or navigation where speed and reliability are the whole job."],"performance":["Keep panel animations short, avoid layout shift, and do not block route transitions or scroll restoration."],"accessibility":["Use real links, aria-expanded triggers, Escape close, and focus restore. Mobile should use a drawer, accordion, or full-screen menu that does not depend on hover."],"commonMistakes":["Relying on hover only for Immersive Full Screen Navigation.","Forgetting Escape close and focus restore.","Making a simple three-link site feel overbuilt."],"faq":[{"question":"When should I use Immersive Full Screen Navigation?","answer":"Use it when a portfolio or agency site needs navigation to become a full-screen brand moment."},{"question":"Can Immersive Full Screen Navigation work without hover?","answer":"Yes. It needs click, tap, keyboard, and mobile paths that do not rely on hover."},{"question":"How should Escape and focus restore work for Immersive Full Screen Navigation?","answer":"Escape should close the menu and restore focus to the trigger. Trap focus only while overlay menus are open."},{"question":"How should Immersive Full Screen Navigation behave on mobile?","answer":"Use a drawer, accordion, or simple full-screen menu that respects touch expectations."},{"question":"What should reduced motion do for Immersive Full Screen Navigation?","answer":"Remove direction travel and large shifts; keep simple visible open/closed states."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/navigation/immersive-full-screen-nav","demoUrl":"https://vault.hyperiux.com/demo/immersive-full-screen-nav","related":[{"slug":"directional-menu","title":"Directional Menu","docsUrl":"https://vault.hyperiux.com/effects/navigation/directional-menu"},{"slug":"expanding-navbar","title":"Expanding Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/expanding-navbar"},{"slug":"elevate-navbar","title":"Elevate Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/elevate-navbar"}]},{"slug":"morphing-dock","title":"Morphing Dock","category":{"id":"navigation","slug":"navigation","name":"Navigations"},"tier":"pro","summary":"A floating dock navigation component for portfolios, agency websites, SaaS pages, product microsites, and brand-led interfaces where navigation should stay compact until the user asks for more.","description":"Morphing Dock for React transforms a compact dock into an expanded navigation surface for portfolios, product sites, and brand-led interfaces.","tags":["GSAP"],"dependencies":["@gsap/react","gsap"],"install":"npx hyperiux add morphing-dock","usage":"import MorphingDock from '@/components/effects/morphing-dock'\n\nconst page = () => {\n  return (\n   <MorphingDock/>\n  )\n}","props":[{"name":"duration","type":"number","default":1,"description":"Duration multiplier for dock animations; 1 preserves the original timing proportions."},{"name":"staggerStep","type":"number","default":0.01,"description":"Delay in seconds between animated letters."},{"name":"showLine","type":"boolean","default":true,"description":"Draw navigation link underlines on hover and focus. The CTA never shows an underline."},{"name":"backgroundColor","type":"color","default":"#111111","description":"Dock and expanded panel background."},{"name":"textColor","type":"color","default":"#d2d2d2","description":"Resting navigation and CTA link color."},{"name":"hoverColor","type":"color","default":"#ffffff","description":"Navigation and CTA link hover and focus color."},{"name":"brand","type":"string","default":"HYPERIUX","description":"Dock brand label."},{"name":"contactLabel","type":"string","default":"Contact","description":"Contact link label."},{"name":"email","type":"string","default":"hello@hyperiux.com","description":"Contact email address."},{"name":"emailNote","type":"string","default":"Partnerships, press and support.","description":"Supporting contact text."},{"name":"ctaLabel","type":"string","default":"Get started","description":"CTA label."},{"name":"ctaHref","type":"string","default":"#","description":"CTA destination."},{"name":"teaserImage","type":"string","default":"https://picsum.photos/seed/v10/1600/1200","description":"Preview image URL."},{"name":"teaserHref","type":"string","default":"#","description":"Preview destination."},{"name":"expandedWidth","type":"number","default":48,"description":"Expanded nav panel width in viewport units."},{"name":"expandedHeight","type":"number","default":26,"description":"Expanded nav panel height in viewport units."},{"name":"items","type":"array","default":[{"label":"Components","href":"#","blurb":"Drop-in motion primitives"},{"label":"Templates","href":"#","blurb":"Full pages, wired and ready"},{"label":"Showcase","href":"#","blurb":"Built with Hyperiux in the wild"},{"label":"Docs","href":"#","blurb":"Guides, props and recipes"}],"description":"Navigation items with label, href, and blurb strings."}],"overview":["Morphing Dock keeps navigation light until it needs to open.","The component starts as a compact dock with the essential brand, menu, and action controls. When activated, it expands into a larger navigation surface where links, supporting actions, and optional preview content can appear. The interaction gives the menu a strong sense of continuity because the expanded panel feels like it grows from the dock rather than appearing as a disconnected overlay.","Use Morphing Dock when the page needs a clean first impression without hiding navigation completely. It works for creative portfolios, agency sites, product launches, SaaS landing pages, template directories, editorial projects, and campaign microsites where the navigation should feel designed but still practical.","The page job is compact control. The user should know where the menu lives, what opened, what each route does, and how to close it. The morph should make navigation feel fluid, not make the visitor wonder whether the footer has developed ambitions."],"exampleUseCase":["A product microsite can use Morphing Dock as a floating navigation system near the bottom of the viewport. The compact state keeps the page visually clean, while the expanded state gives visitors access to components, templates, documentation, pricing, and the main conversion action.","The outcome is presence without header weight. The navigation feels integrated into the experience without occupying the whole top of the page.","A creative studio can use the same component for a portfolio site where the menu needs to feel premium, compact, and memorable. The dock becomes a small persistent control, then opens into a branded route surface when the visitor needs direction."],"bestFor":["Portfolio and agency websites where the navigation should feel designed.","SaaS and product launch pages that need a compact persistent menu.","Template, component, and product directories with a small set of primary routes.","Campaign microsites where standard headers feel too heavy.","Editorial and creative projects where navigation should support the visual system.","Mobile-adapted menus where compact controls matter."],"notFor":["Not for complex enterprise navigation, large ecommerce menus, admin dashboards, documentation systems with many nested sections, or product areas that need persistent sidebar navigation.","Not for hiding essential routes behind unclear controls. A dock can be compact, but it cannot be cryptic.","Not for pages where navigation speed matters more than ceremony. If the user knows exactly where they want to go, the menu should not make them sit through a tiny architectural transformation first."],"performance":["Keep the morph lightweight. Animate transform, opacity, clip-path, width, height, and border radius with restraint, and avoid layout-heavy recalculation across many nested elements. Stagger links subtly rather than turning every route into a separate entrance ceremony.","Clean up event listeners, outside-click handlers, scroll locks, and animation instances when the component unmounts. If preview media appears inside the expanded menu, optimise it and avoid loading heavy assets before the menu is opened."],"accessibility":["Use a semantic navigation landmark and real links. The dock trigger should be a button with an accessible label and expanded state. Support keyboard operation, visible focus states, Escape-to-close, and focus return.","On mobile, keep dock controls large enough to tap and avoid placing critical actions too close to screen edges. The expanded state may need to behave like a bottom sheet, centred panel, or full-screen menu depending on available space.","For reduced motion, remove shape travel, long scaling, spring overshoot, and staggered link movement. Open the expanded menu instantly or with a minimal fade while keeping the same routes available."],"commonMistakes":["Making the compact trigger unclear.","Using clickable divs instead of buttons and links.","Forgetting Escape-to-close and focus return.","Animating the dock so slowly that navigation becomes friction.","Hiding important routes inside decorative preview panels.","Loading heavy preview media before the menu is opened.","Forcing the same desktop dock geometry onto mobile.","Treating the morph as more important than route clarity."],"faq":[{"question":"What is Morphing Dock?","answer":"Morphing Dock is a React navigation component that transforms a compact floating dock into an expanded menu surface."},{"question":"When should I use Morphing Dock?","answer":"Use it for portfolios, agency sites, product microsites, SaaS landing pages, launch pages, and brand-led interfaces where navigation should stay compact but still feel polished."},{"question":"Is Morphing Dock the same as a navbar?","answer":"Not exactly. A navbar is usually fixed as a full horizontal navigation area. Morphing Dock starts as a compact control and expands into a larger route surface when activated."},{"question":"Is Morphing Dock the same as a dropdown?","answer":"No. A dropdown usually opens a simple list from one trigger. Morphing Dock changes the shape and scale of the navigation container itself, creating a more continuous menu interaction."},{"question":"Can Morphing Dock work in Next.js?","answer":"Yes. Use it as a client component in Next.js App Router because menu state, keyboard behavior, focus management, and animation logic run on the client."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove shape morphing, scale travel, staggered link motion, and spring overshoot. The menu should open instantly or with a minimal fade."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/navigation/morphing-dock","demoUrl":"https://vault.hyperiux.com/demo/morphing-dock","related":[{"slug":"unfold-navbar","title":"Unfold Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/unfold-navbar"},{"slug":"side-navbar","title":"Side Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/side-navbar"},{"slug":"directional-menu","title":"Directional Menu","docsUrl":"https://vault.hyperiux.com/effects/navigation/directional-menu"}]},{"slug":"perspective-shift-menu","title":"Perspective Shift Menu","category":{"id":"navigation","slug":"navigation","name":"Navigations"},"tier":"pro","summary":"A cinematic navigation component for portfolios, studio websites, product launches, campaign pages, and brand-led interfaces where opening the menu should feel like entering a separate navigation layer.","description":"Perspective Shift Menu for React opens navigation while the page shifts back in 3D space, creating a cinematic menu transition for brand and portfolio sites.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add perspective-shift-menu","usage":"import PerspectiveShiftMenu from '@/components/effects/perspective-shift-menu'\n\nconst page = () => {\n  return (\n   <PerspectiveShiftMenu/>\n  )\n}","props":[{"name":"animationSpeed","type":"number","default":1,"description":"Opening and closing speed multiplier. Higher values animate faster."},{"name":"tiltAngle","type":"number","default":20,"description":"How far the page rotates away, in degrees. 0 slides without tilting."},{"name":"linkStagger","type":"number","default":0,"description":"Delay between nav links as they enter, in seconds."},{"name":"charStagger","type":"number","default":0.007,"description":"Delay between characters on link hover, in seconds."},{"name":"panelWidth","type":"number","default":22,"description":"Nav column width, in vw."},{"name":"drawerWidth","type":"number","default":18,"description":"Sub-drawer width, in vw."},{"name":"panelColor","type":"string","default":"#ffffff","description":"Nav column and sub-drawer surface color."},{"name":"textColor","type":"string","default":"#111111","description":"Links, headings, and menu icon color."},{"name":"voidColor","type":"string","default":"#0e0e0e","description":"The void behind the page as it tilts away."},{"name":"dimOpacity","type":"number","default":0.4,"description":"How strongly the receded page is dimmed, 0 to 1."}],"overview":["Perspective Shift Menu turns navigation into a spatial state change.","When the menu opens, the main page shifts into the background through scale, rotation, perspective, or depth. The navigation panel moves into focus with primary links, secondary routes, category groups, and supporting information. The page does not simply receive a menu overlay. It becomes part of the transition.","Use Perspective Shift Menu when navigation is a meaningful brand moment, not just a utility drawer. It works for creative studios, portfolios, digital products, SaaS launches, editorial microsites, agencies, and high-craft landing pages where the menu should feel designed without making the user hunt for basic links.","The page job is orientation with drama. The visitor should understand that the menu is open, see the available routes clearly, and close or navigate without confusion. Perspective is the entrance. Usability is still the job."],"exampleUseCase":["A creative studio can use Perspective Shift Menu to turn global navigation into a brand moment. The homepage shifts into depth while the menu opens with project categories, service routes, contact links, and social channels.","The outcome is atmosphere with structure. The menu feels authored, but the visitor still finds the route they came for.","A SaaS or developer-tool landing page can use the same component for a compact navigation system where product categories, docs, pricing, and effect libraries need room without overcrowding the header."],"bestFor":["Portfolio and agency websites where navigation contributes to brand feel.","Product launches and campaign pages with a cinematic visual system.","SaaS, AI, and developer-tool sites where categories need a structured menu surface.","Editorial microsites where the menu can behave like a chapter layer.","Navigation systems with primary routes plus secondary categories or supporting links."],"notFor":["Not for dense enterprise dashboards, admin tools, checkout flows, documentation-heavy products, or pages where users need fast utility navigation above all else.","Not for menus with weak structure. A perspective transition can make navigation feel premium, but it cannot fix unclear information architecture.","Not for mobile unless the menu simplifies cleanly. A desktop 3D shift forced onto a small screen can quickly become a tiny tilted website pretending to be useful."],"performance":["Keep transforms GPU-friendly. Animate transform, opacity, and overlay states rather than layout-heavy properties. Avoid large blur filters, excessive shadows, and continuous animation while the menu is open.","Clean up keyboard listeners, scroll locks, and route-change side effects when the menu closes or the component unmounts. The menu should feel dramatic for the user, not for the browser’s memory profile."],"accessibility":["Use a semantic button for the menu trigger, clear labels, visible focus states, keyboard navigation, Escape close behavior, and focus return to the trigger when the menu closes.","If the menu behaves like a modal layer, keep focus inside the menu while it is open and prevent background content from being reached accidentally. If it behaves like a non-modal navigation panel, make background interaction predictable.","On mobile, simplify the perspective shift, reduce rotation, and prioritize readable navigation links. For reduced motion, remove the 3D page movement and open the menu with a simple fade, slide, or instant state change."],"commonMistakes":["Making the animation stronger than the navigation.","Forgetting Escape close and focus return.","Leaving background page elements focusable when the menu should be modal.","Using unclear nested categories.","Letting the transformed page become unreadable or distracting.","Forcing desktop perspective behavior onto mobile.","Using a hamburger menu because it looks clean while hiding routes users actually need."],"faq":[{"question":"What is Perspective Shift Menu?","answer":"Perspective Shift Menu is a React navigation component where opening the menu shifts the main page into a 3D perspective state while the navigation panel moves into focus."},{"question":"When should I use Perspective Shift Menu?","answer":"Use it for portfolios, studio sites, product launches, campaign pages, and brand-led interfaces where navigation should feel more cinematic than a simple dropdown."},{"question":"Is Perspective Shift Menu good for documentation sites?","answer":"Usually no. Documentation users need fast scanning, search, and predictable navigation. A simpler sidebar or header navigation is usually better."},{"question":"Does Perspective Shift Menu need an animation library?","answer":"Not always. A strong version can be built with React state and CSS perspective transforms. More complex versions may use Framer Motion, Motion, or GSAP depending on the shipped implementation."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove the 3D page tilt, scale travel, and perspective movement. Open the menu with a simple fade, slide, or instant state change."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/navigation/perspective-shift-menu","demoUrl":"https://vault.hyperiux.com/demo/perspective-shift-menu","related":[{"slug":"side-navbar","title":"Side Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/side-navbar"},{"slug":"directional-menu","title":"Directional Menu","docsUrl":"https://vault.hyperiux.com/effects/navigation/directional-menu"},{"slug":"unfold-navbar","title":"Unfold Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/unfold-navbar"},{"slug":"morphing-dock","title":"Morphing Dock","docsUrl":"https://vault.hyperiux.com/effects/navigation/morphing-dock"}]},{"slug":"side-navbar","title":"Side Navbar","category":{"id":"navigation","slug":"navigation","name":"Navigations"},"tier":"pro","summary":"A hamburger-triggered side navigation panel with primary links, contact details, and social routes for compact brand and portfolio navigation.","description":"Side Navbar for React opens a full-height navigation panel from a hamburger trigger for portfolios, brand sites, and compact navigation systems.","tags":["GSAP","CSS"],"dependencies":["gsap"],"install":"npx hyperiux add side-navbar","usage":"import SideNavbar from '@/components/side-navbar'\n\nconst page = () => {\n  return (\n    <>\n    <div className='w-screen h-screen bg-white'>\n    <SideNavbar/>\n    </div>\n    </>\n  )\n}\n\nexport default page","props":[{"name":"panelWidth","type":"number","default":50,"description":"Width of the sliding menu panel as a percentage of the viewport on desktop."},{"name":"openDuration","type":"number","default":0.5,"description":"Duration of the sidebar opening and closing slide."},{"name":"linksStagger","type":"number","default":0.05,"description":"Stagger between the main navigation links as they animate in."},{"name":"socialsStagger","type":"number","default":0.05,"description":"Stagger between the social links as they animate in."},{"name":"linkColor","type":"string","default":"#ffffff","description":"Color of the menu links, socials and divider."},{"name":"panelBackgroundColor","type":"string","default":"#000000","description":"Background color of the sliding menu panel (opacity is set separately)."},{"name":"panelOpacity","type":"number","default":0.2,"description":"Opacity of the panel background color."},{"name":"panelBlur","type":"string","default":"md","description":"Backdrop blur strength behind the panel."}],"overview":["Side Navbar opens a full-height navigation panel from a compact hamburger trigger.","It is built for websites where the navigation should feel deliberate without occupying the header all the time. The menu opens as a side panel, reveals primary links, keeps supporting information close, and gives the visitor a clear route back through a visible close control.","Use Side Navbar for portfolios, agency websites, campaign pages, product microsites, and editorial experiences where the navigation can behave like a designed moment. The page job is orientation: visitors should know what opened, where the important routes are, and how to close it without guessing.","The production risk is treating the menu like decoration. A side navbar is still navigation. Links need to be real links, the close control needs to be obvious, focus must move into the panel, Escape should close it, and focus should return to the hamburger trigger after closing."],"exampleUseCase":["An agency portfolio can use Side Navbar to keep the hero visually clean while still giving visitors direct access to Work, Services, Pricing, Docs, and Contact. The hamburger opens a full-height panel with primary routes, contact details, and social links. The outcome is clarity: navigation feels designed without hiding where the visitor can go next."],"bestFor":["Portfolio, agency, and campaign sites where the header should stay minimal.","Compact navigation systems that need primary links, contact details, and social links in one panel.","Brand-led sites where opening navigation can be a polished interaction without slowing route access."],"notFor":["Not for complex apps, dashboards, dense product navigation, large documentation sites, or menus with many nested levels.","Not for sites where all primary actions need to remain visible at all times."],"performance":["Animate transform and opacity rather than layout, avoid re-rendering the whole page when the menu opens, lock background scroll cleanly, and remove listeners after close or route change."],"accessibility":["Use a real button for the hamburger trigger with an accessible label. Move focus into the menu when it opens, trap focus while open if the panel behaves modally, support Escape close, and restore focus to the trigger when it closes. On mobile, keep tap targets large and make the close control easy to reach."],"commonMistakes":["Building the hamburger trigger with a generic div instead of a real button.","Opening a menu without moving keyboard focus into it.","Forgetting Escape close and focus restoration.","Letting the side panel cover content while background scroll remains active.","Hiding important navigation links behind hover-only states."],"faq":[{"question":"When should I use Side Navbar?","answer":"Use Side Navbar when a site needs compact header navigation that opens into a clear full-height menu panel."},{"question":"Should Side Navbar trap focus?","answer":"If the side panel behaves like an overlay and blocks interaction with the page behind it, yes. Focus should remain inside the menu until the visitor closes it."},{"question":"What should happen when a menu link is clicked?","answer":"The menu should close on navigation, route focus should move to the destination content, and background scroll should be restored."},{"question":"How should Side Navbar work on mobile?","answer":"Keep the trigger and close button tap-safe, make links large enough to press comfortably, and avoid tiny social links near screen edges."},{"question":"What should reduced motion do for Side Navbar?","answer":"Use an instant open/close state or a short fade. Remove long slides, staggered link entrances, and background movement."},{"question":"Can Hyperiux adapt Side Navbar for a real brand system?","answer":"Yes. A custom version should define menu structure, animation direction, active states, focus behavior, scroll lock, mobile layout, reduced-motion fallback, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/navigation/side-navbar","demoUrl":"https://vault.hyperiux.com/demo/side-navbar","related":[{"slug":"expanding-navbar","title":"Expanding Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/expanding-navbar"},{"slug":"elevate-navbar","title":"Elevate Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/elevate-navbar"}]},{"slug":"unfold-navbar","title":"Unfold Navbar","category":{"id":"navigation","slug":"navigation","name":"Navigations"},"tier":"pro","summary":"An animated navigation component for portfolios, agency websites, SaaS landing pages, product microsites, and brand-led interfaces where the menu should feel like part of the experience, not a default browser afterthought.","description":"Unfold Navbar for React expands a compact navigation trigger into a layered menu system for portfolios, agency sites, product pages, and brand-led interfaces.","tags":["GSAP"],"dependencies":["@gsap/react","gsap"],"install":"npx hyperiux add unfold-navbar","usage":"import UnfoldNavbar from '@/components/effects/unfold-navbar'\n\nconst page = () => {\n  return (\n   <UnfoldNavbar/>\n  )\n}","props":[{"name":"backgroundColor","type":"string","default":"#ebebeb","description":"Navbar surface color."},{"name":"textColor","type":"string","default":"#111111","description":"Main links and menu icon color."},{"name":"mutedColor","type":"string","default":"rgba(0,0,0,0.5)","description":"Numbers, secondary links, captions, and dimmed links color."},{"name":"animationSpeed","type":"number","default":1,"description":"Opening and closing speed multiplier. Higher values animate faster."},{"name":"charStagger","type":"number","default":0.015,"description":"Delay between characters on link hover, in seconds."},{"name":"showLinkUnderline","type":"boolean","default":false,"description":"Show the animated underline on link hover."},{"name":"showNumbers","type":"boolean","default":false,"description":"Show numbers beside primary links."},{"name":"dimInactiveLinks","type":"boolean","default":true,"description":"Dim other primary links while hovering a row."},{"name":"showFeature","type":"boolean","default":true,"description":"Show the feature image and caption."}],"overview":["Unfold Navbar turns navigation into a deliberate reveal.","A compact trigger opens into a larger menu surface where links, supporting actions, and secondary details unfold in sequence. The movement can feel like panels opening, sections expanding, or a navigation layer being assembled on demand. The user gets a clear browsing structure without the page needing a permanently heavy header.","Use Unfold Navbar when the navigation needs more character than a basic horizontal menu but less interruption than a full experimental route transition. It works for portfolio sites, creative studios, product launches, SaaS pages, editorial projects, campaign microsites, and compact brand websites where the menu carries identity as well as utility.","The page job is controlled access. The user should know where the menu is, what opened, how to choose a route, and how to close it. The unfold animation should add ceremony to navigation, not make the user negotiate with a folding chair before finding the Work page."],"exampleUseCase":["A creative studio can use Unfold Navbar to keep the header minimal while still giving the menu a strong branded presence. The user taps the trigger, the navigation opens in layers, and primary routes appear with enough space to feel intentional rather than squeezed into a thin top bar.","The outcome is identity with utility. The site keeps a clean first impression, but the navigation still feels designed, structured, and memorable.","A SaaS or product launch page can use the same component for a compact header that opens into product sections, documentation links, pricing, templates, changelog, and a focused conversion CTA."],"bestFor":["Portfolio and agency sites where navigation should carry brand presence.","SaaS and product pages that need a compact header with a richer open state.","Campaign microsites where the menu should feel authored, not generic.","Editorial and creative pages where links need more visual rhythm.","Product ecosystems with primary routes, secondary resources, and one clear CTA.","Mobile-first layouts where an expandable menu is more practical than a wide nav bar."],"notFor":["Not for dense enterprise navigation with many nested levels, complex permissions, admin dashboards, documentation sidebars, ecommerce mega menus, or workflows where speed matters more than ceremony.","Not for hiding routes behind unclear icons or experimental triggers. A menu can unfold beautifully and still fail if users do not know it is a menu.","Not for pages where the animation delays basic navigation. Getting to another page should not feel like waiting for a stage curtain to remember its cue."],"performance":["Keep the menu animation lightweight. Animate transform, opacity, clip-path, or scale with restraint. Avoid layout-heavy transitions across many nested elements, and do not recalculate menu positions on every frame.","Stagger links subtly. Long stagger chains can make navigation feel slow, especially when users already know where they want to go. Clean up listeners, scroll locks, timers, and animation instances when the component unmounts."],"accessibility":["Use a semantic navigation landmark and real links. The trigger should be a button with a clear accessible label and expanded state. Support keyboard operation, visible focus states, Escape-to-close, and focus return to the trigger.","If the open menu behaves like an overlay, keep focus inside the menu while it is active or make the focus order predictable and safe. On mobile, make links large enough to tap, keep close controls obvious, and avoid tiny secondary actions near screen edges.","For reduced motion, remove unfolding travel, long stagger, panel rotation, and spring overshoot. Open the menu instantly or with a minimal fade while keeping the same routes available."],"commonMistakes":["Using a div instead of a button for the menu trigger.","Making the menu icon unclear.","Forgetting Escape-to-close and focus return.","Letting the menu cover the page without a visible close action.","Animating every link so slowly that navigation becomes friction.","Hiding important routes inside decorative panels.","Building a beautiful menu with no active route state.","Forcing the same unfold layout onto mobile without checking tap comfort."],"faq":[{"question":"What is Unfold Navbar?","answer":"Unfold Navbar is a React navigation component that expands from a compact trigger into a staged animated menu surface."},{"question":"When should I use Unfold Navbar?","answer":"Use it for portfolios, agency websites, SaaS pages, product launches, editorial projects, and brand-led interfaces where the menu should feel designed without overwhelming the header."},{"question":"Is Unfold Navbar the same as a dropdown menu?","answer":"No. A dropdown usually opens a small list below a trigger. Unfold Navbar creates a larger navigation surface where links and supporting content can reveal in a more composed sequence."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove long unfolding movement, staggered link travel, rotation, and spring overshoot. Open the menu instantly or with a minimal fade."},{"question":"Is Unfold Navbar good for complex enterprise navigation?","answer":"Usually no. It is better for curated navigation systems. Large enterprise menus with many nested levels may need a structured mega menu, sidebar, search, or documentation navigation."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/navigation/unfold-navbar","demoUrl":"https://vault.hyperiux.com/demo/unfold-navbar","related":[{"slug":"side-navbar","title":"Side Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/side-navbar"},{"slug":"directional-menu","title":"Directional Menu","docsUrl":"https://vault.hyperiux.com/effects/navigation/directional-menu"},{"slug":"elevate-navbar","title":"Elevate Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/elevate-navbar"},{"slug":"morphing-dock","title":"Morphing Dock","docsUrl":"https://vault.hyperiux.com/effects/navigation/morphing-dock"}]},{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"A playful cursor trail effect that leaves butterfly-like forms behind the pointer for creative, retail, culture, and campaign pages.","description":"Butterfly Trail Cursor for React leaves playful forms behind the pointer for culture, retail, and campaign pages that can carry delight.","tags":["Drei","React Three Fiber","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","three"],"install":"npx hyperiux add butterfly-trail-cursor","usage":"import ButterflyTrailCursor from \"@/components/effects/butterfly-trail-cursor\";\nimport React from \"react\";\n\nconst page = () => {\n  return (\n    <>\n      <ButterflyTrailCursor />\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"butterflyCount","type":"number","default":14,"description":"Number of trail butterflies."},{"name":"trailDistance","type":"number","default":18,"description":"Distance between trail items."},{"name":"wingColor","type":"string","default":"#ffffff","description":"Primary butterfly wing color."},{"name":"size","type":"number","default":28,"description":"Rendered butterfly size."},{"name":"followSpeed","type":"number","default":0.18,"description":"How quickly the trail follows the pointer."}],"overview":["Butterfly Trail Cursor turns pointer movement into atmosphere: small playful forms trail behind the pointer.","Use it on creative homepages, portfolios, campaign pages, and brand experiments where the cursor can carry the visual language. Keep it off dashboards, checkout, forms, and utility-heavy product screens.","The production risk is restraint. Treat the cursor layer as throwaway: switch it off on touch, keep focus states visible, and let nothing about clicking depend on it. If the page falls apart once you remove the effect, the cursor was doing work it should not own."],"exampleUseCase":["A botanical garden can use Butterfly Trail Cursor on the landing page for its spring exhibition. As the visitor moves the pointer across the hero, small animated butterflies appear along the path, flutter away, and fade out.","The outcome is delight. The season's theme becomes something the visitor sets in motion, and because the layer is decorative, ticket and opening-hours links stay clear and work without it."],"bestFor":["Portfolio and campaign heroes where playful pointer motion fits the brand personality.","Desktop-only decorative layers that can disappear without removing content or controls.","Butterfly Trail Cursor gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Butterfly Trail Cursor on coarse pointers."],"accessibility":["Switch it off for coarse pointers and leave touch native; anything revealed by the cursor needs a visible or tap-accessible alternative."],"commonMistakes":["Letting Butterfly Trail Cursor cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Butterfly Trail Cursor?","answer":"Use it when a creative homepage, portfolio, or campaign section needs small playful forms trailing the pointer not on utility flows."},{"question":"Does Butterfly Trail Cursor work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behaviour."},{"question":"Can Butterfly Trail Cursor reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Butterfly Trail Cursor behave around links and buttons?","answer":"Native click targets, visible focus, hover states, and modal stacking all have to keep working underneath it."},{"question":"What should reduced motion do for Butterfly Trail Cursor?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor","demoUrl":"https://vault.hyperiux.com/demo/butterfly-trail-cursor","related":[{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"card-drift","title":"Card Drift","docsUrl":"https://vault.hyperiux.com/effects/components/card-drift"},{"slug":"cursor-move","title":"Cursor Move","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/cursor-move"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"},{"slug":"elevate-navbar","title":"Elevate Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/elevate-navbar"}]},{"slug":"character-trail","title":"Character Trail","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"A typographic cursor trail effect that turns pointer movement into a stream of characters for editorial, portfolio, and developer-tool pages.","description":"Character Trail Cursor for React turns pointer movement into typographic texture for editorial, portfolio, and developer-tool pages.","tags":["Vanilla JS"],"dependencies":[],"install":"npx hyperiux add character-trail","usage":"import CharacterTrail from '@/components/effects/character-trail'\n\nexport default function Page() {\n\n  return (\n    <>\n<CharacterTrail/>\n    </>\n  )\n}","props":[{"name":"characters","type":"string","default":"HYPERIUX","description":"Characters emitted by the cursor trail."},{"name":"trailLength","type":"number","default":24,"description":"Maximum number of visible characters."},{"name":"fontSize","type":"number","default":18,"description":"Size of each trail character."},{"name":"textColor","type":"string","default":"#ffffff","description":"Trail character color."},{"name":"colorCount","type":"number","default":6,"description":"How many of the colors below the trail cycles through (1-6)."},{"name":"color1","type":"string","default":"#1a1a2e","description":"Hex code for trail color 1."},{"name":"color2","type":"string","default":"#c8f752","description":"Hex code for trail color 2."},{"name":"color3","type":"string","default":"#7D4E57","description":"Hex code for trail color 3."},{"name":"color4","type":"string","default":"#5c3d8f","description":"Hex code for trail color 4."},{"name":"color5","type":"string","default":"#2d2d2d","description":"Hex code for trail color 5."},{"name":"color6","type":"string","default":"#c3dfe0","description":"Hex code for trail color 6."},{"name":"textColor1","type":"string","default":"#ffffff","description":"Hex code for the text on trail color 1."},{"name":"textColor2","type":"string","default":"#1a1a2e","description":"Hex code for the text on trail color 2."},{"name":"textColor3","type":"string","default":"#ffffff","description":"Hex code for the text on trail color 3."},{"name":"textColor4","type":"string","default":"#ffffff","description":"Hex code for the text on trail color 4."},{"name":"textColor5","type":"string","default":"#ffffff","description":"Hex code for the text on trail color 5."},{"name":"textColor6","type":"string","default":"#1a1a2e","description":"Hex code for the text on trail color 6."},{"name":"fadeDuration","type":"number","default":0.8,"description":"Time before trail characters fade out."}],"overview":["Character Trail Cursor turns pointer movement into atmosphere: characters follow the pointer as texture.","It fits creative homepages, portfolios, campaigns, and brand-led experiments where the pointer becomes part of the identity, and not dashboards, checkout, forms, or dense product screens.","The risk in production is keeping the pointer optional. The effect must turn off cleanly on coarse pointers, leave focus outlines intact, and never sit between the user and a click. A page that breaks when the cursor layer is removed has leaned on it too hard."],"exampleUseCase":["An independent culture magazine can use Character Trail in its homepage hero, with the characters set to the publication's name. As the visitor moves the pointer, round colored cells snap to a grid along the path and spell the name letter by letter, then fade away in sequence once the pointer rests.","The outcome is voice. The masthead becomes something the reader writes with their own movement, while the headlines and article links underneath stay untouched.","A developer-tool landing page can use the same effect with a short command or product name to give the hero a typographic texture."],"bestFor":["Editorial and developer-tool pages where the cursor can leave a typographic texture.","Short hero sections where the text trace supports tone without becoming the message.","Character Trail Cursor gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Character Trail Cursor on coarse pointers."],"accessibility":["Turn the effect off on touch and keep native gestures intact, and give any cursor-only reveal a visible or tappable alternative."],"commonMistakes":["Letting Character Trail Cursor cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Character Trail Cursor?","answer":"Use it when an editorial or developer-tool page needs typed characters following the pointer as texture not on utility flows."},{"question":"Does Character Trail Cursor work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behaviour."},{"question":"Can Character Trail Cursor reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should the Character Trail Cursor behave around links and buttons?","answer":"Clicks, focus outlines, hover states, and modal layering must all behave normally with the effect in place."},{"question":"What should reduced motion do for the Character Trail Cursor?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/character-trail","demoUrl":"https://vault.hyperiux.com/demo/character-trail","related":[{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"split-canvas","title":"Split Canvas","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/split-canvas"},{"slug":"draggable-marquee","title":"Draggable Marquee","docsUrl":"https://vault.hyperiux.com/effects/components/draggable-marquee"}]},{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"A branded 3D object effect where a stream of coffee beans scatters and swirls away from the pointer, for food, retail, hospitality, and campaign-led websites.","description":"Coffee Bean Cursor for React flows a stream of 3D coffee beans that scatter from the pointer, for food, retail, and campaign pages with a signature motif.","tags":["Drei","React Three Fiber","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","three"],"install":"npx hyperiux add coffee-bean-cursor","usage":"import CoffeeBeanCursor from '@/components/effects/coffee-bean-cursor'\n\nconst page = () => {\n  return (\n    <>\n    <CoffeeBeanCursor />\n    </>\n  )\n}\n\nexport default page","props":[{"name":"beanCount","type":"number","default":300,"description":"Number of beans in the flowing cursor field."},{"name":"beanColor","type":"string","default":"#392416","description":"Coffee bean color."},{"name":"size","type":"number","default":22,"description":"Rendered bean size."},{"name":"rotationSpeed","type":"number","default":1,"description":"Rotation speed for each bean."},{"name":"mouseInteraction","type":"boolean","default":true,"description":"Enables mouse-reactive bean movement."},{"name":"scatterIntensity","type":"number","default":1,"description":"Strength and radius of the mouse scatter force."}],"overview":["Coffee Bean Cursor turns pointer movement into atmosphere: a stream of 3D coffee beans scatters and swirls around the cursor.","It belongs on creative homepages, portfolios, campaign pages, and brand-led experiments where the cursor can become part of the visual language. It does not belong on dashboards, checkout, forms, or utility-heavy product screens.","In production, the risk is precision. The cursor layer must stay disposable, disable on coarse pointers, preserve visible focus, and never hide click intent. If removing the effect breaks the page, the cursor has been promoted past its pay grade."],"exampleUseCase":["A specialty coffee roaster can use Coffee Bean Cursor in its homepage hero. A stream of 3D coffee beans flows across the screen behind the headline, and as the pointer moves through it the beans scatter and swirl away, then drift back into the flow, with a warm light following the cursor.","The outcome is a signature. The brand's product becomes the interaction, while the shop and subscription pages that follow stay free of the effect so ordering remains precise."],"bestFor":["Food, retail, and campaign pages where a field of branded 3D objects can react to the pointer.","Experience-led homepages where the bean stream adds delight but ordering and navigation stay precise.","Coffee Bean Cursor gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one full-viewport WebGL canvas, lower beanCount on weaker devices, rely on the built-in pause when offscreen or the tab is hidden, and disable Coffee Bean Cursor on coarse pointers."],"accessibility":["Disable on coarse pointers and preserve normal touch behavior. Cursor-only reveals must have visible or tap-accessible alternatives."],"commonMistakes":["Letting Coffee Bean Cursor cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Coffee Bean Cursor?","answer":"Use it when a food, retail, or campaign page needs a stream of branded 3D objects reacting to the cursor, not on utility flows."},{"question":"Does Coffee Bean Cursor work on mobile?","answer":"It has no touch handling and keeps rendering the WebGL scene, so disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behavior."},{"question":"Can Coffee Bean Cursor reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Coffee Bean Cursor behave around links and buttons?","answer":"It must preserve native click meaning, visible focus, hover states, and modal layering."},{"question":"What should reduced motion do for Coffee Bean Cursor?","answer":"The component has no reduced-motion check and the beans flow continuously, so swap in a static frame or drop the effect yourself. The native cursor is never hidden."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor","demoUrl":"https://vault.hyperiux.com/demo/coffee-bean-cursor","related":[{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"split-canvas","title":"Split Canvas","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/split-canvas"},{"slug":"character-trail","title":"Character Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/character-trail"},{"slug":"donut-particles","title":"Donut Particles","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/donut-particles"}]},{"slug":"colorful-cursor-aura","title":"Colorful Cursor Aura","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"A headline cursor effect where three rings of color follow the pointer inside the letters of large text, without hiding controls or page content.","description":"Colorful Cursor Aura for React adds pointer-following color rings inside a large headline for creative homepages that need atmosphere without hiding controls. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add colorful-cursor-aura","usage":"import ColorfulCursorAura from '@/components/effects/colorful-cursor-aura'\n\nconst Page = () => {\n  return (\n    <>\n   <ColorfulCursorAura/>\n    </>\n  )\n}","props":[{"name":"auraSize","type":"number","default":325,"description":"Diameter of the cursor aura."},{"name":"color1","type":"string","default":"#a78bfa","description":"Outer aura ring color."},{"name":"color2","type":"string","default":"#fb7185","description":"Middle aura ring color."},{"name":"color3","type":"string","default":"#fde68a","description":"Inner aura ring color."},{"name":"followSpeed","type":"number","default":0.12,"description":"How quickly the aura follows the cursor."}],"overview":["Colorful Cursor Aura turns pointer movement into atmosphere: three rings of color follow the pointer inside the letters of a large headline.","Use it on creative homepages, portfolios, campaign pages, and brand experiments where the cursor can carry the visual language. Keep it off dashboards, checkout, forms, and utility-heavy product screens.","The thing to watch is restraint. Treat the cursor layer as throwaway: switch it off on touch, keep focus states visible, and let nothing about clicking depend on it. If the page falls apart once you remove the effect, the cursor was doing work it should not own."],"exampleUseCase":["A contemporary arts festival can use Colorful Cursor Aura on a large headline statement near the top of its homepage. As the visitor moves the pointer, three rings of color follow it inside the letters, layering the festival palette over the words without covering anything around them.","The outcome is mood. The statement feels warm and responsive, and on smaller screens it simply reads as a clean headline."],"bestFor":["Creative homepages that need a large headline to react to the pointer instead of image trails.","Brand pages where the cursor can add mood while leaving controls visually clear.","Colorful Cursor Aura gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Colorful Cursor Aura on coarse pointers."],"accessibility":["Switch it off for coarse pointers and leave touch native; anything revealed by the cursor needs a visible or tap-accessible alternative."],"commonMistakes":["Letting Colorful Cursor Aura cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Colorful Cursor Aura?","answer":"Use it when a creative homepage headline needs rings of color following the pointer inside its letters, not on utility flows."},{"question":"Does Colorful Cursor Aura work on mobile?","answer":"Below 1025px wide the color layer is not rendered and the headline shows as plain text. It checks width, not pointer type, so add a coarse-pointer query if large touch screens should get the plain version too."},{"question":"Can Colorful Cursor Aura reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Colorful Cursor Aura behave around links and buttons?","answer":"Native click targets, visible focus, hover states, and modal stacking all have to keep working underneath it."},{"question":"What should reduced motion do for Colorful Cursor Aura?","answer":"The component has no reduced-motion check, so turn off the pointer-following rings and the scroll entry animation yourself. The native cursor is never hidden."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/colorful-cursor-aura","demoUrl":"https://vault.hyperiux.com/demo/colorful-cursor-aura","related":[{"slug":"milky-way","title":"Milky Way","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/milky-way"},{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"grid-tunnel","title":"Grid Tunnel","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/grid-tunnel"},{"slug":"draggable-canvas","title":"Draggable Canvas","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/draggable-canvas"},{"slug":"gooey-counter","title":"Gooey Counter","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter"}]},{"slug":"cursor-move","title":"Cursor Move","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"Make the page respond to pointer position with animated text, coordinates, or visual feedback that feels reactive without taking over.","description":"Cursor Move for React tracks pointer position with animated coordinates, bending letters, and desktop-only cursor feedback.","tags":["Mouse tracking"],"dependencies":[],"install":"npx hyperiux add cursor-move","usage":"import CursorMove from '@/components/effects/cursor-move'\n\nconst page = () => {\n  return (\n    <>\n         <CursorMove\n          text=\"Hello!\"\n          backgroundClassName=\"bg-zinc-950\"\n        />\n    </>\n  )\n}\n\nexport default page","props":[{"name":"text","type":"string","default":"hello!","description":"Text affected by cursor movement."},{"name":"textColor","type":"color","default":"#f97316","description":"Color of the cursor-reactive text."},{"name":"showCrosshair","type":"boolean","default":true,"description":"Shows the cursor-following crosshair."},{"name":"crosshairVariant","type":"string","default":"solid","description":"Crosshair line style."},{"name":"showCursorDot","type":"boolean","default":true,"description":"Shows the small cursor dot."},{"name":"crosshairColor","type":"color","default":"#ffffff","description":"Crosshair line color (drawn at 20% strength)."},{"name":"cursorDotColor","type":"color","default":"#f97316","description":"Color of the small cursor dot."},{"name":"lerp","type":"number","default":0.2,"description":"Mouse-follow smoothing amount; lower values feel smoother and slower, higher values track faster."},{"name":"showCoordinates","type":"boolean","default":true,"description":"Shows the live x/y coordinate readout."}],"overview":["Cursor Move turns pointer position into visible feedback. The page reacts like it knows exactly where the visitor is.","Use Cursor Move when a homepage, demo page, or experimental section wants pointer tracking to be part of the interaction layer. The page job is responsiveness: cursor movement should feel connected to text, coordinates, or visual guides without taking control away from the user.","The production risk is novelty fatigue. Pointer-tracking demos are fun for five seconds and annoying forever if they cover content, slow input, or keep running on touch devices. The effect should be short, optional, and easy to remove."],"exampleUseCase":["A creative developer portfolio can use Cursor Move in a short hero interaction where coordinates and text distortion introduce the site’s personality. The outcome is responsiveness: the visitor feels the page react before they scroll into the work."],"bestFor":["Creative portfolio heroes where pointer tracking supports the brand personality.","Experimental landing sections that need a small desktop-only interaction.","Demo pages where coordinates, text bending, or cursor response is the point."],"notFor":["Not for product flows, forms, dashboards, checkout, mobile-first pages, or any screen where pointer movement would distract from task completion.","Not for long pages where the effect follows the visitor forever."],"performance":["Throttle pointer updates with requestAnimationFrame, avoid updating React state on every raw mouse event where unnecessary, and clean up listeners on route change."],"accessibility":["Disable on coarse pointers and keep native touch behavior. Do not expose rapidly changing coordinates to assistive technology unless they are essential, which they usually are not. Reduced-motion users should get static text."],"commonMistakes":["Updating layout on every pointer move.","Making coordinates or animated letters the only readable text.","Forgetting the “desktop only” nature of the interaction."],"faq":[{"question":"When should I use Cursor Move?","answer":"Use it when pointer position itself is part of a short creative or technical interaction."},{"question":"Should Cursor Move run across the whole site?","answer":"Usually no. Keep it scoped to a hero, demo, or controlled section so it does not become background noise."},{"question":"How should it handle coordinates?","answer":"Coordinates can be visual decoration, but they should not be announced continuously or required to understand the page."},{"question":"What should happen on mobile?","answer":"Disable the cursor-specific behavior and show a static section or tap-safe alternative."},{"question":"What should reduced motion do?","answer":"Remove pointer-following motion, letter bending, coordinate movement, and continuous tracking effects."},{"question":"Can Hyperiux adapt Cursor Move for a real brand system?","answer":"Yes. A custom version should define pointer behavior, text response, coordinate treatment, motion boundaries, fallback behavior, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/cursor-move","demoUrl":"https://vault.hyperiux.com/demo/cursor-move","related":[{"slug":"full-screen-crosshair","title":"Full Screen Crosshair","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/full-screen-crosshair"},{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"}]},{"slug":"dotted-trail","title":"Dotted Trail","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"free","summary":"A pointer-reactive cursor effect for SaaS heroes, AI products, developer tools, creative portfolios, technical landing pages, and interactive editorial sections where the background should respond without stealing the interface.","description":"Dotted Trail for React adds a soft glowing cursor trail over a dotted field for technical pages, product intros, creative layouts, and interactive brand moments.","tags":[],"dependencies":[],"install":"npx hyperiux add dotted-trail","usage":"import DottedTrail from '@/components/effects/dotted-trail'\n\nconst page = () => {\n  return (\n    <>\n     <DottedTrail/>  \n  </>\n  )\n}","props":[{"name":"colorA","type":"color","default":"#ff4fd8","description":"Core color at the cursor."},{"name":"colorB","type":"color","default":"#8b5cf6","description":"Outer color the blend runs toward."},{"name":"backgroundColor","type":"color","default":"#ffffff","description":"Page color behind the grid."},{"name":"dotColor","type":"color","default":"#d1d1d1","description":"Dot color at rest."},{"name":"activeDotColor","type":"color","default":"#ffffff","description":"Dot color under the trail."},{"name":"headRadius","type":"number","default":80,"description":"Radius of the blob at the cursor."},{"name":"glowRadius","type":"number","default":300,"description":"Reach of the soft glow around the cursor."},{"name":"followSpeed","type":"number","default":0.22,"description":"How quickly the trail chases the cursor."},{"name":"trailLength","type":"number","default":18,"description":"How many nodes the tail trails behind."},{"name":"fadeOnIdle","type":"boolean","default":true,"description":"Fade the cursor out when it rests."},{"name":"idleDelay","type":"number","default":100,"description":"Stillness before the fade starts, ms."},{"name":"idleFade","type":"number","default":1100,"description":"How long the fade takes, ms."},{"name":"rimInner","type":"number","default":2.1,"description":"Where the blend starts, inside the shape."},{"name":"rimOuter","type":"number","default":1.5,"description":"Where the blend finishes, past the edge."},{"name":"edgeDesaturate","type":"number","default":0.3,"description":"Pulls the fading edge back toward colorA."},{"name":"edgeDesaturateSpan","type":"number","default":2.1,"description":"Band width that desaturation acts over."},{"name":"tailTilt","type":"number","default":0.18,"description":"Extra drift toward colorB along the tail."},{"name":"dotSpacing","type":"number","default":34,"description":"Distance between dots in the grid."},{"name":"dotRadius","type":"number","default":1.2,"description":"Radius of an idle dot."}],"overview":["Dotted Trail turns pointer movement into a visible field of motion.","As the user moves, a soft glow follows the cursor and exposes or intensifies nearby dots. The trail gives the page a sense of responsiveness without replacing the cursor, blocking content, or forcing the visitor into a heavy 3D scene. The effect feels technical, atmospheric, and tactile when it stays behind the main interface.","Use Dotted Trail when a page needs a lightweight interaction layer around a hero, feature section, product intro, or visual story. It works especially well for AI pages, infrastructure brands, developer tools, data products, cyber interfaces, creative studios, and experimental landing pages where a dotted grid already fits the visual language.","The page job is environmental feedback. The user should feel the surface reacting to movement, but the content must remain readable, clickable, and calm. The trail is atmosphere. The page is still the product."],"exampleUseCase":["A developer-tool homepage can use Dotted Trail in the hero background. The pointer creates a soft glowing path through a dotted grid while the headline, CTA, and product message remain still and readable.","The outcome is technical atmosphere. The page feels reactive and engineered without needing a heavy WebGL hero or distracting animation loop.","An AI product page can use the same effect around a feature intro, making the surface feel computational while keeping the actual value proposition clear."],"bestFor":["SaaS, AI, developer-tool, cyber, and infrastructure landing pages.","Hero backgrounds where interaction should feel technical but lightweight.","Product intros that need ambient motion around a stable headline.","Creative portfolio sections where pointer movement can add tactility.","Editorial or campaign pages where a dotted field supports the visual system.","Dark or light technical layouts where a glow trail can create controlled depth."],"notFor":["Not for dense dashboards, checkout flows, forms, documentation, legal pages, pricing tables, or sections where users need quiet utility.","Not for mobile-first experiences that cannot use pointer proximity meaningfully.","Not for pages already overloaded with particles, shaders, video backgrounds, and scroll effects. A cursor trail should add signal, not join the motion committee and start voting against readability."],"performance":["Keep the dot field lightweight, limit blur size, throttle pointer work with requestAnimationFrame , and avoid React state updates on every pointer move. Store fast-changing pointer values in refs where possible.","Pause or disable the effect when the section is offscreen. Disable or simplify it on touch devices. If using Canvas, cap device pixel ratio and avoid redrawing more than necessary.","The effect should feel immediate without making the browser work like it is rendering a nebula for every mouse move."],"accessibility":["Dotted Trail is decorative. It should not communicate essential information, hide text, or interfere with interaction.","On touch devices, disable the pointer trail, show a static dotted field, or use a very subtle non-interactive background. For reduced motion, remove the moving trail and render a static dot texture or calm background state.","Maintain sufficient contrast between text and the glowing layer. The trail should never pass over copy in a way that reduces readability."],"commonMistakes":["Putting the trail layer above clickable elements.","Making the glow too bright behind text.","Updating React state on every pointer move.","Using too many dots or excessive blur.","Forgetting to disable the effect on touch devices.","Treating the dotted trail as meaningful content instead of decoration.","Running the effect continuously when the section is not visible."],"faq":[{"question":"What is Dotted Trail?","answer":"Dotted Trail is a React cursor effect where pointer movement creates a soft glowing trail across a dotted field."},{"question":"When should I use Dotted Trail?","answer":"Use it for hero backgrounds, product intros, technical landing pages, creative portfolios, and brand sections where the surface should respond subtly to pointer movement."},{"question":"Is Dotted Trail a cursor replacement?","answer":"No. It is a decorative pointer-reactive layer. The native cursor should remain usable, and the effect should not block normal interaction."},{"question":"How should Liquid Glass Cursor behave around links and buttons?","answer":"It must preserve native click meaning, visible focus, hover states, and modal layering."},{"question":"Does Dotted Trail require Canvas?","answer":"Not always. It can be built with DOM and CSS gradients, masks, or pseudo-elements. A Canvas version may be used when the dot field or trail needs more procedural control. Confirm the shipped implementation before assuming the rendering method."},{"question":"What should reduced motion do?","answer":"Reduced motion should remove the moving trail, pointer-follow glow, and animated fading path. Show a static dotted surface or no effect."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/dotted-trail","demoUrl":"https://vault.hyperiux.com/demo/dotted-trail","related":[{"slug":"colorful-cursor-aura","title":"Colorful Cursor Aura","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/colorful-cursor-aura"},{"slug":"noise-ripple-cursor","title":"Noise Ripple Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/noise-ripple-cursor"},{"slug":"pixel-bloom","title":"Pixel Bloom Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/pixel-bloom"}]},{"slug":"fish-eye","title":"Fish Eye Cursor","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"A cursor magnification effect that distorts or enlarges nearby imagery for galleries, portfolios, and visual product sections.","description":"Fish Eye Cursor for React magnifies nearby imagery on hover for galleries and product visuals where detail earns the pointer effect.","tags":["Drei","React Three Fiber","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","three"],"install":"npx hyperiux add fish-eye","usage":"import FishEye from '@/components/effects/fish-eye'\n\nexport default function page() {\n    return (\n        <>\n        <div className='h-screen w-full bg-zinc-200 max-md:p-[20vw] max-sm:p-[10vw] max-md:flex-col flex items-start p-[5vw] pt-[6.5vw] justify-between max-md:justify-center max-md:gap-[10vw] max-md:items-center'>\n            <div className='h-[30vw] w-[30vw] max-md:size-[40vw] relative'>\n                <FishEye />\n            </div>\n        </div>\n           </>\n    )\n}","props":[{"name":"bulgeEffect","type":"number","default":1,"description":"Strength of the fish-eye bulge distortion."},{"name":"duration","type":"number","default":0.125,"description":"Smoothing duration for bulge strength changes."},{"name":"smoothness","type":"number","default":0.083,"description":"Cursor-follow smoothing duration."},{"name":"mouseInteractive","type":"boolean","default":true,"description":"Enables cursor-driven fish-eye distortion."}],"overview":["Fish Eye Cursor turns pointer movement into atmosphere: the pointer magnifies nearby content.","It belongs on creative homepages, portfolios, campaign pages, and brand-led experiments where the cursor can become part of the visual language. It does not belong on dashboards, checkout, forms, or utility-heavy product screens.","The production risk is precision. The cursor layer must stay disposable, disable on coarse pointers, preserve visible focus, and never hide click intent. If removing the effect breaks the page, the cursor has been promoted past its pay grade."],"exampleUseCase":["A landscape photographer can use Fish Eye Cursor on featured images in a portfolio. As the pointer moves over a photograph, a bulge distortion follows it and enlarges the area underneath, inviting visitors to look closer at texture, light, and detail.","The outcome is curiosity. The magnification is optional, the photograph still reads as a complete image without a pointer, and the gallery navigation works the same with or without the effect."],"bestFor":["Image-led portfolios where hover can magnify optional visual detail.","Galleries where inspection is useful but the same content still works without a pointer.","Fish Eye Cursor gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Fish Eye Cursor on coarse pointers."],"accessibility":["Disable on coarse pointers and preserve normal touch behavior. Cursor-only reveals must have visible or tap-accessible alternatives."],"commonMistakes":["Letting Fish Eye Cursor cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Fish Eye Cursor?","answer":"Use it when an image-led page needs the pointer to magnify nearby content on hover not on utility flows."},{"question":"Does Fish Eye Cursor work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behaviour."},{"question":"Can Fish Eye Cursor reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Fish Eye Cursor behave around links and buttons?","answer":"It must preserve native click meaning, visible focus, hover states, and modal layering."},{"question":"What should reduced motion do for Fish Eye Cursor?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/fish-eye","demoUrl":"https://vault.hyperiux.com/demo/fish-eye","related":[{"slug":"milky-way","title":"Milky Way","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/milky-way"},{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"grid-lift","title":"Grid Lift","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/grid-lift"},{"slug":"interactive-arrows","title":"Interactive Arrows","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/interactive-arrows"},{"slug":"gooey-counter","title":"Gooey Counter","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter"}]},{"slug":"full-screen-crosshair","title":"Full Screen Crosshair","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"Turn pointer movement into a precise viewport-wide tracking layer for technical, cyber, and experimental desktop experiences.","description":"Full Screen Crosshair for React tracks pointer movement across the viewport for technical, editorial, and experimental desktop experiences.","tags":["Mouse tracking"],"dependencies":[],"install":"npx hyperiux add full-screen-crosshair","usage":"import FullScreenCrosshair from \"@/components/effects/full-screen-crosshair\";\n\nexport default function Page() {\n  return (\n    <main className=\"h-screen w-screen relative bg-[#211951] text-[#826fffaa]\">\n      <FullScreenCrosshair\n        thickness={0.5}\n        lerpFactor={0.1}\n        hideNativeCursor\n        color=\"#F0F3FF\"\n        centerContent=\"•\"\n      />\n </main>\n );\n}","props":[{"name":"color","type":"color","default":"#000000","description":"Crosshair line and center color."},{"name":"centerContent","type":"string","default":"•","description":"Text or symbol shown at the cursor center."},{"name":"hideNativeCursor","type":"boolean","default":true,"description":"Hides the system cursor while the crosshair is active."},{"name":"gap","type":"number","default":20,"description":"Gap around the center symbol."},{"name":"thickness","type":"number","default":1,"description":"Line thickness in pixels."},{"name":"centerSize","type":"number","default":24,"description":"Center symbol size in pixels."},{"name":"smooth","type":"boolean","default":true,"description":"Enables smoothed cursor tracking."},{"name":"lerpFactor","type":"number","default":0.14,"description":"Controls cursor smoothing speed."}],"overview":["Full Screen Crosshair turns pointer movement into a measurement layer. The page feels inspected, targeted, and slightly dangerous in a good way.","Use Full Screen Crosshair when a technical, cyber, AI, editorial, or experimental brand wants the pointer to become part of the visual language. The page job is precision: movement should make the interface feel deliberate, not decorated.","The production risk is interference. A full-screen cursor layer can cover focus rings, fight selection, obscure controls, or feel absurd on touch devices. Treat it as disposable: disable it on coarse pointers, keep it below interactive UI, and make sure the page works perfectly without it."],"exampleUseCase":["A cybersecurity landing page can use Full Screen Crosshair in the hero to make the page feel like an active targeting surface. The outcome is precision: the brand tone sharpens while the headline and CTA remain fully usable."],"bestFor":["Technical, cyber, AI, and experimental homepages where pointer tracking supports the brand mood.","Desktop hero sections that can carry a full-screen visual cursor layer.","Interactive pages where the crosshair can vanish without removing content or control."],"notFor":["Not for dashboards, checkout, forms, editors, documentation, or mobile-first routes where native cursor and text selection matter more.","Not for pages where the crosshair sits above links, inputs, modals, or focus states."],"performance":["Use a single overlay layer, update position with requestAnimationFrame, avoid layout reads on every pointer move, and remove listeners on unmount."],"accessibility":["Disable on coarse pointers. Keep native touch behavior. Preserve visible focus states, text selection, and click targets. Reduced-motion users should get the normal cursor without tracking lines."],"commonMistakes":["Placing the crosshair above clickable UI.","Forgetting to disable the effect on touch devices.","Letting coordinate or line motion distract from the CTA."],"faq":[{"question":"When should I use Full Screen Crosshair?","answer":"Use it when a desktop technical or experimental page needs pointer movement to feel precise, inspected, or targeted."},{"question":"Should Full Screen Crosshair work on mobile?","answer":"No. Disable it on coarse pointers and provide normal touch behavior."},{"question":"Can it show coordinates?","answer":"It can, but coordinate text should be decorative unless the page has a real measurement use case. Avoid making screen readers announce pointer changes."},{"question":"How should it behave around buttons and links?","answer":"Buttons, links, focus rings, menus, and modals must remain above and fully usable. The crosshair should use pointer-events: none where appropriate."},{"question":"What should reduced motion do?","answer":"Disable continuous pointer-following movement and return to the native cursor or a static state."},{"question":"Can Hyperiux adapt Full Screen Crosshair for a real brand system?","answer":"Yes. A custom version should define crosshair style, coordinate behavior, z-index rules, reduced-motion fallback, mobile disablement, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/full-screen-crosshair","demoUrl":"https://vault.hyperiux.com/demo/full-screen-crosshair","related":[{"slug":"fractal-glass","title":"Fractal Glass","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass"},{"slug":"animated-form","title":"Animated Form","docsUrl":"https://vault.hyperiux.com/effects/components/animated-form"},{"slug":"fish-eye","title":"Fish Eye Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/fish-eye"},{"slug":"expanding-navbar","title":"Expanding Navbar","docsUrl":"https://vault.hyperiux.com/effects/navigation/expanding-navbar"}]},{"slug":"inertia-img","title":"Inertia Image","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"A weighted image-follow cursor effect where preview visuals trail the pointer with delayed motion.","description":"Inertia Image for React makes preview imagery follow the pointer with weight for portfolios and image-led case-study teasers. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add inertia-img","usage":"import InertiaImage from \"@/components/effects/inertia-img\";\n\nconst Page = () => {\n    return (\n        <>\n                <InertiaImage/>\n         </>\n    );\n};\n\nexport default Page;","props":[{"name":"strength","type":"number","default":1,"description":"Pointer inertia velocity multiplier."},{"name":"rotation","type":"number","default":0,"description":"Maximum image rotation while moving."},{"name":"scale","type":"number","default":1,"description":"Hover scale applied to images."},{"name":"duration","type":"number","default":0.4,"description":"Motion smoothing duration."}],"overview":["Inertia Image turns pointer movement into atmosphere: images follow movement with weight.","Use it on creative homepages, portfolios, campaign pages, and brand experiments where the cursor can carry the visual language. Keep it off dashboards, checkout, forms, and utility-heavy product screens.","The risk in production is restraint. Treat the cursor layer as throwaway: switch it off on touch, keep focus states visible, and let nothing about clicking depend on it. If the page falls apart once you remove the effect, the cursor was doing work it should not own."],"exampleUseCase":["An interior design studio can use Inertia Image on its projects index, where a grid of room photographs leads to each case study. When the pointer passes over an image, it is nudged in the direction of travel with physical weight, then settles back into place.","The outcome is tactility. The grid responds like a set of real prints on a table, while each project tile remains a normal link to the full case study."],"bestFor":["Portfolio indexes where preview images can follow movement with physical weight.","Desktop browsing moments where the trail previews work without replacing project cards.","Inertia Image gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Inertia Image on coarse pointers."],"accessibility":["Switch it off for coarse pointers and leave touch native; anything revealed by the cursor needs a visible or tap-accessible alternative."],"commonMistakes":["Letting Inertia Image cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Inertia Image?","answer":"Use it when a creative or portfolio page needs images following movement with weight not on utility flows."},{"question":"Does Inertia Image work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behavior."},{"question":"Can Inertia Image reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Inertia Image behave around links and buttons?","answer":"Native click targets, visible focus, hover states, and modal stacking all have to keep working underneath it."},{"question":"What should reduced motion do for Inertia Image?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/inertia-img","demoUrl":"https://vault.hyperiux.com/demo/inertia-img","related":[{"slug":"hover-stack","title":"Hover Stack","docsUrl":"https://vault.hyperiux.com/effects/components/hover-stack"},{"slug":"curved-plane","title":"Curved Plane","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/curved-plane"},{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"sticky-content-wrapper","title":"Sticky Content Wrapper","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/sticky-content-wrapper"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"}]},{"slug":"interactive-arrows","title":"Interactive Arrows","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"A pointer-reactive arrow effect that responds to cursor direction for guided galleries, campaign sections, and playful browsing moments.","description":"Interactive Arrows for React points the cursor toward available actions for guided campaign sections and playful product moments.","tags":["Canvas"],"dependencies":[],"install":"npx hyperiux add interactive-arrows","usage":"import InteractiveArrows from \"@/components/effects/interactive-arrows\";\n\nconst Page = () => {\n  return (\n    <>\n      <div className=\"max-md:hidden\">\n        <InteractiveArrows/>\n        <div className=\"absolute bottom-[0.5vw] text-center backdrop-blur-sm bg-black/10 left-1/2 -translate-x-1/2 z-40  px-7 py-2 rounded-full text-[#545454] w-[40vw] text-[1.1vw] max-md:hidden\">\n         Drift your cursor inside the canvas - the arrows will skitter, point and follow across every version.\n        </div>\n      </div>\n\n      {/* Mobile */}\n     <div className=\"hidden max-md:flex h-screen py-10 pb-20 relative flex-col items-start justify-between bg-[#f4f4f1] px-8\">\n\n  {/* Top */}\n  <div className=\"w-full\">\n    <p className=\"font-mono hidden text-lg max-sm:text-sm uppercase tracking-[0.35em] text-black/80\">\n      Desktop Experience\n    </p>\n\n    <div className=\"mt-4 h-px w-full bg-black/30\" />\n  </div>\n\n  {/* Bottom */}\n  <div className=\"w-full\">\n    <div className=\"text-left\">\n      <h1 className=\"font-mono max-sm:text-[12vw] max-md:text-[8vw] leading-[0.95] font-black uppercase text-black\">\n        Interactive\n        <br />\n        Arrows  \n      </h1>\n\n      <p className=\"mt-6 absolute left-1/2 top-90 -translate-x-1/2  rounded-lg bg-black/10 px-5 py-3 text-center text-lg max-sm:text-base leading-[1.3] text-black backdrop-blur-sm\">\n        Open on desktop to experience this effect\n      </p>\n    </div>\n  </div>\n\n</div>\n    </>\n  );\n};\n\nexport default Page;","props":[{"name":"arrowCount","type":"number","default":50,"description":"Number of arrows rendered in the field."},{"name":"arrowColor","type":"string","default":"#000000","description":"Arrow stroke or fill color."},{"name":"activeColor","type":"string","default":"#000000","description":"Arrow color near the pointer."},{"name":"reactionRadius","type":"number","default":30,"description":"Pointer radius that rotates or highlights arrows."},{"name":"stiffness","type":"number","default":0.12,"description":"How tightly arrows track the pointer. Higher is stiffer and snappier, lower is looser and smoother."}],"overview":["Interactive Arrows turns pointer movement into atmosphere: arrows respond to pointer direction.","It fits creative homepages, portfolios, campaigns, and brand-led experiments where the pointer becomes part of the identity, and not dashboards, checkout, forms, or dense product screens.","In production, the risk is keeping the pointer optional. The effect must turn off cleanly on coarse pointers, leave focus outlines intact, and never sit between the user and a click. A page that breaks when the cursor layer is removed has leaned on it too hard."],"exampleUseCase":["A film production company can use Interactive Arrows around the Play prompt of its showreel section. A field of arrows turns to point at the cursor wherever it moves, and the arrows closest to it change color and ease away, so the whole field leans toward the visitor's attention.","The outcome is anticipation. The section feels alive before the reel starts, while the play control and project links stay visible and keyboard reachable.","A design studio can use the same pattern beside a case-study index, where pointer direction reinforces the act of browsing."],"bestFor":["Galleries and case-study indexes where pointer direction can reinforce browsing intent.","Desktop interactions that still keep visible controls, links, and keyboard paths intact.","Interactive Arrows gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Interactive Arrows on coarse pointers."],"accessibility":["Turn the effect off on touch and keep native gestures intact, and give any cursor-only reveal a visible or tappable alternative."],"commonMistakes":["Letting Interactive Arrows cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Interactive Arrows?","answer":"Use it when a creative homepage needs arrows responding to pointer direction not on utility flows."},{"question":"Does Interactive Arrows work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behaviour."},{"question":"Can Interactive Arrows reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Interactive Arrows behave around links and buttons?","answer":"Clicks, focus outlines, hover states, and modal layering must all behave normally with the effect in place."},{"question":"What should reduced motion do for Interactive Arrows?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/interactive-arrows","demoUrl":"https://vault.hyperiux.com/demo/interactive-arrows","related":[{"slug":"colorful-cursor-aura","title":"Colorful Cursor Aura","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/colorful-cursor-aura"},{"slug":"text-convergence","title":"Text Convergence","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/text-convergence"},{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"dither-canvas","title":"Dither Canvas","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dither-canvas"}]},{"slug":"liquid-glass-cursor","title":"Liquid Glass Cursor","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"free","summary":"A premium cursor lens effect that bends the page surface under the pointer for agency homepages, portfolios, and launch pages.","description":"Liquid Glass Cursor for React: a lens bends the page under the pointer for premium portfolios and agency homepages, with a clean no-pointer fallback on touch.","tags":["Motion"],"dependencies":["motion"],"install":"npx hyperiux add liquid-glass-cursor","usage":"import LiquidGlassCursor from '@/components/effects/liquid-glass-cursor'\n\nconst page = () => {\n  return (\n    <>\n     <LiquidGlassCursor textHoverSize={130} />  \n  </>\n  )\n}","props":[{"name":"size","type":"number","default":217,"description":"Diameter of the lens in pixels."},{"name":"magnification","type":"number","default":1.06,"description":"Zoom level applied to the content copy under the lens."},{"name":"textHoverSize","type":"number","default":107,"description":"Lens diameter when hovering a data-cursor=\"text\" target."},{"name":"maxButtonWidth","type":"number","default":260,"description":"Lens width when hovering a data-cursor=\"button\" target."},{"name":"maxButtonHeight","type":"number","default":110,"description":"Lens height when hovering a data-cursor=\"button\" target."},{"name":"distortion","type":"number","default":36,"description":"SVG displacement strength for the glass refraction."},{"name":"aberration","type":"number","default":0.2,"description":"Chromatic aberration amount - how far the R/G/B channels split at the rim."}],"overview":["Liquid Glass Cursor turns pointer movement into atmosphere: a glass lens bends the page surface.","It belongs on creative homepages, portfolios, campaign pages, and brand-led experiments where the cursor can become part of the visual language. It does not belong on dashboards, checkout, forms, or utility-heavy product screens.","The thing to watch is precision. The cursor layer must stay disposable, disable on coarse pointers, preserve visible focus, and never hide click intent. If removing the effect breaks the page, the cursor has been promoted past its pay grade."],"exampleUseCase":["An architecture studio can use Liquid Glass Cursor on its desktop homepage so the first thing a visitor notices is a glass lens moving over the project imagery. The lens magnifies and refracts the page beneath it, tightens over headlines, and stretches into a wider shape over links and buttons so click targets stay obvious.","The outcome is material presence. The studio's interest in light and surface shows up in the interaction itself, while the lens changes shape over navigation and contact links instead of hiding them."],"bestFor":["Premium homepages where a glass lens can become the first brand interaction.","Desktop hero sections where the cursor layer sits below CTAs, modals, and focus states.","Liquid Glass Cursor gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Liquid Glass Cursor on coarse pointers."],"accessibility":["Disable on coarse pointers and preserve normal touch behavior. Cursor-only reveals must have visible or tap-accessible alternatives."],"commonMistakes":["Letting Liquid Glass Cursor cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Liquid Glass Cursor?","answer":"Use it when a high-craft homepage needs a glass lens bending the page surface under the pointer not on utility flows."},{"question":"Does Liquid Glass Cursor work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behaviour."},{"question":"Can Liquid Glass Cursor reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Liquid Glass Cursor behave around links and buttons?","answer":"It must preserve native click meaning, visible focus, hover states, and modal layering."},{"question":"What should reduced motion do for Liquid Glass Cursor?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."},{"question":"Can Hyperiux adapt Liquid Glass Cursor for a real brand system?","answer":"Yes. A custom version should define motion rules, visual treatment, performance budget, fallback behavior, source handoff, and implementation notes for the specific page or launch context."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/liquid-glass-cursor","demoUrl":"https://vault.hyperiux.com/demo/liquid-glass-cursor","related":[{"slug":"draggable-marquee","title":"Draggable Marquee","docsUrl":"https://vault.hyperiux.com/effects/components/draggable-marquee"},{"slug":"gooey-counter","title":"Gooey Counter","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter"}]},{"slug":"magnetic-image-trail","title":"Magnetic Image Trail","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"An image trail cursor effect that pulls project visuals toward pointer movement for portfolios, studio pages, and work indexes.","description":"Magnetic Image Trail for React reveals project imagery through pointer movement for portfolio grids and agency proof sections. Includes a clean mobile fallback.","tags":["Canvas"],"dependencies":[],"install":"npx hyperiux add magnetic-image-trail","usage":"import MagneticImageTrail from '@/components/effects/magnetic-image-trail'\n\nconst page = () => {\n  return (\n    <>\n      <MagneticImageTrail />\n    </>\n  )\n}","props":[{"name":"trailLength","type":"number","default":18,"description":"Maximum visible images in the trail."},{"name":"magnetStrength","type":"number","default":1,"description":"Strength of magnetic pull, speed boost, and directional push."},{"name":"scaleIn","type":"number","default":0.06,"description":"Minimum scale for images entering and leaving the center path."},{"name":"scaleOut","type":"number","default":1.48,"description":"Maximum directional scale for images pushed away by movement."},{"name":"lerp","type":"number","default":0.18,"description":"Pointer smoothing amount; higher values follow faster."},{"name":"size","type":"number","default":1,"description":"Overall image size multiplier."}],"overview":["Magnetic Image Trail turns pointer movement into atmosphere: work previews follow the pointer.","Use it on creative homepages, portfolios, campaign pages, and brand experiments where the cursor can carry the visual language. Keep it off dashboards, checkout, forms, and utility-heavy product screens.","The main risk is restraint. Treat the cursor layer as throwaway: switch it off on touch, keep focus states visible, and let nothing about clicking depend on it. If the page falls apart once you remove the effect, the cursor was doing work it should not own."],"exampleUseCase":["A motion design studio can use Magnetic Image Trail on its work page. A cluster of project stills streams along a diagonal path behind the pointer, growing larger toward the center, and moving the cursor faster speeds up the stream and pushes images in the direction of travel.","The outcome is memory. Visitors get a quick, physical sense of the studio's range before they reach the project list, which stays in place as the real way into each case study."],"bestFor":["Portfolio and studio pages where movement should preview work before the click.","Project indexes where trailing imagery adds memory without replacing the actual list.","Magnetic Image Trail gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Magnetic Image Trail on coarse pointers."],"accessibility":["Switch it off for coarse pointers and leave touch native; anything revealed by the cursor needs a visible or tap-accessible alternative."],"commonMistakes":["Letting Magnetic Image Trail cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Magnetic Image Trail?","answer":"Use it when a portfolio or agency page needs work previews following the pointer — not on utility flows."},{"question":"Does Magnetic Image Trail work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behavior."},{"question":"Can Magnetic Image Trail reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Magnetic Image Trail behave around links and buttons?","answer":"Native click targets, visible focus, hover states, and modal stacking all have to keep working underneath it."},{"question":"What should reduced motion do for Magnetic Image Trail?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/magnetic-image-trail","demoUrl":"https://vault.hyperiux.com/demo/magnetic-image-trail","related":[{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"character-trail","title":"Character Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/character-trail"},{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"colorful-cursor-aura","title":"Colorful Cursor Aura","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/colorful-cursor-aura"}]},{"slug":"noise-ripple-cursor","title":"Noise Ripple Cursor","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"A cursor distortion effect that sends subtle noise ripples from the pointer for experimental, AI, cyber, and technical brand pages.","description":"Noise Ripple Cursor for React sends subtle distortion from the pointer for experimental brands that need texture, not clutter. Includes a clean mobile fallback.","tags":["Three.js"],"dependencies":["three"],"install":"npx hyperiux add noise-ripple-cursor","usage":"import NoiseRippleCursor from \"@/components/effects/noise-ripple-cursor\";\n\nexport default function page() {\n  return (\n    <>\n        <NoiseRippleCursor imageSrc=\"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-15.jpg\" />\n    </>\n  );\n}","props":[{"name":"overlayColor","type":"color","default":"#1825AA","description":"Overlay and ripple shader color."},{"name":"pixelSize","type":"number","default":0.5,"description":"Pixel block size used by the dither shader."},{"name":"lerp","type":"number","default":0.2,"description":"Mouse smoothing amount for the ripple source."},{"name":"distortion","type":"number","default":0.5,"description":"Strength of the image UV distortion."},{"name":"radius","type":"number","default":0.08,"description":"Radius of the cursor ripple influence."},{"name":"imageSrc","type":"string","default":"https://picsum.photos/seed/h15/1600/1200","description":"Background image URL, also used as the shader texture (needs CORS)."}],"overview":["Noise Ripple Cursor turns pointer movement into atmosphere: ripples disturb the page surface.","It fits creative homepages, portfolios, campaigns, and brand-led experiments where the pointer becomes part of the identity, and not dashboards, checkout, forms, or dense product screens.","The production risk is keeping the pointer optional. The effect must turn off cleanly on coarse pointers, leave focus outlines intact, and never sit between the user and a click. A page that breaks when the cursor layer is removed has leaned on it too hard."],"exampleUseCase":["An AI research lab can use Noise Ripple Cursor in the hero of its homepage. A dithered color overlay drifts across the background image, and as the pointer moves it sends fluid ripples through the surface that bend the image underneath before fading out.","The outcome is signal. The page feels like a live system responding to input, while the headline and links above it carry the actual message.","A cybersecurity brand can use the same effect for a short campaign hero where disturbance and noise belong to the story."],"bestFor":["Cyber, AI, and experimental pages where pointer motion can disturb the surface like signal.","Short desktop hero moments where ripple texture supports tone without owning meaning.","Noise Ripple Cursor gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Noise Ripple Cursor on coarse pointers."],"accessibility":["Turn the effect off on touch and keep native gestures intact, and give any cursor-only reveal a visible or tappable alternative."],"commonMistakes":["Letting Noise Ripple Cursor cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Noise Ripple Cursor?","answer":"Use it when a creative or experimental page needs ripples disturbing the surface as the pointer moves — not on utility flows."},{"question":"Does Noise Ripple Cursor work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behavior."},{"question":"Can Noise Ripple Cursor reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Noise Ripple Cursor behave around links and buttons?","answer":"Clicks, focus outlines, hover states, and modal layering must all behave normally with the effect in place."},{"question":"What should reduced motion do for Noise Ripple Cursor?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/noise-ripple-cursor","demoUrl":"https://vault.hyperiux.com/demo/noise-ripple-cursor","related":[{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"character-trail","title":"Character Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/character-trail"},{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"colorful-cursor-aura","title":"Colorful Cursor Aura","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/colorful-cursor-aura"}]},{"slug":"phantom-image-trail","title":"Phantom Image Trail","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"free","summary":"A fading image trail cursor effect where ghosted visuals follow the pointer and dissolve across the page.","description":"Phantom Image Trail for React lets ghosted previews follow the pointer for creative portfolios and atmospheric work archives. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add phantom-image-trail","usage":"import PhantomImageTrail from \"@/components/effects/phantom-image-trail\";\n\nconst page = () => {\n    return (\n        <>\n        <div className=\"w-screen h-screen relative  bg-[#f8fdfe]\">\n             <PhantomImageTrail\n                images={images}\n                enableRotation={true}\n                idleSpawn={false}\n                idleDelay={300}\n                cursorOffsetX={-12}\n                cursorOffsetY={-12}\n                popOutDuration={0.8}\n                fadeOutDuration={0.5}\n                idlePopOutMultiplier={2.2}\n                idleFadeMultiplier={1.8}\n                imageMultiplier={3}\n            />\n        </div>\n        </>\n    );\n};\n\nexport default page;\n\n\n\nconst images = [\n  { src: \"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-11.jpg\", alt: \"Gradient 1\" },\n  { src: \"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-12.jpg\", alt: \"Gradient 2\" },\n  { src: \"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-13.jpg\", alt: \"Gradient 3\" },\n  { src: \"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-14.jpg\", alt: \"Gradient 4\" },\n  { src: \"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-15.jpg\", alt: \"Gradient 5\" },\n  { src: \"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-01.jpg\", alt: \"Gradient 6\" },\n  { src: \"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-02.jpg\", alt: \"Gradient 7\" },\n];","props":[{"name":"imageMultiplier","type":"number","default":3,"description":"Sets how many copies of the image set can be in flight."},{"name":"triggerDistance","type":"number","default":100,"description":"Distance the cursor must move before spawning a new image."},{"name":"lerpFactor","type":"number","default":0.1,"description":"Cursor smoothing factor."},{"name":"popOutDuration","type":"number","default":0.8,"description":"Image pop-in duration."},{"name":"fadeOutDuration","type":"number","default":0.5,"description":"Image fade-out duration."},{"name":"startScale","type":"number","default":0.2,"description":"Image starting scale."},{"name":"endScale","type":"number","default":1,"description":"Image settled scale."},{"name":"exitScale","type":"number","default":0,"description":"Image exit scale."},{"name":"enableRotation","type":"boolean","default":true,"description":"Enables random image tilt."},{"name":"maxStartRotation","type":"number","default":35,"description":"Maximum starting tilt."},{"name":"maxExitRotation","type":"number","default":15,"description":"Maximum exit tilt."},{"name":"idleSpawn","type":"boolean","default":false,"description":"Spawns images while the cursor rests."},{"name":"idleDelay","type":"number","default":300,"description":"Delay before idle spawning starts."},{"name":"idlePopOutMultiplier","type":"number","default":2.2,"description":"Multiplier for idle pop-in timing."},{"name":"idleFadeMultiplier","type":"number","default":1.8,"description":"Multiplier for idle fade-out timing."},{"name":"images","type":"object[]","default":null,"description":"Trail images as URL strings or { src, alt? } objects; empty falls back to built-in set."},{"name":"cursorOffsetX","type":"number","default":-12,"description":"Horizontal offset of spawned images from the cursor, in pixels."},{"name":"cursorOffsetY","type":"number","default":-12,"description":"Vertical offset of spawned images from the cursor, in pixels."}],"overview":["Phantom Image Trail turns pointer movement into atmosphere: images ghost behind the cursor path.","It belongs on creative homepages, portfolios, campaign pages, and brand-led experiments where the cursor can become part of the visual language. It does not belong on dashboards, checkout, forms, or utility-heavy product screens.","The risk in production is precision. The cursor layer must stay disposable, disable on coarse pointers, preserve visible focus, and never hide click intent. If removing the effect breaks the page, the cursor has been promoted past its pay grade."],"exampleUseCase":["A fashion photographer can use Phantom Image Trail on a portfolio homepage. As the pointer moves, images from recent shoots pop in along its path, tilting slightly as they grow, then shrink and fade away, so a visitor sees a quick sequence of the work before choosing a series to open.","The outcome is momentum. The trail builds interest in the portfolio, while the series list and navigation stay fully accessible underneath."],"bestFor":["Creative portfolios where ghosted previews can build momentum before case-study selection.","Image-led homepages where motion creates memory while the work remains directly accessible.","Phantom Image Trail gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Phantom Image Trail on coarse pointers."],"accessibility":["Disable on coarse pointers and preserve normal touch behavior. Cursor-only reveals must have visible or tap-accessible alternatives."],"commonMistakes":["Letting Phantom Image Trail cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Phantom Image Trail?","answer":"Use it when a portfolio or campaign page needs images ghosting behind the cursor path — not on utility flows."},{"question":"Does Phantom Image Trail work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behavior."},{"question":"Can Phantom Image Trail reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Phantom Image Trail behave around links and buttons?","answer":"It must preserve native click meaning, visible focus, hover states, and modal layering."},{"question":"What should reduced motion do for Phantom Image Trail?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/phantom-image-trail","demoUrl":"https://vault.hyperiux.com/demo/phantom-image-trail","related":[{"slug":"interactive-blur-reveal","title":"Interactive Blur Reveal","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/interactive-blur-reveal"},{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"colorful-cursor-aura","title":"Colorful Cursor Aura","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/colorful-cursor-aura"}]},{"slug":"pixel-bloom","title":"Pixel Bloom Cursor","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"A digital cursor trail effect where pixel particles bloom from the pointer path for technical launches and proof-of-craft hero sections.","description":"Pixel Bloom Cursor for React leaves a digital pixel trace behind the pointer for technical launches and proof-of-craft heroes. Includes a clean mobile fallback.","tags":["Canvas"],"dependencies":[],"install":"npx hyperiux add pixel-bloom","usage":"import PixelBloom from \"@/components/effects/pixel-bloom\";\n\nconst page = () => {\n  return (\n    <>\n<div>\n         <PixelBloom className='size-[30vw]' type='video' src='https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4' />\n</div>\n<div>\n<PixelBloom className='size-[30vw]' type='image' src='https://picsum.photos/800/800' />\n</div>\n    </>\n  )\n}","props":[{"name":"gridSize","type":"number","default":35,"description":"Pixel grid cell size."},{"name":"effectRadius","type":"number","default":40,"description":"Radius of the cursor bloom."},{"name":"maxTrailLength","type":"number","default":8,"description":"Maximum number of active trail points."},{"name":"cellLifetime","type":"number","default":100,"description":"How long each pixel cell remains active."},{"name":"src","type":"string","default":"https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4","description":"Video or image URL drawn under the pixel bloom grid."},{"name":"type","type":"enum","default":"video","description":"Media kind for src; any value other than video renders an image."}],"overview":["Pixel Bloom Cursor turns pointer movement into atmosphere: pixels bloom from the pointer path.","It fits creative homepages, portfolios, campaigns, and brand-led experiments where the pointer becomes part of the identity, and not dashboards, checkout, forms, or dense product screens.","The main risk is keeping the pointer optional. The effect must turn off cleanly on coarse pointers, leave focus outlines intact, and never sit between the user and a click. A page that breaks when the cursor layer is removed has leaned on it too hard."],"exampleUseCase":["A consumer electronics brand can use Pixel Bloom Cursor over the hero video on a product launch page. As the pointer moves across the video, grid cells along its path bloom into small square image tiles, then clear again shortly after, leaving a crisp digital trace.","The outcome is energy. The launch feels technical from the first movement, and the video, headline, and preorder link stay fully visible once the pointer rests."],"bestFor":["Technical and launch pages where pointer movement can leave a crisp digital trace.","Desktop hero sections that benefit from pixel energy without hiding links or proof.","Pixel Bloom Cursor gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Pixel Bloom Cursor on coarse pointers."],"accessibility":["Turn the effect off on touch and keep native gestures intact, and give any cursor-only reveal a visible or tappable alternative."],"commonMistakes":["Letting Pixel Bloom Cursor cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Pixel Bloom Cursor?","answer":"Use it when a launch page or technical brand needs pixels blooming from the pointer path — not on utility flows."},{"question":"Does Pixel Bloom Cursor work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behavior."},{"question":"Can Pixel Bloom Cursor reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Pixel Bloom Cursor behave around links and buttons?","answer":"Clicks, focus outlines, hover states, and modal layering must all behave normally with the effect in place."},{"question":"What should reduced motion do for Pixel Bloom Cursor?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/pixel-bloom","demoUrl":"https://vault.hyperiux.com/demo/pixel-bloom","related":[{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"character-trail","title":"Character Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/character-trail"},{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"colorful-cursor-aura","title":"Colorful Cursor Aura","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/colorful-cursor-aura"}]},{"slug":"pixelated-image-effect","title":"Pixelated Image Effect","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"free","summary":"A cursor or hover-based image effect that pixelates, reveals, or distorts visuals for digital, retro, gaming, and experimental interfaces.","description":"Pixelated Image for React reveals imagery through blocky pointer states for retro, technical, and game-inspired landing pages. Includes a clean mobile fallback.","tags":["Canvas"],"dependencies":[],"install":"npx hyperiux add pixelated-image-effect","usage":"import PixelatedImageEffect from \"@/components/effects/pixelated-image-effect\";\n\nexport default function Page() {\n  return (\n    <>\n      <PixelatedImageEffect\n        src=\"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/v-02.jpg\"\n      />\n    </>\n  );\n}","props":[{"name":"src","type":"string","default":"https://picsum.photos/seed/v02/1600/1200","description":"Image source URL."},{"name":"pixelSize","type":"number","default":16,"description":"Baseline pixel size for the SVG pixelation filter."},{"name":"duration","type":"number","default":0.25,"description":"Smoothing duration for pixel-size changes."}],"overview":["Pixelated Image turns pointer movement into atmosphere: images break into pixelated texture.","Use it on creative homepages, portfolios, campaign pages, and brand experiments where the cursor can carry the visual language. Keep it off dashboards, checkout, forms, and utility-heavy product screens.","In production, the risk is restraint. Treat the cursor layer as throwaway: switch it off on touch, keep focus states visible, and let nothing about clicking depend on it. If the page falls apart once you remove the effect, the cursor was doing work it should not own."],"exampleUseCase":["An indie game studio can use Pixelated Image Effect on the key art for an upcoming release. As the visitor moves the pointer across the image, the left side resolves into a clear picture and the right side breaks into larger pixel blocks, so the artwork shifts between finished render and retro texture.","The outcome is character. The pixel language of the game shows up in the interaction, and the full image is always one small movement away from being clear."],"bestFor":["Digital, gaming, and retro-technical pages where pixel texture belongs to the visual system.","Portfolio previews where pixelation adds character without obscuring the final image.","Pixelated Image gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Pixelated Image on coarse pointers."],"accessibility":["Switch it off for coarse pointers and leave touch native; anything revealed by the cursor needs a visible or tap-accessible alternative."],"commonMistakes":["Letting Pixelated Image cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Pixelated Image?","answer":"Use it when a technical or editorial page needs images breaking into pixelated texture on hover — not on utility flows."},{"question":"Does Pixelated Image work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behavior."},{"question":"Can Pixelated Image reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Pixelated Image behave around links and buttons?","answer":"Native click targets, visible focus, hover states, and modal stacking all have to keep working underneath it."},{"question":"What should reduced motion do for Pixelated Image?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/pixelated-image-effect","demoUrl":"https://vault.hyperiux.com/demo/pixelated-image-effect","related":[{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"mouse-pixelation","title":"Mouse Pixelation","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/mouse-pixelation"},{"slug":"interactive-blur-reveal","title":"Interactive Blur Reveal","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/interactive-blur-reveal"}]},{"slug":"rope-cursor","title":"Rope Cursor","category":{"id":"cursor","slug":"cursor-effects","name":"Cursor Effects"},"tier":"pro","summary":"An elastic cursor effect that draws a delayed rope-like line behind the pointer for playful, high-craft desktop experiences.","description":"Rope Cursor for React: trailing physics make pointer movement feel crafted. Disable on touch. Best for agency and portfolio sites.","tags":["SVG path"],"dependencies":[],"install":"npx hyperiux add rope-cursor","usage":"import RopeCursor from \"@/components/effects/rope-cursor\";\n\nexport default function page() {\n  return (\n    <>\n      <div className=\"h-screen w-full bg-[#F1EADE] text-[#bda985] overflow-hidden\">\n         <RopeCursor\n          ropeColor=\"#bda985\"\n          ropeWidth={2}\n          ropeOpacity={0.6}\n          segmentLength={0}\n          segmentCount={8}\n        />\n      </div>\n    </>\n  );\n}","props":[{"name":"ropeColor","type":"color","default":"#bda985","description":"Stroke color of the rope."},{"name":"ropeWidth","type":"number","default":2,"description":"Stroke width of the rope."},{"name":"ropeOpacity","type":"number","default":0.6,"description":"Opacity of the rope stroke."},{"name":"segmentLength","type":"number","default":0,"description":"Distance allowed between rope segments."},{"name":"segmentCount","type":"number","default":8,"description":"Number of points used to draw the rope."}],"overview":["Rope Cursor turns pointer movement into atmosphere: a line follows the pointer with delayed weight.","It fits creative homepages, portfolios, campaigns, and brand-led experiments where the pointer becomes part of the identity, and not dashboards, checkout, forms, or dense product screens.","The thing to watch is keeping the pointer optional. The effect must turn off cleanly on coarse pointers, leave focus outlines intact, and never sit between the user and a click. A page that breaks when the cursor layer is removed has leaned on it too hard."],"exampleUseCase":["An outdoor and climbing brand can use Rope Cursor on a desktop campaign page for a new collection. A line trails behind the pointer with delayed weight, stretching out while the cursor moves and drawing back in when it comes to rest.","The outcome is playfulness with intent. The rope ties the interaction to the brand's world, and because it is not rendered on smaller screens, the product links and shop buttons work exactly the same without it."],"bestFor":["Playful studio or campaign pages where delayed pointer weight matches the brand tone.","Desktop-only moments where the line can vanish on touch without changing the task.","Rope Cursor gives pointer movement a brand role without hiding core controls or content."],"notFor":["Not for dashboards, checkout, forms, dense product UIs, or any flow where precision beats atmosphere."],"performance":["Use one cursor layer, throttle movement with requestAnimationFrame, avoid full-screen filter effects, and disable Rope Cursor on coarse pointers."],"accessibility":["Turn the effect off on touch and keep native gestures intact, and give any cursor-only reveal a visible or tappable alternative."],"commonMistakes":["Letting Rope Cursor cover focus rings or clickable controls.","Forgetting to disable the effect on coarse pointers.","Hiding useful content behind mouse-only movement."],"faq":[{"question":"When should I use Rope Cursor?","answer":"Use it when a playful, high-craft page needs a line following the pointer with delayed, springy weight not on utility flows."},{"question":"Does Rope Cursor work on mobile?","answer":"Disable it on coarse pointers with CSS and JS pointer queries, then provide native touch behaviour."},{"question":"Can Rope Cursor reveal important content?","answer":"Only when the same content is visible or accessible without pointer movement. Cursor-only reveals are not suitable for critical information."},{"question":"How should Rope Cursor behave around links and buttons?","answer":"Clicks, focus outlines, hover states, and modal layering must all behave normally with the effect in place."},{"question":"What should reduced motion do for Rope Cursor?","answer":"Disable trails, lag, ripples, and pointer-following motion, then return to the native cursor."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/rope-cursor","demoUrl":"https://vault.hyperiux.com/demo/rope-cursor","related":[{"slug":"grid-scale","title":"Grid Scale","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/grid-scale"},{"slug":"progressive-bloom-valley","title":"Progressive Bloom Valley","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/progressive-bloom-valley"},{"slug":"draggable-canvas","title":"Draggable Canvas","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/draggable-canvas"},{"slug":"file-encryption","title":"File Encryption","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/file-encryption"}]},{"slug":"aperture-transition","title":"Aperture Transition","category":{"id":"transitions","slug":"page-transitions","name":"Page Transitions"},"tier":"pro","summary":"An iris-style page transition that opens and closes routes through a focused aperture for photography, portfolio, film, and visual brand sites.","description":"Aperture Transition for Next.js opens and closes route changes through an iris-style mask for portfolios, campaigns, and visual brand sites.","tags":["GSAP","next-transition-router"],"dependencies":["gsap","next-transition-router"],"install":"npx hyperiux add aperture-transition","usage":"import ApertureTransition from \"@/components/aperture-transition\";\nimport React from \"react\";\n\nexport default function layout({ children }) {\n  return (\n    <ApertureTransition>\n      {children}\n    </ApertureTransition>\n  );\n}","props":[{"name":"scale","type":"number","default":0.82,"description":"Amount the whole screen shrinks toward its center during the leave phase."},{"name":"duration","type":"number","default":0.6,"description":"Duration of the leave shrink and reveal/expand phases."},{"name":"revealDirection","type":"string","default":"bottom","description":"Edge the incoming page's aperture reveal expands from."}],"overview":["Aperture Transition turns a route change into an iris-style opening.","The page does not simply fade. It closes, focuses, and reveals the next view through a controlled aperture. The metaphor is direct: the visitor is being guided from one scene to another.","Use Aperture Transition when circular framing, camera language, lens movement, or reveal-based art direction belongs to the brand. It fits portfolios, photography-led sites, campaign pages, studio websites, film pages, product launches, and visual editorial routes. The page job is focus: the transition should frame the destination without delaying it.","The production risk is overstatement. Aperture motion can feel cinematic, but too much of it makes navigation feel slow. The mask should be brief, centered on orientation, and removed entirely for reduced-motion users."],"exampleUseCase":["A photography portfolio can use Aperture Transition between project routes. The current page closes like a lens, the next image-led page opens, and focus lands in the new content. The outcome is focus: navigation feels connected to the visual language of the site."],"bestFor":["Photography, film, portfolio, and campaign sites where aperture or lens language fits the brand.","Visual route changes where a circular reveal feels more appropriate than a block, slice, or pixel transition.","Small route trees where the transition appears often enough to create identity but not so often that it becomes friction."],"notFor":["Not for apps, docs, checkout, search, dashboards, dense product flows, or pages where users need instant repeated navigation.","Not for brands where the aperture metaphor feels decorative rather than connected to the content."],"performance":["Keep duration short, animate masks or transforms with restraint, avoid artificial route delays, and do not block interactivity once the destination is ready."],"accessibility":["Move focus to the destination main region or heading after navigation. On mobile, simplify the aperture movement and avoid large full-screen motion that slows orientation. Reduced-motion users should get instant navigation or a brief fade."],"commonMistakes":["Treating the aperture like a fake loading screen.","Making the mask too slow or too theatrical for routine navigation.","Forgetting focus restoration after the route changes.","Using aperture motion on every tiny interaction instead of true route changes."],"faq":[{"question":"When should I use Aperture Transition?","answer":"Use it when a portfolio, campaign, film, photography, or brand site benefits from an iris-style route reveal."},{"question":"Is Aperture Transition the same as a radial wipe?","answer":"They are related, but Aperture Transition should feel more like a lens opening and closing, while a radial wipe is usually a flatter graphic transition."},{"question":"How long should Aperture Transition last?","answer":"Keep it short, usually around 300 to 600ms. Longer movement should be reserved for a real loading condition."},{"question":"Where should Aperture Transition mount in the App Router?","answer":"Mount it where route changes can be coordinated, usually in a route-transition wrapper, template, or transition provider."},{"question":"What should reduced motion do for Aperture Transition?","answer":"Remove the iris movement and use instant navigation or a short fade. Do not run full-screen mask motion for reduced-motion users."},{"question":"Can Hyperiux adapt Aperture Transition for a real brand system?","answer":"Yes. A custom version should define aperture shape, origin, timing, route integration, focus restoration, mobile fallback, reduced-motion behavior, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/aperture-transition","demoUrl":"https://vault.hyperiux.com/demo/aperture-transition","related":[{"slug":"ascend-transition","title":"Ascend Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/ascend-transition"},{"slug":"block-transition","title":"Block Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/block-transition"},{"slug":"page-flip-transition","title":"Page Flip Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/page-flip-transition"},{"slug":"depth-shift-transition","title":"Depth Shift Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/depth-shift-transition"}]},{"slug":"ascend-transition","title":"Ascend Transition","category":{"id":"transitions","slug":"page-transitions","name":"Page Transitions"},"tier":"pro","summary":"A vertical page transition that lifts one route into the next for brand sites, campaign pages, and editorial journeys that need a clean upward motion.","description":"Ascend Transition for Next.js lifts route changes upward for brand sites, portfolios, and editorial pages that need a clean vertical handoff.","tags":["GSAP","next-transition-router"],"dependencies":["gsap","next-transition-router"],"install":"npx hyperiux add ascend-transition","usage":"import AscendTransition from \"@/components/ascend-transition\";\nimport React from \"react\";\n\nexport default function layout({ children }) {\n  return (\n    <AscendTransition>\n      {children}\n    </AscendTransition>\n  );\n}","props":[{"name":"bgColor","type":"string","default":"#ffffff","description":"Background color of the covering panel that rises and reveals the new page."},{"name":"duration","type":"number","default":0.9,"description":"Base duration of the rise/reveal phase; related scale-up and fade timings scale with it."}],"overview":["Ascend Transition makes the route change feel like an upward handoff.","Instead of cutting from one page to the next, the interface lifts. The old view moves out of the way, the new view rises into place, and the navigation moment feels cleaner than a hard fade.","Use Ascend Transition when a brand, portfolio, editorial site, or launch page wants route changes to feel light, elevated, and directional. The page job is upward continuity: the visitor should understand that the current page is leaving and the next one is arriving, without feeling blocked by the transition.","The production risk is timing. A vertical route transition can quickly feel like scroll-jacking if it is too slow, too tall, or too similar to normal page scroll. The transition should be brief, unmistakably tied to navigation, and respectful of reduced motion.","(Next.js App Router only. Requires next-transition-router for route-transition lifecycle hooks and must be wrapped in its provider. This effect will not function in plain React or in the Next.js Pages Router.)"],"exampleUseCase":["A product launch microsite can use Ascend Transition between short campaign pages. Each route lifts away and the next section rises into place, giving the site a light, progressive rhythm. The outcome is elevation: navigation feels intentional without becoming heavy."],"bestFor":["Brand and portfolio sites where route changes should feel clean and upward.","Editorial or campaign routes with a vertical visual system.","Launch pages where transition motion should feel light rather than aggressive."],"notFor":["Not for long documentation, dashboards, checkout flows, product apps, or any route where users navigate frequently and expect instant response.","Not for pages where upward motion would be confused with normal scrolling."],"performance":["Use transform and opacity, keep duration short, avoid forcing layout during route change, and clean up route listeners or animation timelines after completion."],"accessibility":["Move focus to the destination main region or heading after navigation. On mobile, reduce travel distance so the transition does not feel like forced scroll. Reduced-motion users should get instant navigation or a short fade."],"commonMistakes":["Making the route lift feel like scroll-jacking.","Running the transition after the destination page is already usable.","Forgetting to restore focus after navigation.","Using large vertical travel on small mobile screens."],"faq":[{"question":"When should I use Ascend Transition?","answer":"Use it when a route change should feel like a clean upward handoff between brand, campaign, or portfolio pages."},{"question":"How is Ascend Transition different from normal scroll motion?","answer":"Ascend Transition is tied to route change, not page scrolling. It should happen briefly during navigation and then stop."},{"question":"How long should Ascend Transition last?","answer":"Keep it short, usually 300 to 600ms. If it lasts longer, users will feel like navigation is being delayed."},{"question":"Where should Ascend Transition mount in Next.js?","answer":"Mount it where route changes can be detected and coordinated, usually in a transition wrapper, template, or route-level provider."},{"question":"What should reduced motion do for Ascend Transition?","answer":"Remove vertical movement and use instant navigation or a brief fade."},{"question":"Can Hyperiux adapt Ascend Transition for a real brand system?","answer":"Yes. A custom version should define vertical distance, easing, route integration, focus restoration, scroll behavior, mobile fallback, reduced-motion handling, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/ascend-transition","demoUrl":"https://vault.hyperiux.com/demo/ascend-transition","related":[{"slug":"block-transition","title":"Block Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/block-transition"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"},{"slug":"page-flip-transition","title":"Page Flip Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/page-flip-transition"}]},{"slug":"block-transition","title":"Block Transition","category":{"id":"transitions","slug":"page-transitions","name":"Page Transitions"},"tier":"free","summary":"A page transition effect that uses moving blocks or panels to cover, reveal, and connect route changes.","description":"Block Transition for Next.js covers and reveals routes with graphic panels for brand sites that need a fast designed cut. Degrades cleanly on low-power devices.","tags":["GSAP","next-transition-router"],"dependencies":["gsap","next-transition-router"],"install":"npx hyperiux add block-transition","usage":"import React from 'react'\nimport BlockTransition from '@/components/effects/block-transition'\n\nexport default function layout({ children }) {\n return (\n <BlockTransition>\n {children}\n </BlockTransition>\n )\n}","props":[{"name":"enableContentShift","type":"boolean","default":false,"description":"Adds content scale/blur during the transition."},{"name":"rows","type":"number","default":5,"description":"Number of block rows."},{"name":"color","type":"string","default":"#000000","description":"Transition block color."},{"name":"duration","type":"number","default":1,"description":"Duration multiplier for the cover and reveal block animations."}],"overview":["Block Transition turns the cut between routes into a designed moment: blocks cover and reveal the next route.","Use it on brand sites, campaign pages, portfolios, and editorial journeys where route changes benefit from continuity. Avoid it in apps, docs, checkout, and search paths where navigation speed is the feature.","In production, the risk is delay. Mount the transition where route state actually changes, keep the duration short, restore focus after navigation, and give reduced-motion users an instant or nearly instant path.","(Next.js App Router only. Requires next-transition-router for route-transition lifecycle hooks and must be wrapped in its provider. This effect will not function in plain React or in the Next.js Pages Router.)"],"exampleUseCase":["A fashion label can use Block Transition between its collection lookbooks. On each route change, horizontal blocks sweep in to cover the current page and then clear away to reveal the next collection, giving every cut the graphic rhythm of the brand's campaign layouts.","The outcome is intention. With only a handful of lookbook pages, the cover-and-reveal stays brief enough that visitors are never left waiting. The online store and checkout keep standard navigation, where speed matters more than style."],"bestFor":["Graphic brand sites where a fast cover-and-reveal cut can make navigation feel intentional.","Small route trees where transition timing stays short and destination focus is restored.","Block Transition turns route change into a brief brand moment without delaying orientation."],"notFor":["Not for apps, docs, checkout, search, or frequently navigated product flows where delay harms completion."],"performance":["Keep duration short, avoid artificial route delays, and do not block interactivity after the destination route is ready."],"accessibility":["Move focus to the destination main region after navigation. On mobile and reduced motion, use instant transitions or short fades."],"commonMistakes":["Using Block Transition as a fake loading delay.","Forgetting focus restoration after navigation.","Running full-screen motion for reduced-motion users."],"faq":[{"question":"When should I use Block Transition?","answer":"Use it when a brand, portfolio, or campaign route change needs a fast block-based reveal without delaying navigation."},{"question":"Where should Block Transition mount in the App Router?","answer":"Mount it where the route wrapper remounts on navigation, often a template or route-transition component rather than a persistent layout."},{"question":"How long should Block Transition last?","answer":"Keep it short, usually 300–600ms. Longer transitions need a real loading reason."},{"question":"How should focus work after Block Transition?","answer":"Move focus to the destination main region or heading after navigation completes."},{"question":"What is the reduced-motion fallback for Block Transition?","answer":"Use instant navigation or a brief fade, not full-screen movement or masks."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/block-transition","demoUrl":"https://vault.hyperiux.com/demo/block-transition","related":[{"slug":"rope-cursor","title":"Rope Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/rope-cursor"},{"slug":"dotted-grid","title":"Dotted Grid Background","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dotted-grid"},{"slug":"parallax-slider","title":"Parallax Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-slider"},{"slug":"liquid-glass-cursor","title":"Liquid Glass Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/liquid-glass-cursor"},{"slug":"lines-loader","title":"Lines Loader","docsUrl":"https://vault.hyperiux.com/effects/loaders/lines-loader"}]},{"slug":"chess-grid-transition","title":"Chess Grid Transition","category":{"id":"transitions","slug":"page-transitions","name":"Page Transitions"},"tier":"free","summary":"A grid-based page transition that closes and opens routes through a patterned checker-style reveal.","description":"Chess Grid Transition for Next.js closes and opens routes through a patterned grid for simple navigation trees. Source you own, with a static fallback.","tags":["GSAP","next-transition-router"],"dependencies":["gsap","next-transition-router"],"install":"npx hyperiux add chess-grid-transition","usage":"import ChessGridTransition from \"@/components/effects/chess-grid-transition/ChessGridTransition\";\n\nexport default function layout({ children }) {\n  return (\n    <ChessGridTransition>\n      {children}\n    </ChessGridTransition>\n  );\n}","props":[{"name":"duration","type":"number","default":1,"description":"Duration multiplier for the chess grid sweep."},{"name":"gridSize","type":"number","default":8,"description":"Grid density used to derive transition columns and responsive rows."},{"name":"color","type":"string","default":"#ff5f00","description":"Chess grid block color."}],"overview":["Chess Grid Transition turns the cut between routes into a designed moment: a grid closes and opens between pages.","Use it on brand sites, campaign pages, portfolios, and editorial journeys where route changes benefit from continuity. Avoid it in apps, docs, checkout, and search paths where navigation speed is the feature.","The thing to watch is delay. Mount the transition where route state actually changes, keep the duration short, restore focus after navigation, and give reduced-motion users an instant or nearly instant path.","(Next.js App Router only. Requires next-transition-router for route-transition lifecycle hooks and must be wrapped in its provider. This effect will not function in plain React or in the Next.js Pages Router.)"],"exampleUseCase":["An architecture studio portfolio can use Chess Grid Transition between the project index and individual case studies. When a visitor opens a project, rows of grid cells slide across to close the current page, then clear to open the next one, echoing the modular layouts the studio already uses.","The outcome is continuity. The route change reads as part of the portfolio's visual language, and with a short duration the visitor reaches the project without waiting on the effect.","A design festival campaign site can use the same transition between its program, venue, and speaker pages, where grid geometry already runs through the identity."],"bestFor":["Campaign or portfolio sites where grid geometry already belongs to the visual language.","Simple navigation flows that can use a patterned route cut without confusing orientation.","Chess Grid Transition turns route change into a brief brand moment without delaying orientation."],"notFor":["Not for apps, docs, checkout, search, or frequently navigated product flows where delay harms completion."],"performance":["Keep duration short, avoid artificial route delays, and do not block interactivity after the destination route is ready."],"accessibility":["Move focus to the destination main region after navigation. On mobile and reduced motion, use instant transitions or short fades."],"commonMistakes":["Using Chess Grid Transition as fake loading delay.","Forgetting focus restoration after navigation.","Running full-screen motion for reduced-motion users."],"faq":[{"question":"When should I use Chess Grid Transition?","answer":"Use it when a simple route tree needs a patterned grid that closes and opens between pages without delaying navigation."},{"question":"Where should Chess Grid Transition mount in the App Router?","answer":"Mount it where the route wrapper remounts on navigation, often a template or route-transition component rather than a persistent layout."},{"question":"How long should Chess Grid Transition last?","answer":"Keep it short, usually 300–600ms. Longer transitions need a real loading reason."},{"question":"How should focus work after Chess Grid Transition?","answer":"Move focus to the destination main region or heading after navigation completes."},{"question":"What is the reduced-motion fallback for Chess Grid Transition?","answer":"Use instant navigation or a brief fade, not full-screen movement or masks."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition","demoUrl":"https://vault.hyperiux.com/demo/chess-grid-transition","related":[{"slug":"mouse-pixelation","title":"Mouse Pixelation","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/mouse-pixelation"},{"slug":"scroll-distortion","title":"Scroll Distortion","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-distortion"},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"},{"slug":"gooey-counter","title":"Gooey Counter","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter"}]},{"slug":"depth-shift-transition","title":"Depth Shift Transition","category":{"id":"transitions","slug":"page-transitions","name":"Page Transitions"},"tier":"pro","summary":"A layered route transition that moves pages through perspective, giving portfolios and brand sites a spatial handoff without a full 3D scene.","description":"Depth Shift Transition for Next.js moves routes through layered perspective for portfolios, campaign pages, and brand sites with a clean fallback.","tags":["GSAP","next-transition-router"],"dependencies":["gsap","next-transition-router"],"install":"npx hyperiux add depth-shift-transition","usage":"import DepthShiftTransition from \"@/components/depth-shift-transition\";\nimport React from \"react\";\n\nexport default function layout({ children }: { children: React.ReactNode }) {\n  return (\n    <DepthShiftTransition>\n      {children}\n    </DepthShiftTransition>\n  );\n}","props":[{"name":"bgColor","type":"string","default":"#0b0b0c","description":"Background color behind the transitioning pages."},{"name":"duration","type":"number","default":0.65,"description":"Duration of the exit phase. Enter timing scales with this value."},{"name":"exitOffsetX","type":"number","default":20,"description":"Horizontal offset applied to the outgoing page during desktop transitions."},{"name":"exitOffsetY","type":"number","default":30,"description":"Vertical offset applied to the outgoing page during desktop transitions."},{"name":"exitRotate","type":"number","default":3,"description":"Rotation applied to the outgoing page as it recedes."}],"overview":["Depth Shift Transition moves the route change through layered perspective instead of a flat cut.","It gives navigation a sense of space: the current page pulls back, moves aside and makes room while the next view arrives with depth. Use it when a site wants route changes to feel dimensional but does not need a full WebGL scene.","Use Depth Shift Transition on portfolios, agency sites, editorial journeys, brand microsites, and launch pages where navigation can carry a controlled visual moment. The page job is continuity: the visitor should feel the change of route, understand the destination, and keep moving without waiting for the animation to finish performing.","The production risk is disorientation. Perspective motion can feel premium when it is short and clear, but it becomes frustrating when it hides the destination, breaks scroll restoration, or leaves keyboard focus behind on the previous route."],"exampleUseCase":["A creative portfolio can use Depth Shift Transition between project pages so each case study feels connected to the next. The old page recedes, the new page arrives, and the visitor lands in the destination content without losing orientation. The outcome is spatial continuity: navigation feels designed without becoming a loading screen."],"bestFor":["Portfolio and agency websites where route changes should feel spatial and crafted.","Campaign pages where the transition can reinforce a premium visual system.","Editorial journeys where depth helps one page hand off to the next."],"notFor":["Not for dashboards, docs, checkout, search, pricing comparison flows, or routes where navigation speed is the feature.","Not for pages where perspective movement would make users lose their place."],"performance":["Keep the transition short, animate transform and opacity, avoid layout reads during route change, and clean up listeners or timelines after navigation completes. Depth should come from composited layers, not from expensive layout work."],"accessibility":["Move focus to the destination main region or heading after navigation. On mobile, reduce perspective distance and avoid heavy motion that makes the route feel unstable. Reduced-motion users should get instant navigation or a brief fade."],"commonMistakes":["Using depth motion as fake loading delay.","Letting the previous page remain visually dominant after the destination is ready.","Forgetting focus restoration after the route changes.","Making the perspective shift so strong that the destination feels hard to track."],"faq":[{"question":"When should I use Depth Shift Transition?","answer":"Use it when a brand, portfolio, or campaign site needs route changes to feel dimensional without using a heavy 3D scene."},{"question":"Where should Depth Shift Transition mount in the App Router?","answer":"Mount it where route state can be detected and coordinated, usually through a route-transition wrapper, template, or provider rather than a persistent static layout that never remounts."},{"question":"How long should Depth Shift Transition last?","answer":"Keep it short, usually around 300 to 600ms. Longer transitions need a real loading reason."},{"question":"How should focus work after Depth Shift Transition?","answer":"Focus should move to the destination main region or heading once navigation completes. Keyboard users should not remain anchored to the old route."},{"question":"What should reduced motion do for Depth Shift Transition?","answer":"Remove perspective movement and use instant navigation or a short opacity fade."},{"question":"Can Hyperiux adapt Depth Shift Transition for a real brand system?","answer":"Yes. A custom version should define depth distance, timing, layer behavior, App Router integration, focus restoration, mobile fallback, reduced-motion handling, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/depth-shift-transition","demoUrl":"https://vault.hyperiux.com/demo/depth-shift-transition","related":[{"slug":"block-transition","title":"Block Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/block-transition"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"},{"slug":"page-flip-transition","title":"Page Flip Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/page-flip-transition"},{"slug":"svg-brush-transition","title":"SVG Brush Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/svg-brush-transition"}]},{"slug":"page-flip-transition","title":"Page Flip Transition","category":{"id":"transitions","slug":"page-transitions","name":"Page Transitions"},"tier":"pro","summary":"An editorial page transition that uses a page-turn metaphor for portfolios, stories, and brand-led navigation.","description":"Page Flip Transition for Next.js uses an editorial page-turn metaphor for portfolios and stories where the metaphor fits. Ships with a reduced-motion fallback.","tags":["GSAP","next-transition-router"],"dependencies":["gsap","next-transition-router"],"install":"npx hyperiux add page-flip-transition","usage":"import React from \"react\";\nimport FlipTransition from \"@/components/effects/page-flip-transition\";\n\nexport default function layout({ children }) {\n  return (\n    <FlipTransition\n    >\n      {children}\n    </FlipTransition>\n  );\n}","props":[{"name":"duration","type":"number","default":0.9,"description":"Page flip duration."},{"name":"bgColor","type":"string","default":"#ff5f00","description":"Overlay background color."},{"name":"loaderColor","type":"string","default":"#000000","description":"Color of the loading blocks shown during the flip."},{"name":"direction","type":"\"left-to-right\" | \"right-to-left\"","default":"left-to-right","description":"Direction the page flips across the screen."}],"overview":["Page Flip Transition turns the cut between routes into a designed moment: the route change borrows a page metaphor.","Use it on brand sites, campaign pages, portfolios, and editorial journeys where route changes benefit from continuity. Avoid it in apps, docs, checkout, and search paths where navigation speed is the feature.","The main risk is delay. Mount the transition where route state actually changes, keep the duration short, restore focus after navigation, and give reduced-motion users an instant or nearly instant path.","(Next.js App Router only. Requires next-transition-router for route-transition lifecycle hooks and must be wrapped in its provider. This effect will not function in plain React or in the Next.js Pages Router.)"],"exampleUseCase":["An online magazine can use Page Flip Transition between an issue's cover and the feature stories inside it. When a reader opens a story, the current page turns away on a corner pivot and the next one turns in, reinforcing the feeling of moving through a printed issue.","The outcome is continuity. The transition is kept for low-frequency moments, such as entering an issue or a long read, while search, archives, and subscription checkout keep instant navigation."],"bestFor":["Editorial and portfolio sites where a page metaphor fits the content model.","Low-frequency navigation moments where the flip supports continuity instead of delaying tasks.","Page Flip Transition turns route change into a brief brand moment without delaying orientation."],"notFor":["Not for apps, docs, checkout, search, or frequently navigated product flows where delay harms completion."],"performance":["Keep duration short, avoid artificial route delays, and do not block interactivity after the destination route is ready."],"accessibility":["Move focus to the destination main region after navigation. On mobile and reduced motion, use instant transitions or short fades."],"commonMistakes":["Using Page Flip Transition as fake loading delay.","Forgetting focus restoration after navigation.","Running full-screen motion for reduced-motion users."],"faq":[{"question":"When should I use Page Flip Transition?","answer":"Use it when an editorial or portfolio route change suits a page-flip metaphor without delaying navigation."},{"question":"Where should Page Flip Transition mount in the App Router?","answer":"Mount it where the route wrapper remounts on navigation, often a template or route-transition component rather than a persistent layout."},{"question":"How long should Page Flip Transition last?","answer":"Keep it short, usually 300–600ms. Longer transitions need a real loading reason."},{"question":"How should focus work after Page Flip Transition?","answer":"Move focus to the destination main region or heading after navigation completes."},{"question":"What is the reduced-motion fallback for Page Flip Transition?","answer":"Use instant navigation or a brief fade, not full-screen movement or masks."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/page-flip-transition","demoUrl":"https://vault.hyperiux.com/demo/page-flip-transition","related":[{"slug":"block-transition","title":"Block Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/block-transition"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"},{"slug":"radial-slice-transition","title":"Radial Slice Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/radial-slice-transition"},{"slug":"pixel-transition","title":"Pixel Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/pixel-transition"}]},{"slug":"pixel-transition","title":"Pixel Transition","category":{"id":"transitions","slug":"page-transitions","name":"Page Transitions"},"tier":"pro","summary":"A pixel-dissolve page transition that breaks route changes into a crisp digital grid reveal.","description":"Pixel Transition for React: dissolve route changes into a crisp pixel grid. Best for technical brands, launches, and game-like sites, with a reduced-motion path.","tags":["GSAP","next-transition-router"],"dependencies":["gsap","next-transition-router"],"install":"npx hyperiux add pixel-transition","usage":"import PixelTransition from \"@/components/effects/pixel-transition\";\n\nexport default function layout({ children }) {\n  return (\n    <PixelTransition>\n      {children}\n    </PixelTransition>\n  );\n}","props":[{"name":"cols","type":"number","default":30,"description":"Pixel grid columns."},{"name":"rows","type":"number","default":40,"description":"Pixel grid rows."},{"name":"pixelColor","type":"string","default":"#111111","description":"Color used to draw each transition pixel."},{"name":"duration","type":"number","default":1,"description":"Duration multiplier for the leave and enter pixel sweeps."},{"name":"enableContentShift","type":"boolean","default":false,"description":"Adds content scale/blur during the transition."}],"overview":["Pixel Transition turns the cut between routes into a designed moment: pixels dissolve the old page into the new one.","Use it on brand sites, campaign pages, portfolios, and editorial journeys where route changes benefit from continuity. Avoid it in apps, docs, checkout, and search paths where navigation speed is the feature.","The risk in production is delay. Mount the transition where route state actually changes, keep the duration short, restore focus after navigation, and give reduced-motion users an instant or nearly instant path.","(Next.js App Router only. Requires next-transition-router for route-transition lifecycle hooks and must be wrapped in its provider. This effect will not function in plain React or in the Next.js Pages Router.)"],"exampleUseCase":["An indie game studio can use Pixel Transition between its homepage, game pages, and press kit. On each route change, a grid of pixels fills the screen in a diagonal sweep and then clears to show the next page, echoing the low-resolution look of the studio's games.","The outcome is tone. The site feels like part of the game world from the first click, and a short duration keeps the transition from holding back visitors on their way to the trailer or press kit."],"bestFor":["Technical, game-like, or retro-digital brands where the route change can dissolve into pixels.","Launch pages where a pixel cue supports tone while App Router focus stays predictable.","Pixel Transition turns route change into a brief brand moment without delaying orientation."],"notFor":["Not for apps, docs, checkout, search, or frequently navigated product flows where delay harms completion."],"performance":["Keep duration short, avoid artificial route delays, and do not block interactivity after the destination route is ready."],"accessibility":["Move focus to the destination main region after navigation. On mobile and reduced motion, use instant transitions or short fades."],"commonMistakes":["Using Pixel Transition as fake loading delay.","Forgetting focus restoration after navigation.","Running full-screen motion for reduced-motion users."],"faq":[{"question":"When should I use Pixel Transition?","answer":"Use it when a technical, game-like, or retro-digital brand needs pixels dissolving one page into the next without delaying navigation."},{"question":"Where should Pixel Transition mount in the App Router?","answer":"Mount it where the route wrapper remounts on navigation, often a template or route-transition component rather than a persistent layout."},{"question":"How long should Pixel Transition last?","answer":"Keep it short, usually 300–600ms. Longer transitions need a real loading reason."},{"question":"How should focus work after Pixel Transition?","answer":"Move focus to the destination main region or heading after navigation completes."},{"question":"What is the reduced-motion fallback for Pixel Transition?","answer":"Use instant navigation or a brief fade, not full-screen movement or masks."},{"question":"Can Hyperiux adapt Pixel Transition for a real brand system?","answer":"Yes. A custom version should define motion rules, visual treatment, performance budget, fallback behavior, source handoff, and implementation notes for the specific page or launch context."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/pixel-transition","demoUrl":"https://vault.hyperiux.com/demo/pixel-transition","related":[{"slug":"block-transition","title":"Block Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/block-transition"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"},{"slug":"page-flip-transition","title":"Page Flip Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/page-flip-transition"},{"slug":"radial-slice-transition","title":"Radial Slice Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/radial-slice-transition"}]},{"slug":"radial-slice-transition","title":"Radial Slice Transition","category":{"id":"transitions","slug":"page-transitions","name":"Page Transitions"},"tier":"pro","summary":"Cut between routes with circular slices, giving brand and campaign navigation a sharp graphic handoff without manufacturing delay.","description":"Radial Slice Transition for Next.js cuts between routes with circular slices for campaign, portfolio, and brand websites.","tags":["GSAP","next-transition-router"],"dependencies":["gsap","next-transition-router"],"install":"npx hyperiux add radial-slice-transition","usage":"import  RadialSliceTransition  from '@/components/effects/radial-slice-transition'\n\nexport default function layout({ children }) {\n return (\n <RadialSliceTransition>\n {children}\n </RadialSliceTransition>\n )\n}","props":[{"name":"duration","type":"number","default":4,"description":"Total duration of the radial slice transition."},{"name":"color","type":"string","default":"#0F2854","description":"Radial slice overlay color."}],"overview":["Radial Slice Transition turns a route change into a graphic cut. The page does not fade away; it slices open.","Use Radial Slice Transition when circular geometry belongs to the brand system and route changes need a brief, memorable handoff. It fits campaign pages, portfolios, launch sites, and editorial journeys where navigation can carry a little visual identity. The page job is continuity: the user should feel the route change without waiting for it.","The production risk is delay. Page transitions become irritating when they pretend to be loading states or run every time a visitor tries to move quickly. The slice should be short, tied to real route change, and respectful of reduced motion."],"exampleUseCase":["A campaign microsite can use Radial Slice Transition between short editorial routes where the brand already uses circular or sliced geometry. The outcome is continuity: navigation feels designed into the system without making the destination wait."],"bestFor":["Campaign and portfolio sites where radial motion matches the visual language.","Short route trees where navigation frequency is low enough for a designed cut.","Brand pages that need a transition with more edge than a fade but less weight than WebGL."],"notFor":["Not for apps, docs, checkout, search, dashboards, or flows where fast navigation is the main feature.","Not for routes where users bounce between pages repeatedly and would see the same slice too often."],"performance":["Keep duration short, avoid fake loading delays, animate transforms and masks with restraint, and do not block interactivity after the destination is ready."],"accessibility":["Restore focus to the destination main region or heading after navigation. On mobile and reduced motion, use instant navigation or a brief fade instead of full-screen radial movement."],"commonMistakes":["Using Radial Slice Transition as a fake preloader.","Letting the slice run after the next route is already usable.","Forgetting focus restoration after navigation.","Making the segments so complex that the transition feels heavier than the page."],"faq":[{"question":"When should I use Radial Slice Transition?","answer":"Use it when a campaign, portfolio, or brand site needs a circular sliced route change that feels graphic and brief."},{"question":"Where should Radial Slice Transition mount in the App Router?","answer":"Mount it where route state can be detected and coordinated, usually in a transition wrapper, template, or provider rather than a static layout that never remounts."},{"question":"How long should Radial Slice Transition last?","answer":"Keep it short, usually 300 to 600ms. Anything longer needs a real loading reason."},{"question":"How should focus work after the transition?","answer":"Move focus to the destination main region or heading after navigation completes. Keyboard users should not remain focused on the old page."},{"question":"What is the reduced-motion fallback?","answer":"Use instant navigation or a brief fade. Avoid full-screen radial masks, sweeping slices, or rotational motion."},{"question":"Can Hyperiux adapt Radial Slice Transition for a real brand system?","answer":"Yes. A custom version should define slice geometry, timing, route integration, focus restoration, reduced-motion fallback, mobile behavior, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/radial-slice-transition","demoUrl":"https://vault.hyperiux.com/demo/radial-slice-transition","related":[{"slug":"block-transition","title":"Block Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/block-transition"},{"slug":"pixel-transition","title":"Pixel Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/pixel-transition"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"},{"slug":"page-flip-transition","title":"Page Flip Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/page-flip-transition"},{"slug":"svg-brush-transition","title":"SVG Brush Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/svg-brush-transition"}]},{"slug":"svg-brush-transition","title":"SVG Brush Transition","category":{"id":"transitions","slug":"page-transitions","name":"Page Transitions"},"tier":"pro","summary":"Guide route changes with drawn SVG linework, giving illustrated and editorial sites a crafted transition between pages.","description":"SVG Brush Transition for Next.js draws the route change with linework for illustrated brands, portfolios, and lighter editorial sites.","tags":["GSAP","next-transition-router"],"dependencies":["gsap","next-transition-router"],"install":"npx hyperiux add svg-brush-transition","usage":"import SVGBrushTransition from \"@/components/effects/svg-brush-transition\";\n\nexport default function layout({ children }) {\n  return (\n    <SVGBrushTransition\n      config={{\n        enableBlur: false,\n        strokeColor: \"#82A0FF\",\n        strokeWidth: 2,\n        duration: 1.5,\n      }}\n    >\n      {children}\n    </SVGBrushTransition>\n  );\n}","props":[{"name":"strokeColor","type":"string","default":"#82A0FF","description":"SVG brush stroke color."},{"name":"duration","type":"number","default":1.5,"description":"Duration of the SVG brush draw and reveal animations."}],"undocumentedProps":["config"],"overview":["SVG Brush Transition turns the cut between routes into a designed moment. A line-drawn mask guides the visitor from one page to the next.","Use SVG Brush Transition on brand sites, portfolios, campaign pages, and editorial journeys where navigation should feel connected. The page job is continuity: the transition should make the change of route feel intentional without making the destination wait for applause.","The production risk is delay. Page transitions become a problem when they pretend to be loading states, trap focus, or run full-screen motion for people who asked for less motion. Mount the transition where route state actually changes, keep it short, restore focus after navigation, and provide an instant fallback."],"exampleUseCase":["An illustrated portfolio can use SVG Brush Transition between project pages so each route change feels like part of the visual language. The linework moves briefly, the next page appears, and focus lands where the visitor can continue. The outcome is continuity: the brand gets a crafted navigation moment without slowing the route."],"bestFor":["Illustrated brands where drawn linework already belongs to the design system.","Portfolio and editorial route changes that should feel crafted but brief.","Small navigation trees where the transition supports orientation instead of hiding latency."],"notFor":["Not for apps, docs, checkout, search, dashboards, or product flows where navigation speed is the feature.","Not for routes where visitors navigate repeatedly and would resent the same flourish every few seconds."],"performance":["Keep duration short, avoid artificial route delays, animate SVG properties with restraint, and do not block interactivity after the destination route is ready. A transition that overstays its welcome is just a branded door in the user’s face."],"accessibility":["Move focus to the destination main region or heading after navigation. Respect reduced-motion preferences with instant navigation or a short fade. On mobile, reduce mask complexity and avoid full-screen linework that delays orientation."],"commonMistakes":["Using SVG Brush Transition as fake loading delay.","Forgetting focus restoration after navigation.","Running full-screen motion for reduced-motion users.","Making the SVG linework too complex for a route change that should last under a second."],"faq":[{"question":"When should I use SVG Brush Transition?","answer":"Use it when an illustrated, editorial, or campaign site needs a line-drawn route change that feels crafted without delaying navigation."},{"question":"Where should SVG Brush Transition mount in the App Router?","answer":"Mount it where route changes can be detected and animated reliably, often through a route-transition wrapper, template, or transition provider rather than a static persistent layout."},{"question":"How long should SVG Brush Transition last?","answer":"Keep it short, usually 300 to 600ms. Longer transitions need a real loading reason, not just a nicer mask."},{"question":"How should focus work after SVG Brush Transition?","answer":"Move focus to the destination main region or heading after navigation completes. The transition should not leave keyboard users stranded on an element from the previous route."},{"question":"What is the reduced-motion fallback?","answer":"Use instant navigation or a brief opacity change. Do not run full-screen masks, drawn paths, or sweeping motion for reduced-motion users."},{"question":"Can Hyperiux adapt SVG Brush Transition for a real brand system?","answer":"Yes. A custom version should define line style, mask behavior, transition timing, focus restoration, mobile fallback, source handoff, and implementation notes for the specific route system."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/svg-brush-transition","demoUrl":"https://vault.hyperiux.com/demo/svg-brush-transition","related":[{"slug":"block-transition","title":"Block Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/block-transition"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"},{"slug":"page-flip-transition","title":"Page Flip Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/page-flip-transition"},{"slug":"radial-slice-transition","title":"Radial Slice Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/radial-slice-transition"}]},{"slug":"sweep-lift-transition","title":"Sweep Lift Transition","category":{"id":"transitions","slug":"page-transitions","name":"Page Transitions"},"tier":"pro","summary":"A full-screen transition that softens the current view, lifts a new state into place, and makes the change feel deliberate without turning it into a loading screen.","description":"Sweep Lift for Next.js moves between routes with a soft lifted sweep for brand sites, portfolios, and campaign pages.","tags":["GSAP","next-transition-router"],"dependencies":["gsap","next-transition-router"],"install":"npx hyperiux add sweep-lift-transition","usage":"import React from 'react'\nimport SweepLiftTransition from \"@/components/sweep-lift-transition\";\n\nexport default function layout({ children }) {\n return (\n <SweepLiftTransition>\n {children}\n </SweepLiftTransition>\n )\n}","props":[{"name":"bgColor","type":"string","default":"#111111","description":"Background color behind the transitioning pages."},{"name":"duration","type":"number","default":1.3,"description":"Duration used by both the outgoing lift and incoming sweep reveal."}],"overview":["Sweep Lift moves a route change through a soft lifted sweep, turning a flat cut into a smooth visual handoff.","A gentle overlay sweeps across the screen, dims the current view, and lifts the destination into focus. The transition feels calmer than a hard wipe and lighter than a full-screen cinematic sequence. It works best when the brand wants a polished route change without making navigation feel heavy.","Use Sweep Lift for portfolios, agency websites, brand homepages, campaign pages, and editorial routes where the transition should feel soft, premium, and controlled. The page job is continuity: the visitor should feel the route change without waiting for the animation to finish showing off.","The production risk is fake softness. A transition can look elegant and still hurt the experience if it delays navigation, hides the ready destination, or leaves focus behind on the previous route. Sweep Lift should be short, tied to real route state, and replaced with instant navigation or a simple fade for reduced-motion users."],"exampleUseCase":["A brand studio can use Sweep Lift between portfolio and service routes to make the site feel calm and premium. The old page softens, the transition lifts into the next view, and the visitor lands on the destination content without losing orientation. The outcome is polish: navigation feels designed without becoming a loading screen."],"bestFor":["Portfolio and agency websites where route changes should feel soft and premium.","Campaign pages where a gradient sweep matches the visual direction.","Brand-led routes where navigation needs a subtle handoff rather than a hard cut."],"notFor":["Not for dashboards, docs, checkout, search, forms, or product flows where fast repeated navigation matters more than motion.","Not for routes where users bounce between pages frequently and would see the same sweep too often."],"performance":["Keep duration short, animate transform and opacity, avoid layout reads during route change, and clean up listeners or timelines after completion. Use the sweep as a composited overlay, not as a layout-level interruption."],"accessibility":["Move focus to the destination main region or heading after navigation. On mobile, reduce travel distance and avoid heavy full-screen motion. Reduced-motion users should get instant navigation or a short fade."],"commonMistakes":["Using Sweep Lift as a fake loading delay.","Letting the overlay stay after the destination is ready.","Forgetting focus restoration after navigation.","Making the sweep so soft that route change state becomes unclear."],"faq":[{"question":"When should I use Sweep Lift?","answer":"Use Sweep Lift when a brand, portfolio, or campaign site needs a calm route transition with a soft sweep and lifted arrival."},{"question":"How is Sweep Lift different from a normal wipe?","answer":"A normal wipe often feels graphic and directional. Sweep Lift feels softer, using overlay movement and visual lift to create a smoother handoff."},{"question":"How long should Sweep Lift last?","answer":"Keep it short, usually around 300 to 600ms. Longer transitions need a real loading reason."},{"question":"Where should Sweep Lift mount in Next.js?","answer":"Mount it where route changes can be detected and coordinated, usually through a transition wrapper, template, or route-level provider."},{"question":"What should reduced motion do for Sweep Lift?","answer":"Remove the sweep and lift movement. Use instant navigation or a brief opacity fade."},{"question":"Can Hyperiux adapt Sweep Lift for a real brand system?","answer":"Yes. A custom version should define sweep direction, overlay treatment, timing, route integration, focus restoration, mobile fallback, reduced-motion behavior, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/sweep-lift-transition","demoUrl":"https://vault.hyperiux.com/demo/sweep-lift-transition","related":[{"slug":"block-transition","title":"Block Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/block-transition"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"},{"slug":"page-flip-transition","title":"Page Flip Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/page-flip-transition"},{"slug":"svg-brush-transition","title":"SVG Brush Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/svg-brush-transition"}]},{"slug":"lines-loader","title":"Lines Loader","category":{"id":"loaders","slug":"loaders","name":"Loaders"},"tier":"pro","summary":"A restrained line-based loader for short indeterminate waits, route latency, data loading, and lightweight product states.","description":"Lines Loader for React shows a restrained indeterminate wait for short unknown latency, with aria-busy and static fallback.","tags":["GSAP","Lucide"],"dependencies":["gsap","lucide-react"],"install":"npx hyperiux add lines-loader","usage":"import LinesLoader from \"@/components/effects/lines-loader\";\n\nexport default function Page() {\n  return (\n    <>\n      <LinesLoader />\n    </>\n  );\n}","props":[{"name":"duration","type":"number","default":1,"description":"Overall timeline duration multiplier."},{"name":"lineHeight","type":"number","default":1,"description":"Rendered height of each loader line in pixels."},{"name":"darkLineColor","type":"color","default":"#ffffff","description":"Line color on the dark loader layer."},{"name":"lightLineColor","type":"color","default":"#000000","description":"Line color on the light reveal layer."},{"name":"fadeOutDuration","type":"number","default":0.5,"description":"Duration of the line fade-out phases."}],"overview":["Lines Loader gives a real wait a visible state: lines carry a quiet indeterminate wait.","Use it for route latency, upload progress, asset warm-up, data loading, or WebGL initialization. Do not add a fake preloader to a fast page just to make it feel designed.","The main risk is dishonesty. Bind the loader to real state, use aria-busy where the region is updating, and never let a progress number claim completion before the content is ready."],"exampleUseCase":["An online learning platform can use Lines Loader while a lesson's video player and course materials load. Thin staggered lines sweep across the screen as a quiet activity signal, then clear away as soon as the lesson is ready.","The outcome is calm. Learners see that something is happening without a fake percentage, and the loader can be swapped for a skeleton where the wait is very short. Determinate progress must be tied to a real signal."],"bestFor":["Short indeterminate waits where a quiet activity signal is clearer than fake progress.","Product flows where the loader should feel restrained and easy to replace with a skeleton.","Lines Loader makes real waiting visible without manufacturing delay."],"notFor":["Not for fast pages, fake progress, manufactured waits, or loaders that hide usable content."],"performance":["Tie animation to real load state, clean up timers, and avoid blocking first paint."],"accessibility":["Use aria-busy on loading regions and concise status text. On mobile and reduced motion, prefer static progress text or skeletons."],"commonMistakes":["Using Lines Loader on a page that already loads quickly.","Faking determinate progress.","Announcing every animation frame to assistive technology."],"faq":[{"question":"When should I use Lines Loader?","answer":"Use it when a brief indeterminate wait needs a quiet, restrained line indicator."},{"question":"Should Lines Loader show real progress?","answer":"Determinate loaders should always map to real progress. Fake progress damages trust."},{"question":"How should Lines Loader be announced?","answer":"Use aria-busy on the loading region and concise status text in a polite live region when useful."},{"question":"When is a skeleton better than Lines Loader?","answer":"Use skeletons when the layout is known and content streams into place."},{"question":"What should reduced motion do for Lines Loader?","answer":"Use static progress text, a simple bar, or skeleton content instead of looping motion."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/loaders/lines-loader","demoUrl":"https://vault.hyperiux.com/demo/lines-loader","related":[{"slug":"circle-text-reveal","title":"Circle Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/circle-text-reveal"},{"slug":"card-drift","title":"Card Drift","docsUrl":"https://vault.hyperiux.com/effects/components/card-drift"},{"slug":"rotation-slider","title":"Rotation Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/rotation-slider"},{"slug":"chess-grid-transition","title":"Chess Grid Transition","docsUrl":"https://vault.hyperiux.com/effects/page-transitions/chess-grid-transition"}]},{"slug":"numeric-tunnel","title":"Numeric Tunnel Loader","category":{"id":"loaders","slug":"loaders","name":"Loaders"},"tier":"free","summary":"A numeric intro loader that counts from 0 to 100 on a timer through a tunnel of WebGL digits, then warps away to reveal the content underneath.","description":"Numeric Tunnel for React plays a timed 0 to 100 digital counting animation as a branded intro for AI, dev-tool, and technical brand pages.","tags":["Drei","React Three Fiber","GSAP","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","gsap","three"],"install":"npx hyperiux add numeric-tunnel","usage":"import NumericTunnel from '@/components/effects/numeric-tunnel'\n\nconst page = () => {\n  return (\n    <NumericTunnel />\n  )\n}","props":[{"name":"digitCount","type":"number","default":50,"description":"Number of digits rendered in the tunnel."},{"name":"speed","type":"number","default":1,"description":"Forward motion speed."},{"name":"depth","type":"number","default":900,"description":"Visual tunnel depth."},{"name":"textColor","type":"string","default":"#ffffff","description":"Digit color."},{"name":"backgroundColor","type":"string","default":"#000000","description":"Tunnel background color."}],"overview":["Numeric Tunnel gives a short wait a branded moment: numbers count from 0 to 100 on a timer, not real progress.","Use it as a short branded intro while a hero scene, assets, or WebGL warm up. Do not add a fake preloader to a fast page just to make it feel designed.","The production risk is dishonesty. The count runs on its own timer, so keep it brief, use aria-busy where the region is updating, and never present the number as real progress."],"exampleUseCase":["A 3D product configurator can use Numeric Tunnel Loader as a short branded intro while the first view warms up. Digits stream through a tunnel as the count climbs, then the scene warps away to reveal the configurator.","The outcome is a branded entrance. The count runs on its own timer rather than measuring the load, so keep it brief and never present it as real progress. Determinate progress must be tied to a real signal."],"bestFor":["Short branded intros, such as a WebGL warm-up, where a timed count sets the tone without claiming real progress.","Technical launch flows where the loading moment can carry brand tone without lying.","Numeric Tunnel gives a brief wait a branded entrance; tune speed so it does not manufacture delay."],"notFor":["Not for fast pages, fake progress, manufactured waits, or loaders that hide usable content."],"performance":["Keep the timed count short, clean up timers, and avoid blocking first paint."],"accessibility":["Use aria-busy on loading regions and concise status text. On mobile and reduced motion, prefer static progress text or skeletons."],"commonMistakes":["Using Numeric Tunnel on a page that already loads quickly.","Faking determinate progress.","Announcing every animation frame to assistive technology."],"faq":[{"question":"When should I use Numeric Tunnel?","answer":"Use it for a short branded intro, such as a WebGL warm-up, where a timed count from 0 to 100 fits and no real progress needs reporting."},{"question":"Should Numeric Tunnel show real progress?","answer":"It cannot as shipped, because the count runs on a timer. Determinate loaders should map to real progress, so do not present this one as a progress readout."},{"question":"How should Numeric Tunnel be announced?","answer":"Use aria-busy on the loading region and concise status text in a polite live region when useful."},{"question":"When is a skeleton better than Numeric Tunnel?","answer":"Use skeletons when the layout is known and content streams into place."},{"question":"What should reduced motion do for Numeric Tunnel?","answer":"Use static progress text, a simple bar, or skeleton content instead of looping motion."},{"question":"Can Hyperiux adapt Numeric Tunnel for a real brand system?","answer":"Yes. A custom version should define motion rules, visual treatment, performance budget, fallback behavior, source handoff, and implementation notes for the specific page or launch context."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/loaders/numeric-tunnel","demoUrl":"https://vault.hyperiux.com/demo/numeric-tunnel","related":[{"slug":"lines-loader","title":"Lines Loader","docsUrl":"https://vault.hyperiux.com/effects/loaders/lines-loader"},{"slug":"stack-loader","title":"Stack Loader","docsUrl":"https://vault.hyperiux.com/effects/loaders/stack-loader"},{"slug":"dither-canvas","title":"Dither Canvas","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/dither-canvas"}]},{"slug":"stack-loader","title":"Stack Loader","category":{"id":"loaders","slug":"loaders","name":"Loaders"},"tier":"free","summary":"A stacked-panel loader that covers real route, asset, upload, or WebGL waits with branded motion tied to actual loading state.","description":"Stack Loader for React covers real route or asset waits with stacked panels tied to actual loading state. Reduced-motion and touch fallbacks included.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add stack-loader","usage":"import StackLoader from \"@/components/effects/stack-loader\";\n\nexport default function Page() {\n  return <StackLoader />;\n}","props":[{"name":"imageSize","type":"number","default":1,"description":"Scale multiplier for the loader image stack."},{"name":"duration","type":"number","default":1,"description":"Global duration multiplier for the loader animation."},{"name":"fadeOutDuration","type":"number","default":0.8,"description":"Duration of the final image and loader fade-out."},{"name":"backgroundColor","type":"string","default":"#fcfcfc","description":"Loader background color."}],"overview":["Stack Loader gives a real wait a visible state: panels stack during a real transition.","Use it for route latency, upload progress, asset warm-up, data loading, or WebGL initialization. Do not add a fake preloader to a fast page just to make it feel designed.","The thing to watch is dishonesty. Bind the loader to real state, use aria-busy where the region is updating, and never let a progress number claim completion before the content is ready."],"exampleUseCase":["A fashion ecommerce brand can use Stack Loader as the entry to a new-season lookbook while its campaign imagery preloads. Images arrive as a stack, then spread apart as the season title animates in word by word.","The outcome is anticipation without delay. The loader covers a real wait and disappears as soon as the lookbook is ready, rather than holding a fast page back for show. Determinate progress must be tied to a real signal."],"bestFor":["Route and asset waits where a short branded cover is honest and state-driven.","Experiences where the loader disappears as soon as the real task completes.","Stack Loader makes real waiting visible without manufacturing delay."],"notFor":["Not for fast pages, fake progress, manufactured waits, or loaders that hide usable content."],"performance":["Tie animation to real load state, clean up timers, and avoid blocking first paint."],"accessibility":["Use aria-busy on loading regions and concise status text. On mobile and reduced motion, prefer static progress text or skeletons."],"commonMistakes":["Using Stack Loader on a page that already loads quickly.","Faking determinate progress.","Announcing every animation frame to assistive technology."],"faq":[{"question":"When should I use Stack Loader?","answer":"Use it when a real route or asset wait needs a short branded cover of stacking panels."},{"question":"Should Stack Loader show real progress?","answer":"Determinate loaders should always map to real progress. Fake progress damages trust."},{"question":"How should Stack Loader be announced?","answer":"Use aria-busy on the loading region and concise status text in a polite live region when useful."},{"question":"When is a skeleton better than Stack Loader?","answer":"Use skeletons when the layout is known and content streams into place."},{"question":"What should reduced motion do for Stack Loader?","answer":"Use static progress text, a simple bar, or skeleton content instead of looping motion."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/loaders/stack-loader","demoUrl":"https://vault.hyperiux.com/demo/stack-loader","related":[{"slug":"lines-loader","title":"Lines Loader","docsUrl":"https://vault.hyperiux.com/effects/loaders/lines-loader"},{"slug":"animated-toggle","title":"Animated Toggle","docsUrl":"https://vault.hyperiux.com/effects/buttons/animated-toggle"}]},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"A spatial portfolio slider that gives selected projects depth, movement, and presence as users scroll through the page.","description":"3D Portfolio Slider for React: spatial depth that makes project browsing feel earned. Built for agency and creative portfolios.","tags":["GSAP","Lenis","Three.js"],"dependencies":["gsap","lenis","three"],"install":"npx hyperiux add 3d-portfolio-slider","usage":"import PortfolioSlider3D from '@/components/effects/3d-portfolio-slider'\n\nconst page = () => {\n  return (\n    <>\n    <PortfolioSlider3D />\n    </>\n  )\n}","props":[{"name":"zoomFactor","type":"number","default":1,"description":"Multiplier on the shader zoom applied to planes as they swing away from center."},{"name":"scrollSpeed","type":"number","default":0.01,"description":"How fast wheel/scroll input moves the carousel."},{"name":"showCaption","type":"boolean","default":true,"description":"Shows the project caption text overlay."}],"overview":["3D Portfolio Slider turns a portfolio grid into a controlled spatial reveal. Each project gains presence before it gets evaluated.","Use 3D Portfolio Slider when the work itself needs to feel spatial. Creative agencies, studios, and portfolio developers are the natural fit because the effect turns browsing into a controlled reveal of craft, not a thumbnail wall. The page job is presence: each project should feel like it occupies space before the visitor clicks through.","The risk in production is whether perspective and depth remain coherent when aspect ratios change. The fallback should become a readable portfolio stack, not a broken 3D lane squeezed into a phone."],"exampleUseCase":["A creative studio rebuilding its portfolio page: 3D Portfolio Slider introduces scroll-linked depth so browsing the work feels like moving through it. The outcome is presence: the work is experienced before it is evaluated."],"bestFor":["Studio portfolios where scroll-linked depth makes selected work feel spatial rather than listed.","Agency and studio portfolios where the work should feel dimensional, not listed.","Makes agency and studio portfolios feel spatially considered rather than just well-photographed."],"notFor":["Not for large portfolio archives where visitors need to compare many projects or open work from a simple grid.","Not for low-power-first audiences unless a static project grid is the primary fallback."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Using aggressive perspective that distorts the work instead of framing it.","Letting the spatial lane replace a portfolio grid where visitors need fast comparison.","Testing with placeholder images instead of real project crops and aspect ratios."],"faq":[{"question":"What perspective depth works for portfolio cards on desktop and tablet?","answer":"Enough perspective to suggest space without warping the work - strong depth flatters the motion but distorts the thumbnails you're trying to sell. Keep the tilt subtle on tablet, where viewing angles are wider and the cards are physically smaller. Preview with real project imagery, since aggressive perspective that looks good on placeholders often hurts actual photography."},{"question":"Does 3D Portfolio Slider use CSS transforms or WebGL?","answer":"This is exactly the kind of fact to confirm against the shipped component rather than assume, because the answer changes how you budget performance and fallbacks. A CSS-transform build is lighter and degrades to a flat grid easily; a WebGL build needs a poster fallback and GPU budgeting. Treat the implementation detail as a verification item before you commit the page."},{"question":"How many portfolio items can it handle before performance drops?","answer":"The cost scales with how many cards are transformed and composited at once, not with the total project count, so virtualize or window the list and only animate what's near the viewport. A dozen featured pieces usually stays smooth; a full archive should page or lazy-mount. Measure on a mid-range laptop and a real phone before shipping a large set."},{"question":"What keyboard pattern should a 3D portfolio slider support?","answer":"Each project should be reachable and operable by keyboard in the same order it appears in the DOM, with a visible focus state and Enter/Space to open. Arrow keys can move between cards, but tab order and focus must never depend on the 3D transform. If the spatial interaction can't be made keyboard-equivalent, expose the same projects as a plain focusable list."},{"question":"When is a masonry grid better than 3D Portfolio Slider?","answer":"Choose masonry when visitors need to compare many pieces quickly, when the work is mixed-aspect, or when most traffic is mobile and scanning matters more than presence. The 3D slider earns its weight on a focused, curated set where each project deserves a beat of attention. If the goal is breadth and fast triage, the static grid wins."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider","demoUrl":"https://vault.hyperiux.com/demo/3d-portfolio-slider","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"},{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"}]},{"slug":"book-flip","title":"Book Flip","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"Present stories, portfolios, or lookbooks as a tactile page-turn experience where each screen feels like part of a designed object.","description":"Book Flip for React creates an interactive 3D page-turn experience for portfolios, lookbooks, editorial stories, and product narratives.","tags":["Drei","React Three Fiber","maath","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","maath","three"],"install":"npx hyperiux add book-flip","usage":"import BookFlip from '@/components/effects/book-flip'\n\nconst page = () => {\n  return (\n    <>\n      <BookFlip />\n    </>\n  )\n}","props":[{"name":"pageSpeed","type":"number","default":0.8,"description":"Speed of the page flip animation."},{"name":"bookScale","type":"number","default":1,"description":"Overall scale of the 3D book."}],"overview":["Book Flip turns a sequence into an object. The visitor does not just move through pages; they turn them.","Use Book Flip when the content has a natural editorial metaphor: a lookbook, story, manifesto, case study, product booklet, brand guideline, or campaign narrative. The page job is tactility: the interaction should make the sequence feel held, not merely clicked through.","The production risk is readability. A 3D page is charming until the text is too small, the hit area is unclear, or mobile users are forced to fight a tiny digital book. The fallback should be a normal, readable sequence of pages or sections."],"exampleUseCase":["A fashion campaign can use Book Flip as a digital lookbook where visitors turn through a curated set of images, campaign notes, and product moments. The outcome is tactility: the content feels like a designed object rather than another carousel."],"bestFor":["Editorial portfolios, campaign lookbooks, and visual stories with a natural page metaphor.","Brand books, manifestos, or case-study sequences where turning pages supports the concept.","Short, curated narratives where each page earns its place."],"notFor":["Not for documentation, pricing, forms, dashboards, long text, or anything that needs fast scanning.","Not for mobile-first pages unless the book collapses into a clear stacked or swipeable version."],"performance":["Compress page textures, keep page count controlled, avoid heavy real-time shadows, cap DPR, and load only what the experience needs. Dispose of textures and geometry when leaving the route."],"accessibility":["Provide button controls, keyboard access, labelled page state, and a readable fallback. On mobile, use swipe or stacked pages rather than forcing precise 3D page clicks. Reduced-motion users should get instant page changes or a static sequence."],"commonMistakes":["Putting important copy only on a texture inside the 3D book.","Making page navigation depend on tiny click targets.","Using a book metaphor for content that should simply be a page."],"faq":[{"question":"When should I use Book Flip?","answer":"Use it when the content genuinely benefits from a book, lookbook, or editorial page-turn metaphor."},{"question":"Should Book Flip use buttons as well as page clicks?","answer":"Yes. Page clicks are playful, but visible navigation controls make the interaction predictable and easier to use."},{"question":"Can text live only inside the 3D page texture?","answer":"Avoid that for important content. Key headings, captions, and CTAs should exist as readable HTML or have an accessible equivalent."},{"question":"How many pages should a Book Flip experience include?","answer":"Keep it short. A handful of pages works for a campaign or lookbook; a long document should become a normal reader or page layout."},{"question":"What should happen on reduced motion?","answer":"Disable dramatic page bending and show instant page changes, a flat slider, or a stacked readable sequence."},{"question":"Can Hyperiux adapt Book Flip for a real brand system?","answer":"Yes. A custom version should define page design, controls, accessible content strategy, mobile fallback, performance budget, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/book-flip","demoUrl":"https://vault.hyperiux.com/demo/book-flip","related":[{"slug":"infinite-perspective-slider","title":"Infinite Perspective Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/infinite-perspective-slider"},{"slug":"colliding-models","title":"Colliding Models","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/colliding-models"},{"slug":"webgl-slider","title":"WebGL Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/webgl-slider"},{"slug":"donut-particles","title":"Donut Particles","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/donut-particles"}]},{"slug":"colliding-models","title":"Colliding Models","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"Let 3D objects move, collide, and react inside a WebGL scene so the page feels kinetic instead of merely decorated.","description":"Colliding Models for React creates an interactive WebGL physics field where 3D objects collide, react, and add energy to brand heroes.","tags":["Drei","React Three Fiber","React Postprocessing","Rapier","maath","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","@react-three/postprocessing","@react-three/rapier","maath","three"],"install":"npx hyperiux add colliding-models","usage":"import CollidingModels from \"@/components/effects/colliding-models\";\n\nconst page = () => {\n  return (\n    <>\n        <CollidingModels />\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"geometry","type":"string","default":"model","description":"Shape of the colliding pieces: the Hyperiux logo model or a built-in geometry."},{"name":"connectorCount","type":"number","default":8,"description":"Number of connecting shapes or joints."},{"name":"modelScale","type":"number","default":1,"description":"Scale applied to the 3D model."},{"name":"backgroundColor","type":"string","default":"#141518","description":"Canvas background color."},{"name":"returnToPosition","type":"boolean","default":true,"description":"Pull pieces back to the cluster after the cursor knocks them away."},{"name":"returnSpeed","type":"number","default":1,"description":"How quickly knocked pieces come back to the cluster."}],"overview":["Colliding Models turns a WebGL scene into a field of physical interaction. Objects do not just float; they meet, bounce, and spark.","Use Colliding Models when a brand wants motion that feels kinetic rather than ornamental. It belongs on creative studio pages, 3D capability sections, AI/cyber launches, and experimental homepages where object interaction supports the message. The page job is energy: visitors should feel the system reacting without losing the headline or CTA.","The production risk is control. Physics scenes can become chaos if collision count, object scale, pointer force, and postprocessing are not kept in check. The scene should feel alive, not like a drawer of logos got thrown down a staircase."],"exampleUseCase":["A creative technology studio can use Colliding Models on a capability page to show that the team builds interactive 3D systems, not just static scenes. Visitors move through the field, objects collide, and a click changes the spark. The outcome is energy: the page demonstrates interaction as the service promise."],"bestFor":["Creative studio and WebGL capability pages where interaction proves the point.","Brand heroes that need kinetic objects rather than passive decorative shapes.","Experimental pages where pointer or click input can safely enhance the scene."],"notFor":["Not for product flows, forms, documentation, checkout, or pages where users need quiet reading and precise clicking.","Not for large model sets without a strict physics and rendering budget."],"performance":["Use lightweight models, simple colliders, capped DPR, limited postprocessing, and offscreen pause. Keep physics bodies predictable and avoid simulating more objects than the page can justify."],"accessibility":["The 3D field should be optional. Keep the message, CTA, and navigation outside the canvas. On mobile, reduce physics, simplify interaction, or use a static poster. Reduced-motion users should not receive bouncing objects or collision bursts."],"commonMistakes":["Letting physics objects cover the CTA.","Using detailed mesh colliders where simple collision shapes would do.","Making click/tap interaction essential to understanding the page."],"faq":[{"question":"When should I use Colliding Models?","answer":"Use it when a WebGL page needs physical interaction, collisions, and object energy to support a brand or capability message."},{"question":"Does Colliding Models need real 3D assets?","answer":"Yes, if the scene is model-led. Keep assets optimized, compressed, and built with collision needs in mind rather than importing heavy showcase models blindly."},{"question":"How should the physics stay performant?","answer":"Use simple colliders, limited object counts, capped DPR, paused offscreen simulation, and cleanup on route change. Physics should enhance the scene, not become the product."},{"question":"What should click or tap do?","answer":"Click or tap can change color, spark, material, or impulse, but it should remain optional. Core content must stay available without interacting with the scene."},{"question":"What is the reduced-motion fallback?","answer":"Pause physics and show a static or gently composed 3D poster state. Avoid bouncing, collision bursts, and continuous camera motion."},{"question":"Can Hyperiux adapt Colliding Models for a real brand system?","answer":"Yes. A custom version should define model style, collision behavior, interaction rules, render budget, fallback design, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/colliding-models","demoUrl":"https://vault.hyperiux.com/demo/colliding-models","related":[{"slug":"donut-particles","title":"Donut Particles","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/donut-particles"},{"slug":"book-flip","title":"Book Flip","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/book-flip"},{"slug":"fractal-glass","title":"Fractal Glass","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass"},{"slug":"grid-lift","title":"Grid Lift","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/grid-lift"}]},{"slug":"curved-plane","title":"Curved Plane","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"A WebGL image carousel effect whose planes bend with drag and scroll speed, adding subtle spatial depth to a looping row or columns of images.","description":"Curved Plane for React is a draggable WebGL image carousel whose planes bend with drag and scroll speed, for portfolio and product galleries. Reduced-motion and touch support included.","tags":["Three.js"],"dependencies":["three"],"install":"npx hyperiux add curved-plane","usage":"import CurvedPlane from \"@/components/effects/curved-plane\";\n\nexport default function page() {\n  return (\n    <>\n      <CurvedPlane />\n    </>\n  );\n}","props":[{"name":"speed","type":"number","default":1,"description":"Drag, wheel, and inertia movement speed."},{"name":"curveValue","type":"number","default":1,"description":"Multiplier for the image plane curvature deformation."},{"name":"gap","type":"number","default":1,"description":"Spacing multiplier between image planes."},{"name":"imageSize","type":"number","default":1,"description":"Image plane size multiplier."}],"overview":["Curved Plane bends a looping carousel of image planes as they are dragged or scrolled, so a gallery holds spatial depth without needing a full 3D scene.","Use it where a set of images, product renders, or portfolio visuals deserves subtle dimensional treatment. The page job is controlled depth: the bend should make the image feel more authored, not turn the section into a showroom.","The thing to watch is over-art-direction. If the source image is weak, curvature will not rescue it. Keep the curve restrained, preserve readable foreground copy, and serve a flat image fallback."],"exampleUseCase":["An architecture firm can use Curved Plane on a case-study page to present a row of project photographs. As visitors drag or scroll, the images glide horizontally and the plane bends with the speed of the movement, then eases flat again as it settles.","The outcome is depth without a full 3D scene. The project imagery feels authored rather than laid out as a static grid."],"bestFor":["Portfolio and product pages where subtle image-surface depth justifies the WebGL dependency.","Case-study galleries where a set of strong visuals needs premium treatment without full-scene complexity.","Launch pages where spatial polish matters but the message still belongs in HTML."],"notFor":["Not for low-power-first pages, dense content, dashboards, checkout, or routes where performance is the main conversion lever."],"performance":["The renderer allows DPR up to 2, so cap it at 1.0 on touch/mobile and 1.5 on mid-range desktop. Curved Plane already pauses offscreen and in hidden tabs, has no postprocessing, and texture sizes should stay controlled."],"accessibility":["Keep meaningful content in HTML outside the canvas, which is aria-hidden and has no keyboard controls. On mobile, touch drag moves the carousel and the full-screen container blocks page scrolling, so switch to a poster if the scene cannot hold frame rate."],"commonMistakes":["Using surface bend to decorate weak imagery that should be replaced instead.","Pushing curvature so far that the image becomes harder to read.","Treating the plane as a content container instead of a visual surface behind real HTML."],"faq":[{"question":"What GPU budget should Curved Plane use on mobile and desktop?","answer":"A handful of bent planes is relatively light (seven in the horizontal row, up to 24 in the vertical columns), but texture size dominates the cost, so cap DPR at 1.0 on mobile and 1.5 on desktop and serve appropriately sized images. Avoid uploading huge textures the curve doesn't need. It should run comfortably on mid-range hardware when textures are controlled."},{"question":"What poster fallback should replace Curved Plane when WebGL fails?","answer":"Show the images as a flat row as the fallback; since the effect is a curved presentation of pictures that rest flat, the uncurved images are a clean, faithful substitute. The surrounding copy is HTML and unaffected. No information is lost when the planes flatten."},{"question":"How should Curved Plane pause when offscreen or in a hidden tab?","answer":"The render loop runs every frame while visible, even when the carousel is at rest, and it already stops when the canvas is offscreen or the tab is hidden. Demand rendering would stop a still carousel from being redrawn every frame. It resumes when it returns to view."},{"question":"Which content should stay outside the Curved Plane canvas?","answer":"Captions, titles, and links belong in HTML outside the carousel, not inside the textures, so they stay selectable and readable. The planes carry the images; the words carry the meaning. Keep any clickable area as a real DOM element."},{"question":"When should I choose a static image instead of Curved Plane?","answer":"Choose flat images when the curvature adds nothing to comprehension, when the page is performance-sensitive, or when precise image detail matters more than the 3D feel. The curve is a stylistic surface; if it doesn't serve the content, plain images are better. Reserve it for showcase galleries."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/curved-plane","demoUrl":"https://vault.hyperiux.com/demo/curved-plane","related":[{"slug":"fractal-glass","title":"Fractal Glass","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass"},{"slug":"grid-lift","title":"Grid Lift","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/grid-lift"},{"slug":"stack-loader","title":"Stack Loader","docsUrl":"https://vault.hyperiux.com/effects/loaders/stack-loader"},{"slug":"character-trail","title":"Character Trail","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/character-trail"}]},{"slug":"donut-particles","title":"Donut Particles","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"Turn particles into a sculptural WebGL centerpiece for bold hero sections that need presence before the first scroll.","description":"Donut Particles for React builds a torus-like particle sculpture for bold brand heroes, launch pages, and WebGL visual statements.","tags":["React Three Fiber","Three.js"],"dependencies":["@react-three/fiber","three"],"install":"npx hyperiux add donut-particles","usage":"import DonutParticles from \"@/components/effects/donut-particles\";\n\nconst index = () => {\n  return (\n    <>\n      <DonutParticles />\n    </>\n  );\n};\n\nexport default index;","props":[{"name":"particleSize","type":"number","default":1,"description":"Scale multiplier applied to every particle's rendered size."},{"name":"donutScale","type":"number","default":3.5,"description":"Scale applied to the particle donut."},{"name":"particleColor","type":"color","default":"#9973ff","description":"Base color used for the particle glow cycle."},{"name":"mouseInteraction","type":"boolean","default":true,"description":"Enables cursor-driven particle flow on desktop viewports."},{"name":"speed","type":"number","default":1,"description":"Playback speed multiplier for rotation and particle motion."},{"name":"intensity","type":"number","default":1,"description":"Strength multiplier for particle glow and cursor interaction force."},{"name":"donutPosition","type":"array","default":[0,0,0],"description":"XYZ position of the particle donut."},{"name":"donutRotation","type":"array","default":[-1.0471975512,0.7853981634,0],"description":"XYZ rotation of the particle donut in radians."},{"name":"cameraPosition","type":"array","default":[2,4,6],"description":"XYZ camera position for the WebGL scene."},{"name":"dpr","type":"array","default":[1,2],"description":"Device pixel ratio range used by the canvas."},{"name":"morphDuration","type":"number","default":1.5,"description":"Seconds for scattered particles to settle back into the donut."},{"name":"demorphIntensity","type":"number","default":1,"description":"How strongly the cursor pulls particles out of the donut shape."},{"name":"rotationSpeed","type":"number","default":1,"description":"Donut spin speed multiplier."},{"name":"tiltX","type":"number","default":-60,"description":"Donut tilt around the X axis in degrees."},{"name":"tiltY","type":"number","default":45,"description":"Donut tilt around the Y axis in degrees."}],"overview":["Donut Particles turns a particle field into a sculptural brand object. It is the “yes, this site has a GPU budget” moment, used carefully.","Use Donut Particles when a hero needs one bold visual center rather than a decorative background. Brand launches, creative studios, AI pages, and campaign microsites can use it when the particle form supports the message. The page job is presence: the object should make the brand feel more tangible before the visitor reads the supporting copy.","The production risk is excess. Particle sculptures can cost more than they communicate if density, rotation, postprocessing, and pointer behavior all compete at once. The scene needs a clear focal role, a static fallback, and a strict performance budget."],"exampleUseCase":["A brand launch page can place Donut Particles beside a short hero claim to create a memorable first screen. The torus-like form moves slowly while the copy stays sharp and clickable. The outcome is presence: the brand has a visual object instead of another gradient blob."],"bestFor":["Bold brand heroes where one particle sculpture can carry the visual identity.","AI, creative, or technical launches that need a memorable WebGL centerpiece.","Desktop-first hero sections where the 3D object enhances copy instead of replacing it."],"notFor":["Not for text-heavy pages, dashboards, checkout flows, dense product sections, or mobile-first routes where the particle scene becomes the page’s heaviest asset.","Not for brands that need calm clarity more than a sculptural first impression."],"performance":["Cap DPR, tune particle count, avoid expensive materials, pause the render loop offscreen, and dispose of buffers and materials on route change. Test on a mid-range laptop, not only on the machine that wrote the code."],"accessibility":["Treat the particle object as decorative unless it communicates a real state. Hide decorative canvas content from assistive technology. On mobile and reduced motion, use a static poster, lower particle count, or simplified geometry."],"commonMistakes":["Making the particle object brighter than the CTA.","Using too many particles before checking frame rate.","Letting the WebGL scene carry the only visual meaning of the page."],"faq":[{"question":"When should I use Donut Particles?","answer":"Use it when a launch page or brand hero needs one sculptural WebGL particle object as the visual center."},{"question":"How many particles are safe?","answer":"There is no universal number. Start low, measure on real devices, and raise density only if the object still renders smoothly with the full page around it."},{"question":"Should Donut Particles be interactive?","answer":"It can respond gently to pointer movement, but interaction should remain optional. The visitor should not need to play with the object to understand the page."},{"question":"What should happen on mobile?","answer":"Reduce particle count, simplify materials, slow motion, or replace the scene with a static poster. The hero must still read without live WebGL."},{"question":"Is Donut Particles good for product pages?","answer":"Only for short brand-led sections. For product explanation, use screenshots, diagrams, or feature sections where the product remains the focus."},{"question":"Can Hyperiux adapt Donut Particles for a real brand system?","answer":"Yes. A custom version should define shape language, particle behavior, color system, performance budget, fallback design, source handoff, and implementation notes."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/donut-particles","demoUrl":"https://vault.hyperiux.com/demo/donut-particles","related":[{"slug":"butterfly-trail-cursor","title":"Butterfly Trail Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/butterfly-trail-cursor"},{"slug":"book-flip","title":"Book Flip","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/book-flip"},{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"webgl-slider","title":"WebGL Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/webgl-slider"}]},{"slug":"draggable-canvas","title":"Draggable Canvas","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"An interactive WebGL canvas that lets users drag and explore product visuals, portfolio surfaces, or branded hero scenes.","description":"Draggable Canvas for React makes hero imagery explorable by drag for showcases where interaction is the point. Keeps content crawlable and accessible.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add draggable-canvas","usage":"import DraggableCanvas from '@/components/effects/draggable-canvas'\n\nconst page = () => {\n  return (\n    <>\n    <DraggableCanvas/>\n    </>\n  )\n}\n\nexport default page","props":[{"name":"friction","type":"number","default":0.12,"description":"Inertia friction after drag release."},{"name":"scaleOnDrag","type":"number","default":1.04,"description":"Scale applied while dragging."},{"name":"backgroundColor","type":"string","default":"#000000","description":"Canvas background color."},{"name":"canvasBorderColor","type":"string","default":"#71717a","description":"Border color for each draggable canvas window."},{"name":"rounded","type":"number","default":0,"description":"Corner radius for each draggable canvas window."}],"overview":["Draggable Canvas makes the hero interactive without making it distracting.","Use it when exploration is the point: a project surface, product visual, or branded scene that should respond to touch and drag without turning navigation into a toy.","The production risk is discoverability. Drag can enhance exploration, but it cannot be the only path to understand content or reach controls."],"exampleUseCase":["A film production company can use Draggable Canvas on its showreel page. Six framed windows each show a different crop of the same reel, and visitors can drag and throw them around the screen to piece the footage together.","The outcome is tactile exploration. The reel feels handled rather than just played, while the play button, project list, and contact link stay in normal page controls so drag is never the only path."],"bestFor":["Interactive showcases where drag adds exploration but does not gate content.","Portfolio surfaces where movement helps visitors feel the work before opening it.","Hero scenes that need tactile behavior with a clear touch fallback."],"notFor":["Not for low-power-first pages, dense content, dashboards, checkout, or routes where performance is the main conversion lever."],"performance":["Cap DPR at 1.0 on touch/mobile and up to 1.5 on mid-range desktop. Pause Draggable Canvas offscreen and in hidden tabs, reduce postprocessing before shipping, and keep texture sizes controlled."],"accessibility":["Keep meaningful content in HTML outside the canvas. On mobile, reduce shader quality and switch to a poster if the scene cannot hold frame rate."],"commonMistakes":["Making drag the only way to discover content or controls.","Letting the canvas sit above focusable links and buttons.","Forgetting that touch users need visible controls or a simplified interaction path."],"faq":[{"question":"What GPU budget should Draggable Canvas use on mobile and desktop?","answer":"Interaction keeps the loop active during drag, so cap DPR at 1.0 on touch and 1.5 on desktop and keep the scene complexity modest enough to stay responsive under continuous input. Throttle works when the user isn't dragging. Test sustained dragging on mobile, where heat and battery show up fast."},{"question":"What poster fallback should replace Draggable Canvas when WebGL fails?","answer":"Provide a static composition of the scene plus a clear, non-interactive way to see the same content, since the drag interaction won't exist without WebGL. Ensure nothing important was only reachable by dragging. The HTML message remains intact."},{"question":"How should Draggable Canvas pause when offscreen or in a hidden tab?","answer":"Pause rendering and input handling when the canvas is offscreen or the tab is hidden, and release pointer capture so a drag isn't left \"stuck.\" Resume cleanly on return. Because input is ongoing, leaving listeners and the loop alive offscreen is especially wasteful."},{"question":"Which content should stay outside the Draggable Canvas canvas?","answer":"Any real content or controls labels, descriptions, links that stay in the DOM, and the drag should enhance exploration, not gate information. Provide a non-drag path to the same material for keyboard and assistive-tech users. The canvas is the playground, not the content store."},{"question":"When should I choose a static image instead of Draggable Canvas?","answer":"Choose a static visual when exploration adds nothing, when the audience is mostly touch, or when the interactivity risks more frustration than delight. If users won't actually benefit from moving the scene, the cost isn't justified. Reserve drag for showcases where exploring is the point."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/draggable-canvas","demoUrl":"https://vault.hyperiux.com/demo/draggable-canvas","related":[{"slug":"interactive-list-preview","title":"Interactive List Preview","docsUrl":"https://vault.hyperiux.com/effects/components/interactive-list-preview"},{"slug":"pixelated-image-effect","title":"Pixelated Image Effect","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/pixelated-image-effect"},{"slug":"overflow-text-reveal","title":"Overflow Text Reveal","docsUrl":"https://vault.hyperiux.com/effects/text-animations/overflow-text-reveal"},{"slug":"zoom-slider","title":"Zoom Slider","docsUrl":"https://vault.hyperiux.com/effects/carousels/zoom-slider"}]},{"slug":"file-encryption","title":"File Encryption","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"A security visualization component that animates file protection states for cybersecurity, privacy, and trust sections.","description":"File Encryption for React visualizes protection for cybersecurity, privacy, and trust sections without replacing real copy. Includes a clean mobile fallback.","tags":["GSAP"],"dependencies":["gsap"],"install":"npx hyperiux add file-encryption","usage":"import FileEncryption from \"@/components/effects/file-encryption\";\n\nexport default function Page() {\n  return (\n    <>\n    <FileEncryption/>\n    </>\n  );\n}","props":[{"name":"accentColor","type":"string","default":"#ff5f00","description":"Beam, particle, and heading accent color."},{"name":"backgroundColor","type":"string","default":"#07060f","description":"Scene and marquee background color."},{"name":"speed","type":"number","default":1,"description":"Marquee, particle, and scramble animation speed."},{"name":"cardSize","type":"number","default":1,"description":"Credit card size multiplier."}],"overview":["File Encryption adds motion to a component that already has a job: security motion visualizes protection.","Use File Encryption when a cybersecurity, privacy, or infrastructure page needs a visual metaphor for protection beside clear copy. The animation should make a security idea easier to understand, not make the claim by itself.","The production risk is overclaiming security. Motion can illustrate a protected state, but the surrounding text must carry the actual security promise and any compliance nuance."],"exampleUseCase":["A cybersecurity product page can use File Encryption to visualize a file moving from exposed to protected state beside a plain-language security claim. The animation builds trust only because the copy explains what is protected."],"bestFor":["Cybersecurity and privacy sections where protection needs a clear visual metaphor beside real copy.","Product pages that need to show secure handling without turning trust into vague animation.","Security storytelling sections where the visual supports, not replaces, the trust claim."],"notFor":["Not for security claims that the product cannot prove, or for pages where animation substitutes for clear privacy, compliance, or encryption copy."],"performance":["Keep the file motion short and lightweight, avoid continuous loops near long copy, and pause or simplify the animation offscreen."],"accessibility":["Treat decorative encryption motion as visual support. Keep the actual security meaning in text and make the sequence understandable when motion is disabled."],"commonMistakes":["Letting the animation make an unsupported security promise.","Hiding the explanation inside the moving file graphic.","Running the protection loop constantly on mobile."],"faq":[{"question":"When should I use File Encryption?","answer":"Use it when a security or privacy product needs motion that makes protection visible."},{"question":"How should File Encryption stay trustworthy and accessible?","answer":"Keep the security claim in normal text beside the visual. The animation can illustrate encrypted or protected state, but it must not be the only place where the promise is explained."},{"question":"How should File Encryption simplify on mobile?","answer":"Reduce movement, shorten the sequence, or show a static protected-state visual. The security claim should stay readable without requiring users to watch the full animation."},{"question":"Can File Encryption improve trust on security pages?","answer":"Yes, when it clarifies a real protection moment already explained in copy. It damages trust when it implies security guarantees the product cannot support."},{"question":"What should reduced motion do for File Encryption?","answer":"Show the final protected state or a static before/after visual without looping file movement."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/file-encryption","demoUrl":"https://vault.hyperiux.com/demo/file-encryption","related":[{"slug":"gooey-counter","title":"Gooey Counter","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter"},{"slug":"grid-lift","title":"Grid Lift","docsUrl":"https://vault.hyperiux.com/effects/backgrounds/grid-lift"},{"slug":"animated-toggle","title":"Animated Toggle","docsUrl":"https://vault.hyperiux.com/effects/buttons/animated-toggle"},{"slug":"split-canvas","title":"Split Canvas","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/split-canvas"}]},{"slug":"fractal-glass","title":"Fractal Glass","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"free","summary":"A premium WebGL refraction effect that splits the hero surface into shifting glass-like facets for brand launches and portfolio pages.","description":"Fractal Glass for React & Next.js: refracted facets split the hero surface for premium brand launches, with a composed poster fallback for low-power devices.","tags":["Three.js"],"dependencies":["three"],"install":"npx hyperiux add fractal-glass","usage":"import FractalGlass from \"@/components/effects/fractal-glass\";\n\nconst images = {\n  blob: \"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-13.jpg\",\n};\n\nexport default function Home() {\n  return (\n    <>\n       <FractalGlass\n        imageSrc={images.blob}\n        stripesFrequency={40}\n        glassStrength={2.0}\n        glassSmoothness={0.014}\n        parallaxStrength={0.15}\n        distortionMultiplier={8.0}\n        edgePadding={0.12}\n      />\n    </>\n  );\n}","props":[{"name":"stripesFrequency","type":"number","default":40,"description":"Controls how many refractive glass strips are rendered."},{"name":"glassStrength","type":"number","default":2,"description":"Controls the intensity of the strip refraction."},{"name":"glassSmoothness","type":"number","default":0.014,"description":"Controls how smoothly neighboring refraction samples blend."},{"name":"parallaxStrength","type":"number","default":0.15,"description":"Controls pointer-reactive horizontal parallax."},{"name":"distortionMultiplier","type":"number","default":8,"description":"Amplifies parallax around distorted stripe regions."},{"name":"edgePadding","type":"number","default":0.12,"description":"Softens distortion near the media edges."},{"name":"imageSrc","type":"string","default":"https://picsum.photos/seed/h13/1600/1200","description":"Image URL refracted through the glass strips (needs CORS)."}],"overview":["The hero can hold a refracted surface or a paragraph. Fractal Glass is for pages where the surface earns the paragraph.","Use it for premium heroes, AI/product launches, creative portfolios, and brand moments where the visual payoff justifies GPU work. It should make the site feel technically ambitious, not merely heavier.","The risk in production is budget. Keep meaningful content in HTML, cap DPR by device tier, reduce postprocessing on mobile, pause render loops offscreen, and ship a poster fallback that still feels intentional."],"exampleUseCase":["A branding agency can use Fractal Glass in the hero of its homepage, placing a reel still or campaign image behind a row of refractive glass strips. Moving the pointer adds a slight parallax, so the image shifts through the facets while the agency's positioning line stays in HTML.","The outcome is proof of craft. The surface shows technical ambition in the first second, while the positioning line and contact link stay as ordinary text above it."],"bestFor":["Premium brand heroes where refraction and facets can prove craft without burying the message.","WebGL surfaces that have a poster fallback, mobile simplification, and clear HTML content.","Fractal Glass gives the hero a proof-of-craft surface while preserving HTML copy and fallback design."],"notFor":["Not for low-power-first pages, dense content, dashboards, checkout, or routes where performance is the main conversion lever."],"performance":["Cap DPR at 1.0 on touch/mobile and up to 1.5 on mid-range desktop. Pause Fractal Glass offscreen and in hidden tabs, reduce postprocessing before shipping, and keep texture sizes controlled."],"accessibility":["Keep meaningful content in HTML outside the canvas. On mobile, reduce shader quality and switch to a poster if the scene cannot hold frame rate."],"commonMistakes":["Making Fractal Glass the only place the message exists.","Shipping the highest-cost visual tier on mobile without simplification or fallback.","Forgetting poster fallback and render-loop pause."],"faq":[{"question":"What GPU budget should Fractal Glass use on mobile and desktop?","answer":"Refraction shaders are demanding, so cap DPR at 1.0 on mobile and up to 1.5 on desktop and reduce shader complexity or sample count on the lower tier. Use the quality lever to scale the refraction down rather than disabling it abruptly. Profile on real mobile GPUs, where heavy fragment shaders struggle most."},{"question":"What poster fallback should replace Fractal Glass when WebGL fails?","answer":"Capture a still of the refracted surface so the fallback keeps the premium, faceted look without the live shader. The hero copy is HTML and reads regardless. Make that still good enough to stand on its own."},{"question":"How should Fractal Glass pause when offscreen or in a hidden tab?","answer":"Run the shader on demand and stop it when the canvas is out of view or the tab is hidden, resuming on visibility. A live refraction pass is one of the most expensive things to leave running unseen. Visibility-gating it protects frame rate and battery."},{"question":"Which content should stay outside the Fractal Glass canvas?","answer":"The paragraph the glass is meant to frame the headline, claim, and CTA stays in HTML in front of the surface, never inside the shader. The refraction earns attention for the copy; it should never replace it. Keep all actions as real DOM elements."},{"question":"When should I choose a static image instead of Fractal Glass?","answer":"Choose a static treatment when the refraction is decorative, when performance or mobile reach is the priority, or when text legibility over the surface is at risk. If a still conveys the same crafted feel, prefer it. Reserve the live shader for pages where the surface genuinely earns the paragraph."},{"question":"Can I adapt Fractal Glass to my brand and keep the hero readable?","answer":"Yes, adaptation work tunes the refraction, palette, and contrast so copy stays legible, with motion rules, a performance budget, fallback design, source handoff, and implementation notes. The component ships into and is owned by your codebase."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass","demoUrl":"https://vault.hyperiux.com/demo/fractal-glass","related":[{"slug":"progressive-bloom-valley","title":"Progressive Bloom Valley","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/progressive-bloom-valley"},{"slug":"hero-banner-animated","title":"Hero Banner Animated","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hero-banner-animated"},{"slug":"curved-plane","title":"Curved Plane","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/curved-plane"}]},{"slug":"grid-tunnel","title":"Grid Tunnel","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"A scroll-driven WebGL tunnel effect that moves the viewer through an endless, image-lined vanishing-point grid for technical launches and portfolio heroes.","description":"Grid Tunnel for React moves visitors through an endless, image-lined vanishing-point grid as they scroll or swipe, for technical product launches and portfolio heroes. Rectangle or circle cross-section.","tags":["Drei","React Three Fiber","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","three"],"install":"npx hyperiux add grid-tunnel","usage":"import GridTunnel from \"@/components/effects/grid-tunnel\";\n\nconst page = () => {\n  return (\n    <>\n      <GridTunnel />\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"numberOfGrids","type":"number","default":24,"description":"Number of grid cells (density of the tunnel grid)."},{"name":"shape","type":"string","default":"rectangle","description":"Tunnel cross-section: rectangle or circle (the images curve with the circular walls)."},{"name":"speed","type":"number","default":1,"description":"Scroll and touch travel speed."},{"name":"depth","type":"number","default":1000,"description":"Visible tunnel fog depth."},{"name":"lineColor","type":"string","default":"#9ca3af","description":"Grid line color."},{"name":"backgroundColor","type":"string","default":"#ffffff","description":"Tunnel background color."}],"overview":["Grid Tunnel pulls the eye through technical space before the product story begins.","Use it for AI launches, developer tools, cybersecurity pages, and technical portfolios where kinetic depth is the opening signal. The page job is momentum: the tunnel should frame the first claim, not become a loading screen disguised as craft.","The thing to watch is scroll capture. The tunnel takes over wheel and touch input for the whole window, and it renders every frame while onscreen, which can drain attention and GPU."],"exampleUseCase":["A developer conference site can use Grid Tunnel to open its event page. Scrolling or swiping moves the visitor forward through a wireframe tunnel lined with photography from past editions, while the event name, dates, and ticket link stay fixed in HTML.","The outcome is momentum. The page frames the first claim with depth and movement before anything else is read.","A creative technologist's portfolio can use the same tunnel as an opener, choosing the rectangular or circular cross-section to match the work."],"bestFor":["Technical launches where vanishing-point depth supports the positioning before the copy expands it.","Developer-tool and cybersecurity heroes where engineered space is part of the brand language.","Portfolio openers where kinetic depth earns its GPU budget."],"notFor":["Not for low-power-first pages, dense content, dashboards, checkout, or routes where performance is the main conversion lever."],"performance":["The canvas already caps DPR at 1.5 and pauses offscreen and in hidden tabs; drop DPR to 1.0 on touch/mobile, and keep texture sizes controlled, since each tunnel chunk places up to 50 image panels."],"accessibility":["Keep meaningful content in HTML outside the canvas, which is aria-hidden. On mobile, vertical swipes drive the tunnel instead of scrolling the page, so switch to a poster if the scene cannot hold frame rate."],"commonMistakes":["Placing the tunnel above content visitors need to scroll to, since it captures wheel and touch scrolling for the whole window.","Letting tunnel movement reduce headline legibility.","Forgetting to pause the loop when the section is offscreen or the tab is hidden."],"faq":[{"question":"What GPU budget should Grid Tunnel use on mobile and desktop?","answer":"The render loop runs every frame while onscreen and each tunnel chunk carries up to 50 image panels, so the canvas caps DPR at 1.5; use 1.0 on mobile and keep images small. Lower numberOfGrids or depth on the lower tier. Verify smoothness on a phone while swiping."},{"question":"What poster fallback should replace Grid Tunnel when WebGL fails?","answer":"Provide a still that captures the sense of depth a frame looking down the tunnel, so the fallback keeps the technical mood. HTML copy and CTA remain intact above it. The still should feel deliberate, not like a broken frame."},{"question":"How should Grid Tunnel pause when offscreen or in a hidden tab?","answer":"The tunnel only moves on scroll or touch, but its render loop runs every frame while visible, so pausing matters. It already sets the frameloop to never when offscreen or the tab is hidden and resumes on visibility. Demand rendering would also cut idle frames."},{"question":"Which content should stay outside the Grid Tunnel canvas?","answer":"All headline and body content stays in HTML over the canvas; the tunnel is a backdrop, not a container. Don't paint any message into the moving geometry. Keep links and buttons as real DOM elements."},{"question":"When should I choose a static image instead of Grid Tunnel?","answer":"Choose a static backdrop when scroll-driven motion would distract from the copy, when performance is tight, or when the audience is mostly mobile. If the depth illusion isn't advancing the message, a still costs far less. Use the live tunnel only where kinetic depth is the hook."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/grid-tunnel","demoUrl":"https://vault.hyperiux.com/demo/grid-tunnel","related":[{"slug":"fractal-glass","title":"Fractal Glass","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass"},{"slug":"milky-way","title":"Milky Way","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/milky-way"},{"slug":"mouse-pixelation","title":"Mouse Pixelation","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/mouse-pixelation"}]},{"slug":"hero-banner-animated","title":"Hero Banner Animated","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"A layered WebGL hero banner that gives launch pages, brand debuts, and portfolio first screens a crafted animated opening.","description":"Animated Hero Banner for React uses layered motion to make the first screen carry a launch, brand debut, or portfolio hero. Includes a clean mobile fallback.","tags":["Drei","React Three Fiber","React Postprocessing","GSAP","Lucide","Motion","postprocessing","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","@react-three/postprocessing","gsap","lucide-react","motion","postprocessing","three"],"install":"npx hyperiux add hero-banner-animated","usage":"import HeroBannerAnimated from '@/components/effects/hero-banner-animated'\n\nconst page = () => {\n  return (\n   <>\n   <HeroBannerAnimated/>\n   </>\n  )\n}\n\nexport default page","props":[{"name":"mouseMovement","type":"boolean","default":true,"description":"Enables the cursor-tracked point light."},{"name":"intensity","type":"number","default":3,"description":"Peak brightness of the cursor-tracked point light when the scene is not zoomed."},{"name":"lerp","type":"number","default":0.1,"description":"Smoothing factor for the point light following the cursor; higher values follow faster."},{"name":"accentColor","type":"string","default":"#ECE4B4","description":"Accent color for hero text, markers, links, and icon highlights."}],"overview":["Animated Hero Banner turns the first screen into the brand argument. Layered motion carries the launch before the body copy begins.","Use it for launch pages, brand debuts, campaign microsites, and portfolio heroes where the first screen must prove craft immediately. The page job is arrival: the visitor should understand that the brand has taste before they scroll.","In production, the risk is attention drift. Keep the headline, subhead, and CTA in HTML, let the motion support the opening beat, then quiet it before it competes with the offer."],"exampleUseCase":["A film festival microsite can use Hero Banner Animated as its opening screen. Visitors arrive in a dim 3D room where a light follows the cursor, and clicking the TV screen moves in closer to play the festival trailer through a pixelated transition.","The outcome is arrival. The festival's taste is clear before anyone scrolls, and the dates, headline, and ticket CTA stay in HTML so the motion supports the opening without competing with it."],"bestFor":["Launch and brand-debut pages where the first screen must prove craft within the opening second.","Portfolio heroes where motion supports the central claim rather than becoming the claim.","Campaign pages that need a memorable opening without hiding the CTA."],"notFor":["Not for low-power-first pages, dense content, dashboards, checkout, or routes where performance is the main conversion lever."],"performance":["Cap DPR at 1.0 on touch/mobile and up to 1.5 on mid-range desktop. Pause Animated Hero Banner offscreen and in hidden tabs, reduce postprocessing before shipping, and keep texture sizes controlled."],"accessibility":["Keep meaningful content in HTML outside the canvas. On mobile, reduce shader quality and switch to a poster if the scene cannot hold frame rate."],"commonMistakes":["Letting layered hero motion compete with the headline after the first impression has landed.","Baking the primary message or CTA into the canvas instead of HTML.","Shipping the animated state without a still poster that feels intentionally composed."],"faq":[{"question":"What GPU budget should Animated Hero Banner use on mobile and desktop?","answer":"Keep DPR at 1.0 on touch and up to 1.5 on capable desktops, and simplify the layered motion on the lower tier so the banner stays smooth. Budget for the fact that a hero runs immediately on load, competing with everything else initializing. Measure first-load cost, not just steady-state frame rate."},{"question":"What poster fallback should replace Animated Hero Banner when WebGL fails?","answer":"Use a high-quality still of the composed banner so the first screen still carries the brand when WebGL is unavailable. Because the hero copy and CTA are HTML, the message survives without the animation. Treat the poster as the guaranteed baseline experience."},{"question":"How should Animated Hero Banner pause when offscreen or in a hidden tab?","answer":"Render on demand and pause once the banner scrolls past or the tab loses focus, then resume on return. A hero loop left running after the user scrolls down is wasted work. Visibility-based pausing keeps the rest of the page responsive."},{"question":"Which content should stay outside the Animated Hero Banner canvas?","answer":"Headline, supporting line, and primary CTA stay in the DOM layered above the canvas, never baked into the render. The animation sets tone; it must not be the sole carrier of the offer. Keep the CTA a real, focusable button."},{"question":"When should I choose a static image instead of Animated Hero Banner?","answer":"Pick a static hero when load performance is critical, when most visitors are on mobile, or when the motion is purely ornamental. If a crafted still delivers the same impression, it's the safer default. Use the animated banner only where motion is part of the story you're telling."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hero-banner-animated","demoUrl":"https://vault.hyperiux.com/demo/hero-banner-animated","related":[{"slug":"gooey-counter","title":"Gooey Counter","docsUrl":"https://vault.hyperiux.com/effects/components/gooey-counter"},{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"hyperiux-glitter","title":"Hyperiux Glitter","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hyperiux-glitter"},{"slug":"blur-text","title":"Blur Text","docsUrl":"https://vault.hyperiux.com/effects/text-animations/blur-text"},{"slug":"grid-scale","title":"Grid Scale","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/grid-scale"}]},{"slug":"hover-slider","title":"Hover Slider","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"A hover-preview slider that pairs feature lists, work grids, or product items with contextual visual previews.","description":"Interactive Hover Slider for React previews content on hover for feature lists and work grids with visible fallback states.","tags":["GSAP","Three.js"],"dependencies":["gsap","three"],"install":"npx hyperiux add hover-slider","usage":"import HoverSlider from \"@/components/effects/hover-slider\";\n\nconst page = () => {\n  return (\n    <>\n      <HoverSlider/>\n    </>\n  );\n};\n\nexport default page;","props":[{"name":"transitionDuration","type":"number","default":0.45,"description":"Hover reveal and curve transition duration."},{"name":"imageScale","type":"number","default":0.95,"description":"WebGL image plane scale."},{"name":"curveFactor","type":"number","default":1,"description":"Multiplier for the circular arc image curvature."}],"overview":["Interactive Hover Slider adds motion to a component that already has a job: hover previews guide exploration.","Use Interactive Hover Slider when a compact feature or capability list should reveal visual context through preview panels. The preview should help exploration without making hover the only access path.","The thing to watch is generic behavior. Interactive Hover Slider must use the right semantic pattern for its task before animation is added, and every state change should remain clear under keyboard, mobile, and reduced-motion conditions."],"exampleUseCase":["A product page can use Interactive Hover Slider to preview related capabilities from a compact list. Hover enriches exploration on desktop, while mobile needs the same previews available through tap or stacked cards."],"bestFor":["Feature and capability previews where hover can reveal context on desktop.","Product pages that also provide tap or stacked access for touch users.","Feature previews where hover speeds exploration but touch and keyboard access stay equal."],"notFor":["Not for essential information that mobile, keyboard, or no-hover users cannot reach."],"performance":["Pre-size preview media, avoid swapping large images on every pointer movement, and lazy-load only previews that are likely to appear."],"accessibility":["Support focus and tap paths for every preview. On mobile, switch to stacked cards, accordions, or tap-controlled panels instead of hover-only reveal."],"commonMistakes":["Making hover the only way to see the preview.","Loading every large preview image upfront.","Letting preview motion move the list or CTA targets."],"faq":[{"question":"When should I use Interactive Hover Slider?","answer":"Use it when a feature or product section needs hover previews to guide exploration."},{"question":"How should Interactive Hover Slider avoid pointer-only access?","answer":"Every hover reveal needs an equivalent focus, click, tap, or stacked-content path. The preview must be reachable without a mouse."},{"question":"How should Interactive Hover Slider work on touch devices?","answer":"Use tap-to-preview, stacked preview cards, or an accordion-like reveal. Do not rely on hover as the only way to see the content."},{"question":"Can Interactive Hover Slider improve product exploration?","answer":"Yes, when short feature labels need supporting screenshots or proof snippets. It hurts conversion when previews hide the primary CTA or require desktop-only behavior."},{"question":"What should reduced motion do for Interactive Hover Slider?","answer":"Keep previews available while removing sliding, parallax, or image-travel motion between states."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hover-slider","demoUrl":"https://vault.hyperiux.com/demo/hover-slider","related":[{"slug":"pixelated-image-effect","title":"Pixelated Image Effect","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/pixelated-image-effect"},{"slug":"hero-banner-animated","title":"Hero Banner Animated","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hero-banner-animated"},{"slug":"dot-fill-button","title":"Dot Fill Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/dot-fill-button"},{"slug":"depth-card-stack","title":"Depth Card Stack","docsUrl":"https://vault.hyperiux.com/effects/carousels/depth-card-stack"},{"slug":"stack-loader","title":"Stack Loader","docsUrl":"https://vault.hyperiux.com/effects/loaders/stack-loader"}]},{"slug":"hyperiux-glitter","title":"Hyperiux Glitter","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"Add a premium shimmer layer to brand heroes and launch sections, giving the page a polished visual surface without burying the message.","description":"Hyperiux Glitter Concept for React creates a premium WebGL glitter surface for brand heroes, launches, and atmospheric product sections.","tags":["Drei","React Three Fiber","React Postprocessing","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","@react-three/postprocessing","three"],"install":"npx hyperiux add hyperiux-glitter","usage":"import HyperiuxGlitter from '@/components/effects/hyperiux-glitter'\n\nconst page = () => {\n  return (\n   <>\n   <HyperiuxGlitter/>\n   </>\n  )\n}","props":[{"name":"glitterColor","type":"string","default":"#ffffff","description":"Primary glitter color."},{"name":"accentColor","type":"string","default":"#ffffff","description":"Secondary glitter highlight color."},{"name":"speed","type":"number","default":1,"description":"Particle animation speed."},{"name":"mouseInfluence","type":"number","default":1,"description":"Cursor influence on glitter movement."},{"name":"rotationInfluence","type":"number","default":1,"description":"Cursor influence on model rotation."},{"name":"geometry","type":"string","default":"model","description":"Shape the glitter forms: the Hyperiux model or a built-in geometry."},{"name":"demorphStrength","type":"number","default":1,"description":"How far the cursor scatters (demorphs) the particles."},{"name":"demorphRadius","type":"number","default":1.8,"description":"How wide an area around the cursor gets demorphed."},{"name":"trailLength","type":"number","default":1,"description":"Length of the glittering mouse trail."}],"overview":["Hyperiux Glitter Concept gives a page surface a premium shimmer without turning the hero into a nightclub.","Use Hyperiux Glitter Concept when a brand needs light, signal, and movement as atmosphere. It belongs on high-craft homepages, launch sections, editorial intros, and premium product moments where the background can carry texture while the foreground still does the selling. The page job is polish: the visual surface should make the brand feel more considered, not louder.","The production risk is glare. Glitter effects can ruin contrast, distract from CTAs, and become expensive if every sparkle wants its own GPU budget. The shimmer should stay behind the message and disappear gracefully when motion, contrast, or device limits require it."],"exampleUseCase":["A premium digital studio can use Hyperiux Glitter Concept behind a homepage hero where the brand wants craft before the first scroll. The glitter catches attention without moving the headline, form, or CTA. The outcome is polish: the page feels expensive without making the interface harder to use."],"bestFor":["Premium homepages where shimmer, texture, and light are part of the brand system.","Launch sections that need atmosphere without video or a full 3D object scene.","Short hero moments where the glitter can be restrained, masked, and paused."],"notFor":["Not for long reading pages, dashboards, forms, checkout, low-contrast layouts, or sites already carrying heavy video and WebGL.","Not for pages where the glitter competes with the headline or makes buttons harder to find."],"performance":["Cap DPR, keep particle or shader work lean, avoid heavy postprocessing unless it earns the scene, and pause animation offscreen. Provide a static gradient or image fallback for low-power devices."],"accessibility":["Treat the effect as decorative. Hide the canvas from assistive technology, preserve foreground contrast, and disable pointer-following shimmer on coarse pointers. Reduced-motion users should see a static surface."],"commonMistakes":["Letting sparkle density fight headline readability.","Running the effect behind forms or important decision copy.","Treating glitter as a brand strategy. It is light, not positioning."],"faq":[{"question":"When should I use Hyperiux Glitter Concept?","answer":"Use it when a premium homepage, product launch, or editorial hero needs a shimmering WebGL surface behind short foreground copy."},{"question":"How do I keep glitter from hurting readability?","answer":"Mask the effect behind text zones, reduce brightness near CTAs, keep contrast high, and test the hero with real copy rather than placeholder type."},{"question":"Should the effect respond to the pointer?","answer":"Only gently. Pointer response can make the surface feel alive, but it should never pull attention away from links, buttons, or forms."},{"question":"What is the reduced-motion fallback?","answer":"Freeze the shimmer into a static texture, gradient, or poster image. The page should still feel designed without animated glitter."},{"question":"Can this work on mobile?","answer":"Yes, if simplified. Reduce density, remove pointer behavior, cap DPR aggressively, or swap to a static visual on low-power devices."},{"question":"Can Hyperiux adapt Hyperiux Glitter Concept for a real brand system?","answer":"Yes. A custom version should define shimmer style, color rules, masking, contrast limits, fallback design, performance budget, source handoff, and implementation notes for the specific page."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hyperiux-glitter","demoUrl":"https://vault.hyperiux.com/demo/hyperiux-glitter","related":[{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"char-stagger-primary-button","title":"Character Stagger Primary Button","docsUrl":"https://vault.hyperiux.com/effects/buttons/char-stagger-primary-button"},{"slug":"coffee-bean-cursor","title":"Coffee Bean Cursor","docsUrl":"https://vault.hyperiux.com/effects/cursor-effects/coffee-bean-cursor"},{"slug":"grid-tunnel","title":"Grid Tunnel","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/grid-tunnel"}]},{"slug":"interactive-blur-reveal","title":"Interactive Blur Reveal","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"free","summary":"A WebGL reveal effect that sharpens imagery through pointer or touch exploration for image-led heroes and campaign visuals.","description":"Interactive Blur Reveal for React sharpens imagery through exploration for image-led heroes where discovery is the reveal. Ships with a reduced-motion fallback.","tags":["WebGL shader"],"dependencies":[],"install":"npx hyperiux add interactive-blur-reveal","usage":"import InteractiveBlurReveal from '@/components/effects/interactive-blur-reveal'\n\nconst Page = () => {\n  return (\n    <main className=\"relative h-dvh w-dvw overflow-hidden bg-black text-white\">\n      <InteractiveBlurReveal\n        iChannel0=\"https://picsum.photos/seed/hover7/800/1000\"\n        iChannel1=\"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/interactive-blur-reveal-noise.png\"\n      />\n    </main>\n  )\n}\n\nexport default Page","props":[{"name":"mouseRadius","type":"number","default":180,"description":"Radius of the cursor reveal mask in canvas pixels."},{"name":"mouseInteraction","type":"boolean","default":true,"description":"Enables pointer-driven reveal drawing."},{"name":"duration","type":"number","default":0.3,"description":"Trail persistence and fade duration in seconds."}],"undocumentedProps":["iChannel0","iChannel1"],"overview":["Interactive Blur Reveal lets clarity arrive through exploration. The image sharpens because the user earns the reveal.","Use it for image-led heroes, portfolio previews, campaign visuals, and editorial moments where discovery adds meaning. The page job is reveal: the visitor should uncover visual detail, not essential instructions.","The main risk is gating. Anything users need before they explore must remain readable outside the blurred surface."],"exampleUseCase":["A travel magazine can use Interactive Blur Reveal on the cover image of a destination feature. The photograph loads frosted, and the visitor's cursor or finger clears a sharp trail through it that softly fades back.","The outcome is curiosity. Exploring the image becomes a small reward, while the headline, standfirst, and link to the story sit outside the blurred surface so nothing essential is gated.","A fashion campaign page can use the same effect on a hero visual where discovery is optional."],"bestFor":["Image-led heroes where exploration is part of the reveal, not a barrier to the message.","Portfolio previews where detail can emerge without hiding navigation or CTA copy.","Campaign sections where the visual reward is optional but memorable."],"notFor":["Not for low-power-first pages, dense content, dashboards, checkout, or routes where performance is the main conversion lever."],"performance":["Cap DPR at 1.0 on touch/mobile and up to 1.5 on mid-range desktop. Pause Interactive Blur Reveal offscreen and in hidden tabs, reduce postprocessing before shipping, and keep texture sizes controlled."],"accessibility":["Keep meaningful content in HTML outside the canvas. On mobile, reduce shader quality and switch to a poster if the scene cannot hold frame rate."],"commonMistakes":["Blurring text, captions, or critical UI that users need before they explore.","Using blur as a gimmick when the revealed image adds no decision value.","Leaving touch and keyboard users without an equivalent clear image."],"faq":[{"question":"What GPU budget should Interactive Blur Reveal use on mobile and desktop?","answer":"Blur passes are fill-rate sensitive and the effect updates as the user explores, so cap DPR at 1.0 on mobile and 1.5 on desktop and limit blur radius and sample count on the lower tier. Update only the region under interaction where possible. Test pointer-driven blur on a real handset for smoothness."},{"question":"What poster fallback should replace Interactive Blur Reveal when WebGL fails?","answer":"Show the image in its intended end state typically the sharp, revealed version so users aren't left with content locked behind an interaction they can't perform. The HTML around it is unaffected. Never hide essential content solely behind the reveal."},{"question":"How should Interactive Blur Reveal pause when offscreen or in a hidden tab?","answer":"Pause rendering and pointer handling when the canvas is offscreen or the tab hidden, and resume on visibility. Since updates are interaction-driven, idle the loop when no interaction is happening too. This keeps the effect cheap when it isn't in use."},{"question":"Which content should stay outside the Interactive Blur Reveal canvas?","answer":"Any text or links that matter stay in the DOM; the blur should reveal imagery, not gate readable content behind exploration. Provide the same information without requiring the interaction. Keep actions as real elements."},{"question":"When should I choose a static image instead of Interactive Blur Reveal?","answer":"Choose a static image when the reveal is a gimmick rather than a benefit, when most users are on touch (where \"explore to reveal\" is awkward), or when performance is critical. If hiding the image behind blur doesn't add value, just show it. Reserve the reveal for moments where discovery is the experience."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/interactive-blur-reveal","demoUrl":"https://vault.hyperiux.com/demo/interactive-blur-reveal","related":[{"slug":"fractal-glass","title":"Fractal Glass","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass"},{"slug":"progressive-bloom-valley","title":"Progressive Bloom Valley","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/progressive-bloom-valley"},{"slug":"hero-banner-animated","title":"Hero Banner Animated","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hero-banner-animated"},{"slug":"curved-plane","title":"Curved Plane","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/curved-plane"}]},{"slug":"milky-way","title":"Milky Way","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"free","summary":"A WebGL starfield background that adds scale and atmospheric depth to AI, space-adjacent, developer-tool, and premium brand heroes.","description":"Milky Way for React adds a live starfield atmosphere for heroes that need scale, with poster fallback for low-power devices.","tags":["Drei","React Three Fiber","React Postprocessing","GSAP","Lucide","postprocessing","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","@react-three/postprocessing","gsap","lucide-react","postprocessing","three"],"install":"npx hyperiux add milky-way","usage":"import MilkyWay from \"@/components/effects/milky-way\"\n\nconst page = () => {\n  return (\n   <MilkyWay />\n  )\n}\n\nexport default page","props":[{"name":"particleSize","type":"number","default":2,"description":"Particle and nebula point size multiplier."},{"name":"numberOfParticles","type":"number","default":80000,"description":"Number of star particles in the galaxy."},{"name":"coreColor","type":"string","default":"#ffbb00","description":"Bright inner galaxy and starfield color."},{"name":"accentColor","type":"string","default":"#ffffff","description":"Nebula and sparkle accent color."},{"name":"outerColor","type":"string","default":"#4400ff","description":"Outer arm and warm sparkle color."},{"name":"backgroundColor","type":"string","default":"#000114","description":"Canvas background color."},{"name":"rotation","type":"number","default":1.6,"description":"How strongly the galaxy tilts with mouse movement."},{"name":"mouseInfluence","type":"boolean","default":true,"description":"Enable cursor-driven galaxy tilt."},{"name":"rotationSpeed","type":"number","default":0.9,"description":"Speed the particles orbit around the galaxy centre."}],"overview":["Milky Way gives the hero scale without weight: a starfield as atmosphere, not spectacle.","Use it for AI, space-adjacent, developer-tool, and premium brand heroes that need atmosphere behind a short claim. The page job is scale: the field should make the statement feel larger without adding visual noise.","The production risk is needless particles. If a static starfield gives the same feeling, ship the still on lower tiers."],"exampleUseCase":["A satellite data startup can use Milky Way behind the hero of its homepage. A slowly rotating galaxy of stars and nebula sits behind a short claim about global coverage, and the field tilts gently with the cursor.","The outcome is scale. The statement feels larger without extra copy. The galaxy renders on desktop only, so give the hero its own still image for phones."],"bestFor":["Hero sections where atmospheric scale matters more than direct interaction.","AI and technical launch pages where a controlled starfield supports the first claim.","Portfolio or campaign pages where the field is ambience, not content."],"notFor":["Not for low-power-first pages, dense content, dashboards, checkout, or routes where performance is the main conversion lever."],"performance":["Cap DPR at 1.0 on touch/mobile and up to 1.5 on mid-range desktop. Pause Milky Way offscreen and in hidden tabs, reduce postprocessing before shipping, and keep texture sizes controlled."],"accessibility":["Keep meaningful content in HTML outside the canvas. On mobile, reduce shader quality and switch to a poster if the scene cannot hold frame rate."],"commonMistakes":["Using particle density where a static starfield would carry the same atmosphere.","Making the starfield the only place the visual identity exists.","Leaving a continuous particle loop running below the fold."],"faq":[{"question":"What GPU budget should Milky Way use on mobile and desktop?","answer":"A starfield's cost scales with particle count, so cap DPR at 1.0 on mobile and 1.5 on desktop and reduce the number of stars on smaller devices. Favor cheap point rendering over heavy per-particle shading. Confirm the field stays smooth on a phone before shipping."},{"question":"What poster fallback should replace Milky Way when WebGL fails?","answer":"Use a static starfield image so the sense of scale survives without the live particles. The hero copy is HTML and reads regardless. A good still keeps the atmosphere intact."},{"question":"How should Milky Way pause when offscreen or in a hidden tab?","answer":"Pause the particle animation when the canvas scrolls away or the tab is hidden, resuming on return. A drifting starfield left running in the background is needless GPU work. Use a visibility check with demand rendering."},{"question":"Which content should stay outside the Milky Way canvas?","answer":"Headline, subhead, and CTA stay in the DOM over the field; the stars are ambience, not content. Don't place any message inside the rendered scene. Keep the CTA a real button."},{"question":"When should I choose a static image instead of Milky Way?","answer":"Choose a static field when the motion is purely atmospheric, when targeting mobile, or when the page can't spare the GPU. If a still conveys the same scale, it's the efficient pick. Reserve the live starfield for heroes where the drift adds genuine mood."}],"access":"Free Core (open source, MPL 2.0): full source with a free account (CLI: run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/milky-way","demoUrl":"https://vault.hyperiux.com/demo/milky-way","related":[{"slug":"fractal-glass","title":"Fractal Glass","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass"},{"slug":"progressive-bloom-valley","title":"Progressive Bloom Valley","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/progressive-bloom-valley"},{"slug":"hero-banner-animated","title":"Hero Banner Animated","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hero-banner-animated"},{"slug":"curved-plane","title":"Curved Plane","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/curved-plane"},{"slug":"interactive-blur-reveal","title":"Interactive Blur Reveal","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/interactive-blur-reveal"}]},{"slug":"mouse-pixelation","title":"Mouse Pixelation","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"A pointer-led WebGL pixelation effect that reveals image detail through cursor movement for portfolios, campaigns, and technical hero surfaces.","description":"Mouse Pixelation for React reveals image detail through pointer movement for interactive heroes and portfolio surfaces. Includes a clean mobile fallback.","tags":["React Three Fiber","React Postprocessing","GSAP","Three.js"],"dependencies":["@react-three/fiber","@react-three/postprocessing","gsap","three"],"install":"npx hyperiux add mouse-pixelation","usage":"import MousePixelation from '@/components/effects/mouse-pixelation'\n\nconst page = () => {\n  return (\n    <>\n     <MousePixelation variant={\"pixel-circle\"} imageUrl={\"https://pub-8abee449136941f5b0a1cd2c014534e9.r2.dev/vault-listing-images/assets-images/h-02.jpg\"}/>\n  </>\n  )\n}\n\nexport default page","props":[{"name":"v1NumberOfGrids","type":"number","default":35,"description":"V1 · Pixel Circles: number of grid cells across the effect."},{"name":"v1Lerp","type":"number","default":0.1,"description":"V1 · Pixel Circles: smoothing of the mouse-following motion."},{"name":"v1BackgroundColor","type":"string","default":"#000000","description":"V1 · Pixel Circles: canvas background color."},{"name":"v2NumberOfGrids","type":"number","default":35,"description":"V2 · Pixel Shift: number of grid cells across the effect."},{"name":"v2Lerp","type":"number","default":0.1,"description":"V2 · Pixel Shift: smoothing of the mouse-following motion."},{"name":"v3NumberOfGrids","type":"number","default":35,"description":"V3 · Pixel Cube: number of grid cells across the effect."},{"name":"v3Lerp","type":"number","default":0.1,"description":"V3 · Pixel Cube: smoothing of the mouse-following motion."},{"name":"v3CubeSize","type":"number","default":1,"description":"V3 · Pixel Cube: scale of the cube."},{"name":"v3GridEmbossing","type":"number","default":1,"description":"V3 · Pixel Cube: depth of the extruded grid."},{"name":"variant","type":"enum","default":"pixel-shift","description":"Initial version shown: V1 Pixel Circles, V2 Pixel Shift, V3 Pixel Cube."},{"name":"imageUrl","type":"string","default":"https://picsum.photos/seed/h02/1600/1200","description":"V2 · Pixel Shift: image URL rendered as the pixel grid."}],"overview":["Mouse Pixelation reveals content through cursor movement. It makes the act of looking the first interaction.","Use it when pointer movement should make the hero feel discovered: portfolio imagery, technical visuals, or campaign surfaces where the reveal adds meaning.","The risk in production is pointer dependence. The final image and message must be available when hover is unavailable."],"exampleUseCase":["A photographer's portfolio can use Mouse Pixelation on the opening image of a new series. The photograph sits behind a pixel grid, and cursor movement shifts the blocks so the visitor uncovers detail by looking around the frame.","The outcome is discovery. The first interaction is the act of looking, which suits work that rewards a second glance. The series title, credits, and the full image stay available for touch visitors who cannot hover.","A creative campaign page can use the same component when pixelation is already part of the visual language."],"bestFor":["Pointer-led hero surfaces where interaction reveals image detail without hiding the message.","Creative portfolios where the cursor can become part of the looking experience.","Technical brand pages where pixelation supports the visual language."],"notFor":["Not for low-power-first pages, dense content, dashboards, checkout, or routes where performance is the main conversion lever."],"performance":["Cap DPR at 1.0 on touch/mobile and up to 1.5 on mid-range desktop. Pause Mouse Pixelation offscreen and in hidden tabs, reduce postprocessing before shipping, and keep texture sizes controlled."],"accessibility":["Keep meaningful content in HTML outside the canvas. On mobile, reduce shader quality and switch to a poster if the scene cannot hold frame rate."],"commonMistakes":["Requiring pointer movement for the page to make sense on touch devices.","Pixelating critical text or controls instead of imagery.","Forgetting the clean still image state for reduced motion and mobile."],"faq":[{"question":"What GPU budget should Mouse Pixelation use on mobile and desktop?","answer":"The pixelation samples the image as the cursor moves, so cap DPR at 1.0 on mobile and 1.5 on desktop and keep the source texture appropriately sized. Update the effect around the pointer rather than the whole frame where possible. Note that the core interaction is pointer-based, which shapes the mobile story."},{"question":"What poster fallback should replace Mouse Pixelation when WebGL fails?","answer":"Show the clean, un-pixelated image so the content is fully visible without the effect. The HTML copy is unaffected. Make sure nothing important depended on pixelation to be seen."},{"question":"How should Mouse Pixelation pause when offscreen or in a hidden tab?","answer":"Pause rendering and pointer tracking when the canvas is offscreen or the tab hidden, and idle when the pointer is away. Resume on visibility and interaction. Idling between movements keeps it inexpensive."},{"question":"Which content should stay outside the Mouse Pixelation canvas?","answer":"Real content stays in HTML; the pixelation is a visual layer over imagery, not a place to store text or links. Because the reveal is pointer-driven, ensure touch and keyboard users still get the full image and meaning. Keep actions as DOM elements."},{"question":"When should I choose a static image instead of Mouse Pixelation?","answer":"Choose a static image when most traffic is touch (where there's no hover to drive the effect), when performance matters, or when the pixelation is novelty rather than purpose. If the interaction won't reach your audience, show the plain image. Reserve it for pointer-first, exploratory pages."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/mouse-pixelation","demoUrl":"https://vault.hyperiux.com/demo/mouse-pixelation","related":[{"slug":"fractal-glass","title":"Fractal Glass","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass"},{"slug":"progressive-bloom-valley","title":"Progressive Bloom Valley","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/progressive-bloom-valley"},{"slug":"hero-banner-animated","title":"Hero Banner Animated","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/hero-banner-animated"},{"slug":"curved-plane","title":"Curved Plane","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/curved-plane"},{"slug":"interactive-blur-reveal","title":"Interactive Blur Reveal","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/interactive-blur-reveal"}]},{"slug":"progressive-bloom-valley","title":"Progressive Bloom Valley","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"A WebGL hero effect with bloom, depth, and atmosphere for premium AI launches, product pages, and creative portfolio openings.","description":"Progressive Bloom Valley for React: bloom and depth in a GPU-budgeted hero scene for AI launches and creative portfolios, with a low-power poster fallback.","tags":["Drei","React Three Fiber","React Postprocessing","postprocessing","Three.js"],"dependencies":["@react-three/drei","@react-three/fiber","@react-three/postprocessing","postprocessing","three"],"install":"npx hyperiux add progressive-bloom-valley","usage":"import ProgressiveBloomValley from \"@/components/effects/progressive-bloom-valley\";\n\nexport default function page() {\n return (\n <>\n<ProgressiveBloomValley/>\n </>\n\n );\n}","props":[{"name":"bloomStrength","type":"number","default":1.2,"description":"Flower shader glow intensity."},{"name":"bloomRadius","type":"number","default":0.4,"description":"Edge bloom softness radius."},{"name":"cameraSpeed","type":"number","default":1,"description":"Camera movement speed through the scene."},{"name":"backgroundColor","type":"string","default":"#000000","description":"Scene background color."}],"overview":["Some pages need to feel technically ambitious before the copy explains why. Progressive Bloom Valley is that first second.","Use it for premium heroes, AI/product launches, creative portfolios, and brand moments where the visual payoff justifies GPU work. It should make the site feel technically ambitious, not merely heavier.","The risk in production is budget. Keep meaningful content in HTML, cap DPR by device tier, reduce postprocessing on mobile, pause render loops offscreen, and ship a poster fallback that still feels intentional."],"exampleUseCase":["An AI research lab can use Progressive Bloom Valley as the first screen of a model launch page. Scrolling carries the camera through a glowing particle valley, with bloom and depth building atmosphere around a short headline and a single CTA kept in HTML.","The outcome is ambition. The launch feels technically serious before the announcement copy explains why.","A creative studio can use the same effect to open its portfolio, provided it ships a poster fallback and reduces postprocessing on mobile."],"bestFor":["Premium AI or product-launch heroes where bloom and depth justify a real GPU budget.","First screens that keep copy, CTA, poster fallback, and reduced-motion behaviour outside the canvas.","Progressive Bloom Valley gives the hero a proof-of-craft surface while preserving HTML copy and fallback design."],"notFor":["Not for low-power-first pages, dense content, dashboards, checkout, or routes where performance is the main conversion lever."],"performance":["Cap DPR at 1.0 on touch/mobile and up to 1.5 on mid-range desktop. Pause Progressive Bloom Valley offscreen and in hidden tabs, reduce postprocessing before shipping, and keep texture sizes controlled."],"accessibility":["Keep meaningful content in HTML outside the canvas. On mobile, reduce shader quality and switch to a poster if the scene cannot hold frame rate."],"commonMistakes":["Making Progressive Bloom Valley the only place the message exists.","Shipping high DPR and bloom-heavy settings on mobile without a lower tier.","Forgetting poster fallback and render-loop pause."],"faq":[{"question":"What GPU budget should Progressive Bloom Valley use on mobile and desktop?","answer":"Bloom is fill-rate heavy, so cap device pixel ratio at 1.0 on touch and up to 1.5 on mid-range desktop, and lower the bloom/postprocessing intensity on the smaller tier. Treat the quality setting as the lever: lower it on mobile rather than rendering the full luminous pass everywhere. Profile on a real phone, since bloom that's smooth on a laptop can melt a handset."},{"question":"What poster fallback should replace Progressive Bloom Valley when WebGL fails?","answer":"Ship a still frame captured from the scene at its most flattering moment, sized for the hero, so a context lost or unsupported GPU still presents an intentional image. The headline and CTA already live in HTML, so the page reads with or without the canvas. Make the poster the design baseline, not an afterthought."},{"question":"How should Progressive Bloom Valley pause when offscreen or in a hidden tab?","answer":"Drive the render loop on demand and stop it when the canvas scrolls out of view or the tab is hidden, so a continuous bloom pass isn't burning the GPU in the background. Resume on visibility. A persistent loop here is the most common cause of a hot device and drained battery."},{"question":"Which content should stay outside the Progressive Bloom Valley canvas?","answer":"All meaningful content the headline, subhead, CTA, and any copy stays in HTML over or beside the canvas, never painted into the scene. The valley is an atmosphere; it should never be the only place a message exists. Keep links and buttons as real DOM elements for accessibility and SEO."},{"question":"When should I choose a static image instead of Progressive Bloom Valley?","answer":"Choose a static hero when the audience skews mobile, when the page must hit a strict performance budget, or when the bloom doesn't add meaning beyond decoration. If a still frame communicates the same premium feel, ship it and save the GPU. Reserve the live scene for pages where the first second of motion genuinely earns attention."},{"question":"Can I adapt Progressive Bloom Valley to my brand and performance budget?","answer":"Yes, adaptation work tunes palette, bloom intensity, and the quality tiers to your art direction and a defined performance budget, with fallback design, source handoff, and implementation notes. You ship and own the component in your codebase."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/progressive-bloom-valley","demoUrl":"https://vault.hyperiux.com/demo/progressive-bloom-valley","related":[{"slug":"milky-way","title":"Milky Way","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/milky-way"},{"slug":"helix-slider","title":"Helix Slider","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/helix-slider"},{"slug":"animated-faq","title":"Animated FAQ","docsUrl":"https://vault.hyperiux.com/effects/components/animated-faq"},{"slug":"fractal-glass","title":"Fractal Glass","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/fractal-glass"}]},{"slug":"strip-slider","title":"Strip Slider","category":{"id":"webgl","slug":"webgl-effects","name":"WebGL & 3D Effects"},"tier":"pro","summary":"A strip-based scroll slider that reveals campaign visuals, project assets, or story sections one layer at a time.","description":"Strip Slider for React: reveal campaign content one strip at a time. Best for agency case studies and editorial heroes. Keeps content crawlable and accessible.","tags":["Three.js"],"dependencies":["three"],"install":"npx hyperiux add strip-slider","usage":"import StripSlider from '@/components/effects/strip-slider'\n\nconst page = () => {\n  return (\n    <>\n    <StripSlider/>\n    </>\n  )\n}","props":[{"name":"dispScale","type":"number","default":1,"description":"Multiplier on the ripple/displacement wave strength across all gallery images (collapsed and expanded)."},{"name":"cameraSway","type":"number","default":0.03,"description":"How much the camera drifts toward the pointer position."},{"name":"hideCentralStrip","type":"boolean","default":false,"description":"Hides the central white strip overlay around the active image."},{"name":"imageSize","type":"number","default":1,"description":"Scales the strip gallery image group without recreating the WebGL scene."}],"overview":["Strip Slider reveals content one layer at a time. Each strip is a controlled pause before the next claim.","Use Strip Slider when thin visual slices should reveal a sequence without giving each item a full panel. Portfolio projects and agency case-study sequences are the strongest fit because the effect can tease multiple visuals while maintaining pace. The page job is anticipation: visitors see enough to keep moving without seeing everything at once.","The thing to watch is slice readability. If strips become too thin, images lose meaning, captions detach from visuals, and mobile fallback needs a simpler stacked or swipeable form."],"exampleUseCase":["An agency case-study page revealing campaign assets in sequence: Strip Slider lets thin visual bands preview the work before expanding the story. The outcome is anticipation: visitors get motion and context before opening the full case."],"bestFor":["Campaign or portfolio strips where a deliberate mid-page beat helps the narrative breathe.","Case studies and campaign stories revealed one layer at a time.","Teases campaign content sequentially, keeping visitors in the reveal moment longer than a static hero."],"notFor":["Not for first-screen messaging, product comparison, or mobile flows that need immediate vertical scanning.","Not for above-the-fold sections where it delays the first message."],"performance":["Animate transform and opacity, avoid layout reads in scroll handlers, pre-size media, and clean up timelines/listeners when the route changes."],"accessibility":["The animated sequence must match DOM order. On mobile, replace pinned or horizontal mechanics with stacked sections, native swipe, or static cards."],"commonMistakes":["Using so many strips that the reveal becomes visual static instead of anticipation.","Placing the strip sequence above the fold where it delays the first message.","Forgetting that touch users need swipe/buttons, not a desktop-only strip mechanic."],"faq":[{"question":"How many strips work before the reveal feels noisy?","answer":"A few strips create a clean, editorial pause between claims; too many turn the reveal into visual static. Keep it to a small number where each strip earns its moment. If you need more content, use multiple calmer sections rather than one dense reveal."},{"question":"What duration makes Strip Slider feel editorial?","answer":"Each strip should resolve quickly enough to feel intentional but slowly enough to register as a deliberate beat — short and controlled, not languid. Tie the pacing to scroll so the reader sets the rhythm. Avoid long auto-timed holds that make the page feel slow."},{"question":"How should Strip Slider balance touch swipe and buttons?","answer":"On touch, make horizontal swipe the primary control and keep visible buttons for discoverability and accessibility. Ensure both reach every strip and that swipe doesn't fight page scroll. Keyboard users need button access too."},{"question":"Is Strip Slider better above the fold or mid-page?","answer":"Mid-page usually suits it, where it acts as a controlled pause between sections rather than gating the hero. Above the fold it can delay the first message, which costs you on entry. Place it where a deliberate beat helps the narrative."},{"question":"Which content types benefit from strip-based reveal?","answer":"Case studies, campaign visuals, and product stories where revealing one layer at a time builds anticipation. It's wrong for dense information or anything users must read instantly. Keep each strip carrying a single image or claim."}],"access":"Pro (proprietary Hyperiux Pro License): full source on a Pro or Pro+ plan (run npx hyperiux login first).","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/strip-slider","demoUrl":"https://vault.hyperiux.com/demo/strip-slider","related":[{"slug":"scroll-stack","title":"Scroll Stack","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/scroll-stack"},{"slug":"3d-portfolio-slider","title":"3D Portfolio Slider","docsUrl":"https://vault.hyperiux.com/effects/webgl-effects/3d-portfolio-slider"},{"slug":"parallax-gallery","title":"Parallax Gallery","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/parallax-gallery"},{"slug":"horizontal-feature-reveal","title":"Horizontal Feature Reveal","docsUrl":"https://vault.hyperiux.com/effects/scroll-effects/horizontal-feature-reveal"}]}],"templates":[{"slug":"elenavoss","title":"Elena Voss","category":"Portfolio","url":"https://vault.hyperiux.com/templates/elenavoss","demoUrl":"https://vault.hyperiux.com/template-demo/elenavoss"},{"slug":"oris-dental","title":"Oris Dental","category":"Healthcare","url":"https://vault.hyperiux.com/templates/oris-dental","demoUrl":"https://vault.hyperiux.com/template-demo/oris-dental"},{"slug":"lumera","title":"Lumera","category":"Real Estate","url":"https://vault.hyperiux.com/templates/lumera","demoUrl":"https://vault.hyperiux.com/template-demo/lumera"},{"slug":"kyntra","title":"Kyntra","category":"App","url":"https://vault.hyperiux.com/templates/kyntra","demoUrl":"https://vault.hyperiux.com/template-demo/kyntra"}],"blogPosts":[{"title":"When CSS Animation Is Enough and When React Needs a Library","url":"https://vault.hyperiux.com/blog/when-css-animation-is-enough-and-when-react-needs-a-library"},{"title":"The Hidden Complexity of Page Transitions in the Next.js App Router","url":"https://vault.hyperiux.com/blog/the-hidden-complexity-of-page-transitions-in-the-next-js-app-router"},{"title":"Prebuilt Interaction Patterns vs Hand-Built Animations in React","url":"https://vault.hyperiux.com/blog/prebuilt-interaction-patterns-vs-hand-built-animations-in-react"},{"title":"Native Scroll Timelines Are Here: Does Every Scroll Effect Still Need JavaScript?","url":"https://vault.hyperiux.com/blog/native-scroll-timelines-are-here-does-every-scroll-effect-still-need-javascript"},{"title":"How to Build Scroll Animations in React Without Turning the Page Into a Timeline Mess","url":"https://vault.hyperiux.com/blog/how-to-build-scroll-animations-in-react-without-turning-the-page-into-a-timeline-mess"},{"title":"How to Build Reusable React Animation Components Without Making Every Effect Config-Heavy","url":"https://vault.hyperiux.com/blog/how-to-build-reusable-react-animation-components-without-making-every-effect-config-heavy"}]}