Documentation is currently in beta. Report issues →
Design SystemTypography

Typography

Y3NKO uses a two-font system: Syne for display/headings and Outfit for body text.

Font Stack

:root {
  /* Display & Headings: Bold geometric, modern African character */
  --font-display: "Syne", ui-sans-serif, system-ui, sans-serif;
 
  /* Body: Geometric, clean, readable */
  --font-body: "Outfit", ui-sans-serif, system-ui, sans-serif;
 
  /* Code: Technical contexts */
  --font-mono: "JetBrains Mono", ui-monospace, monospace;
}

Font Roles

FontRoleCharacter
Syne (700-800)Hero headlines, section headings, buttons, nav, badgesBold geometric, confident, distinctly modern African
Syne (600)Subheadings, card titles, labelsSame family, lighter for hierarchy
Outfit (300-500)Body text, descriptions, formsClean, geometric, readable complement

Type Scale

ElementDesktopMobileFontWeight
Hero Display60-72px36-48pxSyne800 (extrabold)
H1 (Page title)40-48px28-36pxSyne800
H2 (Section)24-36px22-28pxSyne700
H3 (Card/Sub)18-24px16-20pxSyne700
Body16px16pxOutfit400
Small14px14pxOutfit400-500
Caption/Label12px12pxSyne600 (uppercase)

Implementation

Next.js Font Setup

// app/layout.tsx
import { Syne, Outfit } from 'next/font/google'
 
const syne = Syne({
  subsets: ['latin'],
  variable: '--font-syne',
  weight: ['600', '700', '800'],
})
 
const outfit = Outfit({
  subsets: ['latin'],
  variable: '--font-outfit',
  weight: ['300', '400', '500'],
})
 
export default function RootLayout({ children }) {
  return (
    <html lang="en" className={`${syne.variable} ${outfit.variable}`}>
      <body>{children}</body>
    </html>
  )
}

Tailwind CSS

/* globals.css */
@layer base {
  body {
    font-family: var(--font-body);
  }
  h1, h2, h3, h4, h5, h6 {
    font-family: var(--font-display);
    font-weight: 700;
    color: var(--night);
  }
}

Usage Examples

Hero Display

<h1 className="font-display font-extrabold text-4xl sm:text-5xl md:text-7xl text-white tracking-tight">
  Discover Ghana
</h1>

Section Heading

<h2 className="font-display font-bold text-2xl md:text-3xl text-[var(--night)] tracking-tight">
  Featured Accommodations
</h2>

Card Title

<h3 className="font-display font-bold text-lg text-[var(--night)] group-hover:text-[#CE1126] transition-colors">
  Luxury Beach Villa
</h3>

Body Text

<p className="text-[var(--dusk)] leading-relaxed">
  Experience the beauty of Ghana's coastline in this stunning beachfront property.
</p>

Caption/Label

<span className="font-display text-xs font-semibold uppercase tracking-wider text-[var(--dusk)]">
  Greater Accra
</span>

Utility Classes

Font Family

.font-display   // Syne - headings, buttons
.font-body      // Outfit - body text (default)
.font-mono      // JetBrains Mono - code

Text Wrapping

.text-balance   // Balanced line breaks
.text-pretty    // Pretty line breaks

Example:

<h1 className="text-balance">
  Discover the Heart of Ghana Through Authentic Experiences
</h1>

Component Typography

Button

<Button className="font-display font-semibold text-base">
  Book Now
</Button>

Input Labels

<Label className="font-display text-sm font-medium text-[var(--bark)]">
  Email Address
</Label>

Form Input

<Input className="font-body text-base" placeholder="Enter your email" />

Badge

<Badge className="font-display text-xs font-semibold uppercase tracking-wide">
  Featured
</Badge>

Line Heights

UsageValueTailwind
Headings1.1-1.2leading-tight
Body1.5-1.7leading-relaxed
Tight body1.4leading-snug

Letter Spacing

UsageValueTailwind
Headings-0.02emtracking-tight
Uppercase labels0.05emtracking-wider
BodyNormaldefault

Responsive Typography

Use Tailwind’s responsive prefixes:

<h1 className="text-3xl sm:text-4xl md:text-5xl lg:text-6xl">
  Responsive Heading
</h1>
Elementsmmdlg
Herotext-4xltext-5xltext-7xl
H1text-3xltext-4xltext-5xl
H2text-2xltext-3xltext-4xl
Bodytext-basetext-basetext-lg

Accessibility

  • Minimum body text: 16px (1rem)
  • Sufficient line height for readability
  • High contrast ratios (see Colors)
  • No text below 12px except for captions