SB
SPIRE BUSINESS
/Brand Guide
Internal Document · Confidentialv2.0 · 2025
Enterprise Brand System

Spire Business
Brand & Style Guide

The complete visual identity, voice, and design system for Spire Business — the brand of Linda Brown, Financial Architect & Fractional Chief Profitability Officer. This document governs all brand expressions across digital, print, and communications.

Color SystemTypographyComponentsVoice & ToneDeveloper Ref
01 — Brand Foundation

Who We Are & What We Stand For

Every design decision, word choice, and visual element flows from this foundation. When in doubt, return here.

Mission

To help service-based business owners design profitable, sustainable businesses — so they can pay themselves first, build wealth, and create the life they deserve.

Vision

A world where every small business owner has access to the financial clarity and strategic guidance that was once reserved only for large corporations.

Promise

We will always translate financial complexity into clear, actionable insight — and we will always make the engagement pay for itself.

Brand Personality

Spire Business embodies five core personality traits that should be felt in every touchpoint.

Authoritative
Expert, credible, decisive
Warm
Human, approachable, caring
Clear
Plain language, no jargon
Empowering
Builds confidence, not dependency
Aspirational
Focused on possibility and growth

Positioning Statement

"For service-based business owners who are working hard but not seeing the profit they deserve, Spire Business is the Fractional CPO partner that transforms financial chaos into clarity — unlike traditional bookkeepers or CPAs, we focus exclusively on building profitable, sustainable businesses through the Business Profit Roadmap and D.R.E.A.M. methodology."

Brand Hierarchy

ElementValueNotes
Business NameSpire BusinessAlways two words, never 'Spire' alone
FounderLinda BrownFull name on first reference; 'Linda' thereafter
Title (Primary)Financial ArchitectUsed in headlines and introductions
Title (Secondary)Fractional Chief Profitability OfficerFull form; abbreviated 'Fractional CPO'
CredentialProfit First Master CFOHighest certification level — always include
TaglineYour Business Should Be Paying You Back.Period included. Never alter.
MethodologyD.R.E.A.M.All caps with periods. Spell out on first use.
FrameworkBusiness Profit RoadmapTitle case. Proprietary — treat as a proper noun.
03 — Color System

Color Palette

The Spire palette is built on three pillars: Navy (authority, trust, expertise), Gold (prosperity, achievement, warmth), and White/Sky (clarity, space, openness). Every color has a specific role and should not be used interchangeably.

Primary Colors

Navy
oklch(0.28 0.09 264)
Primary brand color. Headlines, nav, hero backgrounds, CTAs.
Navy Dark
oklch(0.18 0.07 264)
Deep backgrounds, footer, maximum contrast contexts.
Navy Light
oklch(0.38 0.08 264)
Hover states, secondary backgrounds, dividers on dark.
Gold
oklch(0.72 0.12 75)
Accent, CTAs, italic headlines, rule lines, prosperity signals.

Supporting Colors

Gold Light
oklch(0.88 0.08 75)
Subtle gold tints, hover states, light backgrounds.
Sky Light
oklch(0.95 0.02 220)
Section backgrounds, alternating rows, card fills.
Sky Pale
oklch(0.97 0.01 220)
Page background, objection section, subtle differentiation.
White
oklch(1 0 0)
Card backgrounds, primary content areas, clean space.

Semantic / Status Colors

Success
oklch(0.65 0.17 162)
Best-in-class ratings, positive outcomes, checkmarks.
Info
oklch(0.65 0.18 220)
Good ratings, informational states, sky blue accents.
Warning
oklch(0.75 0.15 75)
Limited ratings, caution states, amber signals.
Error
oklch(0.63 0.22 27)
Poor ratings, error states, destructive actions.

Color Usage Rules

Do
Use Navy as the dominant color (60%), Gold as accent (10%), and White/Sky as breathing space (30%). This ratio creates authority without heaviness.
Don't
Use Gold as a background color for large areas. Gold is an accent — it loses power when overused. Never use it for body text on white.
Do
Pair white text on Navy backgrounds, and dark navy text on Gold backgrounds. Always verify WCAG AA contrast (4.5:1 minimum for body text).
Don't
Use Gold text on white backgrounds for body copy. Gold text is reserved for labels, eyebrow text, and accent headlines only — never paragraphs.

CSS Custom Properties

css
/* Spire Brand Colors — CSS Custom Properties */
/* Use these in Tailwind via: text-navy, bg-gold, etc. */

:root {
  /* Core Brand */
  --color-navy:       oklch(0.28 0.09 264);  /* #293980 */
  --color-navy-dark:  oklch(0.18 0.07 264);  /* #1a2456 */
  --color-navy-light: oklch(0.38 0.08 264);  /* #3d4f8a */
  --color-gold:       oklch(0.72 0.12 75);   /* #C9A84C */
  --color-gold-light: oklch(0.88 0.08 75);   /* #e8d5a0 */

  /* Backgrounds */
  --color-sky-light:  oklch(0.95 0.02 220);  /* #eef3f8 */
  --color-sky-pale:   oklch(0.97 0.01 220);  /* #f5f8fa */
  --background:       oklch(0.99 0.002 220); /* Near-white with cool tint */
}
04 — Typography

Type System

Spire uses a deliberate two-font system. Playfair Display carries authority, heritage, and editorial gravitas for all display and headline use. DM Sans provides clarity, warmth, and readability for all body and UI text. Never substitute either font.

Your Business Should
Be Paying You Back.
Playfair Display
Google Fonts · Serif · Display typeface
Weights used: 400 (regular), 600 (semibold), 700 (bold), 800 (extrabold)
Styles: Normal + Italic (for gold accent phrases)
We help service-based business owners design profitable, sustainable businesses — so they can pay themselves first, build real wealth, and create the life they deserve. No jargon. No overwhelm. Just clarity.
DM Sans
Google Fonts · Sans-serif · Variable font
Weights used: 300 (light), 400 (regular), 500 (medium), 600 (semibold), 700 (bold)
Optical size: 9–40 (variable axis)

Type Scale

RoleFontSizeWeightLine HeightTailwind
Display / Hero H1Playfair Displayclamp(2.2rem, 4vw, 3.6rem)700–8001.10font-display text-5xl md:text-6xl
Page H1Playfair Displayclamp(2rem, 3.5vw, 3rem)7001.12font-display text-4xl md:text-5xl
Section H2Playfair Displayclamp(1.8rem, 3vw, 2.6rem)7001.15font-display text-3xl md:text-4xl
Card H3Playfair Display1.25rem – 1.5rem7001.2font-display text-xl md:text-2xl
Subheading H4DM Sans1rem – 1.125rem6001.4font-body font-semibold text-base
Body LargeDM Sans1.125rem4001.75font-body text-lg
Body DefaultDM Sans1rem4001.7font-body text-base
Body SmallDM Sans0.875rem4001.65font-body text-sm
Caption / LabelDM Sans0.75rem500–6001.5font-body text-xs font-medium
Eyebrow / TagDM Sans0.6875rem7001.4font-body text-[11px] font-bold uppercase tracking-[0.2em]
NavigationDM Sans0.875rem5001.0font-body font-medium text-sm
ButtonDM Sans0.875rem6001.0font-body font-semibold text-sm
Code / MonoSystem Mono0.8125rem4001.6font-mono text-[13px]

Typography Live Specimens

Display / Hero
Your Business Should Be
Paying You Back.
Section H2

The Financial Architecture Your Business Deserves

Eyebrow Label
Financial Architect · Fractional CPO
Body Large

You work too hard to wonder where the money went. Linda Brown is a Financial Architect who helps service-based business owners design profitable, sustainable businesses — without the overwhelm.

Body Default

Most business owners don't have a revenue problem — they have a profit problem. Revenue goes up, but the money never seems to stay. That's not a hustle problem. It's a systems problem. And it's exactly what we fix.

Blockquote / Testimonial

"My business is FINALLY profitable! Linda gave me the confidence to run my business with clarity."

— Laura Credico, Owner, Interiors By Laura

Letter Spacing Rules

Display Headlines
-0.02em
Tight tracking for large display text — creates editorial density
Body Text
0 (default)
No tracking modification — DM Sans is optimized for reading
Eyebrow / Labels
0.15em – 0.2em
Wide tracking for small uppercase labels — improves legibility
05 — Spacing & Layout

Spacing System & Grid

Spire uses Tailwind's 4px base unit system. All spacing decisions should be made in multiples of 4px. Generous whitespace is a brand value — it signals clarity and confidence.

Spacing Scale

space-1
4pxIcon gap, tight inline spacing
space-2
8pxCompact element padding, small gaps
space-3
12pxBadge padding, list item gaps
space-4
16pxDefault padding, card inner spacing
space-5
20pxSection element gaps
space-6
24pxCard padding, form field spacing
space-8
32pxSection padding (mobile), component gaps
space-10
40pxSection vertical padding
space-12
48pxLarge section padding
space-16
64pxSection padding (desktop)
space-20
80pxLarge section vertical padding
space-24
96pxHero section padding
space-28
112pxMaximum section padding

Container & Breakpoints

BreakpointMin WidthContainer PaddingMax WidthTarget Device
xs (default)0px1.25rem (20px)100%Mobile portrait
sm640px2rem (32px)100%Mobile landscape / large phone
md768px2rem (32px)100%Tablet portrait
lg1024px3rem (48px)1320pxTablet landscape / laptop
xl1280px3rem (48px)1320pxDesktop
2xl1536px3rem (48px)1320pxLarge desktop

Border Radius

rounded-sm
4px
rounded
8px
rounded-md
6px
rounded-lg
8px
rounded-xl
12px
rounded-2xl
16px
rounded-full
9999px

Section Rhythm

Sections follow a consistent vertical rhythm. Hero sections use py-20 to py-28. Content sections use py-16 to py-24. Compact sections use py-12 to py-16.

Hero / Landingpt-28 pb-0 (with wave divider)
Primary Contentpy-20 md:py-28
Secondary Contentpy-16 md:py-24
Compact / CTApy-14 md:py-20
Footerpy-16
06 — UI Components

Component Library

All interactive components follow consistent patterns. Below are the canonical implementations — use these as the reference for any new components or pages.

Buttons

tsx
{/* Primary Navy CTA */}
<button className="group flex items-center gap-2 bg-navy text-white font-body font-semibold text-sm px-6 py-3 rounded transition-all hover:bg-navy-dark hover:shadow-lg hover:-translate-y-0.5">
  Book a Call <ArrowRight size={14} className="group-hover:translate-x-1 transition-transform" />
</button>

{/* Gold CTA */}
<button className="group flex items-center gap-2 bg-gold text-navy-dark font-body font-semibold text-sm px-6 py-3 rounded transition-all hover:bg-yellow-500 hover:shadow-lg hover:-translate-y-0.5">
  Start Your Discovery Call <ArrowRight size={14} />
</button>

{/* Secondary Outline */}
<button className="border border-navy text-navy font-body font-medium text-sm px-6 py-3 rounded transition-all hover:bg-navy hover:text-white">
  Learn More
</button>

Section Eyebrow Pattern

Every section begins with this eyebrow pattern — a gold rule, a label, and optionally a closing rule. This creates visual consistency and trains the reader's eye.

Section Label Here

Section Headline Goes Here

tsx
{/* Section Eyebrow Pattern — use at the start of every section */}
<div className="flex items-center gap-3 mb-3">
  <div className="h-px w-6 bg-gold" />
  <span className="font-body text-gold text-[11px] font-bold uppercase tracking-[0.2em]">
    Section Label Here
  </span>
</div>
<h2 className="font-display text-navy-dark" style={{ fontSize: "clamp(1.8rem, 3vw, 2.6rem)" }}>
  Section Headline Goes Here
</h2>

Cards

Service Card

Card description text goes here. Keep it concise and benefit-focused.

Learn more
20+
Years of Experience

"Linda changed everything for my business."

Client Name
Business Title

Form Elements

Badges & Tags

Gold TagNavy TagBestLimitedPoorDark Pill

Dividers & Decorative Elements

Gold Rule (section opener)
Horizontal Divider
Gold Left Border (blockquote)

Quote text goes here.

Wave Section Divider (SVG)
07 — Motion & Animation

Motion Principles

Motion in Spire is purposeful, subtle, and confidence-inspiring. Animations should feel like a natural extension of the brand — never flashy or distracting. Every motion serves a function.

Purposeful

Every animation communicates something: entrance, state change, or feedback. No decoration-only motion.

Subtle

Transforms are small (4–8px), durations are short (200–600ms), and easing is natural (ease, ease-out).

Consistent

All entrance animations use the same fadeInUp pattern. All hover states use the same -translate-y-0.5 lift.

Animation Tokens

TokenValueUse Case
Duration Fast150msButton hover, icon transitions, micro-interactions
Duration Default250msCard hover, nav transitions, color changes
Duration Medium400msMobile menu open/close, accordion expand
Duration Slow600–700msSection entrance animations (scroll-triggered)
Duration Counter1800msAnimated number counters (60 steps)
Easing DefaulteaseGeneral transitions
Easing Entranceease-outElements entering the viewport
Easing Exitease-inElements leaving (rarely used)
Translate Hover-translate-y-0.5 (2px)Button and card hover lift
Translate EntrancetranslateY(24px) → 0Scroll-triggered section entrance
Stagger Delay60–100ms per itemList items, grid cards, accordion items

Scroll Animation Pattern (useInView)

tsx
// Standard scroll-triggered entrance animation
// Used on every major section across the site

function useInView(threshold = 0.15) {
  const ref = useRef<HTMLDivElement>(null);
  const [inView, setInView] = useState(false);
  useEffect(() => {
    const observer = new IntersectionObserver(
      ([entry]) => { if (entry.isIntersecting) setInView(true); },
      { threshold }
    );
    if (ref.current) observer.observe(ref.current);
    return () => observer.disconnect();
  }, [threshold]);
  return { ref, inView };
}

// Usage:
const { ref, inView } = useInView(0.1);

<div
  ref={ref}
  className={`transition-all duration-700 ${
    inView ? "opacity-100 translate-y-0" : "opacity-0 translate-y-6"
  }`}
  style={{ transitionDelay: "100ms" }} // stagger with index * 80ms
>
  Content here
</div>
08 — Voice & Tone

Brand Voice

Spire's voice is the written expression of Linda's personality: knowledgeable without being condescending, warm without being casual, direct without being cold. Every word should make the reader feel seen, capable, and hopeful.

Voice Attributes

Empathetic First

We always acknowledge the reader's reality before offering a solution. They're working hard. They're frustrated. They deserve better.

"You work too hard to wonder where the money went." — not "Our services help businesses improve profitability."

Plain Language

We translate financial complexity into plain English. No jargon, no acronyms without explanation, no condescension.

"You're not keeping enough of what you earn" — not "Your net profit margin is suboptimal relative to industry benchmarks."

Specific & Concrete

We use specific numbers, timeframes, and outcomes. Vague promises erode trust. Specific claims build it.

"Most clients recover more in the first 90 days than the entire cost of the engagement" — not "We deliver great ROI."

Confident, Not Arrogant

We speak with authority because we've earned it — but we never talk down to clients. We're a partner, not a superior.

"Here's what we've seen work" — not "Most business owners make this mistake."

StoryBrand Framework Application

All primary copy — especially homepage and landing page copy — follows the StoryBrand 7-part framework. This is non-negotiable for any primary marketing copy.

StepElementSpire Application
1Character (Hero)Service-based business owner who works hard but struggles to pay themselves consistently
2ProblemExternal: Revenue doesn't translate to profit. Internal: Confusion, shame, fear. Philosophical: You deserve to be paid for your work.
3GuideLinda Brown — Financial Architect with 20+ years, Profit First Master CFO, creator of the Business Profit Roadmap
4Plan3-step: (1) Discovery Call, (2) Business Profit Roadmap, (3) Implement D.R.E.A.M. System
5Call to Action"Book Your Free Discovery Call" — direct, low-risk, specific
6Avoid FailureContinued profit leaks, paying yourself last, building a business you can't sell
7SuccessConsistent profit, paying yourself first, financial clarity, a business that works for you

Word Choice Guide

Use ThisNot ThisWhy
ProfitRevenueRevenue is vanity; profit is the goal
Financial ArchitectFinancial Advisor / ConsultantArchitect implies building, designing — active creation
Business Profit RoadmapFinancial Plan / StrategyProprietary framework — always capitalize
Discovery CallSales Call / ConsultationRemoves sales pressure; implies mutual exploration
Pay yourself firstOwner compensationEmotional, relatable, human language
ClarityUnderstanding / KnowledgeClarity implies relief from confusion — emotionally resonant
PartnerVendor / Provider / ServicePositions relationship as collaborative, not transactional
Fractional CPOPart-time CFO / Financial ConsultantCPO = Chief Profitability Officer — unique positioning

Tone by Context

Homepage / Hero
Empathetic + Aspirational

Lead with the client's pain, then immediately offer hope. Warm, direct, human.

Services Pages
Confident + Specific

Outcome-focused. What will they have after working with us? Concrete and credible.

Testimonials
Authentic + Celebratory

Let clients speak. Don't editorialize. Their words are more powerful than ours.

Objection Handling
Honest + Reassuring

Acknowledge the concern fully before responding. Never dismiss or minimize.

Contact / CTA
Direct + Low-Pressure

Make the next step feel easy and safe. Remove friction. Be specific about what happens next.

About / Bio
Personal + Credible

Linda's story should feel human first, expert second. Credentials support, not lead.

09 — Imagery & Icons

Photography & Illustration

Imagery should reinforce the brand values: authority, warmth, clarity, and aspiration. Every image should make the viewer feel that financial success is achievable — not intimidating.

Photography Style

Use
  • Professional, warm, approachable portraits of Linda
  • Clean, well-lit office and workspace environments
  • Confident business owners in collaborative settings
  • Abstract financial/architectural imagery (city skylines, blueprints)
  • Warm color temperature — golden hour, natural light
  • Depth of field — subject sharp, background soft
Avoid
  • Generic stock photos of anonymous people shaking hands
  • Cold, clinical, corporate imagery
  • Overly posed or stiff professional photos
  • Images with competing colors (red, orange, purple)
  • Dark, moody, or anxiety-inducing financial imagery
  • Charts and graphs as hero imagery (data, not people)

AI-Generated Imagery (Nano Banana Style)

The site uses AI-generated portrait illustrations of Linda in the "nano banana" style — a painterly, editorial illustration style that combines photorealism with artistic warmth. These are used for hero and about sections.

Generation Prompt Template
"Nano banana style illustration of a professional woman, brunette with warm brown hair, wearing a navy blue blazer over a white blouse, confident warm smile, [SETTING: executive office with city skyline / warm library setting], editorial portrait style, painterly realism, warm golden lighting, deep navy and gold color palette, high detail, professional financial executive, aspirational and approachable"

Icon System

All icons use the Lucide React library. Icons should be used at consistent sizes and always paired with text labels in UI contexts.

Target
Zap
BookOpen
Layers
Eye
Sparkles
ArrowRight
Check
ChevronRight
ExternalLink
Code2
MessageSquare
ContextSizeColor
Service card iconsize={18}text-navy (in gold/10 bg container)
Navigation iconsize={14}text-slate-400 / text-gold (active)
Button arrowsize={14-15}Inherits button text color
Feature list checkmarksize={16}text-gold or text-emerald-500
Section icon (large)size={24}text-navy (in gold/10 bg container)
Footer iconsize={14}text-white/50
10 — Developer Reference

Technical Implementation Guide

This section is the complete reference for developers and AI coding assistants implementing new pages or components for the Spire Business website. Follow these specifications exactly to maintain brand consistency.

Stack & Dependencies

TechnologyVersionNotes
React19.xClient-only SPA — no SSR
TypeScript5.6.xStrict mode — all components must be typed
Tailwind CSS4.xColors use OKLCH format in @theme inline block
Wouter3.xClient-side routing — use Link and useLocation
Framer Motion12.xAvailable but prefer CSS transitions for simplicity
Lucide React0.453.xIcon library — import named icons only
shadcn/uiLatestUI primitives — import from @/components/ui/*
Vite7.xBuild tool — dev server on port 3000

File Structure

bash
client/
  src/
    pages/           ← Page-level components (one per route)
    components/
      Navigation.tsx ← Sticky nav — import on every page
      Footer.tsx     ← Site footer — import on every page
      ui/            ← shadcn/ui primitives
    index.css        ← Global styles + Spire design tokens
  index.html         ← Google Fonts loaded here

Key files:
  client/src/App.tsx        ← Route definitions
  client/src/index.css      ← ALL design tokens live here
  client/src/pages/*.tsx    ← Individual page components

New Page Template

tsx
/*
 * SPIRE BUSINESS — [Page Name] Page
 * Design: Corporate Modernism meets Editorial Finance
 * Colors: Navy (#293980), Gold (#C9A84C), White, Sky-light
 * Typography: Playfair Display headlines + DM Sans body
 */

import { useEffect, useRef, useState } from "react";
import { Link } from "wouter";
import Navigation from "@/components/Navigation";
import Footer from "@/components/Footer";

// Standard scroll animation hook — copy this into every page
function useInView(threshold = 0.15) {
  const ref = useRef<HTMLDivElement>(null);
  const [inView, setInView] = useState(false);
  useEffect(() => {
    const observer = new IntersectionObserver(
      ([entry]) => { if (entry.isIntersecting) setInView(true); },
      { threshold }
    );
    if (ref.current) observer.observe(ref.current);
    return () => observer.disconnect();
  }, [threshold]);
  return { ref, inView };
}

export default function PageName() {
  const heroSection = useInView(0.1);

  return (
    <div className="min-h-screen bg-white overflow-x-hidden">
      <Navigation />

      {/* ── Hero Section ── */}
      <section className="pt-28 pb-0 md:pt-36 bg-navy overflow-hidden">
        <div className="container">
          <div ref={heroSection.ref} className={`max-w-3xl transition-all duration-700 ${
            heroSection.inView ? "opacity-100 translate-y-0" : "opacity-0 translate-y-8"
          }`}>
            {/* Eyebrow */}
            <div className="flex items-center gap-3 mb-4">
              <div className="h-px w-8 bg-gold" />
              <span className="font-body text-gold text-xs font-semibold uppercase tracking-widest">
                Eyebrow Label
              </span>
            </div>
            {/* Headline */}
            <h1 className="font-display text-white mb-5" style={{ fontSize: "clamp(2rem, 4vw, 3.2rem)" }}>
              Primary Headline<br />
              <span className="text-gold italic">Gold Italic Accent</span>
            </h1>
            {/* Subheadline */}
            <p className="font-body text-white/75 text-lg leading-relaxed max-w-2xl mb-8">
              Supporting description text goes here.
            </p>
            {/* CTA */}
            <Link href="/contact">
              <button className="group flex items-center gap-2 bg-gold text-navy-dark font-body font-semibold text-sm px-6 py-3 rounded transition-all hover:bg-yellow-500 hover:shadow-lg hover:-translate-y-0.5">
                Primary CTA
              </button>
            </Link>
          </div>
        </div>
        {/* Wave divider — always end navy hero sections with this */}
        <div className="mt-14">
          <svg viewBox="0 0 1440 48" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none" className="w-full block">
            <path d="M0 48L1440 48L1440 12C1200 48 720 0 0 36L0 48Z" fill="white" />
          </svg>
        </div>
      </section>

      {/* ── Content Section ── */}
      <section className="py-16 md:py-24 bg-white">
        <div className="container">
          {/* Section header */}
          <div className="text-center mb-12">
            <div className="flex items-center justify-center gap-3 mb-4">
              <div className="h-px w-8 bg-gold" />
              <span className="font-body text-gold text-xs font-semibold uppercase tracking-widest">
                Section Label
              </span>
              <div className="h-px w-8 bg-gold" />
            </div>
            <h2 className="font-display text-navy-dark mb-4" style={{ fontSize: "clamp(1.8rem, 3vw, 2.6rem)" }}>
              Section Headline
            </h2>
            <p className="font-body text-slate-500 text-base max-w-2xl mx-auto">
              Section description text.
            </p>
          </div>
          {/* Content here */}
        </div>
      </section>

      <Footer />
    </div>
  );
}

Critical Rules for AI Coding Assistants

1
Always import Navigation and Footer

Every page must start with <Navigation /> and end with <Footer />. These are never optional.

2
Use font-display for all h1/h2/h3

Playfair Display is the brand headline font. Never use font-body (DM Sans) for major headlines.

3
Use font-body for all UI text

DM Sans for all body copy, labels, buttons, nav items, captions. Never use font-display for paragraph text.

4
Gold is an accent, not a background

bg-gold is only used for CTA buttons and small badge elements. Never use it for section backgrounds or large areas.

5
Always use the eyebrow pattern before section headlines

Every section starts with: gold rule line + gold uppercase tracking-[0.2em] label + h2 headline.

6
Navy hero sections always end with the wave SVG divider

The wave SVG creates the smooth transition from navy to white. Never end a navy section abruptly.

7
Scroll animations use the useInView hook

Copy the useInView hook exactly as shown. Use opacity-0 translate-y-6 → opacity-100 translate-y-0 with duration-700.

8
Colors use OKLCH in CSS, hex in comments

In index.css, always use OKLCH format. In JSX inline styles, hex is acceptable. Always add hex as a comment.

9
Italic gold for headline accents

The pattern <span className='text-gold italic'>phrase</span> inside a Playfair Display headline is a core brand signature.

10
All CTAs include ArrowRight icon with hover animation

group-hover:translate-x-1 transition-transform on the ArrowRight icon inside a group button.

Adding a New Route

tsx
// In client/src/App.tsx:

// 1. Import the page component
import NewPage from "./pages/NewPage";

// 2. Add the route inside <Switch>
<Route path="/new-page" component={NewPage} />

// 3. To add to navigation, edit client/src/components/Navigation.tsx:
const navLinks = [
  { label: "Services", href: "/services" },
  { label: "Why Fractional CPO", href: "/why-fractional" },
  { label: "About", href: "/about" },
  { label: "Testimonials", href: "/testimonials" },
  { label: "Contact", href: "/contact" },
  // Add new link here:
  { label: "New Page", href: "/new-page" },
];

Image Handling

bash
# NEVER store images in client/public/ or client/src/assets/
# This causes deployment timeouts.

# CORRECT workflow:
# 1. Store originals in /home/ubuntu/webdev-static-assets/
# 2. Upload to CDN:
manus-upload-file --webdev /home/ubuntu/webdev-static-assets/image.jpg

# 3. Use the returned CDN URL in code:
# <img src="https://cdn.manus.im/..." alt="..." />

# Current CDN images in use:
# Hero portrait (Linda, nano banana style): CDN URL in Home.tsx
# About portrait (Linda, warm library): CDN URL in About.tsx

Accessibility Requirements

RequirementStandardImplementation
Color contrast (body)WCAG AA (4.5:1)Navy text on white: 8.2:1 ✓
Color contrast (large text)WCAG AA (3:1)Gold on navy: 4.1:1 ✓
Focus indicatorsVisible focus ringoutline-ring/50 applied globally in index.css
Alt textAll imagesDescriptive alt text required on all <img> elements
Keyboard navigationFull keyboard accessAll interactive elements must be keyboard-reachable
ARIA labelsButtons without textaria-label required on icon-only buttons
Heading hierarchyLogical h1→h2→h3One h1 per page; h2 for sections; h3 for cards
Mobile touch targets44×44px minimumAll buttons and links meet minimum touch target size
SB
SPIRE BUSINESS

Brand & Style Guide · Version 2.0 · 2025

Internal document. All brand elements are proprietary to Spire Business and Linda Brown.