"Editorial minimal" KPI indicator. Magazine-cover restraint — six KPIs in a 2×3 grid, hairline rules between cells, light-weight numerals, no charts, no pills, no decorations. The whole design's expressive energy goes into one thing: a generous, low-weight number that owns the cell. The label is a tiny uppercase mono caption above it; the delta and target sit beneath as a small meta row. Built for executive dashboards / weekly review pages where the operator wants to see "how are we doing" at a glance and read the supporting context only on hover. Renders as a table card (zero card-body padding, dividers go edge-to-edge to the card border).

Key Performance Indicators

LIVE
Completion
Rate
86.9%
+3.3% tgt90.0%
Monthly
Revenue
$871K
+15.8% tgt$900K
Server
Temp
25.0°C
+1.9% tgt25.0°C
Server
Capacity
86.8%
+22.2% tgt80.0%
Error
Rate
0.28%
-32.6% tgt0.50%
Tokyo
Office
¥12.1M
+8.5% tgt¥13.0M

Performance

LIVE
Completion
Rate
86.9%
+3.3% tgt90.0%
Error Rate
0.28%
-32.6% tgt0.50%
Capacity
86.8%
+22.2% tgt80.0%
Latency
142ms
+8.0% tgt120ms

Revenue

LIVE
MRR
$871K
+15.8% tgt$900K
Bookings
2.4M
+18.0% tgt€2.6M
Convert
5.7%
+1.2% tgt7.0%
CAC
$312
-4.5% tgt$300

Customer

LIVE
NPS
62
+4.0 tgt65
CSAT
4.7
±0.0 tgt4.8
DAU
42.7k
+6.2% tgt45k
Churn
3.1%
+0.4% tgt2.5%

Top line

LIVE
Revenue
$871K
+15.8% tgt$900K
Convert
5.7%
+1.2% tgt7.0%

Operations

LIVE
Capacity
86.8%
+22.2% tgt80.0%
Errors
0.28%
-32.6% tgt0.50%
Latency
142ms
+8.0% tgt120ms
Uptime
99.97%
±0.00 tgt99.95%
Throughput
8.4k/s
+11.2% tgt9k/s
Memory
62.4%
+0.6% tgt70%

Customer

LIVE
NPS
62
+4.0 tgt65
DAU
42.7k
+6.2% tgt45k

Usage Guide

When to use

Executive dashboards / weekly review pages. The design's identity is restraint — one big light-weight number per tile, hairline rules, generous space, no chart chrome. Best when the operator wants "how are we doing" at a glance and reads the supporting context only on hover. If you need sparklines, status pills, or trend indication directly in the tile, pick a different showcase.

Hairline rules

Dividers between cells are painted by gap: 1px on .pa-kpi-edit__grid over a background: var(--pa-border-color); each tile paints --pa-card-bg over its own area. Only the gap shows through, giving single-pixel hairlines on every interior boundary regardless of column count. The card's outer border supplies the perimeter — render the card with .pa-kpi-edit__body at zero padding (table-card mode) so the rules go edge-to-edge.

Picking the column count

Default is cell-min-driven: grid-template-columns: repeat(auto-fit, minmax(var(--pa-kpi-edit-cell-min, 14rem), 1fr)). Cells stay at least --pa-kpi-edit-cell-min wide (override per instance to change density); the grid fits as many columns as the container allows. No @container queries — the responsive cascade is intrinsic to the grid template.

Two override families when the cell-min default isn't enough:

  • pa-kpi-edit__grid--2col — forces exactly 2 columns regardless of cell-min or container width. Use for "always a 2×N grid" placements.
  • pa-kpi-edit__grid--max-2 / --max-3 / --max-4 / --max-5 / --max-6 — caps the column count. Behaves like the default below the threshold (collapses on narrow widths), then stops growing past N on wide widths. Pick the cap to match your typical item count so rows pack cleanly — with 6 items and --max-3 you get 3+3; without a cap you can land on 4+2 with a gray void filling row 2 (the gap-background showing through tracks that have items in row 1 but not in row 2).

Authoring contract

  • Pick the column behaviour: cell-min default (best for variable item counts), --max-N ceiling (best when item count divides cleanly into N), or --2col (forced 2-col).
  • Drop tiles in reading order — CSS Grid auto-flow handles row/column placement.
  • Each tile carries its own .pa-kpi-detail popover; the script moves it to <body> on init and anchors it to the cursor on hover.
  • Use .pa-kpi-edit__delta--{positive | negative | neutral | up-strong | down-strong} on the delta to colour-code sentiment from the shared --kpi-* token surface.

Light-weight typography

The headline value uses the body sans at font-weight: 200, not mono — mono fonts rarely ship a true thin weight, and the design's identity is the editorial thin numeral. Tabular numerals are preserved via font-variant-numeric: tabular-nums so column-aligned values still line up. Size is container-relative via clamp(3.2rem, 22cqi, 5.6rem); each tile is its own container-type: inline-size so cqi measures per-cell, not per-grid — typography tracks each cell's actual width as the grid packs more columns into a wider container.

Hover detail popover

Cursor-anchored via Floating UI's computePosition + a virtual reference element built from e.clientX/clientY. position: fixed + strategy: 'fixed' because cursor coords are viewport-relative; pointer-events: none so the cursor passes through to the tile (no oscillation). Each .pa-kpi-detail is moved to <body> on init to escape ancestor overflow: hidden.


CSS Classes Reference

Card structure

  • pa-kpi-edit — page-namespace class on .pa-card. Optional anchor for theme-scoped overrides.
  • pa-kpi-header — flex header with title + LIVE indicator.
  • pa-kpi-live — LIVE pill (mono caps + animated dot).
  • pa-kpi-live__dot — pulsing dot inside the LIVE pill.
  • pa-kpi-edit__body — applies padding: 0 to .pa-card__body so dividers go edge-to-edge.
  • pa-kpi-footer — flex footer caption + "Hover any KPI for detail" hint.

Grid + tiles

  • pa-kpi-edit__grid — grid container. Default grid-template-columns: repeat(auto-fit, minmax(var(--pa-kpi-edit-cell-min, 14rem), 1fr)). gap: 1px over --pa-border-color background paints the hairlines.
  • pa-kpi-edit__grid--2col — forces exactly 2 columns regardless of width.
  • pa-kpi-edit__grid--max-2 / --max-3 / --max-4 / --max-5 / --max-6 — caps the column count at N. Still collapses below the cell-min × N threshold; just won't exceed N on wide widths. Uses minmax(max(cell-min, calc((100% − gap × (N−1)) / N)), 1fr) so cell-min wins on narrow widths and the calc wins on wide widths.
  • pa-kpi-edit__tile — single KPI cell. 2.4rem 2rem padding, --pa-card-bg over the grid background. container-type: inline-size so the value's cqi font-size measures per-cell.

Tile content

  • pa-kpi-edit__label — uppercase mono caption (50% contrast, allowed to wrap).
  • pa-kpi-edit__value — headline number row (body sans, font-weight: 200, clamp(3.2rem, 22cqi, 5.6rem); cqi resolves per-tile).
  • pa-kpi-edit__num — numeric span inside __value (tabular nums).
  • pa-kpi-edit__unit — currency / percent / unit span (40% size, dim).
  • pa-kpi-edit__meta — flex row carrying delta + target.
  • pa-kpi-edit__delta — coloured delta number.
  • pa-kpi-edit__target — dim "tgt {value}" pair; em inside is the literal "tgt" prefix.

Delta sentiment modifiers

  • pa-kpi-edit__delta--positive — ordinary positive movement.
  • pa-kpi-edit__delta--negative — ordinary negative movement.
  • pa-kpi-edit__delta--neutral — no meaningful change (±0.0).
  • pa-kpi-edit__delta--up-strong — outlier positive (deeper green).
  • pa-kpi-edit__delta--down-strong — outlier negative (deeper red).

Hover detail popover

  • pa-kpi-detail — popover root (moved to <body> on init; position: fixed, hidden until data-show).
  • pa-kpi-detail__title — uppercase mono header inside the popover.
  • pa-kpi-detail .pos / .neg / .warn — sentiment-coloured <dd> text inside the detail's <dl>.

Showcase-scoped CSS variables

  • --pa-kpi-edit-cell-min (default 14rem) — minimum cell width that drives the auto-fit grid. Smaller → more columns at the same container width; larger → fewer columns. Override per instance: <div class="pa-kpi-edit__grid" style="--pa-kpi-edit-cell-min: 18rem">.

Framework tokens used by this showcase

  • --pa-very-positive / --pa-positive — green sentiment scale.
  • --pa-neutral — grey for "no meaningful change".
  • --pa-negative / --pa-very-negative — red sentiment scale.
  • --pa-warning — orange "off-target / approaching limit" signal.
  • --pa-detail-bg / --pa-detail-text / --pa-detail-row-label / --pa-detail-title / --pa-detail-shadow — popover chrome (Bloomberg-dark by default; override for theme-aware popovers).
Type / for commands, : to search a category, or just start typing

Settings

Body text size. All elements scale proportionally.
👤

John Doe

Administrator
  • 📊 Dashboard
  • 📝 Forms
  • 📋 Tables
  • 📊 Data Grid