/sleep-card-lab
Sleep Card
Hover any column · tooltip follows cursor · three variants
What's showing in the Octa sleep cell right now
The exact sleep cell the Octa dashboard renders — N2SleepCell from @iudofia2026/n2/cards, fed here by a representative 7-night fixture (OCTA_SLEEP_FIXTURE). Per-night columns stack the hypnogram stages (light · deep · rem · awake); the day-label x-axis now MATCHES the food columns — 9px Fragment Mono, “Today” on the last column, selected 0.85 / today 0.5 / else 0.25. Above the columns sit the prior-load / HRV training rings; hover any column for the sleep tooltip; the legend / stage bar caps the cell. Hover the three top stats (Score · Duration · HRV) for sparkline tooltips, and click a column to pin that day (everything rebinds + tweens). Below 260px it auto-switches to a 3-day window.
Sleep
7-day · May 9–15Score band < 80 / < 60 · HRV band z > 1 / |z| ≤ 1 / z < -1 / z < -2 · Fixture: 7 nights inc. one load-only (no sleep) + one fully-missing night · package fallback: N2_SLEEP_FALLBACK_DATA
The sleep readouts — open, for /inspect & edit
The per-column sleep tooltip (stage minutes + % · Asleep total · YESTERDAY prior-load block) is internal to N2SleepStacksChart and is NOT exported as a standalone symbol — hover a column in the live cell above to see it. The two pieces n2 DOES export are shown open below: the N2HrvTrainingRing that sits above each column (center dot = HRV z-score, the lone chromatic element; outer arcs = prior-day training load, brightness-stepped N2 structural palette) and the N2SleepLegendBar stage bar that caps the cell (hover a stage label for its vs-baseline delta tooltip).
Current
as shipped in octa/desktopFull data · sleep + HRV + load
No sleep · load only
Sleep · amber HRV · mixed load
Stage legend · Deep (above lifetime)
Stage legend · REM (below lifetime)
HRV training ring · above each sleep column
Center dot = HRV z-score signal (sole chromatic element, colorblind-safe).
Outer arcs = prior-day training load, brightness-stepped N2 structural palette.
no load
bike 20mi
mixed load
lift only
Proposed
Jobs/Ive · Sketch A refined · debate 2026-05-15Stage label + delta in header · tonight hero 20px · two baselines one dim line, no labels
DEEP
REM
LIGHT
AWAKE
Full breakdown — stage rows with minutes + %, total footer
Sleep · 7-day · May 8–14
All variants — static preview
Default
Compact
Minimal
No data
Stage legend tooltips
Hover any label — tonight vs 7-day avg vs lifetime avg
Explorations
Jobs/Ive · 3 rounds · 7 sketches · May 15 2026G is the winner. Blue outline marks it.
A — Text only
Prior winner. No visual.
B — Donut side
Rejected: wrong frame, too wide (192px).
C — Donut centered
Rejected: 64px mass competes with number.
D — Invisible bar
Rejected: other stages #1f1f1f — invisible.
E — 4px arch bar
Strong. Gaps add height. Narrowly lost to G.
F — 2px divider
Rejected: ambiguous — divider or chart?
G — WINNER — 3px bar flush
3px, no gaps, zero imports. Answers AWAKE edge case.