Data

Bar and split

One share of a whole, or two shares side by side: the smallest data pieces in the readout.

Concept · live ReactSource file: tokens.jsonReact component: Bar, Split

Try it

6 of 10
Said it
Tone
Theme
<Bar value={6} of={10} />

When to use

  • Bar: one share of a whole, with the count written beside it: “6 of 10”.
  • Split: two positions, side by side, with both counts named.
Don’t use it
  • On its own, without the number. The bar shows the shape; the text is the value.
  • More than two sides in a Split. Three positions are a list.

Sizes

Three heights: 6 inside dense lists, 8 by default, 10 on the phone and the stage.

sm · 6
md · 8
lg · 10
split · md

Tones

Cobalt by default. Honey only for the most shared theme or the live item: the room’s voice, spent sparingly.

live
common

Accessibility

  • Both are hidden from screen readers. The count beside them is the value, so nothing is lost.
  • A Split’s sides differ in lightness as well as hue, and each fill holds 3:1 against its track.

Props

PropTypeDefaultDescription
Bar · value / ofnumber—The share: value of of. Clamped to the whole.
Bar · tone'common' | 'live''common'Cobalt, or honey for the one that matters most.
Split · a / bnumber—The two sides.
size'sm' | 'md' | 'lg''md'6, 8 or 10px.
shownbooleantrueFalse draws it empty, so it can fill on first view.

Tokens

TokenValueWhere it lands
--hm-chart-common#2d49c9 / #6489feTheme bars in a readout: the hero cobalt.
--hm-live#f2b106 / #ffc550Alias of accent. Anything that means the hive is listening right now: the record button, the live dot, the round timer while it runs.
--hm-chart-agree#2d49c9 / #6489feThe hero series as a fill or dot: cobalt, the strongest step in each theme.
--hm-chart-b#6489fe / #cad9feThe second series, or the other side of a split: a lighter cobalt on paper, a deeper one on ink.
--hm-voice-dot#d2d0da / #434851An empty seat. Quiet on purpose; the count beside it carries the number.

Quote

One short line in someone’s own words, cleaned of anything that points to them.

Concept · live ReactSource file: tokens.jsonReact component: Quote

Example

Half our trials never finish setup.light
We keep shipping features on top of bugs.dark

When to use

  • Under a theme or a lone idea: the room’s own words, as evidence for the claim above it.
Don’t use it
  • For anything Hivemind wrote. A quote is only ever what someone said.
  • In a room under four voices, or when only one person could have said it.

Content

  • Under twenty words. Cleaned of names, roles and verbal tics; shown to the speaker before they send.
  • No quote marks in the copy: the component adds them.

Accessibility

  • A real <q> element, so it is read as a quotation and the marks come from the browser.
  • Text is text-muted, 6.7:1 on paper; the cobalt edge is decoration.

Props

PropTypeDefaultDescription
childrenReactNode—The line, without quote marks.
classNamestring'hm-t-body-sm'A type style: body-sm in lists, stage-meta on the shared screen.

Tokens

TokenValueWhere it lands
--hm-text-muted#5b5869 / #9b9fa5Secondary text: descriptions, helper text, metadata. Reads on every ground including surface-hover.
--hm-chart-b#6489fe / #cad9feThe second series, or the other side of a split: a lighter cobalt on paper, a deeper one on ink.

Stat tile

One headline count on the console, with an optional sparkline and a line of context.

Concept · live ReactSource file: tokens.jsonReact component: StatTile, Sparkline

Example

Hives run
48
across 5 teams
Median to readout
87s
question to readout
Lone signals
61
ideas raised by one voice
Sample data.

When to use

  • For a headline count at the top of Insights. Three is usually right; five is the most a row holds.
  • Counts, not rates, unless the figure covers at least 20 voices.
  • The sparkline is cobalt, like every series on the console.
Don’t use it
  • Honey in a tile. Nothing on the console is live.
  • A tile for a number nobody acts on. The tile that matters most, voices added, should not sit among four that don’t.

Accessibility

  • Read in order: label, value, then the line of context, “Hives run, 48, across 5 teams”.
  • The sparkline and the delta arrow are hidden from screen readers. The delta’s text says the direction, so the arrow is never the only signal.
  • The tile is not interactive. If it opens a view, the whole tile becomes one link named by its label.

Props

PropTypeDefaultDescription
labelstring—Sentence case, no colon.
valuestring—Already formatted: 1,284 or 87s.
substring—One line of context.
sparknumber[]—Optional series; the last point is marked.
delta{ text; dir: 'up' | 'down' | 'flat' }—Change against the last period, in words, with an arrow.

Tokens

TokenValueWhere it lands
--hm-surface#ffffff / #1c2129Cards and panels. Lifted from bg by shadow-card, not by a heavy border.
--hm-border#e6e5eb / #2d323bHairlines between rows and inside cards. Decorative only.
--hm-chart-agree#2d49c9 / #6489feThe hero series as a fill or dot: cobalt, the strongest step in each theme.
--hm-chart-agree-line#1c2dad / #cad9feThe hero series drawn as a line.
--hm-text#141318 / #ebedefPrimary text. Light: graphite #141318 on paper, softer than black on white.
--hm-text-muted#5b5869 / #9b9fa5Secondary text: descriptions, helper text, metadata. Reads on every ground including surface-hover.

Agreement trend

A weekly line of agreement across hives: the console’s one highlighted series.

Concept · live ReactSource file: tokens.jsonReact component: AgreementTrend

Example

Hover for the week. Weeks under 20 voices leave a gap instead of a rate.

Strong 60%+0255075100n/a20 Jul3 Aug17 Aug31 Aug14 Sept28 Sept69%
Sample data, twelve weeks.

When to use

  • To show whether teams are converging over time, across hives.
Don’t use it
  • For one hive. Show its readout instead.
  • Per team below 20 voices a week.

Accessibility

  • The chart is one image named with its latest value: “Agreement by week; latest”, then the figure.
  • A gap is drawn as a gap and read as “no data”, never as zero.
  • Inside a ChartCard it gets the table view: the same weeks as rows, which is what a screen reader should use.

Rules

  • Agreement is the share of voices in each round’s top theme, summed across the week.
  • A 2px chart-agree line over a chart-agree-wash area, on 1px chart-grid lines.
  • Label only the last point. One series, so no legend box: the title names it.
  • Pair it with a table view of the same numbers.

Props

PropTypeDefaultDescription
data{ label: string; value: number | null; voices: number }[]—One point per week. null below the rate threshold.
heightnumber220Plot height in px.

Tokens

TokenValueWhere it lands
--hm-chart-agree#2d49c9 / #6489feThe hero series as a fill or dot: cobalt, the strongest step in each theme.
--hm-chart-agree-wash#e5edff / #040939Area fill under the hero line.
--hm-chart-grid#e6e5eb / #2d323bConsole charts: 1px solid gridlines and axis rules. Recessive by design.
--hm-border-control#7c798a / #7c8088Outlines of inputs and secondary controls. Holds 3:1 on bg and surface.
--hm-text-muted#5b5869 / #9b9fa5Secondary text: descriptions, helper text, metadata. Reads on every ground including surface-hover.

Charts

Columns, ranked bars, splits and a heatmap, drawn in ink and greys with one shared mark spec.

Concept · live ReactSource file: tokens.jsonReact component: ColumnChart, HBarList, SplitDiverging, ActivityHeatmap, ChartCard

When to use

  • Columns for a count over time. Ranked bars for which themes recur. Diverging bars for a split. The heatmap for when rounds happen.
  • One chart per question, titled with the question it answers.
Don’t use it
  • Pie and donut charts: shares are easier to compare on one line.
  • A second colour where lightness would do.

Columns

A count per period. Bars at most 24px, rounded at the data end, square at the baseline. Only the latest value is labelled.

05010020 Jul3 Aug17 Aug31 Aug14 Sept28 Sept

Ranked bars

Themes that recur, counted in hives rather than voices, so one loud hive can’t dominate.

Scope keeps growing mid-sprint17 hives
Onboarding loses people at setup17 hives
Too many meetings14 hives
Fix what’s broken before building more14 hives
Unclear priorities from leadership10 hives

Splits

One side cobalt, the other its lighter step. With a legend and direct labels, so colour is never the only key.

First optionSecond option
Ship the new onboarding?11Ship, fix as we go14Hold until it’s solidCut the mobile app from v1?11Cut it9Keep itMove standup to async?11Go async9Keep it live

Heatmap

Magnitude across a grid, on the one-gray heat-0 to heat-4 ramp. Never honey: a busy hour isn't a live one.

FewerMore
MonTueWedThuFri13 Jul3 Aug24 Aug14 Sept

Mark spec

  • Lines 2px. End dots at least 8px, with a 2px surface ring.
  • Gridlines 1px solid chart-grid. Axis text in text-muted.
  • Values and labels in text tokens, never in a series colour.
  • Every chart has a hover and focus tooltip and a table view.

Accessibility

  • Every chart is an image with a one-sentence description, passed as describe.
  • Each bar or point is a focus stop: Tab reaches it, and focus shows the same tooltip as hover.
  • In a ChartCard, a button switches the chart for a table of the same numbers. It is the screen-reader path and the precise one.
  • Series differ in lightness as well as hue, and splits carry direct labels, so no chart relies on colour alone (1.4.1).

Counts and rates

  • A round is always a count: “5 of 7 voices”.
  • A rate only for an aggregate of 20 voices or more.
Don’t use it
  • Any view, filter or export that breaks an answer down by person.
TokenValueWhere it lands
--hm-chart-ink#4163e4 / #6489feSingle-series bars and columns: mid cobalt.
--hm-chart-muted#a7a4b3 / #5f636bConsole charts: de-emphasised marks only — sparklines and secondary segments. Never text.
--hm-chart-grid#e6e5eb / #2d323bConsole charts: 1px solid gridlines and axis rules. Recessive by design.
--hm-heat-0#f4f7fe / #1c2129Heatmap, none.
--hm-heat-4#142380 / #a2bcffHeatmap, most.