# Visual Style Guide (T02)

## Purpose
This document defines the Recipe Manager visual design tokens and how to apply them consistently across pages/components.

Primary source of truth:
- `frontend/src/theme.ts`
- `frontend/src/index.css` (CSS custom properties)
- `frontend/tailwind.config.js` (Tailwind token mapping)

---

## 1) Color Tokens

### Brand + Semantic
- `colors.primary`: `#2563eb`
- `colors.primaryDark`: `#1d4ed8`
- `colors.primaryLight`: `#dbeafe`
- `colors.accent`: `#9333ea`
- `colors.success`: `#15803d`
- `colors.warning`: `#ca8a04`
- `colors.error`: `#dc2626`

### Surfaces + Text
- `colors.bg`: `#f4f7fb`
- `colors.bgAlt`: `#edf2f7`
- `colors.surface`: `#ffffff`
- `colors.surfaceMuted`: `#f8fafc`
- `colors.border`: `#dbe3ef`
- `colors.text`: `#1f2937`
- `colors.textHeading`: `#0f172a`
- `colors.textDim`: `#64748b`

### Usage
- Primary actions: `primary` / `primaryDark` for hover.
- Validation or status badges/alerts: `success`, `warning`, `error` with light backgrounds where needed.
- Use `surface` + `border` for cards/forms.
- Use `textHeading` for section/page headings and `text`/`textDim` for body/supporting copy.

---

## 2) Typography Tokens

### Families
- Sans: `typography.fontFamily.sans`
- Heading: `typography.fontFamily.heading`
- Mono: `typography.fontFamily.mono`

### Scale
- `xs` 0.75rem
- `sm` 0.875rem
- `base` 1rem
- `lg` 1.125rem
- `xl` 1.25rem
- `2xl` 1.5rem
- `3xl` 1.875rem
- `4xl` 2.25rem

### Guidance
- Page titles: `3xl–4xl`
- Section titles: `xl–2xl`
- Body text: `base`
- Helper/meta text: `sm`

---

## 3) Spacing Tokens

- `xxs` 0.25rem
- `xs` 0.5rem
- `sm` 0.75rem
- `md` 1rem
- `lg` 1.5rem
- `xl` 2rem
- `2xl` 2.5rem
- `3xl` 3rem

### Guidance
- Tight control spacing (chips/icons): `xxs–xs`
- Form controls/content clusters: `sm–md`
- Section/page spacing: `lg–2xl`

---

## 4) Radius Tokens

- `xs` 0.375rem
- `sm` 0.5rem
- `md` 0.75rem
- `lg` 1rem
- `xl` 1.25rem
- `full` 9999px

### Guidance
- Inputs/buttons: `md`
- Cards/containers: `lg`
- Pills/tags: `full`

---

## 5) Shadow Tokens

- `shadows.subtle`: low emphasis hover/elevation
- `shadows.card`: default card elevation
- `shadows.hover`: raised interactive state
- `shadows.focus`: focus ring treatment

### Guidance
- Prefer `card` for panels/surfaces.
- Use `subtle` for lightweight interactive surfaces.
- Keep `hover` limited to strong CTAs/cards.

---

## 6) Tailwind Mapping

Tailwind config maps tokenized CSS variables for:
- `colors` (`primary`, `accent`, `success`, `warning`, `error`, `surface`, `muted`, `border`)
- `fontFamily`
- `fontSize`
- `spacing`
- `borderRadius`
- `boxShadow`

This keeps utility classes aligned with global tokens and avoids hardcoding values in component markup.

---

## 7) Implementation Notes (T02)

Updated to consume tokens where practical:
- `frontend/src/theme.ts`: expanded token definitions and shared `designTokens` export.
- `frontend/src/index.css`: added token-backed CSS variables (colors, type scale, spacing, radius, shadows).
- `frontend/tailwind.config.js`: switched extension values to CSS-variable/token-backed mappings.
- `frontend/src/components/Toast.tsx`: semantic status colors + radius/shadow from tokens.
- `frontend/src/components/RecipeCard.tsx`: recipe accent palette sourced from tokens.
- `frontend/src/components/TagSelector.tsx`: default tag color sourced from tokens.

Scope intentionally kept minimal/non-breaking to support upcoming visual tasks (T04–T07).
