Skip to Content
ComponentsOrganismsCard

Card

Organism

Card cria uma unidade de leitura. Ele deve agrupar conteúdo por decisão, não por decoração.

Use Card para métricas, formulários curtos, blocos de configuração, resumos de caso e evidências relacionadas. Um card bom deixa claro: título, contexto, conteúdo principal e ações proporcionais.

Exemplos copiáveis

React

import * as React from "react" type PulsoCardProps = { title: string description?: string children: React.ReactNode footer?: React.ReactNode interactive?: boolean } export function PulsoCard({ title, description, children, footer, interactive = false }: PulsoCardProps) { return ( <article data-interactive={interactive || undefined} className="rounded-[var(--radius-lg)] border border-[var(--border)] bg-[var(--card)] data-[interactive=true]:transition-[border-color,box-shadow] data-[interactive=true]:duration-[var(--motion-duration-fast)] data-[interactive=true]:hover:border-[var(--border-strong)]" > <header className="border-b border-[var(--border)] p-4"> <h3 className="text-base font-semibold text-[var(--fg-strong)]">{title}</h3> {description ? <p className="mt-1 text-sm text-[var(--fg-muted)]">{description}</p> : null} </header> <div className="p-4">{children}</div> {footer ? <footer className="border-t border-[var(--border)] p-4">{footer}</footer> : null} </article> ) }
<PulsoCard title="Configurações de notificação" description="Canais ativos para alertas de alta prioridade." footer={<button type="button">Salvar alterações</button>} > <p>Email e Slack ativos para risco high e critical.</p> </PulsoCard>

Regras

  • Card deve representar uma unidade semântica, normalmente article ou section.
  • Não misture ações de pesos diferentes sem alinhamento visual consistente.
  • Footer deve conter ações do card, não navegação global.
  • Evite cards clicáveis com ações internas conflitantes.

Variantes de contenção

Duas variantes, com papéis distintos (regra consolidada no Crisis Monitor, Issue Crisis-Monitor/Crisis-Monitor#372):

VarianteAparênciaQuando usar
flatborda sutil, sem sombraCard de seção — agrupamento de conteúdo dentro da página (dashboards, abas, listagens)
defaultborda + sombra suaveConteúdo elevado — dialogs, popovers e destaques que flutuam sobre a página

Nunca reimplemente contenção de seção com classes ad-hoc por tela: se a página precisa agrupar conteúdo, é flat; se o conteúdo flutua, é default.

Títulos dentro do card

Header de card usa a utility text-heading da escala tipográfica (18px, peso 600). Cabeçalho de seção da página usa text-title; título de página usa text-display. Não recomponha títulos com text-sm font-semibold e afins — as utilities já carregam tamanho, peso e line-height.

Last updated on