Skip to content
Brand & UX guide
Components

Navigation and structure

The sidebar, page header, breadcrumb, back link, cards, and insets. How people find their way and how content is grouped.

The app’s only navigation landmark. It holds the logo, the Stores page, each connected store with its recent reports, a way to connect another store, then Settings and Log out at the bottom. The active page is tinted teal. Below 960px it collapses to a top bar with a Menu button.

  • Level one is a page, level two a store, level three a report. Do not add a fourth.
  • A chevron button expands a store. It carries aria-expanded and a label of Expand or Collapse.
  • A store with no report lists Waiting for first report as static text, not a link.
  • Keep one <nav aria-label="Main">. Do not repeat navigation in a second landmark on phones.
Brand guide and shipped sidebar differ

The written brand order is Overview → Stores → Reports → Settings. The shipped app has Stores, then each store with recent reports, then Settings and Log out. Until the brand guide is updated, this page shows what ships.

#Page header and breadcrumb

Every page opens with a title (an h1), an optional one-line sub, an optional breadcrumb above, and an end slot for a pill or action. Breadcrumbs are for depth: Stores / Cozy Goods.

  • One h1 per page, always in the header.
  • The last crumb is the current page and is not a link.
  • The end slot wraps below the title at 520px and narrower.

On a page one level down with no sidebar context, such as a report, a .back-link returns to the parent: Back to store.

#Section head

A quiet heading above a block of content on a page, with an optional muted hint on the right. It is an h2.

Section head

#Week by week

Newest first
Code
<div class="section-head"><h2>Week by week</h2><span class="muted">Newest first</span></div>

#Card and inset

A .card is the default surface for grouped content: a hairline border, the 10px radius, and the small shadow. An .inset is a quiet well inside a card for a status line or a plan box. Do not nest a card in a card; use an inset.

Card with an inset

#Billing

Your plan, payment method, and invoices.

Weekwright
First pack free, then the founding price
Not started

You’ll leave briefly to pay, then come back.

Code
<section class="card">
  <h2 class="card-title">Billing</h2>
  <p class="card-desc">Your plan, payment method, and invoices.</p>
  <div class="inset billing-status">
    <div><div class="plan">Weekwright</div><div class="detail">First pack free, then the founding price</div></div>
    <span class="pill pill-warn">Not started</span>
  </div>
  <div class="btn-row panel-actions"><button type="button" class="btn btn-secondary">Manage billing</button></div>
  <p class="handoff-note">You’ll leave briefly to pay, then come back.</p>
</section>

Use it when

  • Grouping related content that stands alone: a setting, a panel, a summary
  • An inset for one status line or a small recap inside a card

Don’t use it when

  • Nesting cards. Use an inset
  • Wrapping a single line of text
  • Adding more than the standard shadow

Only modals, the sign-in card, and hovered cards use the larger shadow. Do not stack shadows.

Weekwright brand & UX guide v1.0.0 Components rendered from app @ bd6c1f4 · build d2e1ef8