lab · settled

Which surface is the app floor?

Real product screens (a dashboard, a kanban board, settings, a help article, an inbox, menus and dialogs) painted on a peak, base and ground floor, with each role's contrast against the floor measured live, to decide which terrain step an app should stand on.

frameworksastro
Settledpanelcardnavigationinputbadgebuttonavatarprogress
scenarioThree floors, measured

The same small app on each candidate floor. The ladder marks where the floor sits: what is left above it is the room for cards and raised tiers, what is left below is the room for wells, columns and selected rows. Read each frame's legend: card contrast against the floor, whether the well actually sinks (↓) or is forced up (↑), and where a ghost row's hover and current fills land (they only fail when they read =).

peakhillbasevalleyground
0 steps up for cards · 4 below for wells
peakhillbasevalleyground
2 steps up for cards · 2 below for wells
peakhillbasevalleyground
4 steps up for cards · 0 below for wells
floor = peakcard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
floor = basecard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
floor = groundcard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
scenarioAdmin dashboard

A store back office: sidebar chrome merged into the floor, KPI cards and an orders card above it. Switch floors. On peak the cards only exist through their muted border. Hover the sidebar nav and watch the current row. Navigation's rows are transparent, so their states step off the floor (the frame publishes it with data-surface-floor). On base, hover lifts to peak and the current row sinks to ground (1.05:1 each, in opposite directions). On peak they sink to base / valley as before; on ground there is no room below, so both rise. Before the fix every floor got peak's steps: on base, hover painted the floor itself (1.00:1).

floor = basecard…well…hover…current…

Orders

Last 30 days · all channels
Revenue$48,210+12.4%
Orders1,284+3.1%
Refunds38+9
Avg. basket$37.55−0.8%

Latest orders

5 of 1,284

#4821Ana PradoAna Prado$318.00
#4820Kenji MoriKenji Mori$92.40
#4819Lola BrandtLola Brandt$1,204.00
#4818Omar HaddadOmar Haddad$57.10
#4817Sofia ReisSofia Reis$212.75

Fulfilment

Today

Picked
82%
Packed
64%
Shipped
41%
scenarioKanban board

Columns are wells cut into the floor and the task cards sit on top of them (interactive: hover them). This is the case that needs room BELOW the floor. Columns go two steps down: on base they sink to ground and the cards rise to peak — three distinct levels. On ground nothing is lower, so the column is forced up to valley (↑): it reads as a raised tray, and the cards on it are only a tint apart from it. On peak the column sinks to base but the cards are back on the floor's colour. (One step down was tried first: valley on base is 1.02:1 and vanishes in dark mode.)

floor = basecard…well…hover…current…

Sprint 42

Marta SilvaDiego AlvesHana Sato
Backlog3
Audit the onboarding emails
Growth
Draft the pricing FAQ
Docs
Spike: offline mode for the POS
R&D
In progress2
Rebuild the invoice PDF template
Billing
Rotate the staging keys
Security
Done1
Ship SSO for the enterprise tier
Auth
scenarioSettings

A form-heavy page: a filter input and the page heading straight on the floor, then cards of fields. Inputs keep their own default fill in every take. Watch the filter input on the floor (does it read as a field without a card around it?) and the fields inside the cards (identical in every take — they only ever see peak).

floor = basecard…well…hover…current…

Workspace settings

Northwind · Business plan

Profile

Shown on invoices and emails

Receipts go here.

Last updated Sep 12

Notifications

Choose what reaches your inbox

Weekly revenue digest On
Refund requests On
Product updates Off
scenarioLong-form document

Reading straight on the floor: a help-centre article with a code block cut into the page and a tip callout. There are no cards to separate, so the floor IS the reading surface. Compare body-text comfort and how the code well and the callout hold up on each floor. This is the app type that argues for peak, but the rule is a peak SHEET on a base page (as these docs now do), not a peak page.

floor = peakcard…well…hover…current…
Help centre · Payments

Issuing a partial refund

A partial refund returns part of an order's total to the customer while the order stays open. Use it when a single line item is damaged, a shipping fee was charged twice, or you agreed on a goodwill credit.

From the API

Send the amount in the order's currency, in minor units. The refund is queued and settles with the next payout.

POST /v2/orders/4821/refunds
{
  "amount": 4500,
  "reason": "damaged_item",
  "notify_customer": true
}
Refunds over the original total are rejected. To give more back, issue store credit instead.

The customer sees the refund on their statement within five to ten business days, depending on their bank.

scenarioInbox, two panes

The message list sits straight on the floor as interactive transparent Panels, the first one active; the open thread is a peak card. Hover the rows and compare the active row on each floor. The rows step off the floor: on base, hover rises to peak and the active row sinks to ground; inside the peak thread card the same Panel would sink to base / valley. Before the fix they always used peak's steps, and hover vanished on base.

floor = basecard…well…hover…current…
Inbox 2 new
Marta Silva

Q4 vendor contracts

Marta Silva · 09:42

Hi team — attached are the redlines from legal on the three vendor renewals. Two clauses need a decision before Friday: the auto-renewal window on the logistics contract and the liability cap on the payments one.

vendor-redlines-q4.pdf2.4 MB
scenarioFloating layers over the floor

Elevation comes from the shadow, so a menu or dialog is peak + shadow on every floor. Left: an open menu over the page. Right of it: a dialog over a ground-tinted scrim. The higher the floor, the more the menu depends on its shadow alone; check whether peak-on-peak still reads as a layer.

floor = peakcard…well…hover…current…
DuplicateMove to…Archive
floor = basecard…well…hover…current…
DuplicateMove to…Archive
floor = groundcard…well…hover…current…
DuplicateMove to…Archive
floor = peakcard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
Refund order #4821?$318.00 goes back to Ana Prado.
floor = basecard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
Refund order #4821?$318.00 goes back to Ana Prado.
floor = groundcard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
Refund order #4821?$318.00 goes back to Ana Prado.
scenarioLight and dark

The same three floors pinned to light (top) and dark (bottom), whatever the page is in. In dark mode down the ramp is still darker (ground = shade 50), so the floor/card relation is the same shape: check that the readouts agree in both modes and that cards on a base floor don't go muddy in dark.

light · floor = peakcard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
light · floor = basecard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
light · floor = groundcard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
dark · floor = peakcard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
dark · floor = basecard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
dark · floor = groundcard…well…hover…current…
Northwind SearchOverviewOrdersCustomersReports
Revenue
$48.2k
Open orders
126

Latest orders

#4821Ana Prado$318.00
#4820Kenji Mori$92.40
#4819Lola Brandt$1,204.00
scenarioFindings
  1. Default floor: base. It is the only floor with room both ways: cards rise two steps (1.05:1 light, 1.06:1 dark — the same step a peak page uses for its wells), and wells, columns and selected rows sink two steps (1.05:1 / 1.04:1). Card-composed apps (02 dashboard, 03 kanban, 04 settings, 06 inbox) all read with three distinct levels.
  2. Reading-first content: a peak sheet, not a peak page. With no cards to separate (05 article, editors, docs pages), the text wants the top step: put it on one peak panel standing on the base floor. A peak page fails as soon as cards appear on it: they are 1.00:1 against it and exist only through their border.
  3. Ground is chrome, not a floor. It gives the strongest card separation (1.09:1 / 1.10:1) but nothing below it, so every recessed role is forced up (↑): kanban columns become raised trays. Keep it for window chrome and the deepest wells around a base workspace.
  4. Light and dark agree. Down the ramp is darker in both modes and the ratios differ by ≤0.015 (08), so no floor wins in one mode and loses in the other.
  5. Fixed: ghost states follow the floor. Panel's transparent rows (06) and Navigation's rows (02) used to assume a peak parent: on base, hover was 1.00:1 and current 1.02:1. Every solid Panel now publishes its step (--panel-floor-*), body publishes the page's, and a hand-painted floor declares data-surface-floor. On base, hover lifts to peak and current sinks to ground (1.05:1 / 1.04:1); inside cards nothing changed.
  6. Shipped. The preset paints body on base, these docs put their prose on a peak sheet with the rails declaring their valley floor, and Surfaces & Elevation documents the rule under "The page floor".