Floating Pricing Card
Em andamentoCartão de preço de campanha: nome do curso (o título do cartão), preço cheio riscado, "Economia de 50%", preço por mês em destaque, benefícios e, com hrefDaMatricula, "Matricular Agora". Sem contagem regressiva desde a E76. As outras props têm padrão.
- Função
- Campanha (marketing)
- Também chamado de
- cartão de preço, oferta, pricing
- Mora em
- app/components/organisms/marketing/FloatingPricingCard.tsx
- Última mudança
- 2026-09-30
Prévia
A peça ao vivo, vinda da ficha, na largura escolhida. Em larguras fixas, ela roda num quadro do tamanho de uma tela de verdade.
Na largura da página: 0px
Variantes na ficha
Lidas da ficha no build, na ordem do palco. Cada uma abre sozinha, sem o styleguide em volta — é o endereço que o palco carrega.
Quando usar
Ao lado do MarketingHero na variante de conversão, ou sozinho numa página de oferta.
Faça
- Passe
courseName,originalPrice,promoPrice,installmentsefeaturesreais. - Passe
hrefDaMatricula: sem ele, "Matricular Agora" não aparece (E74). - Ajuste
nivelDoTitulo(padrãoh3) ao lugar do cartão na página.
Evite
- Prazo de oferta no cartão: a contagem regressiva saiu (E76, decisão de 2026-09-28) porque recomeçava a cada visita — se o prazo for real, escreva a data.
- Deixar "Economia de 50%" com preços que não dão 50%: o texto é fixo.
Quando não usar. Para comparar planos, use o PricingCards. Para o preço de um curso no catálogo, o CourseCard com preco.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Curso — O título do cartão (`h3` por padrão, `nivelDoTitulo`), em `tiny`, caixa alta.
- Preço — "De <cheio>" riscado, "Economia de 50%", "R$", o valor em destaque (parágrafo, E76) e "/mês"; as parcelas embaixo.
- Benefícios — Lista com visto verde.
- Chamada — Com `hrefDaMatricula`: Button `lg` com `href` (48px) e a nota da garantia.
Estados
Os estados que a peça tem no código, e o que muda em cada um.
| Estado | O que muda |
|---|---|
| Padrão | Sem estados próprios além do hover do botão: nada no cartão se move sozinho. |
| Sem destino | Sem hrefDaMatricula: o cartão só informa, sem "Matricular Agora". |
Comportamento
| Situação | O que acontece |
|---|---|
| "Matricular Agora" | Leva ao hrefDaMatricula; sem a prop, não aparece (E74) — testado na ficha. |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { FloatingPricingCard } from '@/app/components/organisms/marketing/FloatingPricingCard';
<FloatingPricingCard />Propriedades
Lidas do código da peça no build — não escritas à mão.
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|---|---|---|---|---|
courseName | string | "Pós-Graduação em Tradução" | não | — |
originalPrice | string | "R$ 792,00" | não | — |
promoPrice | string | "396,00" | não | — |
installments | string | "12x" | não | — |
features | string[] | [ "Acesso vitalício ao conteúdo", "Certificado reconhecido pelo MEC", "Mentoria individual com experts" ] | não | — |
nivelDoTitulo | 'h2' | 'h3' | 'h4' | 'h3' | não | Nível do título com o nome do curso (E76). Padrão h3: o cartão costuma vir dentro de uma seção. |
hrefDaMatricula | string | — | não | Destino de "Matricular Agora" (E74). Sem ele o botão não aparece: era um botão sem ação, o único CTA do cartão. |
Tokens de cor
Os tokens semânticos que o código da peça usa, com o valor de hoje em app/globals.css.
| Token | Valor | Usado como |
|---|---|---|
--primary | #D42B2B | bg-primary/10shadow-primary/20text-primary |
--foreground | #1A1A1A | text-inktext-ink/70 |
--success | #2E844A | bg-success/10text-success |
--border | #E5E5E5 | border-border |
--muted-foreground | #595959 | text-muted-foreground |
--primary-dark | #A81E1E | text-primary-dark |
Teclado
| Tecla | Faz |
|---|---|
| Tab | Com a prop, "Matricular Agora" — a única parada (o botão de pausa saiu com o relógio, E76). |
| Enter | Segue o link da matrícula. |
Leitor de tela
O que é anunciado, e por quê.
- O nome do curso é o título do cartão; o preço não é título — a lista de títulos do leitor tinha um "396,00" solto até a E76.
- O preço riscado não diz, por escrito, que é o preço original — só o traço mostra (o CourseCard diz).
O que sustenta o estado
Esta peça usa estatico. O estado dela é o de quem já foi ouvido com leitor de tela nesses padrões — e não uma passada sobre esta peça em específico.
Falta ouvir: estatico — ver docs/a11y-screen-reader-checklist.md.
Achados abertos
Defeitos conhecidos, com o que falta fazer.
- "Economia de 50%" fixo e preço riscado sem texto. A porcentagem não sai dos preços passados; e o cheio riscado não tem o "Preço original" escrito para o leitor.
Status e recursos
| Tipo | Recurso | Status |
|---|---|---|
| Código | app/components/organisms/marketing/FloatingPricingCard.tsx | Disponível |
| Ficha | Storybook (abre em outra aba) | Disponível |
| Teste de acessibilidade | axe em npm run test | No gate de todo commit |
| Leitor de tela | Passada da E33 | Falta ouvir |
| Design | Figma | Desativado até a Fase 2 |
Histórico
Os últimos commits que tocaram o arquivo, lidos do git no build.
0298af82026-09-30E147: fechamento da Entrega 11 — REPORT.md, verificação cross-agent e o gate estático estrito
O histórico completo está no GitHub (abre em outra aba).