Skip to content

SPA: elevation hierarchy — stop using one card treatment for stat cards, panels, toolbars and entry panes #651

Description

@mforce

Part of the SPA look-and-feel pass (design review 2026-09-02). Sibling slices: numeric typesetting, all-caps labels, table layout, dashboard rework, empty states, visual identity.

Problem

Every surface gets the same treatment: .stat, .panel, .toolbar, .entry-pane, .card, .order-panel all carry --r-card: 16px + --shadow-card + hairline (web/src/styles.css ~1052, ~1496, ~1541). A filter bar has the same visual weight as a data panel, and a data panel the same as a floating dialog. The result reads as a generic SaaS card kit and gives the eye no hierarchy.

Proposal

Elevation encodes what floats; radius encodes nesting depth.

  • Floats (dialogs, the Daily entry sticky action bar, the mobile tab bar): keep shadow.
  • Panels / stat cards / entry panes: border only, no shadow.
  • Toolbars (filter bars): inset — --surface-2 fill, no border or a hairline, no shadow, smaller radius.
  • Radius scale of three steps (e.g. 6 / 10 / 16) by depth: page-level container 16, nested panel 10, controls/chips 6. --r-card stays for the top level; add --r-panel and reuse --r-input.
  • Both themes and all four farm palettes (Per-farm theme — curated accent palettes in farm settings (API + SPA) #149) — the existing styles.test.ts required-set test covers any new token.

Acceptance

  • No box-shadow on .panel, .stat, .entry-pane, .toolbar, .order-panel; shadow remains on .dialog, the entry footer bar and .tabbar.
  • Toolbar reads as inset (screenshot before/after in the PR).
  • Three-step radius scale declared as tokens; no literal radius values added.
  • Light + night + all farm palettes checked (screenshots).
  • Styles unit test pins the shadow allow-list (frontend tests ship in the same PR).

Siblings: #650 #652 #653 #654 #655 #656 #657

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions