# Pitvolt - Design System Export

Complete design system: 2 CSS files, 3 full pages, 16 component previews, plus the spec.

## What's inside

```
export/
├── index.html                   ← browse everything from here
├── README.md                    ← this file
├── styles/
│   ├── colors_and_type.css      ← tokens (colors, type, spacing, radii, motion)
│   ├── atmospheric.css          ← components (buttons, glass, orbs, noise, container)
│   └── icons.css                ← icon wrapper + size presets + chip + tones
├── pages/
│   ├── index.html               ← Homepage
│   ├── hosts.html               ← /host (bring-the-location pitch)
│   └── our-story.html           ← /our-story (founding memo + founders)
├── components/                  ← 17 isolated component previews
│   ├── icons.html               ← full icon system preview
│   ├── PvIcon.jsx               ← React wrapper (drop into your app)
│   ├── colors-primary.html
│   ├── colors-text.html
│   ├── type-display.html
│   ├── type-mono.html
│   ├── wordmark.html
│   ├── spacing.html
│   ├── radii.html
│   ├── atmospheric.html
│   ├── buttons.html
│   ├── header.html
│   ├── faq.html
│   ├── tags.html
│   ├── timeline.html
│   ├── imgslot.html
│   └── mailto-block.html
└── docs/
    └── spec.md                  ← original spec / design rationale
```

Open `index.html` in a browser as a directory. Or open any individual file - no build step required.

## Quickstart in a Vite project

1. Copy the `styles/` folder into your Vite project (e.g. `src/styles/`).
2. Import once in your entrypoint:

   ```js
   // src/main.js (or main.ts)
   import './styles/colors_and_type.css';
   import './styles/atmospheric.css';
   import './styles/icons.css';
   ```

   **Order matters.** `colors_and_type.css` defines the tokens; the other two consume them.

3. Use either tokens or helper classes:

   ```html
   <button class="btn btn--primary">Reserve a stall</button>
   <h1 class="t-hero">Big idea here.</h1>
   <aside class="glass">Side panel.</aside>
   ```

   ```css
   .my-cta {
     background: var(--accent-primary);
     color: var(--text-on-elevated);
     font-family: var(--font-display);
     padding: var(--space-4) var(--space-6);
     border-radius: var(--r-pill);
   }
   ```

## Icons

The icon system is `<PvIcon name="..." />` - a single React component that wraps any react-icons glyph and applies the Pitvolt twist (clay-red corner notch + yellow voltage spark) automatically.

```bash
npm i react-icons
```

```jsx
import { PvIcon } from './components/PvIcon';

<PvIcon name="plug" />
<PvIcon name="lightning" size="lg" />
<PvIcon name="warning" tone="warning" title="Charger offline" />
<PvIcon name="check" filled />
<PvIcon name="external-link" plain />   // no twist
```

**Sizes:** `xs` (14px) · `sm` (18px) · `md` (24px, default) · `lg` (32px) · `xl` (48px), or pass a number/CSS value.

**Tones:** `default` · `warning` (clay red, no notch) · `success` (yellow, no notch) · `info` (muted).

**Library:** 26 icons across nav (`menu`, `close`, `arrow`, `chevron-down`, `external-link`, `search`), charging (`plug`, `lightning`, `battery`, `gauge`, `station`, `car`), host (`map-pin`, `building`, `key`, `calendar`), status (`check`, `warning`, `info`, `x-circle`), and social (`instagram`, `x`, `linkedin`, `whatsapp`, `mail`). Extend by adding to `REGISTRY` in `PvIcon.jsx`.

**Optional chip container:** wrap any icon in `<span class="icon-chip">` (or `.icon-chip--lg`, `.icon-chip--accent`, `.icon-chip--on-elevated`) for framed presentations - feature lists, key stats, etc.

See `components/icons.html` for the full preview with anatomy, sizes, variants, and in-context examples.

## Lifting full sections from `pages/`

The three page files (`index.html`, `hosts.html`, `our-story.html`) contain complete, real layouts using the same two CSS files. To use a section in your Vite app:

1. Open the page in a browser to find the block you want.
2. Open the source HTML, copy the markup for that `<section>`.
3. Page-specific composition lives in a `<style>` block in `<head>` - copy any rules you need into your component's CSS.
4. Paste into your framework component (Vue/React/Svelte/vanilla). The class names and tokens already work because the styles are imported globally.

## Production checklist

- **Fonts.** `colors_and_type.css` currently `@import`s Bricolage Grotesque (Pally substitute) + Inter + Geist Mono from Google Fonts. For production, drop self-hosted `.woff2` files into `styles/fonts/` and replace the `@import` line with local `@font-face` blocks. Pally is the spec-correct display face - see `docs/spec.md`.
- **Atmospheric extras.** `.orb`, `.noise`, and `.glass` are decorative. The orb divs need a parent with `position: relative`; foreground content needs higher `z-index`.
- **Color names.** `--accent-secondary` is **clay red `#C44A2C`** as of the latest iteration (was amber-terracotta earlier - `docs/spec.md` may still describe the old hex in prose; the live token is correct).
- **Pages.** The three page files include `<title>` and `<meta description>` already. They reference `../styles/*.css` - keep that relative path stable, or rewrite to absolute paths when you move them into your framework.

## Token reference (cheat sheet)

| Group | Tokens |
| --- | --- |
| Background | `--bg-primary` `--bg-primary-warm` `--bg-elevated` |
| Text | `--text-primary` `--text-on-elevated` `--text-muted` |
| Accent | `--accent-primary` (yellow) `--accent-secondary` (clay red) |
| Border | `--border-subtle` `--border-on-elevated` `--glass-border` |
| Atmospheric | `--orb-yellow` `--orb-terracotta` `--glass-fill` `--glass-fill-bright` |
| Type family | `--font-display` `--font-body` `--font-mono` |
| Type size | `--fs-hero` `--fs-h1` `--fs-h2` `--fs-h3` `--fs-eyebrow` `--fs-body` `--fs-body-lg` `--fs-small` `--fs-meta` |
| Spacing | `--space-1` … `--space-11` `--section-y-mobile` `--section-y-desktop` |
| Radius | `--r-xs` `--r-sm` `--r-md` `--r-lg` `--r-xl` `--r-pill` |
| Shadow | `--shadow-glass` `--shadow-button-yellow` |
| Motion | `--ease-out` `--ease-soft` `--dur-hover` `--dur-fade` `--dur-orb-drift` |
| Layout | `--container-max` `--gutter-mobile` `--gutter-desktop` |

## Helper classes (cheat sheet)

| Class | Purpose |
| --- | --- |
| `.t-hero` `.t-h1` `.t-h2` `.t-h3` | Display headlines |
| `.t-lead` `.t-body` | Body copy |
| `.t-eyebrow` | Uppercase mono label |
| `.t-meta` `.t-mono` | Small mono captions / inline mono |
| `.container` `.section` | Layout |
| `.btn` `.btn--primary` `.btn--ghost` `.btn--on-elevated` | Buttons |
| `.glass` `.glass--bright` | Backdrop-blurred surfaces |
| `.noise` | Fixed-position film-grain overlay |
| `.orb` `.orb--yellow` `.orb--terracotta` `.orb--drift` | Atmospheric orbs |
| `.wordmark` | PITVOLT mark (see `components/wordmark.html` for variants) |

## License / ownership

This is the Pitvolt design system. Internal use.
