08 manual de marca◌ proposta

Movimento que se atualiza.

Tempo, curva e movimentos assinatura da Reload, da revelação do site ao end card de um reel. Tudo parte dos mesmos tokens e termina no mesmo lugar: o F5.

01principios.md◌ proposta

Movimento é reload

Na Reload, movimento significa atualização: algo mudou, assentou e ficou. A metáfora é a do site, carreira em cache e depois F5. Por isso tudo se move para chegar a um lugar, nada se move para chamar atenção.

01

Movimento é reload

A coisa se atualiza, assenta e fica. O movimento diz "isto mudou", não "olhe para mim". Carreira em cache, depois F5.

02

Uma ideia, um movimento

Cada quadro faz uma coisa e deixa ela respirar. Se dois movimentos competem, corte um ou faça outro quadro.

03

Assenta, não quica

Curvas de saída longa, sem overshoot, sem mola. Nada quica por diversão. A única exceção seria um veredito, e a marca não tem um.

04

Só transform e opacity

Mova com transform e opacity. O desfoque de 4 px da revelação é transição e some ao chegar. Sem brilho, sem gradiente, sem sombra animada.

acessibilidade

Movimento reduzido

  • No site, com prefers-reduced-motion: reduce, tudo aparece no estado final: sem revelação, sem F5, sem embaralhar, sem onda de pontos.
  • No vídeo, entregue sempre a versão em que cada quadro já nasce no estado final (um quadro parado por cena). Peças de loop precisam ter um quadro de pôster legível.
  • Nada que só o movimento explique: todo texto está na tela antes de o movimento acabar.
02pecas.mp4◌ proposta

Peças que já rodam

Renderizadas no mexy com o kit da marca: o mesmo campo de pontos, as mesmas curvas e os mesmos tempos. Use direto ou como ponto de partida para a sua cena.

Assinatura F5 · 16:9Vinheta de abertura ou fecho: o R se redesenha atrás da linha do refresh e o logo assenta.1920 × 10804,0 s↓ MP4
Assinatura F5 · 1:1A mesma vinheta recomposta para feed quadrado e LinkedIn.1080 × 10804,0 s↓ MP4
Assinatura F5 · 9:16A mesma vinheta para Reels, Stories e Shorts, com o logo fora das zonas de interface.1080 × 19204,0 s↓ MP4
End card · 16:9Fecho de vídeo: o R redesenhado, Dê um reload., Fazer parte → e reload.dev.1920 × 10803,0 s↓ MP4
End card · 9:16O mesmo fecho para Reels e Stories.1080 × 19203,0 s↓ MP4
Reel da headlineReel 9:16: a headline do site palavra por palavra, o campo responde à ênfase e o refresh leva ao end card.1080 × 19206,5 s↓ MP4
Intro de mentor · 16:9Abertura de vídeo de mentoria: o retrato do Rodrigo Branas surge da trama, com nome e cargo reais.1920 × 10805,8 s↓ MP4
Intro de mentor · 9:16A mesma intro de mentoria para Stories e Reels.1080 × 19205,8 s↓ MP4
Anúncio da oferta · 1:1Anúncio de feed do plano anual: doze meses pelo preço de dez, com o preço completo e Fazer parte →.1080 × 108010,0 s↓ MP4
F5 em letra de pontosPost animado 1:1: o F5 acende pixel a pixel como num e-ink e o campo responde.1080 × 10804,0 s↓ MP4
Órbita · loopLoop 1:1 do ecossistema em volta do R, com os nós correndo nos anéis, para posts e apresentações.1080 × 10806,0 s · loop↓ MP4
Onda · loopFundo de story em loop: anéis saem de um ponto e atravessam o campo; o texto do story vai por cima.1080 × 19206,0 s · loop↓ MP4
Refresh · transiçãoTransição entre cenas: o campo em cache volta à grade quando a linha passa.1920 × 10801,9 s↓ MP4
Capa do capítulo MotionLoop da capa de /branding/motion: o R à direita e o refresh passando uma vez por volta, com a metade esquerda quieta para o título.1920 × 10806,0 s · loop↓ MP4
03motion.json◌ proposta

Tokens de tempo e curva

Todos os valores abaixo vêm de @reload/brand/motion.json, o mesmo arquivo que alimenta o tema do mexy. Os da web espelham o global.css do site; os de vídeo são desta página. Segundos, e curvas em cubic-bezier.

duração · as barras crescem em tempo real, numa velocidade só
press0,20 s
Clique e hover de botão
fast0,24 s
Saída e item pequeno
base0,36 s
Item que entra, linha de diff
scramble0,56 s
Eyebrow que se decifra
fade0,60 s
Opacidade da revelação
reveal0,90 s
Movimento e escala da revelação
plan1,00 s
Card do plano (só desfoque)
reload1,40 s
Teto de uma entrada "reload"
reload

Entrar e assentar

Saída longa, sem overshoot. É a curva da marca.

cubic-bezier(0.22, 1, 0.36, 1)

inOut

Mover entre posições

Troca de lugar, odômetro, deslocamento de câmera.

cubic-bezier(0.65, 0, 0.35, 1)

exit

Sair

Acelera até o fim. Só em saídas, sempre curtas.

cubic-bezier(0.55, 0, 1, 0.45)

linear

Digitar e progredir

Digitação, barra de progresso, loops contínuos.

linear

cascata (stagger)

Irmãos entram com 0,05 s a 0,07 s de intervalo. O total da cascata nunca passa de 0,30 s: com muitos itens, o intervalo encolhe.

revelação (data-reveal)
desfoque 4px · sobe 20px · escala 0.92

Chega desfocado, 20 px abaixo e em 92% do tamanho, e cresce até o lugar. Listas largas usam escala 0.98. Opacidade em 0,60 s, movimento e escala em 0,90 s, uma vez só.

vídeo
fps
30
hook
até 1,5 s
espera no meio
até 1,5 s
end card
1 a 2,5 s
digitação
28 caracteres por segundo
inclinação do símbolo
até 9°
04assinaturas/◌ proposta

Movimentos assinatura

Sete movimentos que são da Reload. Quem vê, reconhece. Cada um vem com a linha do tempo em segundos, usando só os tokens acima, e roda aqui de verdade.

Dê um reload.

F5 reload

O R pontilhado se redesenha de cima para baixo na faixa azul e o título assenta. É o fecho de toda peça.

linha do tempo
0,00 – 0,48
R de pontos redesenha em 6 passos, de cima para baixo
0,12 – 0,88
título assenta (espaçamento largo até o normal, opacidade 0 a 1)
0,88 – fim
segura 1 a 2,5 s

Igual ao final do site (data-f5). Uma vez só por peça.

Montagem do R

Os dois blocos do símbolo caem e travam no lugar. Sem quique: assentam com a curva da marca.

linha do tempo
0,00 – 0,36
bloco da haste cai (y −40 → 0, opacidade 0 → 1)
0,06 – 0,42
bloco da perna cai, 0,06 s depois
0,42 – 0,90
segura montado; o logotipo pode entrar

Nunca deforme os blocos. O símbolo pode balançar até 9°, nunca gira.

~/carreira

$ diff comunidade-aberta reload

✓ pronto

Digitação no terminal

O comando é digitado a 28 caracteres por segundo, prompt em Azul 300, e fecha com o selo ✓ pronto.

linha do tempo
0,00 – 1,04
29 caracteres a 28 por segundo (curva linear)
1,28
selo ✓ pronto entra (base, 0,36 s) 0,24 s depois do último caractere
1,64 – fim
segura até 1,5 s

Prompt $ em Azul 300; DM Mono 400. Na versão de movimento reduzido, o comando já aparece completo.

diff comunidade-aberta reload+4 −3

− ruído e achismo

− conteúdo sem curadoria

− networking por acaso

+ mentorias com quem já chegou lá

+ curadoria feita pelo time

+ Discord com gente que escolheu estar aqui

+ vagas e recrutadores por perto

Diff em cascata

Primeiro entra o que fica de fora, em cinza (−). Depois o que a Reload traz, em azul (+). Cada linha 0,06 s depois da outra.

linha do tempo
0,00 – 0,30
linhas − entram em cinza, 0,06 s de intervalo
0,50 – 0,92
linhas + entram em azul, 0,06 s de intervalo
0,92 – 1,28
contador +4 −3 na barra

Sem verde e sem vermelho: o que sai é cinza, o que entra é azul.

Ecossistema de devs

Eyebrow que se decifra

Caracteres aleatórios até o texto real, da esquerda para a direita, sem mudar a largura (DM Mono).

linha do tempo
0,00 – 0,56
cada caractere assenta entre 0,12 e 0,56 s, em ordem
0,56 – fim
texto real parado

Uma vez, ao entrar. Leitor de tela recebe sempre o texto real.

R$499,00
Anual · total

Odômetro

Números rolam para a frente em colunas, com a vírgula fixa. A cada troca, os dígitos giram uma vez.

linha do tempo
0,00 – 0,90
cada coluna rola até o dígito (inOut)
+0,05
intervalo entre colunas

Só números reais. Valores aqui: os planos de plans.ts (Anual R$ 499,00, Mensal R$ 49,90/mês).

Onda de pontos

A grade de pontos da faixa azul reage em onda a partir de um ponto: cresce, brilha em opacidade e volta ao lugar.

linha do tempo
0,00 – 0,36
pontos crescem (escala 1 → 2,6) e ganham opacidade
0,36 – 0,72
voltam ao repouso
+0,03 por passo
atraso por distância da origem: a frente atravessa o campo inteiro

Sem brilho nem gradiente. Em tela de toque ou com movimento reduzido, a grade fica parada.

05tipografia-cinetica.md◌ proposta

Tipo em movimento

Texto que se move precisa ser lido. As regras valem para reels, anúncios e vinhetas: a frase conta o ritmo, não a animação.

Sua carreira não precisa de mais conteúdo.

Uma frase, uma passada

As palavras entram em ordem de leitura e a de ênfase pousa por último, em itálico azul.

linha do tempo
0,00 – 0,56
cinco primeiras palavras, 0,14 s de intervalo (revelação base, 0,36 s)
0,76 – 1,12
palavra de ênfase, em itálico azul
1,12 – 2,62
segura 1,5 s

Exemplo com a frase do site. Em vídeo, a revelação usa os mesmos tokens.

01

Uma frase por laço

Cada loop diz uma frase só. Duas frases são dois quadros.

02

Palavras na ordem de leitura

Entram da esquerda para a direita, de cima para baixo, no ritmo da fala (0,14 s entre palavras sem narração).

03

A palavra de ênfase pousa por último

Itálico, azul (branco sobre azul, Azul 300 sobre preto), 0,2 s depois da anterior. É a que o olho guarda.

04

Tempo mínimo em tela

Nenhuma palavra fica menos de 0,35 s legível. A frase inteira segura até 1,5 s depois da última palavra.

05

Sem esticar letras

Nada de tracking que respira, escala por letra, rotação ou palavra que estica para encher o tempo. Mexe a palavra, não a letra.

06estrutura-video.md◌ proposta

Estrutura de vídeo

Reel, anúncio e vinheta de YouTube seguem a mesma estrutura: hook curto, meio que não segura demais e um end card que assina. Quem para de assistir no segundo dois precisa ter entendido do que se trata.

exemplo · reel de 13 s, uma ideia por cena

Hook

Até 1,5 s para o primeiro sentido. A promessa ou a pergunta, nunca o logo.

Meio

Cenas que seguram até 1,5 s cada, uma ideia por cena. Mexa um elemento por vez.

End card

1 a 2,5 s: logo, "Dê um reload." e reload.dev. Corte no último quadro estável.

[Nome do mentor]
[Cargo] · [Empresa]

Lower third

Conteúdo
Nome em Plus Jakarta Sans 500, cargo em Cinza 500. Nome de mentor só com permissão; sem ela, [Nome do mentor].
Caixa
Fundo branco sobre foto ou preto; preto sobre claro. Raio 12 px, barra azul de 4 px na esquerda.
Posição
Terço inferior, dentro da área segura (em 9:16, acima dos 22% de baixo).
Tempo
Entra 0,36 s (revelação), segura 3 s, sai 0,24 s (saída).

Legendas

Fonte
Plus Jakarta Sans 500, branca.
Caixa
Fundo preto sólido, raio 8 px. Nada de caixa translúcida nem contorno.
Limite
No máximo 2 linhas, 32 caracteres por linha.
Quebra
Por sentido, não por contagem. Sem palavra solta na segunda linha.
Posição
Em 9:16, entre 14% e 78% da altura; nunca nos 22% de baixo.

Linhas tracejadas: áreas livres em 9:16. Conferir na plataforma antes de publicar.

Logotipo da Reload sobre preto

Assinatura do logo (2 s)

0,00 – 0,42
Montagem do R sobre o preto ou o azul.
0,42 – 0,90
Logotipo entra ao lado (revelação, base).
0,90 – 2,00
Segura. Logo na versão certa: dark sobre preto, blue sobre azul.
07som.md◌ proposta

O som se atualiza também

O som acompanha o que acontece na tela e some atrás da voz. Pouco, limpo e seco, como o resto da marca. Os três sons abaixo são referências sintetizadas no navegador para dar a ideia do caráter; não são masters.

Cada caractere do terminal

Tecla

Clique seco, 10 a 20 ms, na faixa de 2 a 4 kHz. Baixo, quase subliminar. Sem ritmo musical.

F5 e troca de cena

Atualização

Sopro suave de 0,3 a 0,4 s, sobe e some. Nunca um whoosh de trailer.

Selo ✓ pronto, fecho do end card

Pronto

Dois toques curtos e limpos (cerca de 0,13 s), o segundo uma quinta acima. Sem sino de vitória.

mixagem
Locução
Em primeiro plano. Música sempre abaixa para ela.
Cama musical
Sob a locução, duck de −18 dB; sem locução, nível cheio da cama.
Efeitos
Teclas, atualização e pronto entre −24 e −18 dB sob a locução. Nunca mais altos que ela.
Loudness
−14 LUFS integrado para redes sociais, pico real máximo de −1 dBTP.
Final
Fade out de 0,5 s no end card, junto com o último quadro estável.
Música
Eletrônica discreta ou instrumental limpa, sem melodia dominante. Sem trilha "épica" de banco e sem música com letra sobre a voz.
08entrega.md◌ proposta

Entrega e o kit do mexy

Todo vídeo sai de um mesmo Theme: o mexy compila a cena em TSX para uma composição do HyperFrames e renderiza em MP4. O Theme e a especificação de quadro abaixo são os arquivos do kit; copie e use.

FormatoCanvas (px)UsoDuração máxima (Reload)
9:161080 × 1920Reels, Stories, Shorts, TikTokreel até 30 s · anúncio até 15 s
4:51080 × 1350Feed do Instagram, anúncio de feedaté 30 s
1:11080 × 1080LinkedIn, feed, thumbnails animadasaté 30 s
16:91920 × 1080YouTube, LinkedIn, sitevinheta até 5 s · vídeo sem limite
Quadros
30 fps constante
Vídeo
H.264 (High), yuv420p, MP4
Áudio
AAC 48 kHz estéreo, −14 LUFS
Bitrate de referência
8 a 12 Mbps em 1080p (conferir na plataforma antes de publicar)
Limites das redes
Duração máxima e área segura mudam com frequência: conferir na plataforma antes de publicar
Renderização
mexy → HyperFrames → MP4, sempre pelo mesmo Theme

Kit mexy + HyperFrames

  1. Use o projeto mexy da marca em .agents/skills/reload-creative/assets/mexy: o Theme fica em src/theme.ts, as fontes já vêm instaladas e o README explica como linkar o mexy, rodar bun install, conferir e renderizar.
  2. Os três temas já estão no mexy.json: escolha um por cena pela superfície, com theme="reload", "reload-dark" ou "reload-blue".
  3. Copie frame.md para a raiz do projeto HyperFrames: o hyperframes-creative lê frame.md antes de design.md.
theme.ts · 132 linhas
.agents/skills/reload-creative/assets/mexy/src/theme.ts

Theme do mexy (defineTheme): cores de tokens.css, Plus Jakarta Sans e DM Mono, raios, durações, curvas e presets de motion.json. Três temas: reload (claro), reloadDark e reloadBlue.

// Reload brand Theme for mexy (https://github.com/compozy/mexy, v0). Source of truth for every value:
// packages/brand/src/tokens.css (colors, fonts, radii) and packages/brand/src/motion.json (motion).
// When those change, change this file in the same pull request (packages/brand/tests/tokens.test.ts
// fails when a color or a duration drifts).
//
// This project's mexy.json registers the three themes (`reload`, `reload-dark`, `reload-blue`);
// a Scene picks one by surface: <Scene id="..." duration={4} theme="reload-blue">. Plus Jakarta Sans
// and DM Mono come from this project's @fontsource packages: mexy copies every latin weight and
// style into the build.
//
// Brand rules baked into the tokens:
//   - Blue, black and white only. mexy requires `ok`, `err` and `warn`, but the Reload brand has no
//     status colors outside the platform: success is blue, what leaves is gray. So `ok` is blue and
//     `err`/`warn` are neutral grays; use them for the diff (+ in `ok`, - in `err`), never for alarm.
//   - Never bounce. `snappy` is required by the Theme contract and is the same curve as `out`.
//   - Headings are Plus Jakarta Sans 400; DM Mono only for numbers, eyebrows and code.
//   - Durations are the Reload motion tokens (seconds). The video-only values (fps 30, hook 1.5 s,
//     holds 1.5 s, end card 1 to 2.5 s, typing 28 chars/s) live in the Scenes, not in the Theme.

import { defineTheme, extendTheme } from "@mexy/core";

/** Light: white canvas, black text. Use for explainers and slides on white. */
export const reload = defineTheme({
  color: {
    // required by mexy
    canvas: "#ffffff", // --rl-white
    surface: "#f5f6f8", // --rl-gray-50
    text: "#000000", // --rl-black
    muted: "#5e6470", // --rl-gray-500: labels and captions only
    flow: "#0056ff", // --rl-blue: the one accent
    ok: "#0056ff", // success and "+" in a diff are blue
    err: "#5e6470", // what leaves ("-") is gray, never red
    warn: "#5e6470", // no amber in the brand
    // Reload extras
    blue: "#0056ff",
    blue50: "#ebf1ff", // --rl-blue-50: hero card, seals
    blue300: "#6b9bff", // --rl-blue-300: small blue text on black
    blueHover: "#0047d6", // --rl-blue-hover
    black: "#000000",
    white: "#ffffff",
    gray50: "#f5f6f8",
    gray200: "#e2e5ea", // borders on light
    gray400: "#a3a9b4", // secondary text on black
    gray500: "#5e6470", // secondary text on light
    gray700: "#3a3f48",
    gray800: "#2a2d33", // borders on black
    gray900: "#16181d", // panels on black
  },
  font: {
    sans: "Plus Jakarta Sans", // titles (400), text (400), emphasis (500)
    mono: "DM Mono", // numbers, eyebrows, terminal and code only
  },
  radius: {
    card: "20px", // --rl-radius-lg
    md: "12px", // --rl-radius-md: buttons
    sm: "8px", // --rl-radius-sm: seals, caption box
  },
  layout: { full: { scale: 1 }, panel: { scale: 1.25 } },
  motion: {
    duration: {
      // required by mexy
      fast: 0.24,
      base: 0.36,
      slow: 0.9,
      // Reload tokens (packages/brand/src/motion.json)
      press: 0.2,
      scramble: 0.56,
      fade: 0.6,
      reveal: 0.9,
      plan: 1,
      reload: 1.4,
    },
    ease: {
      out: "cubic-bezier(0.22, 1, 0.36, 1)", // ease.reload: entrances, long settle, no overshoot
      inOut: "cubic-bezier(0.65, 0, 0.35, 1)", // ease.inOut: moving between positions
      snappy: "cubic-bezier(0.22, 1, 0.36, 1)", // required token; the brand does not overshoot
      in: "cubic-bezier(0.55, 0, 1, 0.45)", // ease.exit: leaving
      linear: "none", // ease.linear: progress bars, typing, loops
    },
    presets: {
      // the site's data-reveal: blur 4px, rise 20px, scale 0.92 -> 1
      reveal: {
        from: { opacity: 0, blur: 4, y: 20, scale: 0.92 },
        to: { opacity: 1, blur: 0, y: 0, scale: 1 },
        d: "reveal",
        ease: "out",
      },
      // wide lists and cards: scale 0.98
      revealWide: {
        from: { opacity: 0, blur: 4, y: 20, scale: 0.98 },
        to: { opacity: 1, blur: 0, y: 0, scale: 1 },
        d: "reveal",
        ease: "out",
      },
      fadeIn: { from: { opacity: 0 }, to: { opacity: 1 }, d: "fade", ease: "out" },
      fadeOut: { from: { opacity: 1 }, to: { opacity: 0 }, d: "fast", ease: "in" },
      rise: { from: { opacity: 0, y: 20 }, to: { opacity: 1, y: 0 }, d: "base", ease: "out" },
      // R assembly: the two blocks drop in and lock, no bounce
      drop: { from: { opacity: 0, y: -48 }, to: { opacity: 1, y: 0 }, d: "base", ease: "out" },
      // diff line entering (use with a 0.06 s stagger, 0.3 s cap)
      line: { from: { opacity: 0, y: 8 }, to: { opacity: 1, y: 0 }, d: "base", ease: "out" },
    },
  },
});

/** Dark: black canvas, white text, Azul 300 for small blue text. Terminal, code and reels. */
export const reloadDark = extendTheme(reload, {
  color: {
    canvas: "#000000",
    surface: "#16181d", // --rl-gray-900
    text: "#ffffff",
    muted: "#a3a9b4", // --rl-gray-400
    flow: "#6b9bff", // --rl-blue-300 (small text); large blue on black may use #0056ff
    ok: "#6b9bff",
    err: "#a3a9b4",
    warn: "#a3a9b4",
  },
});

/** Blue band: white on Azul Reload. End cards, F5 reload and the logo sting. */
export const reloadBlue = extendTheme(reload, {
  color: {
    canvas: "#0056ff",
    surface: "#0047d6", // --rl-blue-hover as the one darker step
    text: "#ffffff",
    muted: "#ebf1ff",
    flow: "#ffffff", // on blue, the accent is white
    ok: "#ffffff",
    err: "#ebf1ff",
    warn: "#ebf1ff",
  },
});
frame.md · 321 linhas
.agents/skills/reload-creative/assets/frame.md

Especificação de quadro do HyperFrames: cores, tipografia em cqw, espaçamento, tratamentos de quadro, regras de composição e movimentos assinatura.

---
version: alpha
name: Reload — Frame (video / frame layer)
description: >
  Video companion to the Reload brand manual (reload.dev/branding). The unit is the frame
  (1920×1080, 1080×1920, 1080×1350, 1080×1080). Atoms are the site's: Azul Reload on black and
  white, Plus Jakarta Sans 400 for every title with one italic blue word, DM Mono for numbers,
  eyebrows and terminal only, solid plates, the symbol's two blocks, the dotted blue band. No
  gradients, no glow, no shadow, no status colors, no stock footage. Motion is never decoration:
  it says "reload" (things update, settle and stay).
unit: the frame — 1920×1080 primary; 9:16, 4:5 and 1:1 documented
principle: one idea per frame · the emphasis word lands last · numbers come from the script

colors:
  blue: "#0056FF"
  black: "#000000"
  white: "#FFFFFF"
  blue-50: "#EBF1FF"
  blue-300: "#6B9BFF"
  gray-50: "#F5F6F8"
  gray-200: "#E2E5EA"
  gray-400: "#A3A9B4"
  gray-500: "#5E6470"
  gray-800: "#2A2D33"
  gray-900: "#16181D"
  # text and ground roles
  ground-light: "#FFFFFF"
  ground-dark: "#000000"
  ground-blue: "#0056FF"
  text-on-light: "#000000"
  text-on-dark: "#FFFFFF"
  text-on-blue: "#FFFFFF"
  small-blue-on-dark: "#6B9BFF"

typography:
  # Plus Jakarta Sans — every title, 400, tracking -0.02em to -0.04em; emphasis in 500
  display:   { fontFamily: "Plus Jakarta Sans", cqw: 7.5, weight: 400, lineHeight: 1.08, tracking: "-0.04em" }
  h1:        { fontFamily: "Plus Jakarta Sans", cqw: 5.5, weight: 400, lineHeight: 1.1,  tracking: "-0.035em" }
  h2:        { fontFamily: "Plus Jakarta Sans", cqw: 3.6, weight: 400, lineHeight: 1.15, tracking: "-0.03em" }
  h3:        { fontFamily: "Plus Jakarta Sans", cqw: 2.3, weight: 400, lineHeight: 1.3,  tracking: "-0.02em" }
  emphasis:  { fontFamily: "Plus Jakarta Sans", style: italic, weight: 400, note: "same size and weight as the title; one word or phrase per title; blue (white on blue, Azul 300 on black)" }
  subtitle:  { fontFamily: "Plus Jakarta Sans", cqw: 1.7, weight: 400, lineHeight: 1.5 }
  body:      { fontFamily: "Plus Jakarta Sans", cqw: 1.4, weight: 400, lineHeight: 1.6 }
  caption:   { fontFamily: "Plus Jakarta Sans", cqw: 2.4, weight: 500, lineHeight: 1.25, note: "16:9 value; on 9:16 use 5cqw (≈54px) — see Captions" }
  lower-third-name: { fontFamily: "Plus Jakarta Sans", cqw: 2.2, weight: 500, lineHeight: 1.2 }
  # DM Mono — numbers, eyebrows, terminal and code only; never titles, body or captions
  eyebrow:   { fontFamily: "DM Mono", cqw: 1.1, weight: 500, upper: true, tracking: "0.08em", color: "blue" }
  number:    { fontFamily: "DM Mono", cqw: 9.0, weight: 400, tracking: "-0.04em", color: "blue", note: "no tabular-nums on prices; only real numbers, otherwise [000]+" }
  terminal:  { fontFamily: "DM Mono", cqw: 1.6, weight: 400, lineHeight: 1.75 }

spacing:
  pad-x: "6cqw"
  pad-y: "6cqh"
  gap-xl: "5cqw"
  gap-lg: "3cqw"
  gap-md: "1.6cqw"

units:
  frame: "1920×1080 (16:9) primary · 1080×1920 (9:16) · 1080×1350 (4:5) · 1080×1080 (1:1)"
  fps: 30
  container: "set container-type: size on every frame ground; all frame-relative units are cqw/cqh, never vw"
  safe-vertical: "top 14% and bottom 22% of a 9:16 frame stay free of text and logo (platform UI); sides 6%"
  safe-horizontal: "6cqw margins on 16:9; text never closer than 6cqw to an edge"
  timing: "hook ≤ 1.5 s · middle holds ≤ 1.5 s · end card 1 to 2.5 s · logo sting 2 s · typing 28 chars/s"

components:
  plate:
    backgroundColor: "{colors.black} or {colors.blue}, slightly tilted (−3° to −6°)"
    rounded: "20px (card)"
    shadow: "none"
    description: "Solid slab behind a photo or a card. Depth comes from plates and contrast, never from shadows."
  terminal:
    backgroundColor: "{colors.gray-900}"
    border: "none; bar with three {colors.gray-800} dots and a path like ~/carreira"
    typography: "{typography.terminal}; prompt $ in {colors.blue-300}"
    rounded: "20px"
    description: "The only black panel for code. Types at 28 chars/s; ends with a blue ✓ pronto seal."
  diff:
    description: "+ in blue (on a {colors.blue-50} square on light, {colors.blue-300} on dark), − in gray ({colors.gray-400}). Never green or red."
  seal:
    backgroundColor: "{colors.blue}"
    textColor: "{colors.white}"
    rounded: "8px"
    typography: "DM Mono 500, uppercase"
    description: "Small blue label such as ✓ pronto."
  caption-box:
    backgroundColor: "{colors.black}"
    textColor: "{colors.white}"
    rounded: "8px"
    padding: "0.6cqw 1.2cqw"
    description: "Solid black box, never translucent. Plus Jakarta Sans 500, white, max 2 lines, 32 characters per line."
  lower-third:
    backgroundColor: "{colors.white} on dark/photo, {colors.black} on light"
    rounded: "12px"
    description: "Name 500 + role in {colors.gray-500}; blue 4px bar at the left edge; holds 3 s."
  dot-band:
    description: "Blue ground with an 18px grid of white dots; the dotted R redraws top-down once (the F5). Static on reduced motion."
  symbol-blocks:
    description: "The R's two blocks may appear large, cropped or as tilted plates. Never deform them. White symbol on blue, blue on white, blue on black."
---

# Reload — Frame (video / frame layer)

## Overview

Reload on video is **a dev's terminal and a very clean page in motion**: black, white and one
saturated blue; Plus Jakarta Sans at weight 400 with a single italic blue word per title; DM Mono
only where a number, a label or a command lives. Hierarchy comes from size, plates and contrast
between ground colors, never from weight, shadow or gradient. The reference is the site at
reload.dev and the manual at reload.dev/branding (the manual wins on conflict). The voice is a
friendly senior dev at the coffee machine: direct, short sentences, dry humor, "você".

Reload is an **ecosystem**, not a course. The frame sells the encounter and the next step (people,
mentoring, curation), never hours, modules, tracks or certificates, and never promises a job,
salary or promotion. Real faces before structure; no stock footage, no invented testimonials, no
logos or numbers that are not real and authorized (placeholders: `[Nome do mentor]`, `[Empresa]`,
`[000]+`).

**Key characteristics at frame scale:**

- **Three grounds:** white, black, Azul Reload (the blue band with the dot grid). About 60% light,
  25% black, 15% blue across a piece.
- **One accent:** `{colors.blue}`; on black small blue text is `{colors.blue-300}`; on blue the
  accent is white.
- **Titles at 400**, tracking −0.02em to −0.04em, one italic blue `<em>` word per title, landing last.
- **The symbol as a graphic:** two rounded blocks that drop and lock; the dotted R of the F5.
- **Flat:** zero shadow, zero glow, zero gradient; plates and tilt replace depth.
- **Motion is "reload":** things update, settle and stay; one move per idea; no bounce for fun.

## The Frame

### Frame Craft Bar

Three eyeball tests gate every frame:

- **Squint** — one title dominates at 3–5× the next element; the italic blue word is the focal point.
- **Silence** — declarative frames read about half empty; if two ideas fight, cut one and make a second frame.
- **Honesty** — every number, name and logo traces to the script or to an authorization; else a
  bracketed placeholder.

- **Primary:** 1920×1080 (16:9); display authored in `cqw` (`px ÷ 1920 × 100`).
- **Vertical:** 1080×1920 (9:16) for Reels, Stories, Shorts. Square 1080×1080; 4:5 is 1080×1350.
- **Safe area:** 6cqw side margins; on 9:16 keep the top 14% and bottom 22% free of text and logo.
- **The container law:** every frame ground sets `container-type: size`; all frame-relative units
  are `cqw`/`cqh`, never `vw`.
- **Legibility floor:** any load-bearing line is at least **1.4cqw** on 16:9 and **3.2cqw** on 9:16
  (the 9:16 canvas is 1080 wide, so the same cqw is smaller in pixels).

## Colors

Tokens are identical to `packages/brand/src/tokens.css`. `{colors.blue}` is the brand, actions and
highlights; `{colors.black}` is text and dark panels; `{colors.white}` is the main ground and text on
blue and black. `{colors.blue-50}` is a card or seal ground on white; `{colors.blue-300}` is **only**
small blue text on black; grays are support (`{colors.gray-500}` captions on light,
`{colors.gray-400}` secondary on black, `{colors.gray-800}` borders on black, `{colors.gray-900}`
panels on black).

**No status colors.** No green, red, orange or yellow in any video. Success and `+` are blue; what
leaves (`−`, ✕) is gray. Text is black on light and white on dark or blue; gray only for labels,
captions and metadata. Photos are black and white.

## Typography

Plus Jakarta Sans does everything; DM Mono enters only in numbers, eyebrows and code blocks. Load
Plus Jakarta Sans 400 to 600 (with italic) and DM Mono 400 and 500.

- Titles at **400**, sentence case, tracking −0.02em to −0.04em; emphasis at 500. Avoid bold.
- The emphasis word is the same font, weight and size as the title, in **italic blue** (white on
  blue, `{colors.blue-300}` on black). One word or short expression per title.
- Eyebrows: DM Mono 500, uppercase, +0.08em, blue. Never HTTP status codes.
- Big numbers and prices: DM Mono 400, tracking −0.04em, no `tabular-nums`. The price anchor
  "12x de R$ 41,58" never appears alone: the total "R$ 499,00 · última parcela R$ 41,62" shares the
  surface and the accessible text.
- **Fit-to-measure:** at most 78cqw per block; up to 3 words use `display`/`h1`, 4–7 words `h1`/`h2`,
  longer `h2`/`h3`.

## Depth & Surface

The only techniques: **solid plates** (black or blue, tilted a few degrees), **contrast between
grounds**, **the dot grid** on blue, and **tilted photo cards** with large radius (20px). No box
shadow, no glow, no bloom, no blur as decoration (the reveal's 4px blur is a transition, not a
look), no gradient.

## Shapes

- **20px** — cards, photos, terminal and plates (`--rl-radius-lg`).
- **12px** — buttons and lower thirds. **8px** — seals and the caption box.
- **Full radius** — theme pills only. The symbol's blocks keep their drawn curves, never deformed.

## Components

`plate`, `terminal` (with `diff`), `seal`, `caption-box`, `lower-third`, `dot-band` and
`symbol-blocks`, as in the frontmatter. Logos only from `@reload/brand`
(`reload-logo-light.svg` on white, `reload-logo-dark.svg` on black, `reload-logo-blue.svg` on blue;
symbol alone `reload-simbolo-{light,dark,blue}.svg`), at least 20px tall, protection area of half the
symbol's height, never retyped, distorted, glowing or recolored.

## Frame Treatments

> Recipe: ground · composes · focal · accent · silence · motion. One idea per frame.

### 1 · Hook (identity · move: claim + emphasis word · left)

**Ground** `{colors.white}` or `{colors.black}`. **Composes** eyebrow, `display`/`h1` title, optional
photo on a tilted plate. **Focal** a ≤ 7-word claim ("Sua carreira não precisa de mais _conteúdo_.");
the italic blue word lands last. **Motion** `reveal` (blur 4px, rise 20px, scale 0.92 to 1, 0.9 s);
words in reading order. **Silence** about 50% empty. **Duration** ≤ 1.5 s to the first meaning.

### 2 · Terminal (proof · move: typing + diff)

**Ground** `{colors.black}`. **Composes** terminal panel, bar with the path, prompt `$` in
`{colors.blue-300}`. **Focal** the command typing at 28 chars/s, then `−` lines in gray, then `+`
lines in blue (stagger 0.06 s), a `+4 −3` counter and the blue ✓ pronto seal. **Copy** only the
ecosystem's real offer (mentorias, Discord com curadoria, vagas, recrutadores). **Hold** ≤ 1.5 s.

### 3 · Statement (middle · move: one phrase per loop · centered)

**Ground** `{colors.blue-50}` or `{colors.white}`. **Focal** one phrase, words in reading order, the
emphasis word last. Each word fully visible for at least 0.35 s; never stretch letters. **Hold** ≤ 1.5 s.

### 4 · Face + lower third (people · move: photo on plate)

**Ground** `{colors.white}`. **Composes** real black-and-white portrait on a tilted blue or black
plate, the white symbol in a blue seal on the corner, lower third with name and role, or the
bracketed `[Nome do mentor]` / `[Empresa]` without authorization. Lower third enters 0.36 s, holds 3 s,
leaves 0.24 s.

### 5 · Number (data · move: odometer)

**Ground** `{colors.white}`. **Focal** a DM Mono number in blue rolling to its value (reels, one
column per digit, stagger 0.05 s); only real numbers, otherwise `[000]+`. Plan values: Anual
R$ 499,00, Mensal R$ 49,90/mês, from `apps/site/src/data/plans.ts`.

### 6 · End card (closer · move: F5 on the blue band · centered)

**Ground** `{colors.blue}` with the dot grid. **Composes** `reload-logo-blue.svg`, the line
"Dê um reload." in `display`, `reload.dev` in DM Mono, optionally the button "Fazer parte →".
**Motion** the dotted R redraws once, top-down (0.48 s, 6 steps), the title settles (0.76 s).
**Hold** 1 to 2.5 s; the cut is on the last stable frame.

## Composition Rules

### Do

- Say one thing per frame and let it hold: hook ≤ 1.5 s, middle holds ≤ 1.5 s, end card 1 to 2.5 s.
- Put the emphasis word in italic blue and make it land last.
- Use only the Reload motion tokens: durations 0.2, 0.24, 0.36, 0.56, 0.6, 0.9, 1.0, 1.4 s; ease
  `cubic-bezier(0.22, 1, 0.36, 1)` for entering, `(0.65, 0, 0.35, 1)` for moving, `(0.55, 0, 1, 0.45)`
  for leaving, linear for typing and progress. Stagger 0.05 to 0.07 s, capped at 0.3 s.
- Animate with transform and opacity only (plus the reveal's blur, removed after landing).
- Keep the symbol still; at most a gentle sway up to 9°. Never spin it.
- End every piece with the end card: logo, "Dê um reload.", reload.dev.
- Caption everything spoken: Plus Jakarta Sans 500, white on a solid black box with 8px radius, max
  2 lines, 32 characters per line.

### Don't

- Don't use gradients, glow, bloom, shadows, lens flares or whooshing zooms.
- Don't use green, red, orange or yellow, nor stock footage, stock "epic" music or emoji.
- Don't bounce, overshoot or spring for fun; the `snappy` ease is the same curve as `out`.
- Don't stretch, squash or letter-space words to fill a beat.
- Don't cite frequency ("toda semana"), "Q&A", "ao vivo", "aluno", "curso", or promise a job, salary or promotion.
- Don't use "assinar" outside the platform; the member button is "Fazer parte".
- Don't invent numbers, testimonials, logos or mentor names; use bracketed placeholders.
- Don't put text in the top 14% or bottom 22% of a 9:16 frame.

## Signature moves

| Move             | What happens                                                                                  | Timeline (s)                                     |
| ---------------- | --------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| F5 reload        | The dotted R redraws top-down on the blue band; the title settles from wide tracking          | redraw 0.00–0.48 (6 steps); title 0.12–0.88      |
| R assembly       | The two blocks drop in and lock; no bounce                                                    | block A 0.00–0.36; block B 0.06–0.42; hold 0.5   |
| Terminal typing  | The command types at 28 chars/s, prompt in Azul 300, then the blue ✓ pronto seal              | 0.00–1.04 (29 chars); seal +0.24 after the last  |
| Diff stagger     | `−` lines enter in gray, then `+` lines in blue, 0.06 s apart                                 | − 0.00–0.30; + 0.50–0.92; counter after          |
| Eyebrow scramble | Random glyphs decode left to right in DM Mono, width fixed                                    | 0.00–0.56 (each char settles 0.12–0.56)          |
| Odometer roll    | Digits roll forward in columns, comma fixed                                                   | 0.00–0.90, stagger 0.05 per column               |
| Dot-grid wave    | Dots grow and fade in a wave from the origin, back to rest                                    | per dot 0.36 up + 0.36 down, delay 0.04 × step   |
| Logo sting       | Blue ground, R assembles, wordmark lands, line settles, holds                                 | 0.00–0.42 R; 0.42–0.90 wordmark; hold to 2.00    |

## Aspect-Ratio Behavior

| Treatment  | 16:9                           | 9:16                                  | 4:5 / 1:1                      |
| ---------- | ------------------------------ | ------------------------------------- | ------------------------------ |
| Hook       | claim left, photo plate right  | claim centered-upper, photo below     | claim upper, photo behind      |
| Terminal   | panel 70cqw wide, centered     | panel 88cqw wide, upper third         | panel 84cqw wide               |
| Statement  | one line, centered             | two or three lines, centered          | two lines, centered            |
| Face       | photo left, lower third right  | photo upper, lower third inside safe  | photo upper, lower third below |
| Number     | number left, label right       | number centered, label below          | number centered                |
| End card   | logo, line and URL centered    | same, stacked, inside the safe area   | same, stacked                  |

## Approved Entities

Only the three people in `apps/site/src/data/team.ts` (Rodrigo Branas, Pedro Nauck, Diogo Moretti)
appear by name with their real photos. Any other mentor, member or company is a bracketed
placeholder until authorized. Plans and prices come from `apps/site/src/data/plans.ts`.

## Numerals & Claims (hard rule)

Never invent numbers, dates, member counts or salaries. Render unknowns as `[000]+`, `[00/00]`,
`[Nome do mentor]`, `[Empresa]`. The price anchor "12x de R$ 41,58" always carries the total and the
last installment. "Sem fidelidade" and "cancele quando quiser" are only for the Mensal plan. Pix is
always "Pix à vista".

## Pre-Render Self-Audit

- **Squint** — one title dominates; the italic blue word reads first.
- **Palette** — blue, black, white and the listed grays; no status colors; photos in B&W.
- **Type** — titles 400 with a single italic blue word; DM Mono only in numbers, eyebrows, code.
- **Motion** — only tokens; transform and opacity; no bounce; reduced-motion frame (final state) exists.
- **Timing** — hook ≤ 1.5 s, holds ≤ 1.5 s, end card 1 to 2.5 s, each word ≥ 0.35 s on screen.
- **Safe area** — 9:16 top 14% and bottom 22% clear; captions ≤ 2 lines × 32 characters.
- **Honesty** — every number, name and logo is real and authorized, or a bracketed placeholder.
- **End card** — logo, "Dê um reload.", reload.dev.

## Known Gaps

- Platform-specific safe zones and maximum durations change often; confirm on the platform before
  publishing.
- The sound design is a guide, not a master: no audio assets ship with the brand yet.
- Photography direction (black-and-white portraits) is in the manual's Fotografia chapter; the
  generated images there are direction references and must not appear in a final piece.

Os dois arquivos moram em .agents/skills/reload-creative/assets/, e esta página os lê direto de lá. O Theme foi checado contra o defineTheme e o extendTheme do mexy v0 (tipos e validação); a renderização de ponta a ponta em MP4 ainda não foi feita.