Design System · V1

A living reference for the Nomad Solutions brand, kept current as the work evolves. The voice is the skilled guide, calm and precise. It runs on restraint and exact geometry. The waypoint mark appears rarely, the letterforms are drawn to spec, and nothing is decorative without a reason.

01

Logo & the arrow motif

Nomad Solutions logo
On cream. Primary.
Nomad Solutions logo
On ink. Footer, dark bands. Never on photography or color fills.

Wordmark typefaces

The lockup pairs two faces. NOMAD is drawn from Sora. The custom N and A add the bearing, origin dot, and waypoint counter. SOLUTIONS is set in Outfit, all caps and tracked.

NOMAD · Sora
NOMAD
On light
#16150f
On dark
#faf8f3
SOLUTIONS · Outfit
Solutions
On light
#75726a
On dark
#aeaaa0

NOMAD

  1. Set NOMAD in Sora, weight 600, at your working size.
  2. Track to 0.04em.
  3. Split to curves.
  4. Take the stem as the unit S (cap height ≈ 4.8 S), then redraw the N and A per the table in Custom Letters below.

Order matters: tracking lands on live type so it stays even, and the custom N and A replace glyphs only after the split.

SOLUTIONS

  1. Set SOLUTIONS in Outfit, weight Medium (500), all caps.
  2. Track to 0.34em.
  3. Split to curves.
Do

Keep SOLUTIONS quiet: tracked, gray, and locked to the N's left edge. It supports the wordmark; it never competes with it.

Don't

Never set SOLUTIONS in Sora, in ink black, lowercase, or tightly tracked. Don't center it or let it grow past the wordmark width.

Combining them

SOLUTIONS locks to NOMAD by two measures, both in stem-units S.

Export · no padding, so the viewBox crops tight to the geometry. Clearspace (the height of the N on all sides, min width 140px) is layout space applied in use, never baked into the file.

Custom Letters

Every measure keys to one module, the stem width S. The mark is scalable, so the rules are ratios of S (plus scale-free angles), never fixed pixel values.

Construction of the Nomad N, dimensioned in stem-units S
Construction of the Nomad A inner arrow, the 5:2 waypoint
VarMeasureCalculation
SharedSStem widthS
hCap height4.8 S
▲wWaypoint width1.5 S
▲hWaypoint height0.60 S
The NØOrigin dot1.0 S
gStroke gap0.25 S
Rule · dot vs. bearing

The dot and the bearing are one gesture, mirrored across the stroke.

  • The origin dot is 1.0 S wide and centered on the baseline, so its edges meet the stem's.
  • It detaches from the stem foot by the stroke gap g.
  • The bearing echoes the move above the cap line: base on the cap line, right stem stopping g short, so the same gap sits under the arrow.
  • Its base is 5/4 S and its height 1/2 S (the dot's radius), which sets the 5:2 waypoint.
Rule · the A's inner arrow

It reads as a waypoint, not a slope to match against the legs.

  • The inner arrow is locked to the 5:2 waypoint, the same triangle as every marker in the system.
  • Letter and arrow share the apex centerline, not the slope; they are deliberately not parallel.
  • The leg angle is left to Sora; the typeface sets it, so we don't dimension it.
  • A quieter second arrow sits in the counter above, left in the negative space, unmarked.

The waypoint

The waypoint is the only decorative element in the system, the N's bearing lifted out as a standalone 5:2 triangle. It appears small, intentional, and rarely, a marker, not a pattern.

Construction of the waypoint: the 5:2 triangle, apex centered, at its 12 and 24 pixel sizes
Section eyebrow

How I work

Marks the start of a section. One per section, baseline-aligned with the label.

On ink

How clients arrive

Dark bands soften the pair: the mark lifts to the lighter ochre, the label recedes. Same geometry, quieter voice.

Confirmation moment
Message sent.

The one place the mark grows: a single 24px waypoint anchors a confirmation. Still the 5:2 triangle, never a different shape.

Do

Reserve the waypoint for section eyebrows and the occasional brand moment, one per section, always pointing up. Lists use a small square; directional cues (links, CTAs) use a plain stroke arrow. Ink or accent only, 10–16px in UI; a single 24px mark may anchor a confirmation moment.

Don't

Never use the triangle as a bullet or list marker, and never in rows, wallpaper patterns, or oversized watermarks. No gradients, outlines, or rotation. If it repeats, it's wrong.

Favicon

The favicon is the N alone (dot and bearing intact), knocked out of an ink tile. It survives to 16px; below that the bearing reads as a single notch, which is fine. Never use the full wordmark as a favicon.

96
48
32
16
Files · /assets/favicon
  • favicon.svg  · modern browsers, scalable
  • favicon-32.png / favicon-16.png · fallback
  • apple-touch-icon.png · 180, iOS home screen
  • icon-512.png · PWA / manifest

Embed code lives in the SEO handoff doc, section 02.

02

Color

Foundation

Ink

ink · warm neutral

Warm neutral scale anchored on the logo's two inks: ink-950 and ink-500.

50#f2f0eafaint tint
100#e5e2daborder
200#ccc9c0strong border: tinted bands, inputs
300#aeaaa0faint text
400#918d83muted text on ink
500#75726amuted text, labels
700#423f35body text
900#2e2c24border on ink
950#16150fink, dark surfaces, logo

White & Black

the standing pair

Deliberately off, never the browser's pure defaults. The standing pair in every build; here they carry the focus ring and halo.

white#fefefenever pure #fff
black#2e2e2enever pure #000

Cream

cream · surfaces

Warm paper grounds. Every surface is tinted, so nothing ever sits on pure white.

50#fffefbcards
100#faf8f3page background
200#f4f1e9alternating bands

Accent

Ochre, the lone warm accent in an ink-and-cream system. It carries links, buttons, and the arrow when it needs emphasis, never backgrounds larger than a button.

Ochre

ochre

Warm sand, tuned to the warm neutrals. Low-contrast and tonal; the single brand accent.

50#faf6eafaint tint, surface
200#e9d9a4border
400#cba43faccent on dark
700#826012primary, links, buttons, focus
Where to use

Links and CTAs, primary buttons, and the section eyebrow arrow. Emphasis only, never a background larger than a button.

Semantic

Four status families for feedback only: success, error, warning, and info. Success and error are the green and red from the Do and Don't cards; warning is a brighter amber, kept distinct from the ochre accent; info is the lone cool tone.

Success

success · pine
50#f0f4f1surface
200#c3d4c8border
600#3c5a47text
Do

Confirmations and valid states. The green from the Do column.

Error

error · clay
50#faf1edsurface
200#e8c4b5border
600#a84e31text
Don't

Failures and destructive actions. The red from the Don't column.

Warning

warning · amber
50#fdf4e8surface
200#f3c585border
600#a25a10text
Heads up

Caution and reversible risk. A brighter amber, kept distinct from the ochre accent.

Info

info · lake
50#eef3f5surface
200#bfd3daborder
600#33566btext
Note

Neutral notices and in-progress states. The lone cool tone, kept quiet.

03

Typography

Headings
Sora

Geometric, pointed apexes, the closest Google-Fonts kin to the wordmark's letterforms. Weights 600/700, tight tracking.

Body
Hanken Grotesk

Warm, highly readable grotesk for paragraphs and UI. Weights 400/500/600.

Technical accent
JetBrains Mono

Eyebrows, labels, code, small metadata. Always small, uppercase tracking 0.12em for labels.

Scale

Lists & numbering

List marker
  • Platform strategy
  • Custom development
  • Retainer support

Unordered lists take a small square, never the waypoint. Bullets repeat by nature; the triangle has to stay rare.

Step numbering
  1. Talk it through
  2. Agree on scope
  3. Build and support

Sequences count in leading-zero mono accent. The numbers are always generated, a counter or a map index, never typed. Build recipes, process steps, and section headings share the treatment.

04

Spacing & shape

Rhythm · 4px scale
  • 1px
  • 4px
  • 8px
  • 16px
  • 24px
  • 32px
  • 64px
  • 96px
Shape

Square corners everywhere; the brand is geometric. rounded-none on cards, buttons, inputs. No shadows; hierarchy comes from the 1px ink-100 border and background shifts (cream → card white).

Breakpoints

Mobile-first; base styles target the phone. Two breakpoints: tablet 768px and desktop 1024px. Multi-column layouts stack to one column below tablet. The container caps at max-w-6xl (1152px), reading text at max-w-prose (65ch).

05

Links, buttons & focus

Interaction runs on two rules. Motion is earned, underlines grow and arrows nudge, never instant and never a static underline at rest. And every hover has a matching:focus-visible state, so keyboard users get the same affordance as the mouse.

Links & buttons

Live, not screenshots. Hover each one, or pressTab to walk them with the keyboard and watch the focus ring follow.

Text link

Use for inline links inside body copy. A bare <a> is a text link — the language is an element default, so any class opts an anchor out and UI links exempt themselves. Ochre at rest, shifting to ink on hover; the underline is always present and never animates. That grow is reserved for nav and CTA links.

Nav link

Use for top-level navigation, like the header. Mono, uppercase, tracked 0.12em; sits muted at ink-700 and darkens to ink as the underline grows in from the left.

Button

Use for primary actions and CTAs. Ink fill, darkens to ochre on hover and focus, and nudges the stroke arrow 8px right. Square corners, no shadow.

On ink

Use for links on dark backgrounds, the footer and dark bands. Mono, cream, with a cream underline that grows the same way; it stays cream on hover, never the ink used on light surfaces.

Focus states

A 2px ring (#2e2e2e) at 2px offset, floated on a 6px halo (#fefefe). From the element outward it reads halo, ring, halo, so one of the two layers contrasts with any background. Ink surfaces declare data-surface="ink" and the pair inverts: white ring, ink halo. Applied with:focus-visible so it shows for keyboard and assistive tech without flashing on every mouse click. It rides on top of the hover treatment, never replaces it. The cards below carry data-state="focus", which pins the real rules: the same ring, the same ochre fill, the same nudged arrow and drawn underline a keyboard triggers.

Button

Ochre fill with the ring on its halo; the pair reads against any fill without special cases.

Form field

Border darkens to ink and the ring sits 2px off on its halo, the same treatment every element gets.

Link

Persistent underline with the ring riding its halo, so the two never collide.

On ink

The inverted pair on a dark band: white ring, halo melting into the ink.

Do

Give every interactive element a visible :focus-visible ring, and match every hover with an equivalent focus state. Keep the offset clear of the growing underline.

Don't

Never set outline:none without a visible replacement, signal state with color alone, or hide an action behind a hover a keyboard can't reach.

06

Icons

UI icons are Heroicons (outline), a 24×24 grid with a 1.5px stroke, dropped in inline so they inherit currentColor. The only custom mark is the waypoint triangle from the logo set; everything else is Heroicons, unmodified.

arrow-right
chevron-down
map
code-bracket
arrows-right-left
envelope
shield-check
swatch
Do

Use the outline set at 1.5px, inline, with stroke: currentColor so they theme. Size 16–28px, aria-hidden="true" when decorative. Accent (#826012) only for emphasis, like the service rows.

Don't

Don't mix outline with solid icons, recolor them off-palette, or press the waypoint triangle into service as a generic UI icon.