Navigation
Settld has two navigation contexts: a glass-pill top nav for web/marketing surfaces, and a bottom tab bar for the mobile app. Both share the same frosted glass treatment and press state. The wordmark and link colors adapt dynamically to the surface they sit on.
Top nav — glass pill
The glass pill gets stronger on scroll: start at rgba(251,248,240,0.72) blur 12px, transition to rgba(251,248,240,0.92) blur 20px when scrollY > 40. This makes the nav feel anchored, not floating.
The wordmark is the "settld" logotype in Bricolage Grotesque 700, lowercase. On a light surface it's --wm-teal (#2A9D8F). On a dark surface it switches to --s-paper. This swap happens at the same time the nav background changes — no additional transition needed.
Active nav link: ink fill, paper text. Never an underline. Never a pill that's a different color family — the active state is the darkest thing in the bar, which makes it feel like a physical tab in a folder.
| Property | Resting | Scrolled |
|---|---|---|
| Background | rgba(251,248,240,0.72) | rgba(251,248,240,0.92) |
| Backdrop blur | blur(12px) | blur(20px) |
| Box shadow | --shadow-md | --shadow-lg |
| Transition | background 300ms ease-out, box-shadow 300ms ease-out | |
Tab bar — bottom nav (app)
The tab bar sits at the bottom of the screen, safe area inset above the home indicator on iOS. It uses the same frosted glass treatment as the top nav — the blur is stronger here (blur(16px)) because the tab bar floats above content.
Active tab: ink fill, paper text, border-radius 14px. Inactive tabs: transparent background, muted text. The transition is 140ms — fast enough to feel responsive, slow enough to not be jarring.
Unread indicator: a 7px coral dot, top-right of the icon, with a 1.5px paper border to prevent blending into dark content behind it. The dot sits on the icon itself, not on the tab-item container.
Tab icons are ASCII or Unicode glyphs, not SVG icons. If a glyph reads poorly, use a single-letter abbreviation inside a circle (G for Groups). Never import an icon library just for tab bar items.
| Property | Active tab | Inactive tab |
|---|---|---|
| Background | --ink (#171513) | transparent |
| Color | --s-paper | --ink-mute |
| Border radius | 14px | 14px (for hover) |
| Press state | scale(0.95) | scale(0.95) |
| Min touch target | 44×44px | |
Breadcrumbs
Breadcrumbs are minimal — Onest 14px, muted color, → separator. The current page is --ink weight 500 with aria-current="page". Parent links are --ink-mute with hover to --ink. The separator is --ink-line, non-interactive, aria-hidden.
Don't use breadcrumbs more than 3 levels deep. If you're at 4 levels, rethink the information architecture — Settld groups are shallow by design.
Section jumps (in-page nav)
Section jumps live in a right sidebar or above a content area for long-scrolling group detail pages. A 1px teal indicator bar grows at the left edge of the active link as the user scrolls into that section. The transition uses --d-med to match scroll velocity.
On mobile, section jumps collapse into a segmented control at the top of the content area. Never stack a section jump nav below a tab bar.
Usage
--wm-teal (light surfaces) or --s-paper (dark surfaces). The wordmark teal is a separate token from the UI teal — don't substitute.
Code
Top nav
<nav class="top-nav" aria-label="Main navigation"> <a href="/" class="nav-wordmark" aria-label="Settld home">settld</a> <div class="nav-links"> <a href="/groups" class="nav-link active" aria-current="page">Groups</a> <a href="/activity" class="nav-link">Activity</a> </div> <a href="/waitlist" class="nav-cta">Join waitlist →</a> </nav> /* Scroll enhancement */ window.addEventListener('scroll', () => { const scrolled = window.scrollY > 40; nav.style.background = scrolled ? 'rgba(251,248,240,0.92)' : 'rgba(251,248,240,0.72)'; });
Tab bar
<nav class="tab-bar" role="tablist" aria-label="App navigation"> <a href="/groups" class="tab-item active" role="tab" aria-selected="true"> <span class="tab-icon" aria-hidden="true">⊞</span> <span class="tab-label">Groups</span> </a> <!-- Add aria-label if badge count changes: "Activity, 3 unread" --> <a href="/activity" class="tab-item" role="tab" aria-label="Activity, 2 unread"> <span class="tab-icon tab-badge" aria-hidden="true">◎</span> <span class="tab-label">Activity</span> </a> </nav>