Data

Boxless tables, waves that emerge from the canvas, and numbers that do not lie.

Figures split by a line, bars of one colour

Performance has not a single card. It is two definitions: how one figure is split from the next, and what a comparison row is made of.

Until 2026-09-20 the figures already lived boxless on the canvas; what changes is the separator, now the system hairline, and the bar, now the navy.

A figure does not need a box to be a figure

The number goes large, with tabular-nums and tight tracking; above it, its label in mono; below it, the change in the success green. What separates one figure from the next is a vertical line at the hairline, not an outline and not a fill.

Five figures in boxes would be five boxes inside the island. The line does the same job with a tenth of the ink, and the figures line up on one grid instead of each floating in its own rectangle.

Conversations1,284+12%Meetings96+8%
two figures and the separator between them

The figure

Size
26–28px · weight 600
Tracking
-0.035em
Numerals
font-variant-numeric: tabular-nums
Label
mono 10px · muted text · uppercase
Change
the success green · never blue
Separator
vertical line at the hairline · 1px
Box
none

Comparison is a row with a one-colour bar

Name on the left, bar in the middle, figure on the right in tabular-nums. The bar is the action colour and nothing else: no colour scale, no second series on top, no legend to learn.

The bar track is the strong hairline, so an empty row still has a shape. Rows are split by the same minimal line as the table: one single way of separating things across the whole island.

Clinics Q3412
one row

The comparison row

Height
38–40px
Bar
6px · pill radius
Bar fill
the action colour, one only
Track
the strong hairline (12%)
Figure
on the right · tabular-nums
Legend
none — one series needs no legend
Between rows
the same minimal line as the table

Live canon · the principle

The dashboard is a canvas. Data emerges from the background — it does not live in boxes.

Nothing that follows has a container: the wave dissolves into the paper, the table is pure content with internal lines, and the figures stand on their own. And every chart draws itself on entering the view — exactly once: the line traces, the bars grow, the ring sweeps. If a piece of data needs a box to be read, the problem is the composition.

Conversations per week

agentwith a person
Conversaciones por semana
ago 04hoy

Median reply

4m 12s

−18% this week

Meetings booked

36

+9 this week

Handoffs to a person

11

steady

Win rate this quarter

Win rate 24%

24%

+3 pts vs trimestre anterior

radial · one value against its goal

Channel mix

WhatsApp
58%
Email
27%
Voz
15%
distribution · the parts of a whole

Activity by hour

001223
hourly pulse · intensity by opacity

Meetings vs the monthly goal

36goal 44
linear progress · the goal is a tick, not a second bar

Lead cadence

4/6step: proposal
stages · progress in discrete steps

Pipeline vs the previous quarter

$9.1Mbefore $7.4M
comparison · the previous period is the ghost bar

The table is pure content

No outer box, no background of its own: mono header, horizontal lines between rows and faint vertical ones between columns. The lines stand out, the box does not exist. Text on the left, tabular mono numbers on the right, and the row breathes with its second line.

Sales pipeline with identity, stage, value, activity and action
CompanyActions
Constructora AndesWhatsApp · Camila R.
Clínica AlamedaEmail · agent
Vinos del MauleWhatsApp · agent
Transportes Bío-BíoVoice · Matías P.

The row travels; its verbs do not

At a reduced width the content scrolls inside the table, never inside the page. The last column stays pinned to the right edge: the row may travel, but Open, Resume or Delete remain available.

Columns leave by priority. Secondary data disappears first; identity and actions survive. If width is still short, the wrapper takes the scroll and announces that it is keyboard scrollable.

Behaviour is part of the table too

The markup is a real table, with column headers and an accessible caption. Hover uses the subtle surface; selection uses the selected pair; actions stop the row click and are written as mono micro-labels, not as a row of boxes.

Search and filters live above on the same line recipe as the forms. An empty result is explained underneath that row, without swapping filters for an illustration or boxing the message in.

Every shape of data has its chart

The wave tells a trend. The spark gives the pulse next to a figure, and its form follows the number: an area that dissolves for a rate, columns for a count, a line with an open end for a flow under observation. The radial is one value against its goal; the distribution, the parts of a whole; the hourly rhythm, intensity by opacity. Large bars are left for categories — and they are never the first option.

Five series in a fixed order: ultramarine, terracotta, jade, honey, navy — always in their chart grade, livelier than the text grade: an area draws its contrast from its own label, so the fill may shine. Terracotta appears at most once per chart. Decorative axes, ornamental gradients and 3D do not exist.

Numbers that do not lie

Every amount is an integer in ISO 4217 minor units with its currency code — formatting is presentation, never storage. A KPI with no source is not shown: an empty cell beats an invented number.

Percentages carry one decimal at most; relative dates ("yesterday", "Mon") only within the last 72 hours, a short date after that.

Containers
none; the canvas is the background
Table markup
table · thead · tbody · caption
Narrow scroll
internal · contained overscroll
Actions
last column pinned · right
Priority
identity + verbs survive
Row
subtle hover · selected-surface
On entering
draws once · 800ms
Trend
wave with a fill that dissolves
Pulse
sparkline next to the figure
One value vs goal
radial or linear with a tick
Parts of a whole
stacked distribution
Numbers
mono · tabular · right
Series
blue · terracotta · jade · honey · navy