f the fox / design system v1.0

design system · v1.0

the fox design system.

how the brand looks, types, sounds, and moves. tokens here are the source of truth — every interface across thefoxhair.com, wigfam.com, and internal tools resolves back to this document.

VERSION
1.0.0
UPDATED
2026-04-27
OWNER
allan / the fox
STATUS
● live
02

color.

three maroon values, one ink, hairline borders. no decorative accents — color does meaning, not mood.

brand primary tokens.css · :root

Maroon

primary brand color · buttons, links, accents

--color-maroon

#5C1A1B

Maroon Deep

hover & pressed states

--color-maroon-deep

#3D1112

Maroon Light

gradient stops & subtle highlights

--color-maroon-light

#7A2324
ink & surface tokens.css · :root

Ink

body text · the only non-brand color you write with

--color-ink

#1A1A1A

Ink 70

body paragraph text, secondary information

--color-ink-70

rgba(26,26,26,.7)

Ink 50

captions, mono labels, tertiary metadata

--color-ink-50

rgba(26,26,26,.5)

Surface

page & card background — pure white, no warmth

--color-cream / --color-surface

#FFFFFF
RULE NO GOLD

the fox uses no gold, no metallic accents. quality is carried by the product itself — 100% remy, own factory, founder-level qc. the visual system holds tension through maroon's quiet luxury, not through glint.

03

typography.

four faces, one rule: lowercase by default. display sets the brand voice; body carries it; ui labels operate it; mono documents it.

type families --font-display | body | ui | mono
Playfair Display display · 700/900
--font-display

she moves different.

Inter body · 400/500
--font-body

touch this lace. density, airflow, the way the edge finishes against skin — every detail is calculated. not what cheap pretends to be.

DM Sans ui · 500/600/700
--font-ui

add to cart · view spec · request sample

JetBrains Mono mono · 400/500
--font-mono

--color-maroon: #5C1A1B; box-shadow: var(--shadow-card);

google fonts · embed link <link>
RULE ALL LOWERCASE

every headline, nav link, body line, and button stays lowercase. confidence doesn't need uppercase to prove itself. reference: glossier, aesop. exceptions: quoted customer copy, amazon listings, and paid ads where the platform requires title case.

04

elevation.

five shadow layers tinted with maroon, never pure black. four radii — pill is reserved for buttons.

shadow scale --shadow-soft → --shadow-elevated
Soft --shadow-soft
Medium --shadow-medium
Card --shadow-card
Strong --shadow-strong
Elevated --shadow-elevated
radius scale --radius-sm → --radius-pill
Small · 8px --radius-sm
Medium · 16px --radius-md
Large · 24px --radius-lg
Pill · 9999px --radius-pill
05

spacing.

4-pixel base grid. eight steps cover everything from tight pill padding (--space-2) to section breaks (--space-24).

space scale --space-1 → --space-24
--space-1 4 px
--space-2 8 px
--space-3 12 px
--space-4 16 px
--space-6 24 px
--space-8 32 px
--space-12 48 px
--space-16 64 px
--space-24 96 px
06

components.

primitives only. each one earns its place by appearing on at least three surfaces — buttons, product card, trust block, logo system.

buttons .btn · .btn-primary · .btn-secondary

primaryfor the one action that matters

<button class="btn btn-primary">know your edge</button>

secondaryfor everything else

<button class="btn btn-secondary">learn more</button>
product card .card · square image · meta · price

cardsquare image · meta · name · price

lace front wig · 20"

100% remy · hd lace

$289

<div class="card">
  <div class="product-image"></div>
  <p class="product-meta">lace front wig · 20"</p>
  <p class="product-name">100% remy · hd lace</p>
  <p class="product-price">$289</p>
</div>
trust block .trust-block · maroon ground

trust blockfor about · cta · brand films

she moves different.

25 years in our own factory. every bundle passes our hands before yours.

<div class="trust-block">
  <h2>she moves different.</h2>
  <p>25 years in our own factory...</p>
</div>
logo system · placeholder WIP — drop SVGs in assets/logos/
square · app icon
circle · avatar
horizontal · header
reverse on dark
powered by · badge
07

visual patterns.

signature moves of the brand. not single components — recurring rules that hold the system together across surfaces.

six recurring patterns P-01 → P-06

P-01

maroon block + reversed type

the quiet-luxury move. punctuate white pages with deep maroon blocks for trust, about, and cta moments.

P-02

all-lowercase typography

everything lowercase except quoted customer copy and platform-locked ads. confidence carried without capitals.

P-03

real-texture close-up

the product speaks, not ui decoration. hair texture, lace density, edge work — detail you can't fake.

P-04

frosted navigation

sticky top · backdrop-blur 12px · 85% white · a hairline border appears on scroll.

P-05

multi-shadow hover float

translateY(-4px) and shadow-card → shadow-strong. maroon-tinted shadows, never pure black.

P-06

lifestyle scene

her at the mirror, in motion, with friends. unstaged. reference: tesla's quiet confidence.

08

voice & tone.

smart · calculated · sharp · premium · in control · dangerous. no explaining. no pandering. no apologies. the product talks.

tone rules 6 RULES
rulewhat it meansexample
confident, not defensiveno need to argue why we're good. good is good."our lace is different. you'll see."
no corporate fillerskip "we're committed to providing..." — say what it isdescribe the product, not your intent
insider voicenot "dear" or "sweetie" — talk like people who know"you know what this lace density means."
don't chase approvalno trashing competitors, no fake warmthnever "please buy from us"
specifics over claimsdetail does the work, not adjectives"120 stitches per inch" > "high quality"
restraint with !emphasis comes from content, not punctuation
forbidden words 6 BANNED
don't saywhysay instead
hun / dear / sweetiefake warmth, panderingjust "you" — or drop the address
please buyundignified
lowest price / at a lossviolates our no-price-war stance"if you know, now's the moment"
we don't sell fakesdefensive framing — the old anti-scam voice"you're not avoiding fakes, you're picking the right thing"
quality guaranteedtoo generic, says nothingdescribe the craft ("120 stitches per inch")
you deserve bettertired self-help cliché"you know what you want"
before / after 6 REWRITES
❌ product copy · old

our wigs use 100% human hair. we don't deceive customers. quality guaranteed.

✅ product copy · new

touch this lace. density, airflow, the way the edge finishes against skin — every detail is calculated. not what cheap pretends to be.

❌ quality claim · old

we don't lie. every product passes strict qc.

✅ quality claim · new

every bundle passes our hands before yours. you don't have to trust us — you just have to know.

❌ pricing · old

we're not cheap, because we use real materials.

✅ pricing · new

cheap costs more in the end. settle once, pay twice. we're not for everyone.

❌ social · old

good news! new arrivals are up! 100% human hair, come shop now! 🎉

✅ social · new

zero fox given. she doesn't owe anyone an explanation.

❌ review prompt · old

please leave a review and let us know how it is!

✅ review prompt · new

those who know, know. the rest — try it and find out.

❌ promo · old

sale! limited time offer! first come, first served!

✅ promo · new

we don't run price wars. but if you know — now's the best moment.

campaign slogans 3 SLOGANS

attitude

zero fox given.

proud, unbothered, doesn't care who's watching. for social, attitude posters, hard editorial shots.

editorial

pretty. calculated.

refined, deliberate, nothing by accident. for product close-ups, craft stories, editorial.

lifestyle

she moves different.

confident, singular, walks with intent. for lifestyle content, influencer, brand film.

09

tailwind config.

drop this into your tailwind.config.js and every the fox token is one class away. css variables and tailwind utilities point at the same source of truth.

tailwind.config.js copy → paste → done
/** @type {import('tailwindcss').Config} */
export default {
  content: ["./**/*.{html,js,jsx,ts,tsx}"],
  theme: {
    extend: {
      colors: {
        maroon: {
          DEFAULT: "#5C1A1B",
          deep: "#3D1112",
          light: "#7A2324",
        },
        cream: "#FFFFFF",
        ink: {
          DEFAULT: "#1A1A1A",
          70: "rgba(26,26,26,0.7)",
          50: "rgba(26,26,26,0.5)",
        },
      },
      fontFamily: {
        display: ['"Playfair Display"', "Georgia", "serif"],
        body: ['"Inter"', "sans-serif"],
        ui: ['"DM Sans"', "sans-serif"],
        mono: ['"JetBrains Mono"', "monospace"],
      },
      boxShadow: {
        soft: "0 1px 2px rgba(0,0,0,0.04)",
        medium: "0 4px 12px rgba(0,0,0,0.06)",
        card: "0 8px 24px rgba(92,26,27,0.08)",
        strong: "0 12px 32px rgba(92,26,27,0.12)",
        elevated: "0 20px 48px rgba(92,26,27,0.16)",
      },
      borderRadius: {
        sm: "8px",
        md: "16px",
        lg: "24px",
      },
    },
  },
  plugins: [],
};
css variables · full set tokens.css
:root {
  /* brand */
  --color-maroon: #5C1A1B;
  --color-maroon-deep: #3D1112;
  --color-maroon-light: #7A2324;

  /* surface & ink */
  --color-cream: #FFFFFF;
  --color-surface: #FFFFFF;
  --color-ink: #1A1A1A;
  --color-ink-70: rgba(26, 26, 26, 0.7);
  --color-ink-50: rgba(26, 26, 26, 0.5);
  --color-on-maroon: #FFFFFF;
  --color-hairline: rgba(26, 26, 26, 0.08);

  /* fonts */
  --font-display: "Playfair Display", "Noto Serif SC", Georgia, serif;
  --font-body: "Inter", "Noto Sans SC", sans-serif;
  --font-ui: "DM Sans", sans-serif;
  --font-mono: "JetBrains Mono", monospace;

  /* shadows */
  --shadow-soft: 0 1px 2px rgba(0,0,0,0.04);
  --shadow-medium: 0 4px 12px rgba(0,0,0,0.06);
  --shadow-card: 0 8px 24px rgba(92,26,27,0.08);
  --shadow-strong: 0 12px 32px rgba(92,26,27,0.12);
  --shadow-elevated: 0 20px 48px rgba(92,26,27,0.16);

  /* radius */
  --radius-sm: 8px;
  --radius-md: 16px;
  --radius-lg: 24px;
  --radius-pill: 9999px;
}