Frontends com Vibecoding Capítulo: Stripe: quando a interface reduz o custo de conformidade Trechos: 7 pedidos prontos para colar no seu agente Leia o LEIA-ME.txt desta pasta antes de usar. A página do capítulo explica a decisão; estes trechos só executam o que a página já decidiu. ### O que faz: pede um checkout em que o número do cartão nunca toca o seu código ### Onde entra: no agente, quando você já instalou os pacotes de pagamento no projeto React ### Cuidado: se o agente devolver um input próprio para o cartão, recuse a entrega inteira Crie um formulário de pagamento React com @stripe/react-stripe-js que isole o cartão por design. Estrutura obrigatória: - Crie a Promise do loadStripe UMA vez, fora do componente, usando apenas a publishable key (pk_). - Envolva o formulário no provider recebendo essa Promise. - Use um único para capturar o pagamento (um campo, muitos métodos). - Deixe explícito em comentário: a secret key (sk_) cria o PaymentIntent no SERVIDOR e nunca aparece no frontend. Regras inegociáveis: - O número do cartão vive no iframe do Stripe Elements; o JSX nunca lê nem armazena o número. - Mostre estado de erro e de sucesso ligados aos eventos do Elements, com mensagem anunciada por aria-live. - Foco visível no botão de pagar; contraste AA; cores por token, sem hex cru. Não capture o cartão num próprio: isso quebra o isolamento PCI e encarece a conformidade. ### O que faz: pede um herói com gradiente de aurora feito só em CSS, sem WebGL ### Onde entra: na primeira dobra de uma página de marca, quando você quer a sensação premium sem custo de shader ### Cuidado: o teste de contraste mira o ponto mais escuro do gradiente, nunca a média Crie uma seção hero "premium calma" em React + CSS que evoque a aurora estilo Stripe sem copiar a marca. Fundo: - Use APENAS CSS: um conic-gradient e dois radial-gradient sobrepostos para sugerir profundidade de aurora. - Anime somente a posição do fundo (background-position), nunca largura, altura ou layout. - Aplique um skewY leve no container como gesto geométrico, com overflow: hidden. - NÃO use canvas, WebGL, shader nem qualquer biblioteca de gradiente animado. Cores e tipografia: - Todas as cores vêm de tokens (var(--accent), var(--accent-dark), var(--card), var(--text)); zero hex cru no código. - Uma única cor de acento; o resto é tipografia sobre fundo claro. Título em peso 300-400, muito espaço em branco. Guardas inegociáveis: - Sob prefers-reduced-motion: reduce, desligue a animação e entregue um fundo estático equivalente. - O gradiente é decorativo: marque-o como aria-hidden; o conteúdo e o CTA funcionam sem ele. - Contraste AA do texto: teste o ponto MAIS escuro do gradiente, não a média. - Foco visível no CTA, com outline e offset. Comente por que você animou só background-position (composited, sem reflow). ### O que faz: pede um campo de pagamento com os quatro estados visuais e semânticos casados ### Onde entra: em qualquer formulário sensível, não só de cartão ### Cuidado: borda vermelha sozinha não chega a quem não enxerga cor Crie um campo de pagamento React acessível com quatro estados visuais e semânticos: vazio, digitando, erro e sucesso. Contrato obrigatório: - Label associado ao input (for/id ou aria-label); nunca dependa só do placeholder. - Foco visível no estado de digitação: outline com offset, jamais outline:none sem substituto. - aria-invalid="true" no estado de erro, removido nos demais. - aria-describedby ligando o input à mensagem de erro. - Região aria-live="polite" que anuncia a mensagem de erro sem roubar o foco; role="alert" só entra no estado de erro. Regras: - Estado visual e estado semântico andam juntos: a borda vermelha SEMPRE vem acompanhada de aria-invalid e mensagem anunciada. - Cores por token (var(--border), var(--accent), var(--card), var(--text)) e tons semânticos de status; contraste AA. - Não use cor sozinha para indicar erro: combine com ícone ou texto. ### O que faz: pede a página de documentação de duas colunas, com abas de linguagem e botão de copiar acessíveis ### Onde entra: na documentação pública de um produto que tem cliente técnico ### Cuidado: aba que só muda de cor não chega a quem não distingue cor Crie um componente React + Tailwind chamado DocLayout que reproduza a documentação de duas colunas estilo Stripe: prosa à esquerda, código à direita. Layout: - Coluna esquerda: explicação em prosa clara, sem jargão de vendas. - Coluna direita: bloco de código sobre fundo escuro, com tabs de linguagem (ex.: Node, Python, Ruby). - No desktop, as colunas ficam lado a lado; no mobile, empilham (prosa primeiro, depois código). Regras obrigatórias de acessibilidade: - As tabs de linguagem são navegáveis por teclado: implemente o padrão ARIA tablist (role="tablist", role="tab", role="tabpanel", aria-selected), com navegação por setas e Home/End. - Botão "copiar" acessível: é um