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.
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.
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
Median reply
4m 12s
−18% this week
Meetings booked
36
+9 this week
Handoffs to a person
11
steady
Win rate this quarter
24%
+3 pts vs trimestre anterior
Channel mix
- 58%
- 27%
- Voz
- 15%
Activity by hour
Meetings vs the monthly goal
Lead cadence
Pipeline vs the previous quarter
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.
| Company | Stage | Value | Last | Actions |
|---|---|---|---|---|
| Constructora AndesWhatsApp · Camila R. | Proposal | $4.200.000 | 14:32 | |
| Clínica AlamedaEmail · agent | Meeting | $2.850.000 | yesterday | |
| Vinos del MauleWhatsApp · agent | Conversation | $1.190.000 | 12:05 | |
| Transportes Bío-BíoVoice · Matías P. | Person | $860.000 | Mon |
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