# Examples — Preline Theme Generator

These examples are palette-and-structure references, not literal final-output templates.

Important: examples below are structural references. Final delivered theme files should follow `docs/final-output-style.md` and should never require edits to any companion project file.

These examples define what "good output" looks like.

## Contents

- [Example 1 — Calm teal SaaS theme](#example-1--calm-teal-saas-theme-full-theme-clean)
- [Example 2 — Retro sharp corners](#example-2--retro-sharp-corners-behavior-change-must-be-scoped)
- [Example 3 — Theme-scoped font token](#example-3--theme-scoped-font-token-no-mapping-changes)
- [Example 4 — Brand match with exact primary color](#example-4--brand-match-with-exact-primary-color)

## Example 1 — Calm teal SaaS theme (full theme, clean)

**Input**
- themeName: `seafoam`
- mood: calm, modern SaaS
- primaryHue: teal (180)
- contrast: medium
- style: vibrant
- darkNeutralFamily: zinc

**Expected Structure**
- `@theme theme-seafoam inline { }` contains brand + gray palettes
- Light mode selector: `:root[data-theme="theme-seafoam"], [data-theme="theme-seafoam"]`
- Dark mode selector: `[data-theme="theme-seafoam"].dark`
- Full coverage: global surfaces, borders, primary ramp, states, components
- Dark mode uses Tailwind zinc for neutrals (no matching dark requested)

### Output (truncated)

```css
/* ------------------------------ */
/* -------- Seafoam ------------- */
/* ------------------------------ */

@theme theme-seafoam inline {
  /* BRAND PALETTE (vibrant) */
  --color-seafoam-50: oklch(97% 0.08 180);
  --color-seafoam-100: oklch(94% 0.10 180);
  --color-seafoam-200: oklch(88% 0.12 180);
  --color-seafoam-300: oklch(80% 0.14 180);
  --color-seafoam-400: oklch(70% 0.16 180);
  --color-seafoam-500: oklch(60% 0.14 180);
  --color-seafoam-600: oklch(52% 0.12 180);
  --color-seafoam-700: oklch(44% 0.10 180);
  --color-seafoam-800: oklch(36% 0.08 180);
  --color-seafoam-900: oklch(28% 0.06 180);
  --color-seafoam-950: oklch(20% 0.05 180);
  
  /* GRAY PALETTE (bell curve chroma) */
  --color-seafoam-gray-50: oklch(98% 0.002 180);
  --color-seafoam-gray-100: oklch(95.5% 0.004 180);
  --color-seafoam-gray-200: oklch(89.7% 0.008 180);
  /* ... 300-700 ... */
  --color-seafoam-gray-800: oklch(34.6% 0.008 180);
  --color-seafoam-gray-900: oklch(30.6% 0.005 180);
  --color-seafoam-gray-950: oklch(20.1% 0.003 180);

}

:root[data-theme="theme-seafoam"],
[data-theme="theme-seafoam"] {
  /* Global */
  --background: var(--color-white);
  --background-1: var(--color-seafoam-gray-50);
  --foreground: var(--color-seafoam-gray-800);
  
  /* Primary ramp */
  --primary-50: var(--color-seafoam-50);
  --primary-100: var(--color-seafoam-100);
  /* ... full ramp ... */
  
  /* Primary states */
  --primary: var(--color-primary-600);
  --primary-foreground: var(--color-white);
  --primary-hover: var(--color-primary-700);
  
  /* Components prefer assigned semantic tokens */
  --navbar: var(--background-plain);
  --navbar-line: var(--border);
  /* ... */
}

[data-theme="theme-seafoam"].dark {
  /* Dark mode uses Tailwind zinc */
  --background: var(--color-zinc-800);
  --background-1: var(--color-zinc-900);
  --foreground: var(--color-zinc-200);
  
  --primary: var(--color-primary-400);
  --primary-foreground: var(--color-zinc-900); /* Contrast-selected because the generated light-brand states are too light for white */
  /* ... */
}
```

---

## Example 2 — Retro sharp corners (behavior change must be scoped)

**Input**
- themeName: `arcade`
- mood: retro 90s
- primaryHue: magenta (320)
- contrast: high
- radiusStyle: `retro-sharp`

**Expected Structure**
- Full token coverage
- Theme sets radius tokens in theme selector (NOT in @theme block)
- Any "rounded" behavior override inside `@layer utilities` scoped to theme

### Output (radius section only)

```css
:root[data-theme="theme-arcade"],
[data-theme="theme-arcade"] {
  /* RETRO SHARP CORNERS */
  --radius-sm: 0px;
  --radius-md: 2px;
  --radius-lg: 4px;
  --radius-xl: 4px;
  --radius-2xl: 6px;
  --radius-3xl: 6px;
  
  /* ... rest of tokens ... */
}

/* Optional: Override rounded utility if needed */
@layer utilities {
  :is(:root[data-theme="theme-arcade"], [data-theme="theme-arcade"]) .rounded {
    border-radius: var(--radius-md);
  }
}
```

---

## Example 3 — Theme-scoped font token (no mapping changes)

**Input**
- themeName: `leafy-modern`
- mood: organic, clean
- primaryHue: emerald (145)
- fontSans: `"Roboto", ui-sans-serif, system-ui, sans-serif`

**Expected Structure**
- Theme sets `--font-sans` inside theme selector (NOT in @theme block)
- Theme does NOT import Google Fonts (font loading is separate)
- User enables via `data-theme="theme-leafy-modern"` only

### Output (font section only)

```css
:root[data-theme="theme-leafy-modern"],
[data-theme="theme-leafy-modern"] {
  /* TYPOGRAPHY */
  --font-sans: "Roboto", ui-sans-serif, system-ui, sans-serif;
  
  /* ... rest of tokens ... */
}
```

---

## Example 4 — Brand match with exact primary color

**Input**
- themeName: `brand-x`
- primaryColor: `#2F6BFF` (converts to hue ~225)
- mood: confident, high clarity
- contrast: medium-high

**Expected Structure**
- Script converts hex to hue automatically
- Primary ramp derived coherently from the brand hue
- `--primary-foreground` readable (white on this blue)
- Chart `-hex` tokens remain variable-based placeholders in generated source

### Output (chart section showing variable-based chart tokens)

```css
:root[data-theme="theme-brand-x"],
[data-theme="theme-brand-x"] {
  /* ... other tokens ... */
  
  /* CHARTS */
  --chart-primary: var(--color-primary-500);
  --chart-colors-primary: var(--color-primary-500);
  --chart-colors-primary-hex: var(--color-primary-500);
  --chart-colors-primary-hex-inverse: var(--color-primary-300);
  
  --chart-1: var(--color-primary-500);
  --chart-colors-chart-1-hex: var(--color-primary-500);
  /* ... */
}
```
