Files
MohFarawati dcffa87be7 feat(design-system): add type scale, spacing rhythm and font tokens
Apply the Phase 2 warm-premium base additively (no existing page changes):
- tailwind.config.ts: add fontSize roles (display, h1, h2, h3, title, body-lg,
  body, small, caption, overline) with line-height/tracking/weight; add
  fontFamily (sans/latin = Museo, arabic = Dubai); add section-sm/section-lg
  spacing rhythm.
- globals.css: add Arabic-safe .eyebrow utility (uppercase + tracking on Latin,
  neutralised for html[lang="ar"]).

Colors and fonts unchanged. Verified: tsc clean, eslint clean, tailwind build
generates the new utilities with correct values.
2026-07-14 22:08:34 +02:00

139 lines
4.8 KiB
TypeScript

import type { Config } from "tailwindcss";
import animate from "tailwindcss-animate";
const config: Config = {
darkMode: ["class"],
content: [
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
"./src/**/*.{js,ts,jsx,tsx,mdx}",
"./components/**/*.{js,ts,jsx,tsx,mdx}",
"./app/**/*.{js,ts,jsx,tsx,mdx}",
],
theme: {
extend: {
colors: {
border: "hsl(var(--border))",
"border-strong": "hsl(var(--border-strong))",
input: "hsl(var(--input))",
ring: "hsl(var(--ring))",
background: "hsl(var(--background))",
foreground: "hsl(var(--foreground))",
surface: {
1: "hsl(var(--surface-1))",
2: "hsl(var(--surface-2))",
3: "hsl(var(--surface-3))",
inverse: "hsl(var(--surface-inverse))",
"inverse-foreground": "hsl(var(--surface-inverse-foreground))",
},
primary: {
DEFAULT: "hsl(var(--primary))",
foreground: "hsl(var(--primary-foreground))",
},
secondary: {
DEFAULT: "hsl(var(--secondary))",
foreground: "hsl(var(--secondary-foreground))",
},
muted: {
DEFAULT: "hsl(var(--muted))",
foreground: "hsl(var(--muted-foreground))",
},
accent: {
DEFAULT: "hsl(var(--accent))",
foreground: "hsl(var(--accent-foreground))",
},
destructive: {
DEFAULT: "hsl(var(--destructive))",
foreground: "hsl(var(--destructive-foreground))",
},
card: {
DEFAULT: "hsl(var(--card))",
foreground: "hsl(var(--card-foreground))",
},
popover: {
DEFAULT: "hsl(var(--popover))",
foreground: "hsl(var(--popover-foreground))",
},
brand: {
primary: "hsl(var(--brand-primary))",
secondary: "hsl(var(--brand-secondary))",
},
status: {
success: "hsl(var(--status-success))",
"success-soft": "hsl(var(--status-success-soft))",
warning: "hsl(var(--status-warning))",
"warning-soft": "hsl(var(--status-warning-soft))",
},
sidebar: {
DEFAULT: "hsl(var(--sidebar-background))",
foreground: "hsl(var(--sidebar-foreground))",
primary: "hsl(var(--sidebar-primary))",
"primary-foreground": "hsl(var(--sidebar-primary-foreground))",
accent: "hsl(var(--sidebar-accent))",
"accent-foreground": "hsl(var(--sidebar-accent-foreground))",
border: "hsl(var(--sidebar-border))",
ring: "hsl(var(--sidebar-ring))",
},
},
fontFamily: {
sans: ["var(--font-museo)", "Arial", "Helvetica", "sans-serif"],
latin: ["var(--font-museo)", "Arial", "Helvetica", "sans-serif"],
arabic: ["var(--font-dubai)", "Tahoma", "Arial", "sans-serif"],
},
fontSize: {
display: ["clamp(2.75rem, 8vw, 5.5rem)", { lineHeight: "0.95", letterSpacing: "-0.03em", fontWeight: "900" }],
h1: ["clamp(2.25rem, 5vw, 3.5rem)", { lineHeight: "1.05", letterSpacing: "-0.02em", fontWeight: "700" }],
h2: ["clamp(1.75rem, 3.5vw, 2.5rem)", { lineHeight: "1.1", letterSpacing: "-0.015em", fontWeight: "700" }],
h3: ["1.375rem", { lineHeight: "1.2", letterSpacing: "-0.01em", fontWeight: "700" }],
title: ["1.125rem", { lineHeight: "1.3", fontWeight: "500" }],
"body-lg": ["1.125rem", { lineHeight: "1.7", fontWeight: "400" }],
body: ["1rem", { lineHeight: "1.7", fontWeight: "400" }],
small: ["0.875rem", { lineHeight: "1.6" }],
caption: ["0.8125rem", { lineHeight: "1.5", fontWeight: "500" }],
overline: ["0.75rem", { lineHeight: "1.4", letterSpacing: "0.14em", fontWeight: "500" }],
},
borderRadius: {
sm: "var(--radius-nested)",
md: "var(--radius-nested)",
lg: "var(--radius-surface)",
xl: "var(--radius-surface)",
surface: "var(--radius-surface)",
nested: "var(--radius-nested)",
pill: "var(--radius-pill)",
},
boxShadow: {
xs: "var(--shadow-xs)",
sm: "var(--shadow-sm)",
md: "var(--shadow-md)",
lg: "var(--shadow-lg)",
card: "var(--shadow-card)",
panel: "var(--shadow-panel)",
sidebar: "var(--shadow-sidebar)",
},
maxWidth: {
narrow: "var(--container-narrow)",
layout: "var(--container-default)",
wide: "var(--container-wide)",
admin: "var(--container-admin)",
},
height: {
header: "var(--header-height)",
},
minHeight: {
header: "var(--header-height)",
},
spacing: {
section: "var(--section-space)",
"section-sm": "3rem",
"section-lg": "8rem",
content: "var(--content-space)",
},
backdropBlur: {
chrome: "18px",
},
},
},
plugins: [animate],
};
export default config;