DESIGN.md · git:20260713.13e9e9c · 2026-07-13 · sha256 26c32922f47684f7

DESIGN.md git:20260713.13e9e9cA

Immutable. This exact content is served forever at /api/v1/blob/26c32922f47684f7.

# Design System — Am I AI-Native?

The visual language for **amiainative.dev** (ProCoders): a dark tech/SaaS surface
with gamified AI-neon energy. "California dev at night" — deep navy ground, electric
blue/violet/magenta light, big confident type, subtle motion.

Everything here is the source of truth already living in code. Tokens are defined
once in [`app/globals.css`](app/globals.css) (`@theme`) and consumed as Tailwind v4
utilities (`bg-navy`, `text-blue`, `font-mono`, ...). Fonts are wired in
[`app/[locale]/layout.tsx`](app/[locale]/layout.tsx). There is **no `tailwind.config`
file** — this is Tailwind v4, CSS-first.

---

## 1. Brand essence

| | |
|---|---|
| **Personality** | Confident, playful, technical. A game more than a form. |
| **Ground** | Always dark. `color-scheme: dark` is set globally; there is no light mode. |
| **Light** | Neon accents used as *light sources*, not fills — glow, gradient text, conic rings. |
| **Motion** | Present but calm. Ambient drift + purposeful reveals. Always honors `prefers-reduced-motion`. |
| **Type** | Large white display type; mono for anything code-flavored; pixel + comic for the Academy game. |

---

## 2. Color

Defined in `@theme` in [`app/globals.css`](app/globals.css). Use the Tailwind token
name; never hardcode hex in components.

| Token | Hex | Role |
|---|---|---|
| `navy` | `#0b0b22` | Page ground, the constant backdrop. |
| `navy-2` | `#111133` | Raised surfaces, code blocks, glass base. |
| `navy-3` | `#181842` | Deepest panel fill. |
| `blue` | `#1195f2` | Primary accent, links, the "dev" track. |
| `violet` | `#6565f2` | Secondary accent, mid-gradient, scrollbar. |
| `violet-deep` | `#4e1f90` | Ambient mesh depth only. |
| `magenta` | `#dc02df` | Peak accent, `::selection`, the "certified" tier. |
| `ink` | `#ebebee` | Primary text. |
| `slate` | `#575868` | Muted text, hairline borders, grid lines. |
| `emerald` | `#34d399` | Success / "with V" / the creator track. |

**Accent gradient** (the signature): `blue → violet → magenta`, left to right. It
drives `.text-gradient`, the `.ring-conic` border, and every OG card.

**Semantic vs brand:** `emerald` is the only "success" color and is kept separate
from the blue/violet/magenta accent trio. Track accents: dev = `blue`,
product-owner = `violet`, universal-creator = `emerald`.

---

## 3. Typography

Four families, each with a job. All loaded via `next/font/google` as CSS variables.

| Family | Variable / token | Where |
|---|---|---|
| **Manrope** | `--font-manrope` → `font-display` | Default UI + all headings. |
| **JetBrains Mono** | `--font-jetbrains` → `font-mono` | Commands, `/v:` chips, terminal, code, eyebrows. |
| **Press Start 2P** | `--font-press-start` → `font-pixel` | Academy pixel face + retro game flourishes only. |
| **Balsamiq Sans** | `--font-balsamiq` → `font-comic` | Academy comic bubbles + captions only. |

**Scale & weight:** headings are heavy (`font-weight: 800`) with tight tracking
(`letter-spacing: -0.01em` to `-2.5px` on big display). Eyebrows are mono,
uppercase, wide tracking (`letter-spacing: .14em–.24em`). Body copy targets ~65ch;
SEO prose runs `line-height: 1.75` (see `.prose-seo`).

---

## 4. Background system

Four fixed, non-interactive layers stacked behind content (all in `globals.css`).
Compose them in the layout; never re-implement per page.

- `.bg-mesh` — animated radial gradient mesh (violet-deep / blue / magenta), drifts
  over 24s (`mesh-drift`), `z-index: -2`.
- `.bg-grid` — 56px engineering grid, top-masked so it fades downward, `z-index: -2`.
- `.bg-grain` — inline SVG fractal-noise film at `opacity: 0.06`, `z-index: -1`.
- `.bg-vignette` — sinks the top corners for depth, `z-index: -1`.

---

## 5. Surface & neon utilities

Reusable classes (not one-offs). Prefer these over ad-hoc styles.

| Class | Effect |
|---|---|
| `.glass` | Translucent `navy-2` + hairline border + 12px backdrop blur. |
| `.card-raise` | Inner top-highlight + layered drop shadow. Makes a flat card feel lit. |
| `.text-gradient` | Clips the blue→violet→magenta gradient to text. |
| `.neon-text` | Soft blue/violet text glow. |
| `.glow-blue / -violet / -magenta` | Ring + colored bloom (`--shadow-glow-*`). |
| `.ring-conic` | Animated spinning conic-gradient border (uses `@property --angle`). |
| `.chip-mono` | Pill for a command/keyword: mono, uppercase, blue-tinted. |
| `.blueprint` | Faint 22px grid for framed artifacts (e.g. the hero meter). |

---

## 6. Motion

**Easing:** the house curve is `cubic-bezier(0.22, 1, 0.36, 1)` (a soft overshoot)
for reveals and hovers. Ambient loops use `ease-in-out`.

**Engine:** [`motion`](https://motion.dev) v12 (`motion/react`) for React-driven
reveals (`whileInView`, `useReducedMotion`); pure CSS keyframes for anything that
*must* always settle (comic cascade, level bars, gamification pops) so an
interrupted JS animation can never strand an element invisible.

**Reduced-motion contract (required):** every decorative animation is disabled
under `@media (prefers-reduced-motion: reduce)`. When you add a new animated class,
add it to that block in `globals.css`. Resting state must be the visible state.

Named animations already available: `mesh-drift`, `spin-angle`, `pulse-glow`
(`.animate-pulse-glow`), `float-y` (`.animate-float`), `cascade-in`, `grow-up`
(`.level-bar`), `xp-pop`, `levelup-pop`, `blink-caret`, `konami-fall`, plus the
Academy set (`academy-breathe`, `academy-face-bob`, `persona-*`, `follow-*`, `pdv-*`).

---

## 7. Component patterns

- **Persona picker** (`.persona-card` + `.group`): three "pick your hero" cards.
  Per-card accent arrives as `--accent`; hover lifts `-8px`, borders + spins the
  `.persona-aura`, fills the `.persona-cta` with the accent, and turns the avatar.
- **Level meter** (`.level-bar`): bars grow up from the baseline; L1→L7 walk the
  blue→magenta ramp.
- **Gamification**: `+XP` uses `.xp-pop`; level-ups use `.levelup-pop`; the terminal
  caret uses `.caret-blink`; the pixel walker uses `.pdv*`.
- **Zoomable art** (`.av-zoom`): hover / press-and-hold scales character art up to
  2.6x for inspection. Parent must be `overflow: visible`.

---

## 8. Open Graph cards

Shared social images. Two production paths, one look.

- **Dynamic** (`opengraph-image.tsx`, `next/og` `ImageResponse`): the result badge
  at `/compound-v/result/[uid]`. Font: `assets/fonts/Manrope-Bold.ttf`.
- **Static** (build-time): HTML card → Playwright screenshot at `1200×630`
  `deviceScaleFactor: 2` → JPEG in `public/academy/og/*.jpg`. Playwright must run
  from the project root (bare-specifier ESM resolution).

**Card rules:** `1200×630`, `navy` ground, the radial glow field + faint grid,
Manrope, a top accent bar in the page/track accent, and a footer with
`amiainative.dev/...` + a "Play free" CTA.

---

## 9. Accessibility & i18n

- Dark-only, but keep text at `ink` on `navy`-family grounds for contrast; muted
  text uses `slate` (avoid slate on navy for anything essential).
- Honor `prefers-reduced-motion` (section 6). Give interactive elements a visible
  focus state (`:focus-visible`).
- **9 UI locales**: `en, uk, sq, de, es, fr, ru, hi, pt` (`i18n/routing.ts`), all
  hreflang-linked. Long words in some locales (e.g. RU) can overflow fixed OG
  columns — scale the title by longest-word length (see the badge OG).
- **Copy**: no em-dashes or curly quotes in English UI/marketing copy. Active voice,
  a control says exactly what it does.

---

## 10. Stack

Next.js `16.2.9` (App Router) · React `19` · next-intl `4.13` · Tailwind CSS `4.3`
(CSS-first `@theme`, no config file) · motion `12.40` · Vitest `4.1`. Ground: Vercel.

**Where things live:** tokens + utilities → [`app/globals.css`](app/globals.css);
fonts → [`app/[locale]/layout.tsx`](app/[locale]/layout.tsx); Academy game →
`components/academy/*`; Compound V pages → `components/compound-v/*`; OG art →
`public/academy/og/*` + `*/opengraph-image.tsx`.