Loading Mountain Man Travels
Charting the route
Skip to content
Mountain Man Bhutan Adventures
Brand Guidelines

How this brand is built

The mark, the palette, the type and the motion - written down so the next page, poster or partner post looks like it came from the same mountain.

Foundation

The brand in one page

Everything below is enforced in code, not aspiration. The palette, the type scale and the motion timings are single-source values in the stylesheet - this page reads them back rather than restating them, so what you see here is what the site actually ships.

Name
Mountain Man Bhutan Adventures
Short form
MountainMan
Tagline
Explore Bhutan with the Mountain Man
Positioning
Small-group Bhutan tours led by local guides - treks, monasteries, festivals, and high mountain passes.
Home
Thimphu, Bhutan
Principles

Four things that decide everything else

When a layout, a colour or a sentence is in question, these are what it gets measured against.

  • Principle

    Bold, not decorated

    Solid fills, sharp corners, big type. Every element earns its place by carrying information - nothing is added to fill space or soften an edge.

  • Principle

    A guide, not a sales page

    The voice is warm, knowledgeable and unhurried. We describe what a trip is actually like, including the hard parts, and let the reader decide.

  • Principle

    Editorial before interface

    Pages read like a printed feature - numbered sections, a serif display face, photographs at full bleed - rather than a dashboard of identical cards.

  • Principle

    The mountain is the hero

    Brand colour is ink and accent, never wallpaper. Photography carries the landscape; the interface stays out of its way.

The Mark

Twin peaks, drawn in code

One inline SVG, filled with currentColor - so the mark takes the ink of whatever surrounds it instead of shipping in a dozen coloured variants.

On navy
On surface
On primary
16px min
32px
48px
64px
One source, drawn in code
The mark is a single inline SVG in src/components/svgs/logo.tsx. It fills with currentColor, so it inherits the surrounding text colour and works in both themes without a second file.
Never a raster copy
No PNG or JPG of the mark in the interface. The favicon, icon.svg and apple-icon.png in src/app/ are exported from the same path data and are regenerated together whenever the mark changes.
Clear space and minimum size
Keep free space of at least a quarter of the mark's width on every side, and never render it below 16px - the twin-peak notch closes up and it reads as a smudge.
No recolouring, no effects
The mark takes the colour of its context and nothing else. No gradient fill, no outline stroke, no shadow, no rotation, and no stretching to a non-square box.
Colour

Cool ink on warm paper

Five brand hues and two neutral scales. The hues are ink, links and accents; the neutrals are the ground they sit on - which is why no card, band or panel is ever a pale wash of the brand blue.

Brand hues--brand-*

Primary

#0A395C

foreground (light)

Body ink on light surfaces, the dark footer and CTA bands, and the source hue every dark-mode surface is mixed from.

Secondary

#1894E0

primary (light)

Primary buttons, links and accents in light mode - the one saturated colour on a light page.

Sky

color-mix(in oklab, secondary 55%, white 45%)

primary (dark), ring, chart-1

Focus outlines and stat numerals in both themes; leads as the button colour in dark mode, where it has the contrast to carry it.

Ice

#C8E6FF

accent detail only

Rare decorative highlight - star ratings, a hairline on navy. Never a large fill.

White

#FFFFFF

background (light)

The light canvas, and the text laid over primary buttons.

Light surfacespaper → bone → line

Paper

97% white, 3% primary

muted

The alternating section band - just off white.

Bone

93% white, 7% primary

secondary

Surface and pill fills, where a pale-blue tint used to sit.

Line

88% white, 12% primary

border, input

Hairline rules, dividers and inactive dots.

Dark surfacesvoid → coal → slate → iron

Void

95% black, 5% primary

background, card, popover

The near-black dark canvas. Cards sit flush with it, not on it.

Coal

80% black, 20% primary

muted, accent

The alternating band in dark mode - just off background.

Slate

55% black, 45% primary

secondary

Surface and pill fills in dark mode.

Iron

25% black, 75% primary

border, input

Hairlines - the most brand-tinted tier, so a rule stays visible against near-black.

Using it

  • Reach for the semantic token - bg-background, text-muted-foreground, border-border - so both themes follow automatically.

    A raw palette class or hex in a component: bg-white, text-gray-500, dark:bg-black, #1894E0.

  • Let warm neutral paper carry the surfaces and keep the cool brand blue for ink, links and accents.

    Pale-blue fills on every card and band - the single most generic look the palette is built to avoid.

  • Rebrand by editing the five --brand-* values in globals.css and nothing else.

    Patching a component when a colour looks wrong, which leaves the two out of step for good.

  • Verify every new pairing at WCAG AA - 4.5:1 for body, 3:1 for large text and UI - in both themes.

    Forcing sky into light-mode buttons, where it can't carry white text.

Typography

Three faces, three jobs

A condensed display serif for headings, a warm sans for reading, and a mono for the small tracked label voice. Nothing else gets added without a reason that survives an argument.

Display

Oswald

font-serif · --font-oswald

Every h1-h3 and the wordmark, applied automatically in base CSS. Condensed and vertical - it carries the storytelling voice and echoes the peaks in the mark.

Body

Quattrocento

font-sans · --font-quattrocento

Body copy, ledes and interface text - everything by default. Warm and highly legible at small sizes, which is where most of the reading happens.

Label

Roboto

font-mono · --font-roboto

The small tracked-uppercase label voice: section eyebrows, the 01 — numeral, nav links, spec-sheet labels. Never used for running text.

  • text-display-lg

    48 → 88px, fluid

    The page h1 in the hero. Exactly one per page.

  • text-display

    36 → 56px, fluid

    Every section h2, so h1 always stays dominant.

  • text-2xl / 3xl

    24 → 30px

    Sub-headings and list titles inside a section.

  • text-lg / xl

    18 → 20px

    Lede paragraphs under a heading.

  • text-base

    16px

    Body copy.

  • text-xs / sm

    12 → 14px

    Captions, meta lines, and the mono label voice.

Photography

Full-bleed, and always real

One frame treats every photo on the site - shown here with four of the site's own images, not a mockup of the frame.

Full-bleed, always cropped

Every photo fills its frame edge to edge via object-cover, inside a fixed-aspect box sized for the layout it's in - a wide banner, a portrait panel, a square tile. No padding, no border, no rounded corners around it.

A permanent scrim, not a hover reveal

A bottom-to-top gradient sits on every photo at rest, not just on hover, so any overlaid caption stays legible from the first frame. It lightens slightly under the cursor so the photo reads as stepping forward - the site's only hover affordance on imagery, since there are no borders or shadows to lean on.

The brand gradient is the loading state

A diagonal secondary-to-primary gradient sits underneath every frame. It's what a reader sees before a real photo is set, and what they see for the instant a real one is still loading - never a grey box, a spinner, or a broken-image icon.

Alt text describes; a caption labels

Alt text is the real description for anyone who can't see the photo. A caption, where one exists, is a short eyebrow-voice tag for scanning - the two are never the same string, and a caption is always aria-hidden so it never doubles up on a screen reader.

A dzong fortress overlooking a Bhutanese valley
Paro Taktsang, the Tiger's Nest monastery, on its cliffside
Trekkers on a high alpine trail in the Bhutanese Himalaya
Karma on a Bhutanese ridge
  • A real, specific Bhutanese scene - a named pass, a real festival, a real guide.

    Generic mountain stock that could be any range on earth.

  • object-cover inside a fixed-aspect frame, cropped deliberately for a banner, portrait, or panel slot.

    An uncropped image squeezed into a box, distorting its proportions.

  • A stand-in photo marked TODO(content) in the config module that owns it, tracked in docs/DEPLOYMENT.md.

    A placeholder shipped silently, with nothing noting it needs replacing before launch.

  • next/image, sourced from next.config.ts's remotePatterns allowlist - every host verified before it ships.

    An unverified external URL dropped straight into markup.

Iconography

One stroke, one hand

Every functional icon comes from lucide-react - stroke-based, sized off a fixed scale, and coloured by the text around it, never a hex of its own.

  • Action, forward motion
  • Confirmation, a done state
  • A contact channel
  • A place, an itinerary stop
  • Terrain, altitude
  • A rating

Trail Hiker

The animated progress marker in the How It Works stepper, walking the timeline as the section scrolls. Drawn in currentColor, same contract as every lucide icon.

WhatsApp Glyph

lucide-react ships no brand icons, so this fills the one real gap - a solid currentColor mark, not an outline recreation of someone else's logo.

lucide-react, and nothing else

Every functional icon on the site comes from the same library - stroke-based, 2px weight, never filled. One consistent hand drew all of them, which is most of why a page full of icons still reads as one system.

A fixed size scale, not one-off numbers

16px for inline meta, 20px for section markers, 24px for nav and header controls, 32px and up for a hero-scale mark. An icon sized outside that scale is a sign the layout needs a different treatment, not a bigger icon.

Colour follows text, never a hex of its own

An icon takes currentColor or a semantic token - text-primary, text-muted-foreground - so it changes with theme and context automatically. A hardcoded fill is the one way an icon can silently break in dark mode.

An icon labels; it never replaces the label

Every icon is aria-hidden and sits beside real text, except the rare icon-only control, which carries an aria-label instead. Nothing on this site communicates through a glyph alone.

  • A lucide-react icon, aria-hidden, paired with a visible label.

    A bare icon with no adjacent text and no aria-label.

  • A size step from the scale - 16, 20, 24, or 32px and up.

    An arbitrary one-off icon size picked to fill a gap.

  • currentColor or a semantic token, so dark mode follows automatically.

    A hardcoded hex fill baked into the icon markup.

  • A custom SVG mark only for a brand-specific glyph the library doesn't ship - the WhatsApp icon, the trail hiker.

    A hand-drawn recreation of an icon lucide already has.

Patterns

The shapes that repeat

Five structures reused site-wide instead of a card grid - each one a genuine composition, not a restyle of the last.

  • Banded sections

    Full-width bands alternate background/muted/navy down the page, each with its own vertical rhythm - compact, default, or spacious - so no two consecutive sections read the same.

    Every page on the site.

  • The mountain seam

    A peak silhouette caps one band and fills with whatever colour comes next, so two bands read as one continuous range instead of a hard edge.

    Below the home hero; above every closing CTA.

  • The hairline spec sheet

    A term and its description, separated by a single hairline rule instead of a bordered card - a row reads as one entry in a list, not an object floating in its own box.

    Visa steps, packing lists, FAQs, this page's own Foundation section.

  • The bento tile grid

    Solid-fill tiles in a fixed four-colour rotation, sized unevenly so the grid reads as composed rather than uniform. No two adjacent tiles ever share a fill.

    Home's WhyChooseUs, About's kingdom stats, this page's Principles.

  • The mono-numeral sequence

    01, 02, 03 in the tracked mono label voice, not a bullet or an icon - a numbered list that reads as procedure rather than decoration.

    Visa's process steps, Travel Essentials' etiquette list.

Design Language

Bold minimalism, stated as rules

These are the decisions that keep the site from drifting back toward the soft, rounded, shadowed default that every template shares.

  1. Corners are sharp, everywhere

    The --radius token is 0, which flattens every rounded-* utility site-wide. Badges, pills, avatars and carousel dots are rectangles. If rounding ever comes back, it comes back by changing that one token.

  2. No shadows, no borders as decoration

    Depth comes from solid fills meeting each other, not from a soft edge. Hairline rules are structural dividers, not card outlines - and there is no box-shadow anywhere on the site, focus outlines included.

  3. No glass, no blur, no gradient soup

    Frosted panels and soft translucent cards are the house style of every template. Surfaces here are opaque and definite.

  4. Lift is movement, not glow

    An interactive element rises half a step or shifts its fill on hover. It never gains a halo, a ring or a drop shadow.

  5. No two neighbours share a layout

    Consecutive sections use different idioms - editorial list, typographic index, mosaic, pinned trail, split panel - so a page reads as a sequence rather than a repeated card grid.

  6. Sections alternate and breathe unevenly

    Bands step between background, muted and navy, and vertical space steps between compact, default and spacious. Uniform rhythm top to bottom is the tell we design against.

Motion

Decisive, never bouncy

Motion clarifies; it never decorates. Every animation answers one of three questions - where did this come from, what changed, is the system working. If it answers none, it is cut. Timings are tokens, never a literal at the call site.

Easing

Hover a row to run it

ease-enter

cubic-bezier(0, 0, 0.2, 1)

Arriving: decelerate in. Reveals, panels, page entrances.

ease-exit

cubic-bezier(0.4, 0, 1, 1)

Leaving: accelerate away.

ease-standard

cubic-bezier(0.4, 0, 0.2, 1)

Moving within the page. Hover, press and state flips.

Duration

duration-press

60ms

Pointer-down. Has to beat perception.

duration-instant

120ms

Colour and state flips: hover, active, focus.

duration-quick

220ms

Small transforms: arrows, icons, badges.

duration-settle

380ms

Entrances: reveals, panels, page enter.

duration-stage

520ms

The largest moment on a page. Used sparingly.

Transform and opacity only
Those two stay on the compositor. Width, height, top, left, filter and box-shadow force layout or paint, and are never animated.
Four states, every control
Rest, hover fill shift, press, focus-visible outline. Press is CSS :active, inverts the hover lift, and goes in faster than it comes out - physical controls resist quickly and return slowly.
Motion is additive, never load-bearing
Every page is complete and readable with no JavaScript, no scroll-driven animation support, and reduced motion on. Nothing is ever hidden waiting for a script to arrive.
Nothing bounces
No spring, overshoot or elastic easing, and no parallax, cursor followers, typewriter text or ripples. Sharp corners and rubber motion tell two different stories.
Voice

A guide talking, not a brochure

The writing carries as much of the brand as the palette does - and it is the part that most often slips first.

Specific over superlative

A named pass, an altitude, a month. Detail is what makes a trip sound real; adjectives are what make it sound like every other operator.

Honest about the hard parts

If a trek is long, cold or high, the copy says so before the booking does. Managing expectations is the service.

Unhurried

No countdowns, no scarcity, no exclamation marks. The reader is planning a trip months out and can be trusted with the time.

Plain words, full sentences

Write the way a guide talks on the trail. No industry shorthand, no stacked marketing fragments.

  • Eleven days, two passes above 4,000m, and three nights under canvas.

    An unforgettable journey of a lifetime!

  • Spring and autumn are the two clear windows. Summer is green, wet and quiet.

    Bhutan is amazing all year round!

  • Tell us your dates and we'll send a first-draft itinerary, usually within a day.

    Book now - limited spots remaining!

  • Every visitor needs a visa arranged through a licensed operator. Here is exactly how it works.

    We handle all the boring paperwork so you don't have to worry about a thing.

Source of Truth

Where each of these actually lives

Change a value in the file that owns it and the whole site follows. Change it anywhere else and the two drift apart for good.

src/app/globals.css
Every colour token, the type scale, --radius, and the motion easings and durations.
src/config/site.ts
Name, tagline, description, URL and contact details. No brand string is hardcoded anywhere else.
src/components/svgs/logo.tsx
The mark's path data - and by extension the favicon and app icons exported from it.
src/app/layout.tsx
The three typefaces, loaded through next/font and exposed as CSS variables.
docs/STANDARDS.md
The enforceable version of this page, plus accessibility, SEO, performance and security rules.

Your Bhutan, Your way

Tell us what draws you to the Himalayas and we'll build an itinerary around it - no templates, no pressure.

Request a custom itinerary