nav.neumorphism-pill-tray · Pill tray

A nav pattern from Neumorphism, drawn alone below with this design's tokens and sample copy. Used in this design on: every page, as the nav. Give the section root data-pattern="nav.neumorphism-pill-tray". A guide only: DESIGN.md and tokens.json are the source of truth.

Rule
One raised tray: wordmark left, pill links in the middle, a raised secondary key (hidden on phones) and a small accent primary right.
Slots
siteName, pages, cta2, cta
Tokens
bg #E3E8EF · text #28303B · heading #161C25 · accent #3F5BD9 · accent2 #794EBA · Plus Jakarta Sans / Plus Jakarta Sans · radius 22px · space unit 4px (full list in design/tokens.json)
Section
vertical padding step 4

Pattern notes

  • One raised tray across the page (radius 22 px, padding 12 × 20 px): wordmark left, pill links in the middle (the current page pressed in), a raised secondary key (hidden on phones) and a small accent primary right.
Northfold
  • Services
  • Work
  • About
  • Contact
Start a project
Layout tree (as in design/layout.json)
{
  "pattern": "nav.neumorphism-pill-tray",
  "kind": "nav",
  "slots": [
    "siteName",
    "pages",
    "cta2",
    "cta"
  ],
  "tree": {
    "el": "box",
    "bg": "surface",
    "dir": "row",
    "gap": 5,
    "pad": [
      3,
      5
    ],
    "align": "center",
    "justify": "between",
    "children": [
      {
        "el": "logo",
        "slot": "siteName",
        "style": "wordmark"
      },
      {
        "el": "nav-links",
        "mobile": "scroll-x",
        "slot": "pages",
        "dir": "row",
        "style": "pill"
      },
      {
        "el": "box",
        "dir": "row",
        "gap": 4,
        "align": "center",
        "children": [
          {
            "el": "button",
            "mobile": "hide",
            "slot": "cta2",
            "variant": "secondary",
            "size": "sm"
          },
          {
            "el": "button",
            "slot": "cta",
            "variant": "primary",
            "size": "sm"
          }
        ]
      }
    ]
  }
}
Component example: reference/nav.neumorphism-pill-tray.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>nav.neumorphism-pill-tray — Neumorphism</title>
<link rel="stylesheet" href="base.css">
<style>
  header { padding: 16px 0; }
  .tray { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 12px 20px; }
  .brand { font-weight: 700; font-size: var(--step-1); color: var(--heading); text-decoration: none; }
  nav ul { display: flex; gap: 8px; list-style: none; padding: 0; overflow-x: auto; }
  nav a { display: block; padding: 10px 18px; border-radius: 999px; color: var(--text); text-decoration: none; font-weight: 500; white-space: nowrap; }
  nav a[aria-current="page"] { box-shadow: var(--pressed); color: var(--heading); font-weight: 600; }
  .end { display: flex; gap: 16px; align-items: center; } .end .btn { height: 42px; padding: 0 18px; }
  @media (max-width: 640px) { .tray { flex-wrap: wrap; } nav { order: 3; width: 100%; } }
</style>
</head>
<body>
<header class="wrap">
  <div class="panel tray">
    <a class="brand" href="/">Hearth</a>
    <nav aria-label="Main"><ul><li><a href="/product" aria-current="page">Product</a></li><li><a href="/rooms">Rooms</a></li><li><a href="/pricing">Pricing</a></li><li><a href="/support">Support</a></li></ul></nav>
    <div class="end"><a class="btn hide-phone" href="/login">Sign in</a><a class="btn btn-primary" href="/buy">Order</a></div>
  </div>
</header>
</body>
</html>

Other patterns in this design

Whole design · Spec bundle (JSON) · On the style page