# Arquitectura — 1v9: Convertite en Leyenda

## Visión general

Es un **juego de decisiones** (historia interactiva) en un **único archivo** `index.html`
(HTML + CSS + JS inline, sin dependencias externas para jugar). Todo el estado vive en memoria
durante la partida; no hay persistencia obligatoria (un `localStorage` opcional guarda el
"Salón de la fama" con las mejores carreras).

```
Landing → Creación → Oferta de academia → Loop de carrera (N splits) → Resumen final (compartible)
```

---

## Flujo de pantallas

| Pantalla | Rol |
|----------|-----|
| **Landing** | Presentación + botón "Convertite en leyenda" + Salón de la fama |
| **Creación** | Nick, nº de invocador, mano, región, rol |
| **Oferta de academia** | 3 equipos aleatorios de tu liga para elegir |
| **Carrera (Screen A)** | Panel de jugador + decisión + timeline, 2 columnas |
| **Resumen (Screen B)** | 3 paneles + grid de orgs + botón "Jugar de nuevo" |

---

## Datos del juego

### REGIONES
`LCK / LPL / LEC / LCS / LTA / VCS`, cada una con:
- `code` (KR/CN/EU/NA/AM/VN), `flag`, `country`, `flavor`.
- `threshold`: umbral de ELO para competir en su primera división (LCK=68…VCS=50).

### TEAMS (68 equipos reales)
`{ id, name, div }` — `div: 1` = primera división, `div: 2` = segunda/academia.
Los logos se resuelven con `LOGO_EXT[id]` → `logos/<id>.<ext>`.

### ROLES
`{ em, fl, kill, ast, death, pentaW }` — coeficientes de farmeo/perf de cada rol.

### EVENTS (26 eventos de decisión)
Cada evento: `{ cat, title, ctx, opts[] }`.
Cada opción: `{ t, d, risk, pos, neg, x? }`
- `d`: deltas a stats (`mecanica, vision, farmeo, sinergia, marca`).
- `risk`: probabilidad de fracaso (0-1).
- `pos`/`neg`: textos de resultado (éxito/fracaso).
- `x`: efectos extra (`rolChange`, `transfer`).

### COMPETITIONS (5 internacionales)
`{ split, ic, flavor }` — First Stand (2), MSI (4), EWC (6), Asian Games (8), Worlds (último).

---

## Estado de partida (`G`)

```js
{
  nick, num, hand, region, role,
  teamId, div,
  stats: { mecanica, vision, farmeo, sinergia, marca },
  split, totalSplits,
  kills, assists, deaths, games, penta,
  value, maxValue, salary, ratingMax,
  teamTitles, indTitles, intl,
  teams, events, history,
  regSelect: { games, kills, ast, apps },
  retired, retiring, finalRating
}
```

---

## Mecánicas clave

### Rating / ELO
Media ponderada de las 5 stats (mecánica 1.15, farmeo 1.05, sinergia 1.0, visión 0.95, marca 0.85),
clamp `[40, 99]`.

### Market value
`50000 * 10^((rating-40)*0.055)` × bonus por títulos, redondeado a `10k`.

### Crecimiento pasivo
Cada split suma `+0.48 + rand*0.2` (+ bonus por winRate) a cada stat; rendimiento malo reduce.

### Decisiones
`ok = Math.random() >= (risk + 0.03)`. Éxito: `+delta*2.6`. Fracaso: `-delta*2.6*0.9`.

### Fichajes
Solo desde **split 4**, con ~22% de chance por split y `rating >= threshold-4`.
Ofertas de otros equipos (misma región o extranjeros de primera si el rating alcanza).

### Competencias internacionales
**Solo equipos de primera división** (un equipo de 2ª no va a MSI/Worlds). Bracket de 4 rondas
con probabilidad por rating: grupos → cuartos → semis → final.

### Títulos
- **Regional**: cada split par, si `rating >= threshold-X` (primera o segunda división).
- **Individuales**: Guante de Oro (ELO≥62), Rey del Farmeo (farmeo≥60), Carry Definitivo (penta≥1), Community Darling (marca≥58), MVP del Split.

---

## UI (estilo Copero)

Design tokens en `:root`:
```
--bg-base:#0a0a0c  --bg-card:#18181b  --bg-card-alt:#1f1f23  --bg-row-active:#0e3a3f
--accent-ovr:#d9730a  --accent-role:#7c3aed
--success:#22c55e  --danger:#ef4444  --border-subtle:#27272a
```

- **Screen A**: 2 columnas (3fr/2fr). Izquierda: badge ELO + panel jugador + stats + logros + decisión.
  Derecha: timeline de carrera (SPLIT/ORG/ELO/GAM/KIL/AST) con fila activa teal y filas futuras grises.
- **Screen B**: 3 paneles (identidad, selección regional, premios) + grid de orgs + botón "Jugar de nuevo".
- **Responsive**: <768px colapsa la timeline (default cerrada) y apila a 1 columna.

---

## Export de imagen

Un `<canvas>` 1080×1920 dibuja el resumen completo (dark bg, badges ELO, stats, títulos, orgs)
y se descarga como PNG. Es el mecanismo de viralidad del juego.