AAGO Brandbook

The twelve real components AGO Console ships (ago-console/src/components/), each shown in its real states, styled from the real components.css — not redrawn or approximated. This is a static reference, not a playground: nothing here is editable, and a dialog that would normally need a click to open is shown already open.

.ago-btn

Button

Four tones (--primary/--secondary/--ghost/--danger), two sizes (--md/--sm), a real hover per tone and a real disabled state.

primary · md
primary · hover
primary · disabled
primary · sm
secondary · md
secondary · hover
secondary · disabled
secondary · sm
ghost · md
ghost · hover
ghost · disabled
ghost · sm
danger · md
danger · hover
danger · disabled
danger · sm
.ago-badge

Badge

Six tones, plus .ago-badge__dot (currentcolor, with a measured glow on the success tone only) and the mono variant used for identifiers.

neutralDraft
brandBooking
accent + ai markerRefund AI
success + dotLive
dangerEscalated
mono#7f3a1c
.ago-alert

Alert

Three tones, each with a glyph, a title and body text — .ago-alert__title/__body/__glyph. The icon is decorative in the real component (aria-hidden); the tone and the text carry the meaning.

Message failed to send WhatsApp rejected the message — the visitor's 24-hour session window has closed.
Backup completed Encrypted and pulled to the operator's machine — 214 MB, 2026-09-20 03:00 UTC.
A new channel is available MAX is live for this account — link it from Settings → Channels. Open settings →
.ago-dialog

Dialog

Rendered as a real <dialog open> element so it shows open without JavaScript — ago-console opens the same element with showModal(), which additionally paints the real ::backdrop; this page fakes that dimming with its own .dialog-stage wrapper so the open state is visible without a click. The drawer variant (--drawer) is shown the same way, constrained to its own stage instead of the real viewport edge.

base dialog, open

Delete this conversation?

This can't be undone — the conversation and its messages are removed for every operator.

drawer variant, open

Keyboard shortcuts

⌘K — command palette · G then I — inbox · G then Q — queue

.ago-field · .ago-control

Field & Input

A label, an optional description, an optional error — the field never uses colour alone for "this is wrong": the invalid border is always paired with .ago-field__error text.

default, with description
Used for the weekly summary only.
invalid, with error
Enter a valid email address.
hover (also live)
disabled
.ago-control--select

Select

Native <select>, restyled with the same control shell as Input and Textarea so a 40px control is a 40px control regardless of which one it is.

default
disabled
.ago-control--textarea

Textarea

Same control shell as Input, taller and vertically resizable.

default
disabled
.ago-panel

Panel

The default surface every screen is built from — a head (title, description, actions) and a body. --quiet drops the shadow onto the raised surface, for a panel that sits inside another panel.

Conversation tags

Applied automatically and by operators; AI-suggested tags are marked.

Booking Refund AI
Quiet panel
no shadow, raised surface — a panel nested inside a panel
.ago-table

Table

A sunken header row, a numeric column right-aligned with tabular figures (.ago-table__cell--end), and a hover state on the body rows.

Recent conversations
VisitorChannelStatusMessages
Мария К.Telegram Live 14
Игорь П. (row hover, simulated)WhatsApp Closed 6
Анна В.MAX Escalated 21
.ago-spinner · .ago-skeleton

Spinner & Skeleton

A spinner is always beside a real text label (aria-live carries the state, not the animation). A skeleton stack stands in for content that has not arrived yet.

Loading conversation…
.ago-tooltip

Tooltip

A 24px round trigger (the WCAG 2.5.8 target-size floor) beside a section title — a sibling, never a descendant, so the title's accessible name never picks up the trigger's own label. Normally revealed on hover/focus; shown open below so it's visible without one.

Escalation SLA

Escalated conversations page an operator within 2 minutes during business hours.