Dunes
LandscapeRidges of sand at dusk under a low sun, drifting slowly sideways.
pnpm dlx @dowel-ui/cli add shader-backgroundPrompt and code
Add the "Dunes" animated background from Dowel UI to this project. What it looks like: Ridges of sand at dusk under a low sun, drifting slowly sideways. It is drawn with WebGL. Steps:1. Install the component as source: `npx @dowel-ui/cli add shader-background`. If the project has no Dowel setup yet, run `npx @dowel-ui/cli init` first. Do not install it from npm or copy it from anywhere else.2. Import it with `import { ShaderBackground } from "@/components/ui/shader-background";` (adjust the path to wherever the CLI wrote it).3. Use it as the background of the landing page's hero section: ```tsximport { ShaderBackground } from "@/components/ui/shader-background"; export function Hero() { return ( <ShaderBackground preset="dunes" className="min-h-[80vh]"> <div className="mx-auto flex min-h-[80vh] max-w-3xl flex-col items-center justify-center gap-6 px-6 text-center text-white"> <h1 className="text-5xl font-semibold tracking-tight">Your headline</h1> <p className="text-lg opacity-80">One sentence about the product.</p> </div> </ShaderBackground> );}``` Or, to put it behind the whole site, in the root layout: ```tsximport { ShaderBackground } from "@/components/ui/shader-background"; export default function RootLayout({ children }: { children: React.ReactNode }) { return ( <html lang="en"> <body> <ShaderBackground preset="dunes" attach="viewport"> {children} </ShaderBackground> </body> </html> );}``` 4. Readability: It is a dark scene in both colour schemes, so set text over it in text-white and keep long copy on a surface (a card with a translucent background and backdrop-blur).5. Customise only through props: `preset`, `colors` (up to four theme tokens such as "primary" or any CSS colour, in the order the scene uses them), `speed`, `scale`, `grain`, `vignette`, `fade` ("edges" | "top" | "bottom") and `resolution` (lower it, e.g. 0.6, on very large screens). Rules:- Use one animated background per page.- Each one is a WebGL context; never render more than a few on a page.- Do not add your own requestAnimationFrame loop, CSS animation or video for this effect; the component already pauses off-screen and in hidden tabs, and holds still under prefers-reduced-motion.- It is aria-hidden decoration: do not give it a role, label or tab stop, and keep all real content as children (or siblings) above it.- Do not change the component's source to restyle it; pass props instead, so `dowel update` can still update it.import { ShaderBackground } from "@/components/ui/shader-background"; export function Hero() { return ( <ShaderBackground preset="dunes" className="min-h-[80vh]"> <div className="mx-auto flex min-h-[80vh] max-w-3xl flex-col items-center justify-center gap-6 px-6 text-center text-white"> <h1 className="text-5xl font-semibold tracking-tight">Your headline</h1> <p className="text-lg opacity-80">One sentence about the product.</p> </div> </ShaderBackground> );}import { ShaderBackground } from "@/components/ui/shader-background"; export default function RootLayout({ children }: { children: React.ReactNode }) { return ( <html lang="en"> <body> <ShaderBackground preset="dunes" attach="viewport"> {children} </ShaderBackground> </body> </html> );}