# comp-a: kit da Variação A para o vídeo inteiro

> Data: 2026-10-17 · Tipo: brief · Status: vigente

**Resumo:** o autor escolheu a Variação A (`variacoes/A/previa-30s.mp4`) para as duas partes. Neste estilo, a fala vira uma **letra de música rolando**: uma coluna única de texto grande em que cada palavra nasce do desfoque no tempo da voz. Ícones, logos, emojis e vídeos entram **dentro da linha**, e a fala anterior fica cinza e sobe. O kit está pronto, e 0–29,6 s já foram portados em `js/p1a.js`, que serve de exemplo do nível. Cada agente escreve só o seu arquivo: `p1b.js` (falas 06–13), `p1c.js` (falas 14–22) ou `p2.js` (Parte 2).

## O que o autor gostou (regras do estilo)
1. **Letra rolando:** uma linha por vez, alinhada à esquerda, General Sans 120 px. A câmera sobe até a linha da vez e nunca para.
2. **Palavra nascendo do desfoque**, no tempo exato da fala. A palavra-chave (`f|`) chega maior e mais desfocada.
3. **Ícones, logos e emojis dentro da linha:** a linha abre espaço e o item nasce ali. Tudo que é citado aparece com o logo oficial (`../assets/logos/`), um emoji Lottie (`lib/emojis.js`) ou um vídeo real.
4. **Poucos elementos, cada um polido.** No máximo 1 item por linha e 1 bloco a cada 6–10 s. **Nada de balão ou pílula em volta de texto.**
5. **Vídeo mostrado com o som dele:** a trilha para e o som do vídeo toca, abaixo da voz quando há fala. Não use os nossos Reels: use templates do YouMotion, @illdari ou Supernova (lista no `variacoes/BRIEF-VARIACOES.md`, regra 4).
6. **Cores:** azul `a|` só para vídeo/estilo, terracota `o|` só para IA/Claude e cinza `c|` para o que é genérico ou ruim. Fundo branco quente com luzes muito fracas. Tinta quase preta.

## Arquivos
- `parte1.html` / `parte2.html`: páginas do motor take-único. Abra com `?hud` para ver o tempo, `?t=12.3` para um quadro e `?play&som` para tocar com a mix.
- `css/kit.css`: identidade (fonte, cores, janela, card do Claude, cursor). `fonts/`: General Sans.
- `js/base.js`: kit (`linhas`, itens, blocos, `cena`, `ev`, `PF/F0/F1/CN`). A documentação está no topo do arquivo.
- `js/main.js`: diagrama da coluna, câmera, apagamento e contrato (`__seek/__ready/__meta/__events` com `.videos`).
- `js/p1a.js`: falas 01–05 + vitrine (pronto). `p1b.js`, `p1c.js` e `p2.js` estão reservados.
- `dados/tempo-parte1.js`, `tempo-parte2.js`: tempos de cada palavra (`TEMPO`).
- `video.py`: prepara um vídeo mostrado (quadros + som + índice). `audio.py`: mix na Mesa. `confere.py`: lista os avisos do kit.

## Como escrever uma fala
```js
linhas('06', [
  'Passo um:',                                    // cada palavra consome 1 palavra da fala, na ordem
  ['não', 'existe', emoji('u1f914')],             // item sem t: entra 0,17 s antes da próxima palavra (ou logo após a anterior)
  'a|vídeo f|diferente',                          // marcas: a azul · o terracota · c cinza · f forte (combináveis: 'af|motion,')
  { w: 'sem referência.', foco: 1000 },           // foco = altura na tela da linha (padrão 1330)
  janela('nome-do-filme', { som: true }),         // bloco: janela 912×513 que se abre na frase; som + trilha para
]);
```
- `100%#3` = palavra mostrada que vale 3 da fala. `palavra('texto', t)` = palavra que não é falada.
- Tem que caber em **até ~15 caracteres por linha** (936 px). O `confere.py` avisa sobre linha larga e palavra diferente da fala.
- **Itens:** `emoji(id)`, `logo('arquivo.svg')`, `mini('filme')` (vídeo inline sem som), `icones([...])` (um ícone que se abre em etapas) e `item({w, monta, seek})` para criar o seu.
- **Blocos:** `janela(filme | [filmes], {som, trocas, quadrada, alvo, ate})`, `duo(premium, generico, {tG, tCinza})`, `cardClaude({pedido, resposta, ferramentas})` e `bloco({h, monta(el,B), seek(t,B)})` para o seu (912 × h, dentro da coluna).
- **Marcador de passo:** `contadorPasso(n, t0, t1)` mostra "Passo n de 4" pequeno no topo durante o passo. Os passos 1 e 2 estão no `p1b.js`; o 3 vai no `p1c.js` (`contadorPasso(3, F0('14') - 0.1, …)`) e o 4 no `p2.js`.
- **Notificação real com som:** `ev(t, 'notif-iphone' | 'notif-whatsapp' | 'notif-instagram' | 'notif-facebook' | 'notif-messenger' | 'imessage' | 'imessage-recebe')` toca o arquivo de `audio/sfx/`. A notificação saindo da Dynamic Island está em `p1b.js` (`notifIlha`) e pode servir de molde.
- **Fora da coluna** (tela cheia, raro): `cena(nome, t0, t1, monta, seek)` + `ocultaColuna(t0, t1)`.
- **Efeitos sonoros:** os itens e blocos já geram eventos sutis. Para outro, use `ev(t, kind, pan, v)` com o `kind` do mapa padrão (`biblioteca/som/mapa_padrao.py`) e `v` entre 0,2 e 0,35. Sem tonal em elemento.

## Modo palco (17/10, vale a partir de 29,6 s)
O autor gostou dos primeiros ~50 s, mas disse que o resto virou "teleprompter", com texto lido demais. A partir de 29,6 s, a coluna dá lugar ao modo palco. O trecho de 0–29,6 s (`p1a.js`) continua como está.
- **A tela é do elemento** que desenha a palavra-chave da frase: leve, intuitivo, bem-humorado. Exemplos: "combinar" = duas coisas se fundindo; "o processo é o mesmo" = um caminho desenhado; "pilar" = a pasta vira um pilar; "irreplicável" = Face ID; "você" = 🫵; marca = Netflix com o "tudum". Cada peça entra e sai pelo desfoque, ou vira a próxima.
- **Legenda curta** no terço de baixo: General Sans 80 px, centro em y 1530. Mostra só o grupo da vez (≤ 6 palavras, até 2 linhas). As palavras nascem do desfoque, uma a uma, no tempo da fala, e os ícones dentro da linha saem a 66%. O grupo anterior sai inteiro e não fica histórico cinza.
- **Passo N:** `passoHeroi` mostra o emoji grande no centro com o número em destaque, sozinho na tela. A legenda e o palco somem. Depois, "Passo n de 4" fica pequeno no topo.

```js
ocultaColuna(29.95, …);                                   // a coluna some no trecho em modo palco
passoHeroi(1, 'u1f50d', F0('06') - 0.08, PF('06','nao') - 0.12, { ate: F0('10') - 0.25 });
legenda('06', [pula(2), ['não existe', 'vídeo', 'f|diferente'], 'sem af|referência.']);   // pula(2) = "Passo um:" sem legenda
legenda('09');                                             // grupos automáticos (pontuação, ≤ 6 palavras, ≤ 30 letras)
legenda('09', null, { marcas: { referencia: 'af' }, itens: { gosto: emoji('u1f3a8') } });   // automático com cor e ícone
legenda('07', [...], { ate: F0('08') - 0.3 });             // ate: quando o último grupo sai
palco(t0, t1, (el, P) => { /* monta no palco (y 200–1300; centro PALCO_Y = 760) */ }, (t, P) => { /* anima */ });
palco(t0, t1, promptRefs({ tRef }), { y: 700 });           // qualquer bloco do kit (janela, duo, cardClaude, bloco) no palco
palco(t0, t1, monta, seek, { entra: false, sai: false });  // quando a peça anima a própria entrada/saída (peça que vira a próxima)
```
- **Escala:** o kit desce o palco inteiro 60 px (`PALCO_DY`), então o centro real fica em ≈ y 820, perto da legenda. Desenhe em volta de `PALCO_Y` (760) e cresça a peça com `{ esc: 1.2–1.35 }` (escala em volta do centro). Antes de usar uma escala grande, confira que nada passa das bordas (1080 px). Vídeo mostrado tem que começar num quadro com imagem (passe um deslocamento no `toca`, como em `p1b.js` "meus vídeos").
- O palco tem câmera viva (deriva + zoom lento). Durante o `passoHeroi`, legenda e palco ficam em silêncio. Os ícones da legenda geram efeito sutil.
- **Exemplo pronto:** falas 06 e 07 no `p1b.js` (29,6–41 s): herói 🔍 + "1"; a lupa procura numa moldura de vídeo vazia e não acha nada (🤷 em "referência"); 😉 vira a caixa do prompt, onde os prints são arrastados (aprovado). Folha: `revisao-palco-v1.png`.
- **Pendente:** as falas 08 em diante ainda estão em modo coluna. Quem converter tira as `linhas(...)` da fala e troca por `legenda` + `palco`, e estende o `ocultaColuna` do `p1b.js` (hoje vai até `F0('08') + 0.3`).

## Vídeo mostrado
```
python comp-a/video.py <fonte.mp4> --nome meu-filme --de 3.2 --dur 4 --w 960      # 16:9 → janela
python comp-a/video.py <fonte.mp4> --nome meu-vertical --de 1 --dur 3 --crop 608:1080:656:0 --w 440 --sem-som
```
O comando gera `img/filmes/<nome>/0001.jpg…`, `audio/videos/<nome>.wav` e o índice `img/filmes/_indice.js`. Com `som: true`, a janela registra o trecho, e o `audio.py` põe o som do vídeo e tira a trilha.
- Use `alvo: -20` com voz por cima e `-12,5` sem voz (vitrine).
- Use `trilha: 'segue'` se a música deve continuar.

## Conferir, mixar e renderizar (pasta do projeto)
```
python comp-a/confere.py "parte1.html?ate=60"
python comp-a/audio.py --parte 1 --ate 60
python ../../biblioteca/take-unico/render_take.py "comp-a/parte1.html?ate=60" --stills 31,35,40 --out comp-a/revisao.png
python ../../biblioteca/take-unico/render_take.py "comp-a/parte1.html?ate=60" --out render/a-p1-previa.mp4 --previa --audio comp-a/audio/mix-p1.wav --workers 3
```
- **Trilha:** Aruarian Dance (Nujabes). O `PLANOS` do `audio.py` define onde a faixa entra; nas janelas com som ela pausa e volta de onde parou.
- **Mix:** −14 LUFS, música 15 dB abaixo da voz.
- **Conferência:** olhe as folhas antes de entregar e pergunte em cada movimento se está humano ou robotizado.
