# Aurea UDS > A design system with one look for the web (React and plain CSS) and for React Native, made to be read by people with low vision. Every page below is Markdown. The whole documentation in one file: https://aureauds.dev/llms-full.txt. Notes for AI coding agents: https://aureauds.dev/aurea-agents.md. ## Getting Started - [Introduction](https://aureauds.dev/getting-started.md): An open-source design system with one look for the web and for React Native, made to be read by people with low vision. - [Quick Start](https://aureauds.dev/docs-quick-start.md): Install the packages, load the fonts before the core, and wrap the app in the provider. - [Design Principles](https://aureauds.dev/docs-design-principles.md): The ten rules behind every Aurea component, and how each one is checked. - [Frameworks](https://aureauds.dev/docs-frameworks.md): Use Aurea with Next.js, Vite, plain HTML or React Native. - [Showcase](https://aureauds.dev/docs-showcase.md): What is built with Aurea today, and how to get your project listed here. - [Roadmap](https://aureauds.dev/docs-roadmap.md): Where Aurea stands, and what has to be true before version 1.0. - [Colors](https://aureauds.dev/docs-colors.md): The color roles of Aurea, what each one is for, and their values in the light and dark themes. - [Theming](https://aureauds.dev/docs-theming.md): How Aurea's tokens become CSS custom properties, the three attributes that switch them, and how to change a value. - [Dark Mode](https://aureauds.dev/docs-dark-mode.md): Switch between the light and dark themes, follow the system, and save the choice. - [Styling](https://aureauds.dev/docs-styling.md): Style Aurea with props first, then with a class name, plain CSS and the tokens. - [Animation](https://aureauds.dev/docs-animation.md): The motion Aurea ships, the tokens behind it, and how it stops when the user asks for less movement. - [Composition](https://aureauds.dev/docs-composition.md): Build bigger pieces from parts, slots, item lists and the render prop. - [Density](https://aureauds.dev/docs-density.md): Three sizes for the same interface, compact, comfortable and spacious, switched with one attribute. - [Icons](https://aureauds.dev/docs-icons.md): The Phosphor icon set, how to serve its sprite, the filled form for the selected item, and how to add your own drawing. - [RTL](https://aureauds.dev/docs-rtl.md): Mirror Aurea for right-to-left languages with two settings, and know what stays in place on purpose. - [Accessibility](https://aureauds.dev/docs-accessibility.md): What Aurea does for people with low vision, keyboard and screen-reader users, and how each part is checked. - [LLMs.txt](https://aureauds.dev/docs-llms-txt.md): Files that let AI coding assistants read the Aurea documentation. - [Agent Skills](https://aureauds.dev/docs-agent-skills.md): Give your AI coding assistant the rules for building interfaces with Aurea. - [AGENTS.md](https://aureauds.dev/docs-agents-md.md): Short Aurea rules to put in your project's AGENTS.md, for AI coding agents. ## Components - [AccessGate](https://aureauds.dev/accessgate.md): Hides an action the user cannot take, or shows it inert with the reason. - [Accordion](https://aureauds.dev/accordion.md): Stack of expandable/collapsible sections. - [AgentCard](https://aureauds.dev/agentcard.md): Who an agent is, what state it is in, and what it can do. - [AgentInspector](https://aureauds.dev/agentinspector.md): The detail of one agent: configuration, tools, instructions. - [AgentStatus](https://aureauds.dev/agentstatus.md): The state of an agent, in one fixed vocabulary. - [Alert](https://aureauds.dev/alert.md): Inline message that stays in context. - [AppShell](https://aureauds.dev/appshell.md): Application frame: sidebar, topbar and main content. - [AspectRatio](https://aureauds.dev/aspectratio.md): A box that keeps its proportion, whatever the width. - [AureaProvider](https://aureauds.dev/aureaprovider.md): Root provider: strings, icon sprite, text direction, toasts and where popups mount. - [AutomationCard](https://aureauds.dev/automationcard.md): A rule that runs on its own: when this, then that — and a switch. - [Avatar](https://aureauds.dev/avatar.md): Represents a user or entity with image or initials. - [AvatarGroup](https://aureauds.dev/avatargroup.md): Overlapping stack of avatars, with a count for the ones that do not fit. - [Badge](https://aureauds.dev/badge.md): Short metadata label or status marker. - [Banner](https://aureauds.dev/banner.md): Prominent message spanning a wide region. variant="consent" is the cookie notice, with the preferences window. - [BlockEditor](https://aureauds.dev/blockeditor.md): The frame around content blocks — order, handle, removal, and the slot where your own editor goes. Aurea does not own the rich text. - [BottomNav](https://aureauds.dev/bottomnav.md): Floating bar pinned to the bottom that holds an application's top-level navigation. - [Breadcrumb](https://aureauds.dev/breadcrumb.md): Trail showing the current location in a hierarchy. - [Button](https://aureauds.dev/button.md): Trigger for an action or navigation. The primary interactive control. - [ButtonGroup](https://aureauds.dev/buttongroup.md): Buttons joined into one capsule — no gap, rounded only at the ends, a hairline between them — that share their variant, size and disabled state. - [Calendar](https://aureauds.dev/calendar.md): Month grid for picking a day, a range, or several days. - [Card](https://aureauds.dev/card.md): Floating surface that groups related content. - [Carousel](https://aureauds.dev/carousel.md): Slides that snap, with arrows and dots. The scroll container is the engine. - [Chart](https://aureauds.dev/chart.md): Sized, named surface that hosts a Recharts chart wearing Aurea tokens. - [ChartLegend](https://aureauds.dev/chartlegend.md): Which colour is which series, as a plain list under the chart. - [ChartTooltip](https://aureauds.dev/charttooltip.md): Values under the pointer, on the same tooltip surface as the rest of Aurea. - [Checkbox](https://aureauds.dev/checkbox.md): Binary or tri-state selection control. - [CheckboxGroup](https://aureauds.dev/checkboxgroup.md): A group of checkboxes with a label, a description and an error, that keeps the list of what is checked. - [Chip](https://aureauds.dev/chip.md): Another name for Badge, for those who know this piece as a chip. Identical in everything: the same props, the same look, the same behaviour. - [CloseButton](https://aureauds.dev/closebutton.md): The round close button: a 24 circle on the neutral fill with a 16 X in the Bold stroke, named "Close" by itself. - [Cluster](https://aureauds.dev/cluster.md): Horizontal wrapping/layout primitive. - [Code](https://aureauds.dev/code.md): A short piece of code inside a sentence. For a block of code use CodeBlock. - [CodeBlock](https://aureauds.dev/codeblock.md): Read-only code display, with line numbers and syntax colors when you pass the highlighter. - [CodeEditor](https://aureauds.dev/codeeditor.md): Editable code surface. - [Collapsible](https://aureauds.dev/collapsible.md): One section that opens and closes, with the open state owned by the app. - [ColorArea](https://aureauds.dev/colorarea.md): The square where you pick two channels of a colour for the third one fixed — saturation and brightness by default, or any pair of HSB, HSL or RGB — by pointer, touch or keyboard. The screen reader hears the channels and the colour's name. - [ColorField](https://aureauds.dev/colorfield.md): A field for a colour: the swatch in front and the code — hex, rgb(), hsl() or hsb() — applied on Enter or when it loses focus; or one channel as a number. Inside a Field, the label, description and error are the Field's. - [ColorPicker](https://aureauds.dev/colorpicker.md): A swatch with a name that opens a window to pick a colour: the area, the hue track and the hex field — or, as the swatches variation, a closed palette with the hex field. - [ColorSwatch](https://aureauds.dev/colorswatch.md): A round sample of a colour, with a thin inner ring so a colour the same as the background still shows, and a checkerboard under a transparent colour. With options, a group of swatches to pick one from (a closed palette). - [Combobox](https://aureauds.dev/combobox.md): Text field with an autocomplete listbox. - [CommandPalette](https://aureauds.dev/commandpalette.md): The command palette with the engine wired up: type, filter, run. - [CommandPaletteShell](https://aureauds.dev/commandpaletteshell.md): Overlay shell for a searchable command palette. - [ConfirmDialog](https://aureauds.dev/confirmdialog.md): Alert dialog for a decision that cannot be taken back. - [Container](https://aureauds.dev/container.md): The reading width of a website page: centred, capped, with side gutters that grow with the screen. - [ContainerScope](https://aureauds.dev/containerscope.md): Declares an Aurea container: the box that container-responsive values measure themselves against. - [ContextMenu](https://aureauds.dev/contextmenu.md): Actions menu opened by right-click or long-press. - [CostMeter](https://aureauds.dev/costmeter.md): Spend against a ceiling, with the soft and hard limits kept apart. - [DataGrid](https://aureauds.dev/datagrid.md): Interactive grid with navigation, sort and selection. - [DataList](https://aureauds.dev/datalist.md): Key/value or item list for structured data. - [DataState](https://aureauds.dev/datastate.md): One region, four faces: loading, failed, empty, or the content itself. - [DatePicker](https://aureauds.dev/datepicker.md): A field that opens a calendar to pick a date, or a range of dates. - [DependencyGraph](https://aureauds.dev/dependencygraph.md): Who depends on whom, on a canvas you can pan, zoom and build on. - [Dialog](https://aureauds.dev/dialog.md): Modal surface that interrupts for a focused task. - [Drawer](https://aureauds.dev/drawer.md): Panel that slides in from a screen edge. - [DropdownMenu](https://aureauds.dev/dropdownmenu.md): Menu of actions triggered by a control. - [EmptyState](https://aureauds.dev/emptystate.md): Placeholder for an empty or zero-result view. - [EventStream](https://aureauds.dev/eventstream.md): What happened, in order, live. - [Field](https://aureauds.dev/field.md): Form-field wrapper: label, control, description and error. - [FileInput](https://aureauds.dev/fileinput.md): Upload control with progress and validation. - [Form](https://aureauds.dev/form.md): Shows the error and collects the values. It does not decide what an error is. - [Gallery](https://aureauds.dev/gallery.md): A grid of pictures you can pick from, and enlarge in the dialog that already exists. - [Grid](https://aureauds.dev/grid.md): Two-dimensional layout primitive. - [Header](https://aureauds.dev/header.md): The top bar of an app or a website — also called header, navbar or top bar. Brand, the site's links with the current page marked, actions, and on a phone a menu button that drops the links below the bar. - [Heading](https://aureauds.dev/heading.md): A heading, h1 to h6. The level picks both the element and the size, as in the reference library. - [HealthMatrix](https://aureauds.dev/healthmatrix.md): What is up, in a grid. - [HoverCard](https://aureauds.dev/hovercard.md): Rich preview that opens when the pointer rests on a link, and whose content can be reached. - [HumanApproval](https://aureauds.dev/humanapproval.md): The gate: what is about to happen, and a person's decision. - [Icon](https://aureauds.dev/icon.md): Icon primitive rendered from a sprite. - [IconButton](https://aureauds.dev/iconbutton.md): Icon-only button with a required accessible label. - [Image](https://aureauds.dev/image.md): An image that reserves its box before the bytes arrive, and falls back when they never do. - [Input](https://aureauds.dev/input.md): Single-line text entry control. - [InputGroup](https://aureauds.dev/inputgroup.md): The box that looks like a field and holds the control plus whatever is glued to it. - [InputGroupAddon](https://aureauds.dev/inputgroupaddon.md): What sits glued to the control inside an InputGroup: a glyph, a prefix, a button. - [InterAgentMessage](https://aureauds.dev/interagentmessage.md): A message from one agent to another, where the direction is the data. - [InvocationPanel](https://aureauds.dev/invocationpanel.md): One execution: what was asked, the steps, what came out. - [Kbd](https://aureauds.dev/kbd.md): A keyboard key or shortcut, shown as the user would press it. Renders the element. - [KPI](https://aureauds.dev/kpi.md): Single headline metric with optional delta. - [Label](https://aureauds.dev/label.md): The field label on its own, for when you are not using Field. - [Link](https://aureauds.dev/link.md): A text link: medium weight in the link colour, no underline until hovered; external opens in a new tab with the arrow. - [ListBox](https://aureauds.dev/listbox.md): A standalone list of options with sections, descriptions and icons — choose none, one or many, or use it as a list of actions. - [LogStream](https://aureauds.dev/logstream.md): Live-appending stream of log lines. - [MediaEmbed](https://aureauds.dev/mediaembed.md): A third-party video page (YouTube, Vimeo) inside the Aurea frame, loaded only when asked for. - [MediaPlayer](https://aureauds.dev/mediaplayer.md): Video/audio player with full controls. - [MediaPlayerShell](https://aureauds.dev/mediaplayershell.md): Layout shell hosting a media player and its chrome. - [MemoryLedger](https://aureauds.dev/memoryledger.md): What the agent stored, recalled or forgot — and where it came from. - [Menubar](https://aureauds.dev/menubar.md): The application menu row — File, Edit, View — where an open menu hands over to its neighbour. - [MessageComposer](https://aureauds.dev/messagecomposer.md): Input surface for composing a message. - [MessageList](https://aureauds.dev/messagelist.md): Scrolling list of conversation messages. - [ModelUsage](https://aureauds.dev/modelusage.md): Consumption split by model: which one took how much. - [MultiCombobox](https://aureauds.dev/multicombobox.md): Combobox that accepts multiple selected values. - [NavList](https://aureauds.dev/navlist.md): A list of tappable rows that open something: leading icon, label, an optional second line, an optional trailing value, and the chevron that says "this goes somewhere". The brick of every settings screen. - [NotificationCenter](https://aureauds.dev/notificationcenter.md): Inbox surface aggregating notifications. - [NumberField](https://aureauds.dev/numberfield.md): Numeric field with decrease and increase controls, for a quantity you nudge. - [OTPField](https://aureauds.dev/otpfield.md): One box per character, for a verification code the user types or pastes. - [Pagination](https://aureauds.dev/pagination.md): Navigate across pages of content. - [Paragraph](https://aureauds.dev/paragraph.md): A paragraph of body text in one of three sizes. - [PasswordField](https://aureauds.dev/passwordfield.md): A password field with a show/hide control that announces what it does. - [Popover](https://aureauds.dev/popover.md): Anchored floating surface with content or interaction. - [Progress](https://aureauds.dev/progress.md): Progress bar: determinate, or indeterminate when the total is not known yet, with a supporting detail and a tone. - [ProgressCircle](https://aureauds.dev/progresscircle.md): Progress as a ring that fills from the top; without a value it spins. - [Prose](https://aureauds.dev/prose.md): The skin for long-form text. It is not the parser — that stays yours. - [QRCode](https://aureauds.dev/qrcode.md): Scannable QR code rendered as a styled SVG with Aurea soft geometry. - [Radio](https://aureauds.dev/radio.md): Single choice within a group. - [RadioGroup](https://aureauds.dev/radiogroup.md): A group of radio options with a label, a description and an error, that keeps the chosen value — vertical or horizontal. RadioGroup.Item is the Radio. - [Range](https://aureauds.dev/range.md): Slider for selecting a value from a range. - [SearchField](https://aureauds.dev/searchfield.md): Text field specialized for search, with clear affordance. - [Section](https://aureauds.dev/section.md): An edge-to-edge band of a website page, with its own surface, site spacing and, optionally, its own theme. variant="footer" makes it the site's footer; variant="hero" makes it the page opening. - [SegmentedControl](https://aureauds.dev/segmentedcontrol.md): Choose one option from a compact inline set. - [Select](https://aureauds.dev/select.md): Choose a single value from a closed list, in the Aurea skin. - [Separator](https://aureauds.dev/separator.md): A rule between things. Horizontal or vertical, one hairline in the border colour — the thing a sidebar uses between sections and a toolbar uses between groups. - [Sidebar](https://aureauds.dev/sidebar.md): Floating side panel that holds the application's navigation. - [Skeleton](https://aureauds.dev/skeleton.md): Placeholder shown while content loads. - [Slider](https://aureauds.dev/slider.md): Drawn slider: label and value on top, a 20 track with the fill, a capsule thumb. One value or a range of two, horizontal or vertical, number formatted by Intl. - [SortableList](https://aureauds.dev/sortablelist.md): Reorder by dragging — and by keyboard, which is the reason it may exist at all. - [Spinner](https://aureauds.dev/spinner.md): Indeterminate activity indicator for a wait with no known end. - [Stack](https://aureauds.dev/stack.md): Vertical spacing/layout primitive. - [Status](https://aureauds.dev/status.md): Operational condition of a thing: a coloured dot plus a readable label. - [Stepper](https://aureauds.dev/stepper.md): Progress through numbered steps, for a task that happens in a fixed order. - [Switch](https://aureauds.dev/switch.md): On/off toggle. - [Table](https://aureauds.dev/table.md): Presents rows and columns of data — also a comparison table: groups of rows, the row's name pinned while scrolling sideways, the header pinned while scrolling down, the best value marked and a 'differences only' switch. Every cell has tabular figures, so price and year columns line up. - [TableOfContents](https://aureauds.dev/tableofcontents.md): In-page index of a document's sections. Sticky beside the content, marks the section in view. - [Tabs](https://aureauds.dev/tabs.md): Switch between peer views in the same context. - [TagGroup](https://aureauds.dev/taggroup.md): A wrapping row of tags with a label: none, one or several can be selected, and each can be removed. - [TaskQueue](https://aureauds.dev/taskqueue.md): The work queue: what is waiting, what is running, what failed. - [Text](https://aureauds.dev/text.md): Text in one of a closed list of roles — a heading level, body text or code — never a loose size. The reference library's Typography model. - [Textarea](https://aureauds.dev/textarea.md): Multi-line text entry control. - [ThemeToggle](https://aureauds.dev/themetoggle.md): The light/dark switch, with colour in the glyph: a dark moon in the light theme, the brand yellow sun in the dark one. - [Timeline](https://aureauds.dev/timeline.md): Chronological sequence of events. - [Toggle](https://aureauds.dev/toggle.md): Two-state button that stays pressed, for a setting you flip in place. - [ToggleGroup](https://aureauds.dev/togglegroup.md): Several toggles sharing one state, with arrow-key navigation between them. - [Toolbar](https://aureauds.dev/toolbar.md): Container of actions with roving-tabindex keyboard navigation. - [ToolbarButton](https://aureauds.dev/toolbarbutton.md): Button tuned for use inside a Toolbar. - [ToolbarGroup](https://aureauds.dev/toolbargroup.md): Structural grouping of toolbar items. - [ToolbarSeparator](https://aureauds.dev/toolbarseparator.md): Visual divider between toolbar groups. - [ToolPermission](https://aureauds.dev/toolpermission.md): What each tool may do, without asking again. - [Tooltip](https://aureauds.dev/tooltip.md): Brief label revealed on hover or focus. - [Topbar](https://aureauds.dev/topbar.md): The old name of Header. Same component, still works the same; use Header. - [TraceTimeline](https://aureauds.dev/tracetimeline.md): How long each step took, as a waterfall. - [TreeView](https://aureauds.dev/treeview.md): Hierarchical, expandable tree of items. ## Hooks - [useAureaStrings](https://aureauds.dev/useaureastrings.md): Read the string dictionary the provider is using, to translate your own labels with it. - [useAureaTheme](https://aureauds.dev/useaureatheme.md): Read theme and density straight from the document, and set them — for a host that owns the attributes. - [useDensity](https://aureauds.dev/usedensity.md): Read the current density and switch it, from anywhere inside AureaProvider. - [usePortalContainer](https://aureauds.dev/useportalcontainer.md): The node every Aurea popup is mounted into, as configured once on AureaProvider. - [useReorder](https://aureauds.dev/usereorder.md): The accessible drag-and-drop reordering protocol, shared by SortableList and BlockEditor. - [useSidebar](https://aureauds.dev/usesidebar.md): The sidebar state — collapsed, setCollapsed, toggle — inside Sidebar.Provider or an AppShell with sidebarCollapsible. - [useSpriteUrl](https://aureauds.dev/usespriteurl.md): Read where the provider is loading icon glyphs from. - [useTheme](https://aureauds.dev/usetheme.md): Read the current theme and switch it, from anywhere inside AureaProvider. - [useToast](https://aureauds.dev/usetoast.md): Raise a transient notification from anywhere inside AureaProvider. - [useValorResponsivo](https://aureauds.dev/usevalorresponsivo.md): Resolves a Responsive into the single value that applies right now — by viewport, by container, or not at all. ## Patterns - [Accordion · Questions on a marketing page](https://aureauds.dev/pattern-accordion-questions-on-a-marketing-page.md): The title is the question in the reader's own words, not a category. An accordion earns its place when the reader wants one answer, not all of them — otherwise plain headings read faster. - [Accordion · Advanced options, folded away](https://aureauds.dev/pattern-accordion-advanced-options-folded-away.md): The defaults are enough for most people, so the rest starts closed. Folding is not hiding: the summary line says what is inside, so nobody has to open it to find out. - [Alert · Inline notice](https://aureauds.dev/pattern-alert-inline-notice.md): Context that belongs to the section it sits in — an Alert stays put; a Toast would vanish. - [Alert · Failure with retry](https://aureauds.dev/pattern-alert-failure-with-retry.md): What broke, plus the way out in the same block. An error without an action is a dead end. - [Alert · Degraded service](https://aureauds.dev/pattern-alert-degraded-service.md): Page-width notice for something that affects the whole surface, dismissible by the reader. - [Alert · Nothing found](https://aureauds.dev/pattern-alert-nothing-found.md): The empty result of a filter: says why it is empty and offers the way back. - [Alert · Determinate upload](https://aureauds.dev/pattern-alert-determinate-upload.md): Known progress with a label. Unknown progress is a Skeleton or a spinner, never a fake bar. - [Alert · Loading placeholder](https://aureauds.dev/pattern-alert-loading-placeholder.md): The shape of the content before the content — Skeleton is aria-hidden by design. - [AppShell · The frame of a whole application](https://aureauds.dev/pattern-appshell-the-frame-of-a-whole-application.md): Brand and global actions on the topbar, the sections on the sidebar, the screen in the middle. It is the only component that owns page landmarks — one per document, never nested — and it emits the skip link for free, which is what closes WCAG 2.4.1 without the consumer writing anything. - [AppShell · A topbar joined to the page](https://aureauds.dev/pattern-appshell-a-topbar-joined-to-the-page.md): `topbarVariant="flush"` drops the floating surface and welds the bar to the top edge. Pick one of the two per application and hold it: floating on one screen and flush on the next reads as two products, not as two screens. - [AppShell · The sidebar out of the way](https://aureauds.dev/pattern-appshell-the-sidebar-out-of-the-way.md): `sidebarCollapsed` is controlled by the consumer, like `open` on the palette: the shell never decides on its own that the navigation should disappear. The toggle in the brand slot is emitted by the shell and drives the same sidebar on small screens, where it opens as a popover instead of a column. - [AppShell · The sidebar from top to bottom](https://aureauds.dev/pattern-appshell-the-sidebar-from-top-to-bottom.md): `layout="sidebar"` drops the bar that spans the window: the sidebar runs from the top to the bottom, the brand lives at its top and the person at its bottom, and only the list scrolls. The collapse button sits beside the page title (`AppShell.SidebarToggle`). - [AppShell · A bar over the content alone](https://aureauds.dev/pattern-appshell-a-bar-over-the-content-alone.md): Pass `topbar` and the bar comes back over the content column only, with the collapse button first in it. The sidebar keeps running from top to bottom. - [AppShell · The sidebar that becomes a capsule](https://aureauds.dev/pattern-appshell-the-sidebar-that-becomes-a-capsule.md): `sidebarCollapsible="capsule"`: collapsed, the floating sidebar keeps its rail of icons with the control radius — a capsule — instead of the card radius. The button at the seam collapses and expands it, and so does Ctrl+B (Cmd+B on a Mac). - [AppShell · The sidebar that leaves the screen](https://aureauds.dev/pattern-appshell-the-sidebar-that-leaves-the-screen.md): `sidebarCollapsible="offcanvas"`: collapsed, the sidebar leaves the screen and the content takes the whole width. The button beside the title brings it back. It is the reference's off-canvas mode. - [AppShell · The collapse button inside the sidebar](https://aureauds.dev/pattern-appshell-the-collapse-button-inside-the-sidebar.md): `sidebarToggle="none"` keeps the shell from placing its own button, and the app puts `Sidebar.Toggle` where it wants — here, as the `action` of the brand at the top of the sidebar. Collapsed, the button moves under the logo. - [AppShell · Sections with the list beside them](https://aureauds.dev/pattern-appshell-sections-with-the-list-beside-them.md): `sidebarPanel="docked"`: the first level of `navItems` becomes sections — a rail of icons — and the list of the chosen section sits in a panel beside it. Collapsing hides the panel and keeps the rail. - [AppShell · Sections with the list over the page](https://aureauds.dev/pattern-appshell-sections-with-the-list-over-the-page.md): `sidebarPanel="overlay"`: the rail of sections stays narrow, and the list of a section opens over the page, next to its icon. Focus moves into the list, and Escape or a click outside closes it. - [AppShell · The current item of the sidebar, five ways](https://aureauds.dev/pattern-appshell-the-current-item-of-the-sidebar-five-ways.md): `sidebarIndicator` sets how the item you are on is drawn: `brand` (the default), `segment` (the capsule of the selected tab, with no line), `segment-dot`, `segment-line` and `subtle`. Switch them here, on the real shell. - [AspectRatio · A media slot that reserves its space](https://aureauds.dev/pattern-aspectratio-a-media-slot-that-reserves-its-space.md): The box holds the shape before the image arrives, so nothing below it jumps when it does. That is the whole job: not cropping the picture, but stopping the layout from shifting under the reader — the failure a card grid makes most visibly. - [AspectRatio · One ratio held across a grid](https://aureauds.dev/pattern-aspectratio-one-ratio-held-across-a-grid.md): Cards of different image heights read as a broken grid even when every card is correct. Fixing the ratio in one place is what makes the row line up, and it survives a source image nobody checked. - [AspectRatio · A square, for identity](https://aureauds.dev/pattern-aspectratio-a-square-for-identity.md): `ratio={1}` is the default because the square is the shape identity uses — an avatar, a logo, a QR code. Naming it explicitly in the code is still worth it: a reader who sees `ratio={1}` knows the square was chosen, not inherited. - [Avatar · Initials when there is no picture](https://aureauds.dev/pattern-avatar-initials-when-there-is-no-picture.md): The fallback is not a placeholder, it is the normal case: most people in most systems have no photo. Initials come from the name so two rows never look alike by accident. - [AvatarGroup · Who is on this run](https://aureauds.dev/pattern-avatargroup-who-is-on-this-run.md): Overlapping faces plus a count for the rest. The cutoff exists because a row of twelve avatars stops being information and becomes texture — the number carries what the faces no longer can. - [Badge · Version tag](https://aureauds.dev/pattern-badge-version-tag.md): Short metadata next to a title — the release the page documents. - [Badge · Maturity scale](https://aureauds.dev/pattern-badge-maturity-scale.md): The whole maturity ladder in one row, so a reader places an item at a glance. - [Badge · Count on a label](https://aureauds.dev/pattern-badge-count-on-a-label.md): A number that changes, kept quiet: neutral, so it never competes with a status. - [Badge · Badge next to Status](https://aureauds.dev/pattern-badge-badge-next-to-status.md): Badge classifies, Status reports a condition. Together they answer what and how. - [Badge · Categories, not statuses](https://aureauds.dev/pattern-badge-categories-not-statuses.md): Eight colour names mark a group — a section, a kind of item — and say nothing about health, so they never compete with success or danger. Yellow is left out: it belongs to the brand. The word and the icon carry the meaning; the colour only helps the eye find the group again. - [Badge · One category in three emphases](https://aureauds.dev/pattern-badge-one-category-in-three-emphases.md): The categories take the same three emphases as every other badge: soft for a list, solid for the one that must stand out, outline (since 0.34.0 a light tint, no line) when the surface is already busy. - [Banner · Something that affects the whole page](https://aureauds.dev/pattern-banner-something-that-affects-the-whole-page.md): A banner spans the region it is about; an alert sits inside it. Dismissible only when the message is genuinely optional — a banner about degraded service that can be closed is a banner nobody sees twice. - [Banner · The cookie notice](https://aureauds.dev/pattern-banner-the-cookie-notice.md): variant="consent" asks before setting cookies that are not necessary: reject them, accept all, or choose by category in a window. Rejecting is as easy to see as accepting — same weight, same place —, the optional categories start off, and after the choice the confirmation takes the focus. Put the notice at the top of the page, before the skip link, and do not fix it to the screen. To change the choice later, show it again from a link in the footer, with value set to what you stored. - [Breadcrumb · Where this page sits](https://aureauds.dev/pattern-breadcrumb-where-this-page-sits.md): Every level is a link except the last, which is the page itself and carries aria-current. A breadcrumb whose last item is also a link tells the screen reader that the user can navigate to where they already are. - [Button · With leading icon](https://aureauds.dev/pattern-button-with-leading-icon.md): The main action of a screen, with the glyph repeating the verb — never replacing it. - [Button · Submitting](https://aureauds.dev/pattern-button-submitting.md): Busy state for a form submit: spinner, aria-busy and the label kept for context. - [Button · Confirm and cancel](https://aureauds.dev/pattern-button-confirm-and-cancel.md): The pair that closes a dialog: one primary, one ghost. Cancel is never a button of equal weight. - [Button · With text](https://aureauds.dev/pattern-button-with-text.md): Secondary action that still needs an edge — a neutral choice next to a primary one. - [Button · With trailing chevron](https://aureauds.dev/pattern-button-with-trailing-chevron.md): Opens a menu or a list. The chevron announces that something unfolds. - [Button · Destructive with icon](https://aureauds.dev/pattern-button-destructive-with-icon.md): Irreversible action. The red plus the glyph make the consequence readable before the click. - [Button · Toolbar trio](https://aureauds.dev/pattern-button-toolbar-trio.md): Three low-emphasis actions side by side, where the surface below must keep reading. - [Button · Icon only](https://aureauds.dev/pattern-button-icon-only.md): Square target with an accessible name — an icon without a label needs one. - [Button · Segmented range](https://aureauds.dev/pattern-button-segmented-range.md): Coordinated set of the same control. Each button stays tabbable — that is what separates it from a Toolbar. - [Button · With Kbd](https://aureauds.dev/pattern-button-with-kbd.md): The action and the key that fires it, together — shown and announced by aria-keyshortcuts. - [Button · Destructive with Kbd](https://aureauds.dev/pattern-button-destructive-with-kbd.md): Irreversible plus a shortcut: the key is spelled out so nobody discovers it by accident. - [Button · Inline action](https://aureauds.dev/pattern-button-inline-action.md): Inside a sentence, where a capsule would break the line: text, underlined at rest. - [Button · Pinned filter](https://aureauds.dev/pattern-button-pinned-filter.md): A filter that stays on: aria-pressed keeps the state visible and audible after the click. - [Button · Full width on a narrow screen](https://aureauds.dev/pattern-button-full-width-on-a-narrow-screen.md): Form footer on a phone: the action takes the whole width so the thumb cannot miss it. - [Button · With counter](https://aureauds.dev/pattern-button-with-counter.md): Action carrying a live number: the Badge rides inside the label, not beside it. - [Button · The two axes](https://aureauds.dev/pattern-button-the-two-axes.md): Appearance is how much weight the box has; tone is what the colour means. The old names are shortcuts for pairs — variant="danger-outline" and appearance/tone below render the same button. - [Button · Confirming a safe outcome](https://aureauds.dev/pattern-button-confirming-a-safe-outcome.md): Success tone for an action that lands somewhere good — publishing, approving, marking done. Filled, because tone and weight are independent: choosing green does not force the button to be quieter. - [Button · Warning is not the brand](https://aureauds.dev/pattern-button-warning-is-not-the-brand.md): Amber, not the Aurea yellow. Until August 2026 the warning token resolved to the brand colour in dark theme — same pixels, two different meanings — so warning was not a tone at all. It has its own identity now, picked by measuring perceptual distance from both neighbours: the brand on one side, the destructive red on the other. - [Button · Informational action in running text](https://aureauds.dev/pattern-button-informational-action-in-running-text.md): Info tone on the link appearance: a pointer to context that is neither a warning nor a commitment. - [Button · The same tone across appearances](https://aureauds.dev/pattern-button-the-same-tone-across-appearances.md): One tone, four weights — and every cell exists. A tone never loses its filled form: each one owns a colour and the text colour that goes on top of it, chosen per theme and verified for AA contrast, exactly as the destructive tone always had. - [Button · Stacked actions](https://aureauds.dev/pattern-button-stacked-actions.md): A vertical group for a menu of actions on a card or in a side panel. The buttons all measure the same width — without that the column comes out ragged, which is the one defect a vertical group cannot have. It stays role="group" and announces no orientation: it does not navigate by arrow, and promising keyboard that does not exist is worse than staying quiet. - [Button · The same button in three container widths](https://aureauds.dev/pattern-button-the-same-button-in-three-container-widths.md): One button, one value, one viewport — three container widths. The step comes from the space the component was placed in, not from the size of the window, so a sidebar and a main column can show the same component at different steps at the same time. This is the proof that separates the two mechanisms: if the three measured the same, what existed would be a media query under another name. The parent needs `container-scope`, which names the container — an unnamed one matches the nearest ancestor that happens to be a container, including one somebody else declared for another reason. - [Button · Reacting to the window instead](https://aureauds.dev/pattern-button-reacting-to-the-window-instead.md): The other mechanism, for when the decision really does belong to the application and not to the slot: the step follows the viewport. Same axis, same scale, and the prefix in the emitted class says which of the two is measuring — `md` is always 768px, and never means two things depending on where you read it. Resize the window to see it move; the example above will not move, because its containers have fixed widths. - [Button · Every family follows its own scale](https://aureauds.dev/pattern-button-every-family-follows-its-own-scale.md): The same three containers, now with one piece from each family. Control, mark and avatar come from the control height and step together; the icon inside the button comes from the glyph scale and does NOT follow the button — a large button with a huge glyph is not a larger button, it is a different drawing. The two behaviours in one picture are the point: sharing a step is measured, never assumed. - [ButtonGroup · Time range](https://aureauds.dev/pattern-buttongroup-time-range.md): Day, week, month over the same chart — the label names the set, the buttons the spans. - [ButtonGroup · Pinned filters](https://aureauds.dev/pattern-buttongroup-pinned-filters.md): Many-of-many: each button is its own toggle, so two can be on at once. - [ButtonGroup · View switch](https://aureauds.dev/pattern-buttongroup-view-switch.md): One-of-many is not this component: SegmentedControl carries one value and one tab stop. - [ButtonGroup · Share actions](https://aureauds.dev/pattern-buttongroup-share-actions.md): Glyph-only set at the end of a card: one name for the group, one for each action. - [Calendar · Date picker](https://aureauds.dev/pattern-calendar-date-picker.md): There is no DatePicker component: a picker is a trigger plus a popover plus this calendar. Three parts you already have, and the trigger is what names the field. - [Calendar · Booking with days closed](https://aureauds.dev/pattern-calendar-booking-with-days-closed.md): The reason this component exists. A native date input cannot say "not before Thursday, and never a Sunday" — everything else about a plain date, it does better. - [Calendar · When the native input wins](https://aureauds.dev/pattern-calendar-when-the-native-input-wins.md): One plain date, no closed days: the native picker is smaller, knows every locale, and is the one the person already knows how to use on their phone. - [Card · Titled surface](https://aureauds.dev/pattern-card-titled-surface.md): The plain floating surface: title, one line of context, radius 22. - [Card · Header with action](https://aureauds.dev/pattern-card-header-with-action.md): Title on the left, the action on the right, on the same baseline. The card owns its own header. - [Card · Selectable tile](https://aureauds.dev/pattern-card-selectable-tile.md): A card that is a target. The interactive variant carries the hover and the focus ring — and it requires `render`, because only the caller knows whether the tile is an action (