Skip to content
IMAGINE SURFACES

Design language · Exploration 01 of 01

Imagine Surfaces

Honed

A design language for the platform that runs a high-end stone business.

A honed slab is ground flat and finished matte. There is no gloss to hide behind, and the stone’s character is in plain view. Honed applies the same discipline to software. Quality comes from exact type, true alignment, and numbers you can trust at a glance. Ornament adds nothing to that.

Brand expression sits at the edges: the wordmark, customer documents, and the stone itself. The working surfaces stay quiet, so purchasing, yard, sales, and agent work can happen in them all day without fatigue.

Platform scope
Purchasing, supplier coordination, inventory, sales, quoting, orders, fulfillment
Used by
Customers · Suppliers · Imagine Surfaces team · AI agents with their own identities
Reference system
Carbon’s layer, density and token model, adapted. IBM Plex for operations.
This page
Static HTML with compiled Tailwind CSS. All records are fictional; interactions are illustrative.

Travertine

#F5F2EB

Slab white

#FFFFFF

Basalt

#1E1C19

Lapis

#2B4C9B

Bronze

#8A5536

Verde

#3A4433

The core palette, laid out like a board of hand samples. Travertine, slab white and basalt do almost all of the work. Lapis marks interaction. Bronze and verde are reserved for brand moments.

Guide surfaces

Explanatory sections use generous spacing: 17px prose and 96px between sections.

Application examples

Product UI sits inside framed windows at true operational density, with 14px text and 32–40px rows.

Annotations

Mono capitals like these label states and measurements. They are notes on the specimens, not product UI.

01 — Brand direction

Luxury through precision, not ornament

The public site already presents Imagine Surfaces as a curated, design-led stone house. The platform behind it has a different job: thousands of decisions a week about lots, holds, receipts and deliveries. Honed keeps the showroom’s composure and adds the rigor of an operations tool.

Concept brief

Name & central idea
Honed. Refinement by removal. As with a matte-finished stone, the interface’s quality is visible in its flatness, accuracy and restraint.
Attributes
Exacting · Material · Calm · Accountable
Emotional character
The composure of a well-run showroom. Nothing rushed, nothing shouting, and confident enough to leave space for the stone.
Typography & color
Marcellus, an inscriptional serif, for brand moments only. IBM Plex Sans and Mono for every operational surface. Warm mineral neutrals throughout, with lapis for interaction, and bronze and verde as rare brand accents.
Layout, density & components
Carbon-style layers on a warm canvas. 40/32 px rows, 36/28 px controls, 2 px “eased” corners, and hairline separation instead of cards or shadows.
Why it fits
It continues the verified public identity (tracked serif capitals, ivory, olive, copper) while giving staff, suppliers and agents a tool built for long, accurate work.
Main tradeoff / risk
Restraint can tip into austerity. Inside the application, the brand is almost invisible, so customer-facing surfaces, photography and the wordmark have to carry the warmth. If slab photography is weak, the product will feel generic. Marcellus has one weight and no italic, so serif hierarchy comes from size alone. Overused, its Roman capitals drift toward the spa and law-firm look. Keep it to the wordmark and short headings, and never let it reach data.

Brand attributes

  • Exacting

    Precision is the luxury. Prices are aligned to the cent and sizes stated to the inch.

    In the UI: tabular numerals, right-aligned figures, one unit system, and IDs in mono.

  • Material

    The stone carries the color. The interface frames it the way a gallery wall does.

    In the UI: warm neutral surfaces, real slab photography, and material names spelled in full.

  • Calm

    Nothing competes for attention unless a decision is needed.

    In the UI: color reserved for status and focus, one primary action per view, and no motion for its own sake.

  • Accountable

    Every change has an author, human or agent, and an authority behind it.

    In the UI: identity on every action, a manager on every agent, and policies named where they apply.

Visual principles

  1. 01

    Matte, not glossy

    No gradients, glass, metallic gold or marble backgrounds. Depth comes from tone steps and 1px hairlines. Shadows appear only on things that float: menus, drawers and dialogs.

  2. 02

    The stone is the color

    The UI palette stays neutral so slab photography and material names are the richest things on screen. Where no photo exists, a small labeled tone chip may stand in.

  3. 03

    True alignment

    Figures align on the decimal and labels on a shared left edge, with spacing on a 4px grid. Misalignment is treated as a defect, not a style choice.

  4. 04

    Every action has an author

    People are round and agents are square-cut. Every attributed action names its actor, and every agent names the person who manages it.

  5. 05

    Expressive at the edges

    Serif display type, verde and bronze appear on customer documents, the guide and the wordmark. Operational screens are typeset entirely in IBM Plex.

What is verified, and what is proposed

Verified from imaginesurfaces.com

Inspected in a browser on October 9, 2026 (home and all-products pages).

  • —Presents itself as “Curated premium surfaces” serving the Washington, DC metro, with a showroom in Landover, MD.
  • —Collections: marble, quartzite, dolomite, soapstone, granite and a porcelain line, plus a live full inventory.
  • —Inventory is listed by lot, with dimensions in inches, thickness in cm (2 cm / 3 cm), finish and slab count.
  • —Audiences include design professionals (trade login, sample requests) and homeowners.
  • —Visual identity: wordmark in widely tracked serif capitals, with Cormorant Garamond (light) and Work Sans in use. Warm ivory backgrounds (≈ #F8F4E9), near-black text, and olive (≈ #384131) and copper (≈ #9F6A4D) accents.

Proposed by this exploration

Design decisions, not facts about the company.

  • —Keep the tracked serif-capital wordmark, but set it in Marcellus, a flared serif modeled on Roman capitals cut in stone. It holds up at small sizes and on dark bars, where the site’s light Cormorant thins out.
  • —Replace Work Sans with IBM Plex Sans in the application, for tabular figures, a compact width and a matching mono.
  • —Derive Travertine, Verde and Bronze from the site’s colors, adjusted for text contrast. Add Lapis as the single interaction color.
  • —Every agent, permission, policy, workflow and data pattern on this page is a proposal for a platform that is not described publicly.

Typographic wordmark

Marcellus, all capitals, tracked +0.18em, never smaller than 15px. Keep clear space equal to the cap height on all sides. No logo project is in scope; this is a typesetting rule.

IMAGINE SURFACES

On travertine · primary

IMAGINE SURFACES

On basalt · app bar

IMAGINE SURFACES

Washington, DC metro

On verde · customer documents

Imagery and material texture

Photography is the brand’s richest asset and the interface should not compete with it. No photographs are embedded in this specimen. The frames below are placeholders that describe each shot.

FULL SLAB
124 × 74 in · edge to edge

Record image. Whole slab, square to the camera, under daylight-balanced light with a gray card. Shown on every slab and lot record.

DETAIL · 1:1
12 × 12 in crop with ruler

Detail image. Veining and finish at true scale, with a ruler in frame. Used for quality checks, claims and customer selection.

INSTALLED · CREDITED
designer’s project photo

Context image. Installed work, credited to the designer. Customer-facing surfaces only, never in operational screens.
  • Show true color. Never tint, filter or crop a slab photo to fit a layout.
  • Pair every slab image with its slab ID, lot and dimensions.
  • Never use stone texture as a page, card or button background, or behind text.
  • No stock marble imagery, and no generated or synthetic stone presented as inventory.

Voice and tone

Specific

Name the slab, the amount, the person and the date.

Plain

Use trade vocabulary with the trade and plain words with homeowners. No hype.

Accountable

Say who did it and under which rule, especially when an agent acted.

Composed

No exclamation marks, emoji or false urgency. Deadlines are stated, never dramatized.

Interface copy examples
MomentWriteAvoid
Empty searchNo slabs match “Viola 3 cm”. Try removing the thickness filter.Oops! Nothing here 😕
Agent needs inputIntake Reconciler needs a decision on L2083-02: crack reported through full thickness. Claim CLM-0912 ($1,890.00) needs approval under PUR-04.AI detected an anomaly ✨ Review now!
Customer holdYour hold on Calacatta Viola (L2080-04) ends Oct 12 at 9:08 AM ET. Reply to extend it.URGENT: your stone is about to be released!!!
ValidationHold must end by Oct 23, 2026, 14 days from today.Invalid date.
ButtonsApprove claim · Place hold · Record receipt · Pause agentSubmit · OK · Go · Let AI handle it
Agent resultRecorded 17 of 18 slabs as received. One slab is quarantined pending a decision.All done! I’m confident everything looks great.

Appropriate and inappropriate use

Do

L2051-04$5,479.92L2083-01$3,480.00L2085-01$1,874.42

Don’t

L2051-04$5,479.92L2083-01$3,480.00L2085-01$1,874.42
Money is set in Plex with tabular figures, right-aligned. The display serif’s proportional figures don’t align and read as decoration.

Do

Available On hold Quarantined

Don’t

L2051-04 L2051-05 L2083-02
Status always pairs an icon shape with a word. A colored dot alone fails for color-blind users and in grayscale print.

Do

Intake ReconcilerAgentManaged by Marisol Vega · Receiving

Don’t

✦ AI Assistant
Agents are colleagues with a name, a role and a manager. A sparkle badge says “magic” but doesn’t say which agent acted or who answers for it.

Do

IMAGINE SURFACES

Don’t

IMAGINE SURFACES

Set the wordmark in a solid color on a flat surface. Gold gradients and faux-marble grounds look like imitation, which is the opposite of a stone house.

02 — Typography

A serif for the name, Plex for the work

Two jobs, three families. Marcellus carries the brand’s voice in the wordmark and large headings. IBM Plex Sans and IBM Plex Mono carry every number, label and control, because operational type has to stay legible at 13px in hour eight.

Brand · display only

Aa Qq 3

Marcellus

Astigmatic. SIL OFL 1.1, served by Google Fonts. A flared, inscriptional serif drawn from Roman capitals cut in stone.

Weights
400 only. No italic; faux bold and italic are disabled.
Sizes
24px and up · wordmark caps from 15px
Fallback
"Palatino Linotype", Palatino, Georgia, serif
Never
Numbers in data, labels, buttons, long passages, or anything under 24px

Operational · everything else

Aa Qq 3

IBM Plex Sans

Mike Abbink with Bold Monday for IBM. SIL OFL 1.1. It is Carbon’s typeface: compact, with distinct glyphs (Il1, 0O) and tabular figures.

Weights
400, 400 italic, 500, 600
Sizes
12–28px in the app · 17px guide prose
Fallback
"Helvetica Neue", Arial, system-ui, sans-serif
Numbers
tabular-nums on every column, total and counter

Identifiers · machine voice

L20 0O

IBM Plex Mono

The Plex family’s monospace, SIL OFL 1.1. Used where a character-perfect reading matters, and for agent run states.

Weights
400, 500
Sizes
13px IDs · 11px caps (+0.06em) for states
Fallback
ui-monospace, Menlo, Consolas, monospace
Use for
Slab, lot, PO, claim IDs · rack locations · run states · code

Type scale

Sizes are in px at the default root (1rem = 16px), shown as size/line-height. Every line height falls on the 4px grid. Marcellus has a single weight, so brand headings step down by size only. Emphasis inside them is never bolded or slanted.

display-lg

Marcellus 400 · 72/72 · −0.01em

Cover only

Honed

display

Marcellus 400 · 48/52 · −0.01em

Guide sections · customer document titles

Ellery kitchen

display-sm

Marcellus 400 · 32/38 · 0

Customer page headings · material names in brand moments

Calacatta Macchia Vecchia

title-lg

Plex Sans 600 · 28/36 · −0.01em

Summary figures · large totals

$12,828.50

title

Plex Sans 600 · 20/28 · −0.005em

App page titles

Slabs

ui-lg

Plex Sans 600 / 400 · 16/24

Panel and drawer headings · customer body

Receiving exceptions

ui

Plex Sans 400 / 500 · 14/20

Body, cells, buttons (500), navigation (500)

Recorded 17 of 18 slabs as received. One slab is quarantined pending a decision.

caption

Plex Sans 500 / 600 · 12/16 · +0.01–0.02em

Labels (500), table headers (600), helper (400)

Hold until

code

Plex Mono 400 · 13/20

IDs · locations · codes

L2083-02 · PO-30418 · CLM-0912 · B-07-2

code-caps

Plex Mono 500 · 11/16 · +0.06em · uppercase

Agent run states · kind tags · annotations

Waiting for approvalAgent

In context: navigation, controls and dense data

Application example · type in use

Calacatta Macchia Vecchia

Marble · Honed · 3 cm · received Oct 9, 2026 on PO-30418

Shown on the pick list. 120 characters.

Slabs in lot 2051 (sample)
SlabLocationSize (in)Area (sq ft)StatusSlab price
L2051-04B-07-2124 × 7463.72Available$5,479.92
L2051-05B-07-2124 × 7463.72On hold$5,479.92
  • Navigation
    Plex Sans 500 · 14/20. Counts in 12px tabular.
  • Breadcrumb
    Plex Sans 400 · 12/16. Current record shown in mono.
  • Page title
    Plex Sans 600 · 20/28. Never the serif inside the app.
  • Buttons
    Plex Sans 500 · 14/20. Verb-first labels.
  • Labels / helper
    12/16 at 500 / 400. Labels sit above fields and persist.
  • Table header / cells
    12/16 at 600 / 13–14px at 400, sentence case, numbers right-aligned.

Numbers, units and identifiers

Plex figures are tabular, so columns align. Turn this on to see Marcellus’s proportional figures drift.

PO-30418 totals, alignment demonstration
LineArea (sq ft)Cost
1 · Bardiglio600.00$18,900.00
2 · Calacatta MV509.76$20,900.16
Total1,109.76$39,800.16

Formatting rules
KindRenderedRule
Currency$5,479.92 · −$1,890.00USD with 2 decimals in every operational view. Use a true minus sign and label credits as “Credit”. Right-aligned.
Quantity17 of 18 slabsWhole slabs only. Use “n of m” for progress. Units are spelled out, never “pcs”.
Area1,109.76 sq ft2 decimals, rounded from nominal dimensions. The unit goes in the column header; cells hold numbers only.
Dimensions124 × 74 in · 3 cmWidth × height in inches, with a true multiplication sign. Thickness in cm, as the trade lists it (1.2, 2, 3 cm).
Dates & timesOct 9, 2026 · 8:27 AM ETAbbreviated month, no ordinals, 12-hour time. Add “ET” whenever the reader may be outside the DC metro. ISO 8601 in exports and APIs.
IdentifiersL2083-02 · PO-30418 · CLM-0912Plex Mono. Never truncated or wrapped mid-ID. Slab = lot + two-digit sequence.
LocationsB-07-2 · Q-01Row-rack-level in mono. Q-bays are quarantine.
StatusIn transitSentence case, icon plus word, from a closed vocabulary per record type.

Expressive moments

Marcellus

  • Wordmark and app-bar lockup
  • Customer quote, order and portal headings
  • Project and collection names on customer documents
  • This guide’s section titles

Everyday operations

IBM Plex Sans + Mono

  • Every internal and supplier screen, including page titles
  • All numbers, everywhere, including customer documents
  • Forms, tables, navigation, buttons and notifications
  • Agent activity, run states and audit history

03 — Color and surfaces

Mineral neutrals, one working color

The palette is mostly travertine, slab white and basalt. Lapis is the only color that means “you can act here.” Status colors have plain names and are never borrowed for decoration. Bronze and verde appear only at brand edges and never carry meaning.

Brand and accent

Travertine

#F5F2EB

--surface-canvas

Page canvas, app background. Derived from the public site’s ivory.

Slab white

#FFFFFF

--surface-layer-1

Work surfaces: tables, forms, panels, drawers.

Basalt

#1E1C19

--text-primary · --action-primary

Text, primary buttons, app bar. A warm near-black, never pure #000.

Lapis

#2B4C9B

--interactive · --focus · --text-link

Links, focus, selection, checked controls. Also the info status hue, as in Carbon.

Bronze

#8A5536

--text-brand · --border-brand

Brand eyebrows and rules. Derived from the site’s copper and darkened for text contrast.

Verde

#3A4433

--surface-brand

Customer document headers and brand panels. From the site’s olive. Never used for status.

Surface layers

The layer model is adapted from Carbon: each level up is a distinct tone, and borders and fields follow the layer they sit on. Raised elevation (shadow) is reserved for things that float above the page.

--surface-canvas · page

--surface-layer-1 · panel, table, drawer

--surface-sunken · table header, read-only
Row on layer-1
Row hover · --p-travertine-50
Selected row · --surface-selected + 3px lapis

--surface-layer-2 · well, nested group

--surface-inverse · app bar, toast

--shadow-overlay · drawer, dialog, menu

Hover
--surface-hover: basalt at 4.5% over any layer
Active / pressed
--surface-active: basalt at 9%
Selected
--surface-selected plus a 3px lapis edge, so selection is never shown by tint alone
Focus
--focus: 2px lapis outline with a 2px offset, inset on fields. Lapis 300 on dark bars.
Divider
--border-subtle: basalt at 10%, between rows
Border
--border-default: basalt at 17%, for containers and table headers
Control edge
--border-strong: solid #858075, at least 3:1 on white and canvas (WCAG 1.4.11)

Text

Primary

#1E1C19

--text-primary

Body, titles, cell values

Secondary

#4A463F

--text-secondary

Labels, table headers, descriptions

Muted

#686259

--text-muted

Helper text, timestamps, units. Still AA on every layer.

Disabled

#A39D92

--text-disabled

Disabled controls only (exempt from contrast). Always paired with a reason nearby.

Status

Each status has a foreground, a tint and a border, and is always shown with an icon shape and a word. Brand accents never appear in this set.

Status colors
RoleForegroundTintIcon shapeBadgeUsed for
Success#1F6B3B#E7F2EACircle + checkAvailableAvailable, received, approved, done
Warning#7D4E00#FBF0D9Clock / triangleOn holdTime-bound commitments, partial states, needs attention
Error#B3261E#FCEAE7OctagonQuarantinedDamage, failures, blocked, invalid input
Info#2B4C9B#EEF2FACircle + i / truckIn transitIn progress, in transit, neutral notices
Neutral#4A463F#EFEBE2Lock / squareReserved SoldCommitted, closed, archived, draft

Info

Lot 2077 is in transit. ETA Oct 15, 2026.

Success

17 slabs recorded as received on PO-30418.

Warning

Hold on L2080-04 ends Oct 12, 9:08 AM ET.

Error

L2083-02 quarantined: crack through full thickness.

Foreground / background pairings, measured

These ratios are calculated in your browser from the live token values (WCAG 2.x relative luminance), so the table cannot drift from the stylesheet. Text needs 4.5:1 and UI boundaries need 3:1. Translucent tokens are composited over their background first.

Measured contrast ratios for key token pairings
SampleForegroundBackgroundUsed forRatioNeedsResult
Calculating…

Lapis = act

Links, focus, selection and checked controls. Info badges share the hue but always carry an icon and word.

Green, amber, red = state

Only for status. A decorative green panel is a bug, even if it looks good.

Bronze, verde = brand

Customer documents, the wordmark and this guide. Never inside tables, badges or alerts.

04 — Layout and spacing

Measured like a cut list

Everything sits on a 4px grid. The guide is deliberately spacious. The application uses the same scale at its tighter end: 8–16px inside components, 24px between regions, and no decorative whitespace.

Spacing scale

Tailwind’s default 0.25rem step, used as the token scale. Values outside it need a reason.

Spacing tokens
TokenpxVisualTypical use
14Icon to label, badge padding
28Between buttons, toolbar items, compact cells
312Comfortable cell padding, list gaps
416Field to field, mobile gutter, drawer padding
520Panel padding
624Between app regions, tablet gutter
832Group separation in forms and documents
1040Desktop gutter (guide), customer document margins
1664Guide sub-sections
2496Guide sections only, never in the app

Gutters, widths and the app frame

The app is full-bleed with fixed rails and a fluid work area. The guide caps at 1440px.

APP BAR · 48--appbar-height
SIDENAV208
WORK AREA · fluid, min 024gap
DRAWER368
App frame schematic: 48px app bar, 208px side navigation, fluid work area, 368px detail drawer.
Page gutter: mobile / tablet / desktop
16 / 24 / 40 px
Guide max width
1440 px
Reading measure (prose)
64 ch
Form column
max 448 px
Dialog
640 px max
Customer document
max 880 px, centered

Grid and alignment

  • —Guide: 12-column grid, 24–32px gaps. App: fixed rails plus fluid regions, with no column grid forced onto data.
  • —Text and labels share one left edge. Numbers, units and money align right on a shared decimal.
  • —Icons sit optically centered on the first text line, never vertically centered on a multi-line block.
  • —Description lists use a fixed label column (6–9rem) so values start on the same edge.
List priceper sq ft$58.00 Area120 × 72 in60.00 Slab pricelist$3,480.00 Costinternal Internal$1,890.00
Left edge for words · right edge for figures (lapis guides)

Comfortable and compact density

Density changes row height and cell padding, never the type size of data below 13px. Comfortable is the default. Compact suits people who live in a single table all day, and the choice persists per user.

Comfortable density sample
SlabMaterialArea (sq ft)Status
L2051-04Calacatta Macchia Vecchia63.72Available
L2080-04Calacatta Viola59.31On hold
L2083-02Bardiglio Nuvolato60.00Quarantined
Comfortable · Carbon “md”row —
Compact density sample
SlabMaterialArea (sq ft)Status
L2051-04Calacatta Macchia Vecchia63.72Available
L2080-04Calacatta Viola59.31On hold
L2083-02Bardiglio Nuvolato60.00Quarantined
Compact · Carbon “sm”row —

Control sizes

Two heights only. On touch screens, every target grows to 44px through an invisible hit area, so the visual size stays the same.

—
—
—
—
Chip 28—
Checkbox / radio
16 px (20 on touch)
Switch
36 × 20 px
Table row: comfortable / compact
40 / 32 px
Minimum pointer target (WCAG 2.5.8)
24 × 24 px
Touch target (coarse pointer)
44 × 44 px

Borders, radii, shadows, layers

0 · tables, app bar

2 eased · controls, badges

4 panel · panels, dialogs

round · people, switches

1px hairline

2px focus

3px selected edge

None · default

Raised · frames

Overlay · floating

  1. z 0 · page
  2. z 10 · sticky headers
  3. z 20 · menus
  4. z 30 · drawer
  5. z 40 · page header
  6. z 50 · dialog, toast

Responsive behavior

Desktop is the primary context. The application examples use container queries, so they adapt to their frame rather than the window. Resize the browser to watch the workspace in section 06 change.

Responsive behavior by width
WidthNavigationTablesRecord detailControls
Desktop
≥ 1280 px
Side navigation, 208pxPriority columns first (ID, material, status, owner). Sticky header and ID column. The rest scrolls inside the table.Drawer (368px) pushes the table once the app frame is at least 1200px wide (about a 1440px window). Below that, it overlays.Pointer sizes, 36/28px
Tablet
768–1279 px
Navigation behind a menu button in the app barSecondary columns (type, finish, supplier, rate) hide below a 960px table width. The rest scrolls inside the table region.Drawer overlays the table, with shadow44px targets on touch
Mobile
< 768 px
Menu button. Page title and primary action stay visible.Table scrolls horizontally in its own region. Filter chips scroll in one row. Yard tasks use the card layout (section 07).Full-height sheet over the work area16px field text to prevent zoom. 44px targets.

05 — Components and states

Every state, on the record

States are rendered statically with forced classes (.is-hover, .is-focus, .is-active) that mirror the live pseudo-classes, so nothing needs discovering. Every control below is also live: hover it, tab to it, press it.

Buttons

One primary (basalt) per view. Destructive actions use a quiet red outline, and become solid red only as the confirm action inside a dialog. Labels start with a verb.

Button variants by state
VariantDefaultHoverFocus-visibleActiveDisabledLoading
Primary
Secondary
Tertiary
Destructive
Icon
Compact 28
Used in toolbars, table rows and compact density.

Fields

Labels sit above the field and never disappear into placeholders. Units live inside the field as affixes. Number and currency inputs right-align their values.

Shown on quotes and pick lists.

Press / to focus search anywhere.

slabs

Whole slabs only.

$/ sq ft

USD, 2 decimals.

Yard loads from 7:00 AM ET.

As listed by the supplier.

Visible to the yard and purchasing.

Field states

Default

Hover

Focus-visible

Required + error

Use row-rack-level, like B-07-2.

Read-only

Set at receiving. Can’t be edited.

Disabled

Quarantined slabs can’t be held.

Compact 28

Loading value

Supplier lead time
Loading

Checkboxes, radio buttons and switches

These are native inputs, styled with CSS only. A switch acts immediately, so use it for settings with instant effect. Checkboxes are for selections that get submitted.

Checkbox

Required before accepting a claim.

Radio · disposition
Switch · immediate effect

Tabs, navigation, breadcrumbs, pagination

Tabs · use arrow keys

2 lines · 18 slabs · 1,109.76 sq ft · $39,800.16

Breadcrumbs

Pagination

Side navigation

Current page: white layer + 3px lapis edge. Second item: hover.

Badges, run states, filter chips, alerts and notifications

Business status · inventory vocabulary

Available On hold Reserved In transit Quarantined Sold

Business status · purchase orders

DraftSentPartially receivedReceivedClosed

Agent run state · execution, not business status

Working Waiting for input Waiting for approval Paused Idle Completed Failed

Mono capitals with outline only, so a run state can never be mistaken for a tinted business badge.

Filter chips · toggle buttons with aria-pressed

Alerts · inline, persistent

Approval needed

Claim CLM-0912 ($1,890.00) exceeds the $1,000 limit in policy PUR-04.

Notifications

Hold Keeper released 1 expired hold

L2048-02 is available again. Policy INV-02.

  • Intake Reconciler requested your approval on CLM-0912

    8:27 AM · Unread

  • Priya Raman mentioned you on Q-11872

    Yesterday, 4:12 PM

Identity, ownership and assignment

Shape tells kind at a glance: people are round, agents are square with one cut corner, teams are outlined squares. A word confirms it, because shape alone isn’t enough. Agents always show who manages them.

Avatar sizes by identity kind
Kind2024284056
Person
Agent
Team
External

Identity chips

Marisol Vega
Intake ReconcilerAgent
Quote DrafterAgenton behalf ofPriya Raman
PurchasingTeam
Nadia Ferris· Juniper & Gray InteriorsCustomer

Ownership block

Owner
Intake ReconcilerAgent
Managed by
Marisol Vega
Waiting on
Theo Brandtapproval
Authority
PUR-04 · claims over $1,000

Handoff

Intake ReconcilerAgentTheo Brandt

Handed off for approval at 8:27 AM. The agent resumes when Theo decides.

Collaboration

Owen, Intake Reconciler, Theo

Assignment picker · static specimen

Assign exception on L2083-02
  • People
  • Theo BrandtPurchasing manager
  • Marisol VegaOperations lead
  • Agents
  • Intake ReconcilerAgentcan draft & submit claims
  • Quote Drafterno claims permission
  • Delivery Schedulerpaused

Activity timeline

Each entry gives the actor, an observable verb, the record and the time. Agent entries also name the channel (API) and the authority they acted under. Entries never narrate an agent’s reasoning, only what it did, what it found, and what it needs.

  1. Owen Castillo checked in container TGHU 881204-4 at dock 2

    7:52 AM · Yard scanner

  2. Intake Reconciler Agent matched 18 of 18 slab labels to PO-30418

    8:21 AM · Receiving API · standing assignment from Marisol Vega

  3. Intake Reconciler Agent recorded 17 slabs as received and Available

    8:26 AM · within permissions · no approval required

  4. Intake Reconciler Agent requested approval from Theo Brandt

    8:27 AM · policy PUR-04

    Waiting for approval

Anatomy

Actor
Avatar + name, with “Agent” tag when applicable
Verb
Past tense, observable: recorded, matched, requested
Object
Record ID in mono, linked
Meta
Time · channel · authority (assignment or policy)
State
Run state only when the actor is waiting or failed

Dialog and detail drawer

Dialog · native <dialog>, modal

For decisions that interrupt: confirm, approve, release. Focus moves into the dialog and returns to the trigger. Escape cancels.

Drawer · non-modal side panel

For inspecting a record while keeping the list in view. It pushes the table on wide frames and overlays it on narrow ones. Escape closes it.

Open L2083-02 in the workspace

L2051-05 · Calacatta Macchia Vecchia

Release this hold?

Juniper & Gray Interiors will lose their hold, which runs until Oct 16, 2026. The slab becomes Available to every customer straight away.

Priya Raman placed this hold and will be notified.

Demo only. Nothing is released or sent.

Loading, empty and error states

Loading · skeleton rows

Skeletons, not spinners, for regions (Carbon). The shimmer stops under reduced motion.

No slabs match “Viola 3 cm”

Calacatta Viola is only in stock at 2 cm. Try removing the thickness filter.

Form validation · live example

Errors appear on submit, not while typing, and are summarized at the top with links to each field. Fields re-validate as they’re corrected. Try submitting empty, then fix the errors.

Place a hold

Required

Up to 14 days, by Oct 23, 2026 (policy INV-02).

$

No more than the slab price, $5,479.92.

0 of 200 characters

Rules demonstrated

  • Native <form novalidate> with custom messages that say how to fix the problem.
  • aria-invalid and aria-describedby tie each error to its field. The summary receives focus.
  • Required is marked with an asterisk, and a legend explains it. Optional fields say “optional”.
  • Read-only fields look like settled values, not disabled controls.
  • Success confirms exactly what would happen and states that this demo saves nothing.

06 — Main workspace

Inventory, at working density

The screen a purchasing or sales lead keeps open all day. Search, filter by status and type, sort any column, select rows for batch actions, switch density, and open a record without losing the list. Owners and holders show as people or agents in the same columns.

  • Viewing as Theo Brandt · Purchasing
  • 14 fictional slabs · nothing is saved
  • Press / to search · Esc closes the drawer
Application example · Internal · InventoryFictional data
IMAGINE SURFACES Operations
Signed in as Theo Brandt

Slabs

Row density
Slabs in inventory. Sortable columns have buttons in their headers.
Owner Committed to Finish
Calacatta Macchia Vecchia Available — — 3 124 × 74 63.72 $5,479.92 B-07-2 Marble Honed Marmi Valdera $86.00
Calacatta Macchia Vecchia On hold Priya Raman Juniper & Gray Interiorsuntil Oct 16 3 124 × 74 63.72 $5,479.92 B-07-2 Marble Honed Marmi Valdera $86.00
Taj Mahal Available — — 3 130 × 78 70.42 $4,506.88 A-12-1 Quartzite Leathered Pedra Alta Exportação $64.00
Taj Mahal Reserved Priya Raman SO-7734Northfork Stoneworks 3 130 × 78 70.42 $4,506.88 A-12-1 Quartzite Leathered Pedra Alta Exportação $64.00
Arabescato Corchia Extra, bookmatched A Available — — 2 128 × 76 67.56 $6,215.52 B-03-4 Marble Honed Marmi Valdera $92.00
Cristallo Reserved Priya Raman SO-7734Northfork Stoneworks 2 128 × 77 68.44 $7,665.28 A-14-2 Quartzite Polished Pedra Alta Exportação $112.00
Barroca Available — — 3 118 × 80 65.56 $3,146.88 C-02-1 Soapstone Honed Pedra Alta Exportação $48.00
Nero Marquina Sold Priya Raman SO-7702Northfork Stoneworks 2 116 × 70 56.39 $3,270.62 B-11-3 Marble Polished Levante Stone Group $58.00
Blue Bahia In transit — ETA Oct 15PO-30431 3 112 × 68 52.89 $7,669.05 In transit Granite Polished Pedra Alta Exportação $145.00
Absolute Black Available — — 3 126 × 75 65.63 $2,559.57 C-06-2 Granite Leathered Deccan Granite Exports $39.00
Calacatta Viola On hold Quote DrafterAgentfor Priya Juniper & Gray Interiorsuntil Oct 12 2 122 × 70 59.31 $6,998.58 B-09-1 Marble Honed Marmi Valdera $118.00
Bardiglio Nuvolato Available — — 2 120 × 72 60.00 $3,480.00 B-08-1 Marble Honed Marmi Valdera $58.00
Bardiglio Nuvolato Quarantined Intake ReconcilerAgent CLM-0912claim pending 2 120 × 72 60.00 $3,480.00 Q-01 Marble Honed Marmi Valdera $58.00
Statuario Venato (porcelain) Available — — 1.2 126 × 63 55.13 $1,874.42 D-01-4 Porcelain Matte Ceramiche Monteluce $34.00

Showing 14 of 14 slabs

Page 1 of 1

Buttons labeled as illustrative (Receive shipment, Export, batch actions) show a notice instead of acting. Sorting, filtering, search, selection, density and the drawer run in this page only.

07 — Role-specific examples

One language, four audiences

Customers get the calmest surface: more space, the serif, verde. Suppliers get a focused, mid-density view of their own orders. The yard gets large touch targets on a phone. Agents get structured assignments that people can read and supervise. The tokens are the same throughout; density, typography and what each audience can see are what change.

Application example · Customer · Quote (trade portal)
IMAGINE SURFACES Trade portal · Nadia Ferris

Quote Q-11872

Ellery kitchen

Issued Oct 9, 2026

Prepared by Priya Raman

For Juniper & Gray Interiors, delivered to your fabricator, Northfork Stoneworks.

Your slabs are on hold

Calacatta Viola until Oct 12, 9:08 AM ET. Calacatta Macchia Vecchia until Oct 16, 5:00 PM ET. Approve before then to keep them.

  • Calacatta Macchia Vecchia

    Marble · Honed · 3 cm · 124 × 74 in

    Slab L2051-05 · Lot 2051

    63.72 sq ft × $86.00

    $5,479.92

  • Calacatta Viola

    Marble · Honed · 2 cm · 122 × 70 in

    Slab L2080-04 · Lot 2080

    59.31 sq ft × $118.00

    $6,998.58

Slabs (2)
$12,478.50
Delivery to Northfork Stoneworks
$350.00
Total before tax
$12,828.50

Sales tax, if any, is calculated on the invoice.

Prepared by Priya Raman, trade sales, with help from an Imagine Surfaces agent. Prices hold while your slabs are on hold.

Application example · Supplier · Purchase order receiving update
IMAGINE SURFACES Supplier portal · Marmi Valdera

PO-30418Receiving update

Container TGHU 881204-4 · arrived Oct 9, 2026, 7:52 AM ET · Landover, MD

Partially received
PO-30418 lines, receiving summary
LineMaterialOrderedAcceptedUnder reviewArea (sq ft)Unit costLine total
1Bardiglio Nuvolato · Honed · 2 cm · Lot 20831091600.00$31.50$18,900.00
2Calacatta Macchia Vecchia · Honed · 3 cm · Lot 2051880509.76$41.00$20,900.16
Total181711,109.76$39,800.16

1 slab under review: L2083-02

Our yard reported a crack through the full thickness on arrival. Three photos are attached. We will contact you by Oct 13, 2026 with next steps.

Receipt recorded by Intake ReconcilerAgent · Contact Theo Brandt

6:47YARD · 375 PX

Pick · SO-7734

Northfork Stoneworks

Load by 7:30 AM, Oct 10 · dock 1

Assigned toOwen Castillo
1 of 2 slabs picked50%
  • Taj Mahal

    L2048-03 · A-12-1

    Picked
  • Cristallo

    L2066-03 · expected A-12-3

    Not found

L2066-03 wasn’t at A-12-3

You scanned it at A-14-2 at 6:47 AM.

Internal · yard lead on a phone. 16px text, 44–48px targets, one task per screen. Exception first, with the fix as the primary action.

Application example · Agent-owned task · autonomous under policy

Hold Keeper Agent

Reservations · managed by Priya Raman

Completed
Assignment
Every day at 9:00 AM ET, release holds that are past expiry.
Authority
INV-02 · holds expire after 14 days unless extended No approval required
Today’s result
Released 1 expired hold: L2048-02 Taj Mahal (Brightwater Builders, expired Oct 8, 5:00 PM). Notified Priya Raman.
Business effect
L2048-02 On hold Available
Next run
Oct 10, 2026, 9:00 AM ET

Why no approval?

Hold Keeper has permission to release holds, and policy INV-02 makes release automatic at expiry. A person releasing a hold early would need the confirm dialog from section 05. The agent doesn’t.

Where’s the big one?

Section 08 follows Intake Reconciler through a full receiving reconciliation: an autonomous step, an exception, a handoff and an approval.

Go to AI agents

08 — AI agents as first-class users

Colleagues with a name, a scope and a manager

Agents work through APIs and structured assignments, not through these screens. These surfaces exist so people can see what agents own, what they did, what they’re allowed to do, and when they need a decision, and so people can pause them. An agent has an identity, not a personality. Nothing here is a chat window.

Authorship, execution and business status are three different things

Authorship · who acted

Intake ReconcilerAgent

Identity chip. Shape, name and kind tag. Managed by Marisol Vega.

Execution · what the agent is doing

Waiting for approval

Run state: mono capitals, outline only. Describes the actor, never the record.

Business · where the record stands

Partially received

Status badge on PO-30418. It stays the same whoever is working on it, human or agent.

Agent profile, permissions and policy

Intake Reconciler Agent

agent/intake-reconciler

Waiting for approval

Role
Receiving and reconciliation
Managed by
Marisol Vega
Team
Operations
Assignment
Standing: reconcile every inbound PO within 4 hours of check-in (RCV-01)
Acts through
Receiving API · Inventory API · Claims API
Can be paused by
Its manager, operations and purchasing leads

Permissions · what it can do

Scopes granted by Marisol Vega. Enforced by the platform, per agent.

  • Read purchase orders and suppliers purchase_orders:read
  • Record receipts against POs receipts:write
  • Change slab status and rack location inventory.status:write · inventory.location:write
  • Draft and submit supplier claims claims:draft · claims:submit
  • Message staff and request decisions messages:internal

Not granted

  • Change prices, PO quantities or costs
  • Message suppliers or customers directly
  • Approve anything, including its own requests

Policies · when anyone must ask

Workflow rules. They apply to people and agents alike.

  • PUR-04 Supplier claims over $1,000 need Purchasing approval.

    Approver: Theo Brandt or delegate

  • INV-05 Damaged slabs are quarantined until a disposition is recorded.

    Automatic; no approval

  • RCV-01 Inbound POs are reconciled within 4 hours of check-in.

    Escalates to the manager if late

The distinction: a permission is about the actor. A policy is about the action. Theo filing a $1,890 claim himself would need the same approval as the agent does.
Permission versus approval policy, by action
Action by Intake ReconcilerPermissionPolicyOutcome
Record receipt for 17 matched slabsreceipts:writeNoneDone autonomously
Quarantine L2083-02inventory.status:writeINV-05 requires itDone autonomously
Submit claim CLM-0912 ($1,890.00)claims:submitPUR-04: over $1,000Waiting for approval
Submit a claim for $640.00claims:submitUnder thresholdWould proceed autonomously
Change the list price of lot 2083Not granted—Not permitted. Hands off to a person.
Approve its own claimNot grantedSeparation of dutiesNever possible

Scenario · reconciling an inbound container against PO-30418

It’s 9:14 AM on Oct 9. Intake Reconciler has done everything its permissions allow and handed one decision to Theo Brandt. You are Theo. Review the exception, or pause the agent.

Application example · Internal · Agent assignmentFictional data · decisions update this page only

Reconcile PO-30418 · Marmi Valdera

Partially received 17 of 18 slabs accepted · 1,109.76 sq ft ordered
Owner
Intake ReconcilerAgent
Managed by
Marisol Vega
Assigned by
Standing rule · all inbound POs
Run state
Waiting for approval

Progress

  1. Container checked in

    Owen Castillo · 7:52 AM

    Person
  2. Labels matched to PO lines

    18 of 18 matched · 8:21 AM

    Agent
  3. Receipts recorded, inventory updated

    17 slabs Available on B-07-2 and B-08-1 · 8:26 AM · within permissions

    Agent
  4. Exception resolved

    Waiting on Theo Brandt · since 8:27 AM

    Person
  5. Claim submitted, receipt closed

    Not started

    Agent

Business records

PO-30418 reconciliation by line
LineLotOrderedMatchedAcceptedQuarantinedArea (sq ft)
1 · Bardiglio Nuvolato, 2 cm2083101091600.00
2 · Calacatta Macchia Vecchia, 3 cm20518880509.76

Exception · needs a decision

L2083-02 · crack through full thickness

Quarantined
Reported by
Owen Castillo· 8:24 AM · 3 photos · “Crack runs top to bottom, about 38 in from the left edge.”
Agent did
Set the slab to Quarantined in bay Q-01 (INV-05). Drafted claim CLM-0912: credit of $1,890.00 = 60.00 sq ft × $31.50 PO unit cost.
Why it stopped
Policy PUR-04: claims over $1,000 need Purchasing approval. Requested from Theo Brandt at 8:27 AM.

Handoff · approval requested

Intake ReconcilerAgentTheo Brandt

Approve or change the disposition of L2083-02. Intake Reconciler resumes as soon as you decide. Everything else on this PO is already done.

Requested 8:27 AM · due 11:52 AM (RCV-01)

Activity

  1. Owen Castillo checked in container TGHU 881204-4 · 18 slabs

    7:52 AM · Yard scanner

  2. Intake Reconciler Agent started reconciliation

    7:53 AM · standing assignment from Marisol Vega

  3. Intake Reconciler Agent matched 18 of 18 labels to PO lines

    8:21 AM · Receiving API

  4. Owen Castillo flagged L2083-02 as damaged

    8:24 AM · 3 photos

  5. Intake Reconciler Agent recorded 17 slabs as received and Available

    8:26 AM · no approval required

  6. Intake Reconciler Agent quarantined L2083-02 and drafted CLM-0912

    8:26–8:27 AM · INV-05

  7. Intake Reconciler Agent requested approval from Theo Brandt

    8:27 AM · PUR-04

PO-30418 · CLM-0912 · requested by Intake Reconciler

Decide on L2083-02

PHOTO 1
PHOTO 2
PHOTO 3
Slab
Bardiglio Nuvolato · 120 × 72 in · 2 cm · 60.00 sq ft
Reported
Owen Castillo: crack through full thickness, about 38 in from the left edge
Agent’s draft
CLM-0912 · credit request to Marmi Valdera · $1,890.00
Policy
PUR-04 requires your approval (over $1,000)
Disposition (required)

Demo: this updates the page only.

Agent directory

The place to answer: which agents exist, who answers for each, what each may touch, and what each is doing right now.

Agents on the platform
AgentRoleManaged byAccessRun stateCurrent or last workLast action
Intake ReconcilerAgentReceivingMarisol Vega7 scopes · POs, receipts, inventory, claimsWaiting for approvalPO-304188:27 AM
Quote DrafterAgentQuotesPriya Raman4 scopes · quote drafts, 72-hour holdsWorkingQ-11873 draft for review9:11 AM
Hold KeeperAgentReservationsPriya Raman3 scopes · holds read, release, notifyIdleNext run Oct 10, 9:00 AM9:02 AM
Delivery SchedulerAgentLogisticsOwen Castillo5 scopes · delivery slots, routesPausedPaused by Owen Castillo: truck 2 in service until Oct 12Oct 7

09 — Accessibility

Comfortable for eight hours, usable for everyone

The target is WCAG 2.2 AA. The checks below run in your browser against this page, so they reflect what is actually rendered. They complement testing with assistive technology; they don’t replace it.

In-page self-checks

  • Running…

Each check inspects the live DOM and computed styles. “Overflow” is measured at your current window width; resize and run again.

Keyboard

Keyboard behavior
TabMoves through controls in reading order. Focus is always visible (2px lapis).
/Focuses inventory search, unless you’re typing in a field.
Enter SpaceSorts a column (header buttons), toggles a chip, opens a record (slab ID).
← →Moves between tabs (roving tabindex). Home/End jump to the first/last tab.
EscCloses the drawer, dialog or menu and returns focus to the control that opened it.

Built in

  • Status uses icon shape plus a word. Selection uses a 3px edge plus tint. Errors use an icon plus text.
  • Native controls throughout: buttons, inputs, <dialog>, radio groups.
  • Sortable headers follow the APG pattern: aria-sort on the sorted th, buttons inside, and arrows that differ in shape.
  • Targets are at least 24px. Coarse pointers get 44px hit areas without changing the layout.
  • Under prefers-reduced-motion, spinners, shimmers and transitions stop.
  • Results, selection counts and decisions are announced through polite live regions.
  • Badges and fields keep their borders in forced-colors mode.

10 — Implementation reference

Three layers of tokens, one source of truth

Primitive colors have material names and are never used directly. Semantic tokens name roles. Tailwind maps utilities onto the semantic layer, so bg-layer-1 and text-ink-2 follow a theme change automatically. Components are plain CSS classes built on the same variables.

  1. 1 · Primitive

    --p-lapis-600

    #2B4C9B. A material name, no meaning.

  2. 2 · Semantic

    --interactive · --focus

    A role. Swap the primitive here for a new theme.

  3. 3 · Tailwind

    @theme inline { --color-lapis }

    Utilities: text-lapis, outline-focus

  4. 4 · Component

    .chip[aria-pressed=true]

    State styling in CSS, driven by ARIA attributes.

Tokens and Tailwind mapping (excerpt)

/* 2 · semantic */
:root {
  --surface-canvas: var(--p-travertine-100);
  --surface-layer-1: var(--p-slab-white);
  --text-primary: var(--p-basalt-900);
  --interactive: var(--p-lapis-600);
  --status-warning-fg: var(--p-amber-800);
  --row-height-compact: 2rem;
}
/* 3 · Tailwind v4 */
@theme inline {
  --color-canvas: var(--surface-canvas);
  --color-layer-1: var(--surface-layer-1);
  --color-ink: var(--text-primary);
  --color-lapis: var(--interactive);
  --font-sans: var(--font-ui);
}
@theme static {
  --font-brand: "Marcellus", "Palatino Linotype", …, serif;
  --radius-eased: 2px;
}

Component recipes

<!-- Business status: icon + word -->
<span class="badge badge-warning"><svg…/>On hold</span>

<!-- Agent run state: never a tinted badge -->
<span class="runstate" data-state="waiting">
  <span class="glyph"></span>Waiting for approval</span>

<!-- Identity: kind is required; agents need a manager -->
<span class="avatar avatar-agent avatar-sm">IR</span>
<span>Intake Reconciler</span>
<span class="kind-tag kind-tag-agent">Agent</span>

<!-- Density is an attribute, not a class soup -->
<div data-density="compact"><table class="dt">…
  <td class="num">$5,479.92</td>  <!-- tabular, right -->
  <td class="id">L2051-04</td>     <!-- Plex Mono -->

Components reference semantic tokens only. A hex value in component code is a review comment.

An identity component requires kind. Agent identities also require managedBy, enforced in the type.

Status vocabularies are closed enums per record type. Run states are a separate enum.

Numbers are formatted by one shared module (currency, area, dimensions), never in templates.

Customer and supplier views read from boundary-specific API projections. Hiding a field in the UI is not a permission.

Build: Tailwind CSS v4.3.3 CLI, with output inlined into this file. The sources are in _source/.

Live token reference

Read from this page’s stylesheet at load, so the list always matches what renders.

Design tokens defined on :root
SwatchTokenValueLayer
Loading…

11 — Research and sources

What informed this direction

Ten sources, each inspected directly in a browser or fetched in full on October 9, 2026. The work is synthesized from them, not copied from any one.

Research sources, the principle drawn from each, and how it shaped Honed
SourcePrinciple or detailHow it informs Honed
Imagine Surfaces

imaginesurfaces.com · home, all products

Tracked serif-capital wordmark. Cormorant Garamond + Work Sans. Ivory, near-black, olive and copper. Inventory listed as lot · dimensions (in) · thickness (cm) · finish · slab count. Landover, MD showroom. Trade login.The wordmark lineage, Travertine/Verde/Bronze derivations, and lot and unit conventions. Verified facts are kept separate from proposals in section 01.
Carbon · Data table usage

IBM

Row sizes of 24/32/40/48/64 px. Toolbar and header match the row height. Three sort states with icons only on the sorted column. Skeletons over spinners. Batch actions disable row actions.The 40/32 px density pair, toolbar sizing, sort indicators, batch bar and skeleton loading.
Carbon · Color tokens

IBM

Role-based token names. The layering model (background → layer-01 → layer-02), where fields and borders follow their layer. Blue 60 serves both interactive and focus.The semantic token layer, the surface stack, and the decision that one interaction hue (lapis) also carries info.
Salvatori

Italian natural-stone design house

A single grotesk for everything. Widely tracked capital wordmark. Cream and black restraint. Imagery does the emotional work.“The stone is the color.” Luxury comes from restraint and photography, not ornament. Unlike Salvatori, Honed avoids light weights in operational UI.
Linear · Agents in Linear

Product documentation

Agents appear alongside people in assignee menus, have their own user pages and activity, and admins scope which teams they can access. Delegated work stays visible to the person.Identity parity (agents in the same pickers and columns as people), the agent directory, scoped access, and a manager for every agent.
GitHub Docs · GitHub Apps

Product documentation

Fine-grained permissions instead of broad scopes. Actions are attributed to the app, or to the app “on behalf of” a user. The installation isn’t tied to one person’s account.Mono scope names, the “on behalf of” identity pattern, and agents as identities in their own right rather than borrowed user accounts.
W3C APG · Sortable table

WAI-ARIA Authoring Practices

aria-sort only on the sorted th. Header text wrapped in a button. Direction glyphs that differ in shape, not just color. The caption explains sortability.The inventory table header implementation, the ◇ ▲ ▼ indicators, and the screen-reader caption.
WCAG 2.2 · 2.5.8 Target Size (Minimum)

W3C

Pointer targets of at least 24 × 24 CSS px, or spaced so that 24px circles don’t overlap (AA).28px is the compact control floor. Invisible 44px hit areas on coarse pointers keep visual density.
Stripe · Designing accessible color systems

Engineering blog

Perceptual lightness, not HSL. Contrast guaranteed by step distance. Badge foreground and tint move together to keep contrast across hues.Status foreground/tint pairs tuned as sets and measured live in section 03, with plain names kept apart from brand hues.
IBM Plex · Marcellus

Type foundry repositories

Plex: SIL OFL, with Sans, Mono, Condensed and Serif families, and Carbon’s default typeface. Marcellus (Astigmatic): SIL OFL, one weight, inscriptional Roman forms. Google Fonts metadata checked.The licensing is clear for web and app use. Marcellus ties the wordmark to carved stone and stays legible at 15px. Plex carries operations, with Plex Mono for identifiers.

Limitations

  • —Imagine Surfaces’ internal workflows, policies, team and systems are not public. Every operational detail here is a proposal.
  • —No photography is embedded. Image frames are labeled placeholders, and tone chips approximate stone color.
  • —Fonts load from Google Fonts. Offline, the fallback stacks render; preview them in section 02.
  • —No dark theme has been designed. The semantic layer is ready for one.

Verification performed

  • —Rendered in Chromium (Playwright and the Claude desktop browser pane) at 375, 390, 768, 1024, 1280, 1440 and 1920px widths, with no horizontal page overflow at any of them.
  • —Exercised by script: search, status and type filters, sorting (with aria-sort), selection with indeterminate state, density (measured 40 and 32px rows), drawer by click, Enter and Esc with focus return, the / shortcut, form validation, both dialogs, all three exception decisions, and agent pause and resume.
  • —Contrast, labeling, overflow, token sync and font loading are verified by the in-page checks in section 09. All 10 passed at every width tested. No console errors.
  • —Not performed: screen-reader testing (VoiceOver, NVDA), Safari and Firefox, Windows forced-colors mode, and real touch devices.