Farholm brand & design system

Farholm is a thoughtful, independent travel-planning agency. The site is a hand-crafted Eleventy static site + a Cloudflare Worker (the /trip portal and /admin). There is no JS framework — semantic HTML, one stylesheet (css/styles.css), self-hosted fonts, and a deliberately tight CSP. The brand's edge is that it looks crafted and consistent, not template-generated. Your job is to keep it that way.

Always work from the live source, not from memory:

If a value here ever disagrees with css/styles.css, the stylesheet wins — update this skill.

Identity in one line

A north-sea sunrise: deep teal anchored by a single rising-gold accent.

Tagline: "Discover your own story." The logo mark is a rising sun over a horizon line (see the inline SVG in _includes/nav). The recurring visual motif is the .horizon element — a thin horizon line with a gold sun — used under hero headings. Reach for first light, coastal, quiet-fjords-to-city imagery, never busy/loud/stocky travel clichés.

Color — use the tokens, never raw hex

All color comes from CSS custom properties defined in :root in css/styles.css. Never hardcode a hex value in new markup or styles — reference the token, so dark mode and future retunes keep working.

Token Value Role
--ink #10393F Deep north-sea — headings, dark sections, body text
--ink-2 #0C2E33 Darker ink — hero gradient base, ink-button hover
--sea #1F5C5F Links, secondary accents, card icons
--gold #E3A845 Primary CTA, the rising sun, accents on dark
--gold-2 #D2962F Gold hover, eyebrow on light
--slate #46605F Muted text, captions, card body
--mist #E4EDE9 Alternate section background
--fog #F4F7F5 Page background
--white #FFFFFF Cards, surfaces

Semantic tokens (--bg, --surface, --surface-alt, --text, --border, --input-bg, --input-border, --shadow) are what most components should use — they flip in dark mode. The raw brand colors above stay fixed so the intentionally-dark sections (hero, footer, .section--ink) look identical in light and dark. Rule of thumb: for surfaces/text that should adapt, use the semantic token; only use a fixed brand color when you specifically want it the same in both themes (e.g. gold accents, the dark bands).

Typography

Sizes come from tokens — don't invent px values: --size-hero, --size-h1, --size-h2, --size-h3 (1.3rem), --size-body (1.0625rem), --size-small (0.9rem). Spacing/shape: --space-section, --width-content (70rem), --width-prose (44rem), --radius (10px), --shadow.

Component vocabulary — reuse, don't reinvent

Compose pages from the existing classes. Before writing new CSS, check whether a component already exists. Typical page = a stack of .sections, each opening with an .eyebrow + Young Serif h2, inside a .container.

Example — a standard content section:

<section class="section section--mist">
  <div class="container">
    <p class="eyebrow">Why Farholm</p>
    <h2>Planning that starts with you</h2>
    <div class="cards">
      <article class="card">
        <svg aria-hidden="true"><!-- 1.8 stroke, currentColor --></svg>
        <h3>Considered, not packaged</h3>
        <p>Every itinerary is built around how you actually like to travel.</p>
      </article>
    </div>
  </div>
</section>

Copy voice

Considered, warm, and understated-premium. Plainspoken — confident without hard-selling. Short sentences. Concrete over superlative. Speak to a discerning traveller who values being known, not upsold.

Honesty in claims is a brand value — keep these established corrections:

Use _data/site.json for any contact detail, phone, social handle, or legal name so it stays single-sourced. Refer to the company as Farholm (legal: Farholm LLC).

Guardrails — accessibility, CSP, and the build

These aren't optional polish; they're why the site is trustworthy and fast.

When you finish

Verify with the repo's own gates before calling it done: npm run check (syntax), npm test (Worker integration), npm run build (Eleventy). If a web-quality/accessibility skill is installed, a quick a11y/SEO pass on new pages is worth it. Keep this skill honest — if you change a token or add a core component, update the relevant section above.