Halftone Wave

The canvas hero that works on a white page. A grid of dots whose size follows a travelling wave -- organic noise, a ripple spreading from a focus point, or a diagonal sweep -- like print halftone brought to life; wave peaks tint to the accent colour, and the pointer swells the dots around it. Ink on paper by default, so it sits inside a light document; flip ink and paper for a dark version. Optional eyebrow/title/body copy behind a veil. Honours prefers-reduced-motion (one static frame), pauses offscreen, DPR-aware. Same kit and hardening as flow_field: every option is an enum or a clamped int; colours must be #rrggbb.

Surfaces
webgoogle-meet-stagegoogle-apps-script-webmcp-appsandroid
Degraded on
SurfaceNote
pdfRenders as a plain panel with the copy; the canvas is empty without JavaScript
google-chatInline script not supported; renders as a solid panel with the copy
Live preview
Fields
FieldTypeRequired
titlestring. Headline overlaid on the grid.optional
eyebrowstring. Small uppercase label above the title.optional
bodystring. Copy under the title (markdown inline supported).optional
align"left" | "center" | "right" (optional, default "left")optional
wave"noise" | "ripple" | "sweep" (optional, default "noise"). Organic field, concentric ripple from the focus, or a diagonal front.optional
focus"center" | "left" | "right" (optional, default "center"). Ripple origin.optional
ink"#rrggbb". Dot colour. Default "#0f172a".optional
paper"#rrggbb". Ground colour. Default "#f7f7f5".optional
accent"#rrggbb". Colour of the wave peaks; when absent, peaks stay in ink.optional
spacing"fine" | "normal" | "coarse" (optional, default "normal"). Dot pitch 10 / 14 / 20 px.optional
speed"slow" | "normal" | "fast" (optional, default "normal")optional
heightinteger. Panel height in px, clamped 160-900. Default 320.optional
interactivebool. Pointer swells nearby dots. Default true.optional
Example payload
{
  "type": "halftone_wave"
}
ARD catalog entry
{
  "identifier": "urn:air:a2uicatalog.ai:atom:halftone_wave",
  "displayName": "Halftone Wave",
  "type": "application/vnd.a2ui.atom+json",
  "url": "https://a2uicatalog.ai/atoms/halftone_wave",
  "capabilities": [
    "web",
    "google-meet-stage",
    "google-apps-script-web",
    "mcp-apps",
    "android"
  ],
  "description": "The canvas hero that works on a white page. A grid of dots whose size follows a travelling wave -- organic noise, a ripple spreading from a focus point, or a diagonal sweep -- like print halftone brought to life; wave peaks tint to the accent colour, and the pointer swells the dots around it. Ink on paper by default, so it sits inside a light document; flip ink and paper for a dark version. Optional eyebrow/title/body copy behind a veil. Honours prefers-reduced-motion (one static frame), pauses offscreen, DPR-aware. Same kit and hardening as flow_field: every option is an enum or a clamped int; colours must be #rrggbb.",
  "representativeQueries": [
    "show a animated halftone dot grid riding a wave, works on light backgrounds",
    "the canvas hero that works on a white page. a grid of dots whose size follows a travelling wave -- o",
    "render a halftone wave"
  ]
}
← Full ARD catalog
Deploy your own Google Apps Script renderer

The renderer is an open-source Google Apps Script web app. Deploy your own instance in 4 commands — you own the URL, no dependency on the demo endpoint.

git clone https://github.com/a2uicatalog/a2ui
cd a2ui/apps-script-surface/gas-wired-renderer
clasp push && clasp deploy
Full deploy guide →