We moved the São Paulo office
From Monday, 11/09, the team works from Rua Augusta, 1500. Parking is on the second basement level.
A plain element that renders the tag you choose with `as`. Use it when a block needs the right meaning (a section, an article, a list) and nothing else.
Set up Camaleo once (Installation), then import it. It has no state, so it renders on the server.
import { Box } from "@camaleo/react";Box is one element with data-slot="box" and no styles of its own. Its value is the tag: here a section holds a header and a list, each one a Box with a different as.
Every example is a real file you can copy. They all wear the skin, mode and brand from the bar above.
Team, 8 of 10 seats in use. Renews on 12/14/2026 for $192.
Attachments
Three files are a list, so render ul and li. Screen readers announce "list, 3 items" and people know how much is coming.
From Monday, 11/09, the team works from Rua Augusta, 1500. Parking is on the second basement level.
as="article" for content that still makes sense on its own, like a post or a comment. Its header and footer stay inside it and are not page landmarks.
as="nav" with an aria-label lets screen reader users jump straight to these links. Mark the current page with aria-current="page".
A form with role="search" becomes a landmark people can reach from anywhere. Name it when the page has more than one search.
Before the launch
Rendered as <ol>
Switch it off and on. Steps that must happen in sequence are an ol; the numbers come from the browser and screen readers say "1 of 4".
Tip: Box adds no padding or color. Give it tokens in style or a class, and it follows the skin like the rest of the page.
Box has no padding or background props. Style it with var(--cml-…) tokens and it changes with the skin, like the components around it.
These are whole pieces of UI you can copy, in the skin you picked.
From Monday, 11/09, the team works from Rua Augusta, 1500. Parking is on the second basement level.
Add your proposals to the board by Friday, 11/13. We vote on the 18th.
Screen readers count the items and let people skip the whole group.
It looks the same, but a screen reader hears three loose words with no hint that they belong together.
People who jump between landmarks expect to find the site's or the section's navigation there.
Filters change the list on this page; they are not navigation. A plain group (or a Toolbar) keeps the landmark list short and honest.
as="ul").as takes div, section, article, main, aside, header, footer, nav, ul, ol, li, span, form and figure. Every other prop goes to that element, so aria-*, role, id and event handlers work as usual.
Box draws nothing, so the hook is the attribute: style it from a parent or a class.
/* a quiet panel for every Box section in the settings page */
.settings [data-slot="box"]:where(section) {
padding: var(--cml-surface-padding);
border-radius: var(--cml-radius-surface);
background: var(--cml-surface);
}