Card title
Generate, schedule and distribute high-fidelity operational summaries of live cluster telemetry.
RST is built on tokens. Primitives hold the raw values and stay the same in both themes. The semantic, material, component and visualization layers point at those primitives and are redefined for Light and Dark. Components only ever use the upper layers, which is why one theme switch changes the whole system.
Legacy components are deliberately excluded, and the specialized RST/Agent, RST/Research and RST/UX Artifact sets are not exposed variant-by-variant — they need a public-surface decision first.
Four rules the system is held to. They are the reason component repairs happen at the master rather than in the documentation.
No component ever hardcodes a colour. If a value cannot be expressed as a token, the token is missing.
Every example is an attached instance of a production master. Documentation never forks a component.
If two variants render identically, the property is decoration. Type must change the thing.
Focus order, Escape, dismissal and keyboard navigation are documented alongside the visuals.
What changed in the system recently, and what it means for work already in flight.
Five colours and five gradients carry RST identity. They are separate from the status palette on purpose: brand says who the product is, status says what just happened.
status/success are close in hue and completely different in meaning.
Use a brand colour when you are expressing RST identity, and a status token when you are telling someone the result of something.
Never swap one for the other to get a colour you like.
Make RST your own. Set five colours and a typeface, watch the system adapt, then take the specification with you.
RST components use semantic tokens so colors and surfaces stay consistent across themes. The primitive ramps below exist to be referenced by those tokens rather than applied directly.
Five collections, resolved live from the same values as the design library.
| Collection | Variables | Modes | Role |
|---|---|---|---|
RST / Primitive | 131 | Value | Raw palette, spacing, radius, sizing. Mode independent. |
RST / Semantic | 64 | Light · Dark | Surface, text, border, interactive, status, brand. |
RST / Material | 7 | Light · Dark | Solid, elevated, glass, gradient, inverse. |
RST / Component | 22 | Light · Dark | Per-component surfaces and radii. |
RST / Visualization | 18 | Light · Dark | Chart series, grid, axis, label, tooltip. |
IBM Plex Sans across the ramp, IBM Plex Mono for code and data. Sixteen published styles.
The curated RST Product Icon Set, thirteen categories of glyphs that product work actually needs. The rest of the library is kept in the design library and reachable here under Extended library, but it is not published. Which set a glyph belongs to is decided in the design library and read back here, never decided twice. Search by name, by category or by what you are trying to say, then copy or download any drawn glyph as an SVG.
A 12-step scale. Everything in the system lands on it.
Four columns on mobile, eight on tablet, sixteen on desktop, with gutters of 16 / 24 / 32.
Ten steps from 0 to fully round. Components reference radius through their own component token.
Three shadow levels plus the material surfaces they sit on. Shadows deepen in dark mode rather than inverting.
A shared timing and reveal language for RST products. Respect prefers-reduced-motion and show content immediately when motion is reduced.
tight 60ms · standard 100ms · relaxed 150ms. Use on groups of cards or steps, not on every small element.
load · view · hover · press · expand · state-change. View reveals play once as an element enters the viewport.
In React: <MotionReveal variant="fade-up">...</MotionReveal>. Wrap direct reveal children in <MotionStagger rate="standard">...</MotionStagger>. Default reveal is fade-up, 24px to rest in 600ms with smooth ease-out. Use IntersectionObserver for the view trigger; keep content visible if scripting or observation is unavailable.
Targets for every RST component. The catalog itself is built to them, so it doubles as a reference implementation.
outline:noneThe primary action component. Fifteen types, four sizes and seven states, all driven by the same anatomy.
The primary type is theme-aware: solid Primary Blue in Light, and the Primary Blue → Secondary Purple brand gradient in Dark. It comes from --button-primary-background, so every primary CTA inherits it and no screen sets it directly. No other type takes the gradient.
| Property | Values | Notes |
|---|---|---|
Type | Primary · Secondary · Tertiary · Ghost · Danger · Inverse · Glass · Gradient · Pill · Icon + Label · Label + Icon · Icon Only · Round Icon · Floating Action · Segmented | One action per screen should be Primary. |
Size | Small · Medium · Large · XL | 32 / 40 / 48 / 56px control heights. |
State | Default · Hover · Pressed · Focus · Selected · Disabled · Loading | Loading suppresses pointer events and keeps the label width. |
Show Leading Icon | boolean | Icon precedes the label. |
Show Trailing Icon | boolean | Use for forward motion, not decoration. |
Icon-only buttons carry an aria-label. Disabled buttons stay in the tab order only when they explain why. Loading state keeps the accessible name stable so screen readers do not re-announce the control.
The Floating Action type of RST/Button. It gives a view one persistent shortcut to the action people reach for most.
A FAB must not be the only route to its action. Keep it out of the way of the bottom safe area on mobile and give the icon-only form an explicit label.
The Text Input type of RST/Input. All nine states are reachable from the control panel, and the live examples validate as you type.
Labels are real elements, not placeholders. Error text is associated with the field and aria-invalid flips on failure, so the error is announced rather than only coloured.
The Textarea type of RST/Input, for answers longer than a line. Resizes vertically only.
Increment and decrement with the buttons or ↑ / ↓. Clamps to min and max, and disables the button that would overshoot.
The Search type of RST/Input, with a leading icon and a clear affordance once there is a value.
The Checkbox type of RST/Selection Control. The parent below is genuinely indeterminate when only some children are on.
The Radio type of RST/Selection Control. One answer from a visible set.
A real listbox: opens on click or ↓, moves with arrow keys, Home and End, commits on Enter and dismisses on Escape or outside click.
Implemented as button + listbox with roving focus. The trigger exposes aria-expanded; the list is labelled by the field label.
The Toggle type of RST/Selection Control, for settings that take effect immediately.
Uses role="switch" so state is announced as on/off rather than checked. A toggle must apply instantly — if it needs a Save button, use a checkbox.
Draggable, keyboard-operable and live-reporting. The track fills to the current value.
Dropzone and compact types with live drag, progress and error states.
Fourteen types across five materials. The material decides the surface; the type decides the anatomy.
Generate, schedule and distribute high-fidelity operational summaries of live cluster telemetry.
Interactive cards lift on hover and take keyboard focus.
Backdrop blur over the page surface.
Brand gradient with on-gradient text tokens.
For high-contrast callouts inside light surfaces.
Up 18% week over week.
A single figure with its movement. Three sizes; the sparkline is an RST micro chart, not an image.
How a system state is shown so it reads the same everywhere, and never depends on colour alone.
Compact status or classification metadata. Tone is the property that matters. A Badge is a filled pill with no stroke, which is what separates it from a Tag.
Tone is never the only signal — every badge carries a text label, and the optional dot is decorative.
The Tag type of RST/Data Display. Tags are outlined, rectangular and removable. Click the × to dismiss one.
Three sizes and three content modes. Initials are the default when no image is available.
Row density is a property of the table, not the cell. Compact fits roughly 40% more rows in the same space.
Read-only value types: key/value, code, timestamp and confidence. These are figures and identifiers, not interactive chips.
rst.chart.series.02CodeThe RST scrollbar treatment applied to an overflowing region. Scroll the panel below.
Sortable columns, selectable rows with a real indeterminate header checkbox, and live filtering. Click a column header or press Enter on it to sort.
| Account | Stage | Value | Owner | |
|---|---|---|---|---|
| Northwind Traders | Closing | $482,000 | A. Okafor | |
| Contoso Health | Proposal | $318,500 | M. Lindqvist | |
| Fabrikam Logistics | At risk | $204,750 | R. Chandra | |
| Tailspin Media | Discovery | $96,200 | S. Beaulieu | |
| Adventure Works | Stalled | $61,400 | D. Moreau |
Headers are real th elements carrying aria-sort and are keyboard operable. Selected rows set aria-selected, and status is never conveyed by colour alone — every badge carries text.
The controls a data table is assembled from. Previously only Filter was documented; this is the rest of the family.
What the visualization layer covers today, what it deliberately does not, and how to pick a chart.
Five rules every RST chart is held to, and what each one rules out.
The parts of an RST chart, what each one is for, and which are optional.
The visualization ramp, when to use a categorical palette and when a sequential one, and why status colours stay out of it.
Baselines, ticks, gridlines and the truncation rule.
When a legend earns its place, when direct labelling is better, and how values are formatted.
Hover, focus, tooltips and series isolation — including what has to work without a mouse.
What a chart is allowed to animate, and what happens under reduced motion.
Single-series categorical comparison. Hover a bar for its value.
Two series side by side in blue and orange, which stay separable in both themes. Click a legend entry to isolate a series.
The right answer for ranked categories with long labels.
Continuous change over time. Multi-line uses the categorical ramp in order.
The Line + Area type. The fill implies volume, so only use it from a zero baseline.
Inline shapes for cards and table cells. There are no axes and no labels because the only thing a sparkline needs to show is direction.
Composition within each category. Use it when the total matters as much as the parts.
Part-to-whole for four or fewer slices. Beyond that, a horizontal bar reads better.
A pie with a centre, which is where the headline figure goes.
Part-to-whole in half the vertical space. It is built from a real annular arc rather than a masked pie, so the geometry stays correct at any size.
How a starting value becomes an ending value. Positive contributions use series 03, negatives use the dedicated negative token.
Distribution across bins. Bars touch, because the x-axis is continuous.
Two categorical axes with intensity carried by opacity on a single series token rather than by a rainbow of hues.
Relationship between two continuous measures.
A single value against a bounded target. One progress colour sits over a track on a real 0 to 100 scale, and there is no series legend because there is only one series.
The Inline Notification type of RST/Feedback. Five tones, dismissible. Tone carries meaning, so the icon changes with it.
Transient confirmation that does not block the page. Fire one and it stacks in the bottom right, then dismisses itself.
The toast region is a labelled landmark. Error toasts use role="alert"; everything else uses role="status" so it does not interrupt.
Determinate progress. Press Run to watch it animate to completion and flip to the success state.
Indeterminate waiting. Three sizes; stops animating in the disabled state.
The four kinds of empty, and the one thing each of them owes the reader.
Where an error belongs, how it is worded, and how someone gets out of it.
A real focus trap. Escape closes it, a scrim click dismisses it, and focus returns to the trigger. Tab cycles inside the dialog rather than escaping to the page.
role="dialog" with aria-modal, labelled by its title. Focus moves to the first field on open and returns to the trigger on close. Background scroll is locked.
A side panel for secondary work that keeps context. Below 480px it becomes a bottom sheet.
Anchored panel with four placements. Dismisses on outside click and Escape, and returns focus to its trigger.
Opens on hover and focus, closes on Escape. Tab to the buttons below to see it work from the keyboard.
The Dropdown type of RST/Input. Same anatomy as Select but for filtering and view switching rather than form data.
Grouped activity with read and unread states.
Previous/next, clickable indicators, arrow-key support and touch swipe.
Play/pause, a scrubbable progress bar and live time. Six states from the master; the state badge follows playback.
Five sample posters. Pick one to set the poster frame — swap the files in assets/posters/ for your own artwork.
Month navigation and date selection, with today, selected, outside-month and disabled day states. The second example selects a range.
Conversation surface with typing state. This is the one public surface exposed from the Agent Components page.
Activity item with optional media and a loading state.
Shipped the native half-arc gauge. The imported pie widget is gone and the arc now uses a real track.
Eight public surfaces for showing what an agent is doing, what it has done, and where it needs a person.
Six public surfaces for carrying research from raw signal through to a recommendation someone can act on.
The surface a diagram sits on: grid, density, material, and the two things it can show for you.
Ten node types, what each one means, and why a node is never a card.
Five geometries, five types and the rule that keeps a branch label attached to its branch.
Grouping without nesting — how a phase or a boundary is drawn around nodes that stay independent.
Notes that sit beside a diagram without pretending to be part of the flow.
When a diagram needs a key, and what belongs in it.
A signed-out visitor reaching a published report, including the branch where they do not have access.
An agent run from trigger to output, with the tool calls, the retry and the human checkpoint.
Raw signals converging into themes, and themes into an opportunity with evidence attached.
Five stages of an onboarding journey with touchpoints, feeling and the drop-off worth fixing.
The same task before and after a change, drawn so the saving is countable.
Frontstage, backstage and the support processes underneath, across one request.
Default and error states. The email field validates live.
A complete onboarding pattern built from Card, checklist and progress.
Input, suggestions, results and the no-results case, as one experience rather than four components.
The table filter control and its resulting chips.
Grouping, order, validation timing and what happens on submit.
A three step checkout covering details, review and success, composed from Stepper, Card and Button.
How a dashboard is laid out so it answers its question in the first screenful.
Empty as a moment in a flow rather than a component: what the page should do next.
Default and offline states.
The link may be out of date, or the report may have been moved.
A decision-focused overview for senior leaders monitoring performance, growth, targets, risk and opportunity.
A premium financial-health workspace connecting position, movement, utilization, spending, transactions and recommendations.
A live operational view of intelligent-agent work, progress, evidence, project status, tasks and sources.
A visual research-results workspace for evidence, findings, pain points, opportunities, priorities and journey insight.
A dense but legible view of operational health, services, utilization, performance, risk, locations, activity and recommendations.
An executive dashboard combining key metrics, trends and composition data using RST components and live charts.
Player plus library rail.
Conversation-first layout built on Chatbox.
List plus reading pane.
All nine half-arc variants rebuilt natively. No detached instances, no duplicate masters.
Kanban board in a full application shell.
Column-per-status layout at two densities.
The catalog itself is the specimen: persistent nav at 1440, a collapsed rail at 1024, and a dismissible drawer below 768. Resize the window to watch the left navigation change behaviour.
The accessibility rules that apply to everything, and how each one is checked.
How the system writes: labels, buttons, errors, numbers and dates.
All four themed collections switch together: semantic, material, component and visualization. Use the toggle in the header. Your choice is remembered, and if you have not made one the system preference applies.
Blue, orange, green, purple, cyan — separable at adjacent positions and lightened for dark surfaces.
The same dashboard, the same markup, rendered twice. Nothing about the composition changes between the two columns: only the set of variable values each column resolves against, which is what switching a variable mode does in the design library. Dark mode is not a black page with grey cards, and light mode is not a white page with grey cards — both keep the surface hierarchy the tokens describe.
How the two columns are themed. The catalog declares its Light values on :root and its Dark values on :root[data-theme="dark"]. Each selector also matches [data-theme-scope], so a single region can hold one mode while the rest of the page follows the reader's own choice. The values are shared, not copied, so the comparison cannot drift from the tokens it is comparing.
Putting components together into page sections without ending up three cards deep.
The Data hero: headline, supporting line and live figures. Fourteen further hero masters are P2 backlog pending consolidation.
Live cluster telemetry, summarised and scheduled — so the number in the deck is the number in production.
The Testimonial type of RST/Carousel.
“The catalog stopped being a slide and started being the source of truth.”
“Repairing at the master instead of the documentation cut our drift to nearly nothing.”
Grid and list layouts for people.
What this is, what it is not, and how to run it. Read the two columns below before copying anything.
The actual architecture, not an aspirational one.
Every public semantic token with its live Light and Dark value, read from the cascade rather than typed in. Copy the CSS reference straight into your stylesheet.
--surface-base, not --rst-surface-base--color-* primitive — primitives do not change between modes, so a component
bound to one cannot theme.
Why the alias exists. One blue, four layers, and only the last one is what the product sees.
--interactive-primary once and every primary button, link, focus accent and
selected state moves with it. Change --color-blue-60 and you have changed a swatch
that four unrelated things happened to share.
Three states, no flash of the wrong theme, and an explicit choice that beats the OS in both directions.
rst.themeThe real family, the real fallback stack, and the ramp as composite shorthands.
One icon language, four sizes, colour inherited from the surrounding ink.
The shell and the grids, with the measurements they are derived from.
Button, Text Input, Select, Checkbox, Radio, Toggle and Slider, each with a working example and its source.
Modal, Drawer, Tooltip and Popover — the behaviours a component variant cannot express.
Data Table, Progress, Carousel and Calendar, including the mobile table strategy.
The fourteen approved public surfaces from two component masters. The 312 Agent and 153 Research variants are not enumerated here, and should not be.
Grouped by the question, not the shape. Types with no production master are marked NOT YET AVAILABLE rather than stubbed.
Containers and materials, including the Phase A gradient token layer.
The Phase F documentation as pull-request checks, plus the four markup patterns worth memorising.
Real component properties, wired to real components. Change a property and the markup changes with it.
What shipped in each phase of the system, newest first.
Where the source lives and what can be taken from it.
Everyone in the Platform workspace will be able to open it. You can change visibility later.
This removes 412 connected reports and cannot be undone.
Social Feed
Feed posts in a two-column reading layout.
Repair pass 1 is complete — 70 of 84 rows now pass.