Open any state, copy the HTML into your markup and the CSS into your stylesheet. Nothing else is required: no JavaScript, no icon fonts, no images. Each snippet's classes are prefixed with its own name, so a whole chat UI can use several at once.
Set --aia-color to your brand accent and --aia-size to scale the piece; everything inside is measured in em. The demo text is placeholder copy: swap in your model's real output, tool names and file paths.
Live states carry role="status" or aria-live so screen readers hear the change, and every snippet ships with a prefers-reduced-motion rule. In your app, swap states by toggling a class or data attribute when the model's stream events arrive.
Animate something that reads as attention without implying progress: a shimmer sweeping across a 'Thinking' label, breathing dots, or a slowly turning sparkle. Every thinking entry above is pure HTML and CSS with a role="status" label.
Append tokens to the element as they arrive and let CSS handle the feel: a blinking caret after the last word, a soft fade on each new chunk, or a gradient mask on the trailing edge. The streaming entries show each look with static demo text.
At least thinking, working (with the tool or step it is on), waiting for the person, done and failed. Showing which tool is running and what it touched builds more trust than a generic spinner.
Yes. They are plain HTML and CSS, so paste the markup into any component and the CSS into its stylesheet, then switch states with a class.