Skip to content

Fuel Credit navigation specification ​

A compact implementation guide for reproducing the Fuel Credit application header. Measurements below describe the final active cascade in app/src/styles.css, not the earlier legacy declarations that it overrides.

Source of truth ​

  • Structure and item order: app/src/App.tsx (SiteHeader)
  • Wallet states: app/src/FuelWallet.tsx (HeaderWallet)
  • Desktop rules: app/src/styles.css, final Lovable port (.topbar, .brand, .site-nav)
  • Mobile rules: @media (max-width: 560px)
  • Fonts: Google Fonts import at the top of app/src/styles.css

The order is:

text
Brand | My Loans when connected | Docs | Stats | GitHub | Theme | Network in open mobile menu | Wallet

GitHub is hidden in the current desktop and compact mobile header, but appears in the open mobile menu.

The current component still links GitHub to SilentCicero/fuel-credit. Change that URL independently if the canonical public link should be FuelLabs/fuel-credit.

Core tokens ​

TokenDarkLightUse
--ink#fafafa#171717Brand, controls, primary nav text
--muted#9e9e9e#737373Default navigation links
--line#323232#e5e5e5Header divider and control borders
--panel#101010#ffffffHeader and menu surfaces
--panel-2#181818#f5f5f5Hover/focus and selected neutral surfaces
--fuel#02e555#02d653Focus ring and active network accent

No gradients, glass effects, or decorative shadow belong in this navigation.

Typography ​

Default navigation type ​

css
font-family: "Space Grotesk", system-ui, sans-serif;
font-size: 14px;
font-weight: 400;
  • Brand: Space Grotesk, 24px, weight 600, line-height 20px, tracking -0.02em.
  • Desktop wallet/connect controls: 14px, weight 500, line-height 1.
  • Compact mobile connect/account controls: 12px.
  • Open-menu rows: 16px, weight 700.
  • Expanded wallet address: IBM Plex Mono, 13px, weight 700.
  • Numerical wallet text uses tabular numerals.

Do not substitute a generic geometric sans when matching the production interface. Space Grotesk creates the brand and navigation proportions; IBM Plex Mono is reserved for the expanded address/data treatment.

Desktop header: above 560px ​

Header frame ​

PropertyValue
Positionsticky, top: 0, z-index: 30
WidthFull viewport; no maximum width
Height66px
Horizontal padding40px
Outer margin0
Item alignmentCentered vertically; brand left, navigation right
Main flex gap10px inherited base gap; brand/nav separated by space-between
Bottom rule1px solid var(--line)
Backgroundvar(--panel)

Preferred page alignment: the header intentionally reaches the viewport edges. Do not wrap it in the content column or add an outer top margin.

Brand lockup ​

PropertyValue
Mark20 × 20px
Wordmark text24px, weight 600
Mark-to-text gap10px
Lockup height20px
Line-height20px
Letter spacing-0.02em

The mark and Credit text form one home link. Keep the mark square and do not add a pill, container border, or extra background.

PropertyValue
Inter-item gap28px
Link font14px / 400
Default textvar(--muted)
Hover textvar(--ink)
Vertical alignmentCenter

Text links remain visually bare—no permanent pill, underline, or border.

Circular icon control ​

Used by the theme action.

PropertyValue
Box34 × 34px
Flex basis/minimum width34px
Radius50%
Internal icon16 × 16px
Padding0
BackgroundTransparent
Hover/focus backgroundvar(--panel-2)

Wallet and action pills ​

PropertyValue
Height/min-height34px
Horizontal padding14px
Border1px solid var(--line)
Radius999px
BackgroundTransparent
Text14px, weight 500, line-height 1
Wallet internal gap6px from the base wallet rule
Hover/focus backgroundvar(--panel-2)

The connected account chip also uses a 34px minimum height and full pill radius. Legacy clipped corners and decorative ::after strokes are explicitly disabled in the final cascade.

Mobile header: 560px and below ​

Closed header ​

PropertyValue
Height62px
Horizontal padding16px
Header gap4px
Brand text24px
Navigation marginmargin-left: auto
Compact nav gap4px; 6px when wallet is present
Theme visibilityHidden while menu is closed
Text linksHidden while menu is closed

Compact controls ​

  • Menu button: 38 × 38px, circular, no left margin, flex basis 38px.
  • Visible icon controls: 38 × 38px; inner icon remains 16 × 16px.
  • Disconnected Connect pill: 38px high, 9px horizontal padding, 12px text.
  • Connected account/disconnect pills: 38px high, 8px horizontal padding, 12px text, 999px radius.
  • Connected wallet group gap: 4px.

Open mobile menu ​

The open menu becomes a full-screen fixed navigation surface.

css
position: fixed;
inset: 0;
z-index: 40;
display: flex;
flex-direction: column;
padding: 82px 16px max(24px, env(safe-area-inset-bottom));
background: var(--panel-2);
ElementMeasurement
Menu column gap8px
Standard row height56px
Standard row horizontal padding16px
Standard row radius10px
Row border1px solid var(--line)
Row backgroundvar(--panel)
Row icon/text gap14px
Row text16px, weight 700
Bottom safe areaAt least 24px

Open-menu wallet ​

  • Wallet layout: two columns, minmax(0, 1fr) auto, gap 8px.
  • Account container: full width, 56px high, 10px radius, clipped overflow.
  • Address link: flexible width, 14px horizontal padding, IBM Plex Mono 13px / 700, ellipsis on overflow.
  • Copy button: fixed 44px width, full 56px height, 12px padding, left divider.
  • Copy icon: 18 × 18px.
  • Disconnect/action button: at least 56px high, 10px radius, 16px / 700.
  • Disconnected Connect row: 56px high, Fuel-green background, 10px radius, centered 16px / 700 label.

Network switcher ​

Only displayed inside the open menu.

PropertyValue
ContainerFull width, 56px high
Segment gap8px
Segment height56px minimum
Segment radius10px
Segment text16px, weight 700
Active textvar(--fuel)
Active backgroundvar(--panel-2)

It uses margin-top: auto, anchoring network selection toward the bottom of the menu.

Interaction and accessibility ​

  • Brand is a labeled home link.
  • Menu button exposes aria-expanded, aria-controls, and an action-specific label.
  • Escape closes the mobile menu.
  • Opening the menu adds body.menu-open to prevent background interaction/scroll.
  • Theme and GitHub icon controls have accessible labels; mobile text labels appear in the open menu.
  • Focus-visible treatment: 2px solid var(--fuel) with 3px offset.
  • Hover and focus use the same neutral var(--panel-2) surface.
  • Mobile interactive targets are normally 38px in the compact bar and 56px in the open menu. Preserve the larger menu rows for comfortable touch use.
  • Keep wallet identity and Disconnect as separate controls.
  • Preserve single-line truncation for long addresses rather than allowing the header to expand.

Responsive preferences ​

  1. Keep the full desktop navigation until the 560px breakpoint.
  2. At 560px or below, prioritize brand, wallet access, and menu access.
  3. Do not squeeze Docs/Stats into the compact row; move them to the full-screen menu.
  4. Keep the header edge padding symmetrical: 40px desktop, 16px mobile.
  5. Do not add a centered maximum-width container to the header.
  6. Maintain the 66px → 62px height transition—avoid content-driven header heights.
  7. Respect bottom safe-area insets in the open menu.

Implementation skeleton ​

tsx
<header className="topbar">
  <a className="brand" href="/">…</a>
  <button className="menu-toggle" aria-expanded={open}>…</button>
  <nav className={`site-nav${open ? " open" : ""}`}>
    <a>Docs</a>
    <a>Stats</a>
    <button className="icon-link theme-nav-toggle">…</button>
    <HeaderWallet expanded={open} />
  </nav>
</header>

Do / do not ​

Do

  • Use Space Grotesk and the exact compact weights.
  • Keep desktop links unboxed and reserve pills for actions/account state.
  • Use one-pixel rules and neutral hover fills.
  • Preserve sticky positioning and viewport-edge alignment.
  • Keep open-menu rows consistently 56px high.

Do not

  • Add gradients, glass effects, heavy shadows, or decorative glow.
  • Increase desktop pill height beyond the compact 34px system.
  • mix clipped legacy button geometry into the final rounded navigation.
  • Expose raw wallet addresses without truncation.
  • Hide wallet connection or the mobile menu trigger.
  • Copy earlier duplicate CSS declarations without checking the later Lovable override block.

Open-source infrastructure on Fuel.