VERSEVA Design.

Data viz.

numbers on the marks · axes are a luxury series pair validator-proven, both modes deltas colored by meaning, never by sign React kit: npx verseva add viz

Doctrine

Synthesized from the portfolio's shipped viz (Spectre, the NEMIXO console, the UFITRA reference mockups) and held to the dataviz six checks.

RuleIt looks like
numbers on marksBars carry their count; hover is backup, never required
axes are a luxuryNo gridline forests; one hairline axis or a dashed reference line at most
magnitude = one hue--data-0..3, the accent ladder; intensity, never category
two series max--data-3 then --data-alt (+ dash); a third folds to small multiples
denominator first"14 of 31 decided", never a naked 45%
meaning colors deltasA falling 5K time renders green
identity never color-aloneWord + glyph ride along; sr data behind every chart
takeaway captionsLabel the meaning, not the axis
--data-3 · series one (the accent) --data-alt · series two, CVD-proven vs the accent in both modes

Stat tiles

Denominator-first: the number carries where it came from. The micro-bar shows share; the trend is judged, not just signed.

45%
Win rate · 14 of 31 decided
4.4ms
p95 after the sweep
↓ −1,709 ms
23:18
5K best · set yesterday
↓ −52 s

Sparklines

The vital-card anatomy: name, source, the big number, a judged delta, and the trend beneath. The last point gets the dot.

Quotes pricedDESK · LIVE
112 / wk↑ +8
Verify kill rateGATES · 30 D
6%↑ +2%

Line + area

Two series at most: the accent leads, --data-alt follows with a dash so identity survives print and CVD. The dashed reference line carries a positioned mono tag; hover gives a crosshair readout; the range control re-renders in place.

Priced Won
Won tracks priced with a one-week lag; the gap narrowed after rate card v18.

Bars

Numbers ride the marks, the goal is drawn on the chart, and today's bar takes the full-strength hue.

GOAL 130
96
Mon
118
Tue
74
Wed
128
Thu
142
Fri
Friday cleared the goal; Wednesday's dip was the machine-12 changeover.

Stacked segments

Each segment prints its own count when it fits; the stack total sits on top. A 2px surface gap separates fills.

31
1498
W1
38
151211
W2
47
161417
W3
Drafted Priced Won

Horizontal bars

Label, track, mono count: the axis-free distribution. The second hue only when the row IS the second series.

Bottling48
Labeling31
Kitting18
Sourcing11
Bottling carries the quarter; kitting demand doubled since v18.

Intensity + calendar

ONE activity language: the same four ladder steps drive the strip, the calendar, and the streak grid, so intensity reads identically everywhere. Today is ringed.

12-week strip
month · Less → More

Rings

The center reads the ACTIONABLE number, not the total. Track on --data-0, fill on the accent, rotated to twelve o'clock, round caps.

72 READY 1,059 KCAL LEFT 88% SOURCED

State strips

Seven-pixel truth: a process at a glance, triple-encoded (color + the words in the title and aria label). Never color-alone.

Q-2081 · Northlinegate 6 of 9 · verifying
Q-2080 · Harborgate 3 of 9 · sourcing blocked

Meaning + provenance

Deltas are judged, not signed: a falling run time is green. Every datum can carry its source; charts are never anonymous.

5K timewas 24:10↓ −52 s
Bench presswas 80 kg↑ +4 kg
Verify kill ratewas 4%↑ +2%
DESK ERP IMPORT WEARABLE

Anti-patterns

If a chart matches one of these, it is wrong.

NeverA dual-axis chart. Two measures of different scale get two charts or an index.
NeverA gridline forest. Numbers on the marks; one reference line at most.
NeverA rainbow. Magnitude is one hue; a third series folds to small multiples.
NeverColor-alone identity. A word or glyph always rides along.
NeverA naked percentage. Carry the denominator: "14 of 31 decided".
NeverAn axis caption as the takeaway. Label the meaning.