# Regras do estilo vhs-90 (VHS anos 90)

Estas regras valem para QUEM MONTA. Não existe vídeo pronto aqui: só peças (`pecas.json`). Cada cena é escrita do zero, peça a peça.

## Regras do kit: cor
| token | hex | uso |
|---|---|---|
| `tinta` | `#101215` | fundo da fita (quase preto) |
| `azul` | `#0A1F8F` | tela azul de AV, barra de seleção do menu |
| `osd` | `#EDE8D5` | texto do OSD e títulos (branco quente) |
| `rec` | `#E63B2E` | ponto REC, faixa da capa, aberração vermelha |
| `amarelo` | `#F2D43D` | palavra em destaque e endereço |
| `laranja` | `#FF9A2E` | carimbo de data da câmera |
| `ciano` | `#38D9C0` | aberração ciano e detalhes |

- Aberração: duas cópias do texto, `rgba(255,40,70,0.85)` em −6 px e `rgba(0,220,255,0.85)` em +6 px (oscila ±3 px, período 9 quadros).
- Foto: `saturate(0.7) contrast(1.15) sepia(0.25) hue-rotate(-8deg) blur(0.6px)`. Nunca foto limpa.
- Camada de grão: ruído fractal 0,9 em overlay a 22%, linhas de varredura `rgba(0,0,0,0.28)` a cada 4 px, vinheta preta nas bordas a 55%.
- O cliente pode trocar a data e o texto do OSD; as cores ficam.

## Regras do kit: tipografia
Bebas Neue (400, condensada) para títulos; VT323 (400, pixel de terminal) para todo OSD: REC, timecode, menu, tela azul e data.

| papel | tamanho (px) | máx. caracteres | peso · tracking · caixa |
|---|---|---|---|
| título de fita (linha) | 330 (encolhe até 120) | 10 por linha | Bebas · 0,01 em · MAIÚSCULAS · aberração de cor |
| tela azul (texto) | 110 | 18 por linha | VT323 · MAIÚSCULAS · digitado a 0,8 car./quadro |
| menu OSD (item) | 84 | 20 | VT323 · MAIÚSCULAS |
| título da capa | 170 (encolhe) | 10 | Bebas · MAIÚSCULAS · branco sobre vermelho |
| REC / timecode | 56 | 12 | VT323 · branco quente |
| carimbo de data | 60 | 14 | VT323 · laranja |
| nome na marca | 300 (encolhe) | 10 | Bebas · MAIÚSCULAS |

- Texto que passa da largura útil (888 px) **encolhe sozinho** (`caber()` em `elementos/base.ts`). Nunca palavra cortada.
- Destaque `*palavra*` = amarelo (`#F2D43D`) no lugar do branco quente.
- O OSD (REC e timecode) fica fixo em y = 210, dentro da área segura, em todo plano.

## Regras do kit: area-segura
- Tudo que se lê fica entre **y = 168** e **y = 1330** e entre **x = 96** e **x = 984** (888 px úteis, margem de 8,9%).
- Embaixo de 1330 px ficam a legenda e os botões do Reels/TikTok: ali só fundo e elementos que sangram.
- Posições de referência (centro, em px):

| uso | y |
|---|---|
| REC e timecode (OSD) | 210 |
| título de fita (centro do bloco) | 700 |
| tela azul (centro do texto) | 740 |
| capa de locadora (centro) | 720 |
| menu OSD (centro) | 700 |
| carimbo de data | 1280 |
| marca (nome) | 700 |

- O ruído, as linhas e a vinheta cobrem a tela inteira; o texto lido fica entre 168 e 1330 e com 96 px de margem.
- Respiro: 35–45% do quadro vazio, 1 herói + no máximo 1 apoio por plano, nada encostando na borda, e uma pausa de 15 a 24 quadros depois de cada golpe grande.

## Regras do kit: movimento
- Tela 1080×1920, **30 fps**. Curva padrão `e5` ≈ cubic-bezier(.2,.8,.2,1); toda entrada com sobra `eb` (easeOutBack, passa ~10% e volta).
- A câmera nunca para: zoom 1,02 ± 0,015 (período 110 quadros), deslize ±14 × ±10 px, giro ±0,34° (mão tremida); soco de +2,5% que cai em 8 quadros a cada corte.
- Entrada de cena: 8 quadros; saída sobrepõe 8 quadros com a próxima. Corte ou troca a cada 0,6–1,5 s (18–45 quadros).

| movimento | quadros | valores |
|---|---|---|
| título entra | 10 | scale 1,3 → 1 com `eb`; piscar de opacidade 0/1 nos 4 primeiros quadros |
| tremor do título | contínuo | translateX ±5 px em 1 de cada 7 quadros; fatia de cima desloca 18 px por 3 quadros a cada 23 |
| aberração | contínuo | cópias vermelha e ciano oscilam 6 ± 3 px (período 9 quadros) |
| barra de rastreio | 12 | faixa de 170 px sobe de y 2000 a −200 em `e5`, com 2 fios brancos e ruído de linha |
| tela azul liga | 8 | varredura azul de cima para baixo; texto digitado a 0,8 car./quadro, cursor pisca a cada 8 |
| capa de locadora | 16 | scale 0,6 → 1 com `eb`; oscila rotateY −14° ± 5° e rotateX 6° (período 60 quadros) |
| cursor do menu | 2 | pula uma linha a cada 18 quadros, barra azul muda em 2 quadros |
| saída de cena | 8 | translateX ±20 px e some, sobrepondo 8 quadros |

## Regras do kit: ritmo
- 88 bpm → 1 batida = **20.45 quadros** (0.682 s). Cortes caem nas batidas; a barra de rastreio cai em todo corte; o golpe fica parado por 0,5 s.
- Tempo mínimo de leitura: **40** quadros por frase (≈ 0,45 s por palavra curta).

| batida | duração (s) | quadros |
|---|---|---|
| gancho | 1.5–2.5 | 45–75 |
| problema | 1.3–2.2 | 40–66 |
| virada | 1.5–2.5 | 45–75 |
| prova | 1.5–2.5 | 45–75 |
| lista | 1.5–3.0 | 45–90 |
| oferta | 1.2–2.2 | 36–66 |
| marca | 1.6–3.0 | 48–90 |

- Vídeo de demo: 8 s = 240 quadros (11.7 batidas).

## Regras do kit: som
- Trilha: `assets/trilha/fita-88bpm.mp3` (9 s, 88 bpm), volume **0.5**, fade de saída nos últimos **20 quadros**. Vídeo maior que 9 s: gere outra no MotionCraft (`music make`, preset lofi-desk, 88 bpm, tom Eb, lead marimba, bateria lofi; filtro passa-baixa 5,2 kHz + redução de bits (acrusher 9 bits)) — não faça loop.
- Com narração: trilha a **0,25** e efeitos a 70% do volume da tabela.
- Efeitos sintetizados (MotionCraft `sfx make`, pacote paper) e passados por filtro de fita (passa-baixa 5,2 kHz + acrusher 9 bits); trilha de 9 s, 88 bpm, lo-fi quebrada.

| som | volume | quando |
|---|---|---|
| `clique` | 0.8 | tecla da fita (liga a tela azul, cursor do menu) |
| `pop-palavra` | 1 | título que entra |
| `whoosh-entra` | 0.7 | barra de rastreio e entrada de cena |
| `impacto` | 0.9 | a palavra em destaque |
| `pop-cartao` | 0.9 | capa que aparece |
| `swoosh` | 0.8 | corte entre cenas |
| `subida` | 0.7 | 1,3 s antes do golpe final |
| `assinatura` | 0.9 | revelação da marca |
| `whoosh-sai` | 0.8 | saída grande |

- Um som por movimento que importa; no máximo **3 sons por segundo**; nunca o mesmo arquivo duas vezes seguidas.
- Som entra **1 a 2 quadros antes** do visual.
- O render nivela o mix em **−14 LUFS**, pico −1,5 dBTP.

## Movimento (régua extravagante; liso e calmo é reprovado)
- A câmera nunca para: use `CameraDeriva` (ou a câmera do estilo) com ao menos 4 chaves `{em, z, x, y}` mudando `z` e `x/y`, uma chave a cada cena. Deriva e leve rotação por baixo, sempre.
- Em cada corte, um `CorteImpacto` (clarão + tremida + zoom-pop) casado com o som `impacto` 1 a 2 quadros antes.
- Toda cena tem fundo vivo (`Particulas` + o fundo do estilo), pelo menos 1 herói e 2 apoios em movimento. Cena parada é reprovada.
- Entrada de elemento: 10-18 quadros com overshoot curto; saída: metade da entrada. Stagger entre itens: 2-5 quadros.
- Peças 3D e giros valem: quanto mais profundidade (parallax, perspectiva, rotação), melhor, sem sair da área segura.

## Som (camadas)
- Trilha sempre, volume 0,45, fade de saída 20 quadros.
- SFX em TODO corte e em toda entrada de elemento grande, no mínimo 2 camadas por corte (ex.: `whoosh-sai` + `impacto`, depois `swoosh` no quadro seguinte). Máx. 6 efeitos por segundo. Nunca o mesmo arquivo duas vezes no mesmo quadro.
- Sons deste estilo: assinatura, clique, impacto, pop-cartao, pop-palavra, subida, swoosh, whoosh-entra, whoosh-sai.

## Densidade mínima (o conferir cobra isto)
| medida | mínimo |
|---|---|
| camadas visuais simultâneas por cena | 4 (fundo, partículas, herói, apoio) |
| elementos em movimento por segundo (média da linha do tempo) | 5 |
| chaves de câmera por vídeo | 4 |
| SFX por corte | 1 (alvo 2) |
| peças diferentes usadas no vídeo | 6 |

## Proibido
- Copiar uma cena pronta: cada cena é composta peça a peça, com props novas.
- Cena parada: nenhum quadro em que nada se mexe.
- Elemento com movimento grande sem som.
