Internal

Style Guide

Every component and token the template ships with. Use this page to eyeball regressions after a theme swap or to pick reusable pieces when building new sections.

01 · Palette

Three families, named tokens

Always use named classes — brand-*, ink-*, paper-* — never raw hex.

Brand — Wesmor orange

Two steps in the brand scale carry distinct semantic roles. Treat them as different colors when designing — not interchangeable shades.

brand-500 · Logo / accent orange

#EF7E31 — sampled from the Wesmor shield mark. Use for decorative accents: italic headline highlights, eyebrow labels, the brand underline, the hero pulse dot, icon tiles at low opacity, hairline rules, drop caps. Do not use as a solid surface under white text — fails WCAG AA at 2.64:1.

brand-600 · CTA / action orange

#D9651B — the deeper interactive orange. Use for solid surfaces with white text on top: primary phone buttons, sticky call bar, accent service tiles, the Testimonials CTA card. Contrast vs white = 3.52:1 (passes WCAG AA Large for bold ≥18px, where CTA labels live). Hover state brightens back to brand-500.

brand-50
brand-100
brand-200
brand-300
brand-400
brand-500
brand-600
brand-700
brand-800
brand-900
brand-950

Ink — slate neutrals

ink-50
ink-100
ink-200
ink-300
ink-400
ink-500
ink-600
ink-700
ink-800
ink-900
ink-950

Paper — cool off-whites

paper-50
paper-100
paper-200
paper-300

02 · Typography

Fraunces display, Inter body

H1 hero — font-display

Your bold headline goes here

H2 section heading

A full range of services

H3 subheading

Reason title goes here

Body — Inter, text-base / text-lg

Body copy uses Inter at text-base or text-lg with relaxed leading. Inline emphasis uses the brand-underline utility for a subtle highlight.

Eyebrow — light surface (text-brand-600)

Eyebrow goes here

Eyebrow — dark surface (text-brand-300)

Eyebrow goes here

03 · Buttons

PhoneButton component

Variants primary · secondary · ghost. Sizes sm · md · lg.

Primary — on light surface

Primary — on dark surface

Secondary — bordered light

Ghost — text link style

Number-only (no "Call " prefix)

04 · Utilities

Brand-specific utilities

brand-rule — hairline divider

A 1.5rem brand-colored hairline. Used flanking eyebrow text.

brand-underline — inline emphasis

Use brand-underline to draw a subtle highlight behind a phrase inside body copy.

drop-cap — editorial first letter

Drop-cap floats a large brand-colored first letter into the paragraph. Useful for a single editorial moment — use it once per page, never twice. Pairs well with the AboutBand body copy.

grain-overlay — tactile texture on dark surfaces

Adds subtle SVG film grain via ::before. Used on Hero and dark sections to add depth without imagery.

05 · Service icons

14 generic line icons

Industry-agnostic set. 1.4px stroke, 32×32 viewBox, currentColor. Use <ServiceIcon name="..." />.

06 · Sections

Composable section library

Reuse these in src/pages/index.astro instead of inventing new ones. All read from src/config/content.ts by default.

See them composed end-to-end on the homepage.

07 · Writing

Voice & copy rules

Apply these when filling out content.ts for a new client. They keep the copy human and prevent the "AI tell."