← Biblioteca componentes/prova/manchetes-imprensa/ficha.md CódigoTela cheia
prova/manchetes-imprensa

Manchetes de imprensa

🟢 estavel complexidade baixa prefixo news- imprensa manchete jornal noticia clipping prova-social logos grade css-puro sem-js compliance sem javascript

Incluir · as linhas que se colam num site novo, depois do core (CLAUDE.md §10)

<link rel="stylesheet" href="componentes/prova/manchetes-imprensa/estilo.css">

markup.html · 109 linhas · 5,6 KB

<!-- ==========================================================================
     MANCHETES DE IMPRENSA — recortes de jornal em vez de print de matéria
     Prefixo: news-
     Requer: core (tokens, base, motion.css, motion.js) + este estilo.css
     SEM JAVASCRIPT.

     Substitui o print de matéria. Um recorte de jornal montado em HTML: logo
     do veículo, manchete, linha fina, data e link para a matéria original.
     O que se ganha sobre a captura de tela: texto que escala, que quebra no
     celular, que o leitor de tela lê, que o buscador entende, e que não
     amarela em três meses quando o site do jornal muda de layout.

     O TOM VEM DA SEÇÃO, NÃO DO COMPONENTE. Em .sec-paper ele lê como
     recorte de papel; em .sec-dark, como card da marca. Nenhuma cor é
     escrita aqui — é o sistema de token fazendo o trabalho, e é por isso
     que o mesmo componente serve aos dois casos sem uma variação de código.

     DATA E LINK NÃO SÃO OPCIONAIS. Estão no markup de propósito, e a ficha
     tem uma seção de Compliance sobre isso: um card com o logo de um
     veículo real e uma manchete sem data nem link é notícia falsa
     atribuída a um jornal de verdade. Com data e link, é citação — que é o
     que a imprensa espera e o que a lei protege.

     O LOGO É ASSET DO CONSUMIDOR. Marca de terceiro não atravessa para esta
     biblioteca (§11): o preview usa os placeholders de showroom/demo/ com
     veículos FICTÍCIOS, os mesmos nomes inventados que a
     midia/galeria-scroll-horizontal já usa. Ver a especificação de assets.

     A TIPOGRAFIA NÃO IMITA A DO VEÍCULO. Cada jornal tem a própria fonte, e
     fonte de terceiro não atravessa (§1). Quem diz de onde veio a manchete
     é o LOGO, não o desenho da letra — e o texto lê --display, como todo o
     resto da casa. Imitar a fonte seria, além de ilegal, a parte errada da
     imitação.

     O CARD INTEIRO É CLICÁVEL, com um link só. O <a> da manchete se estica
     por cima do card com ::after; não há segundo link nem onclick no
     <article>. Ver o gotcha do custo disso na ficha.
     ========================================================================== -->

<section class="sec-paper sec-pad news-sec">
  <div class="wrap">

    <div class="sec-head">
      <span class="eyebrow" data-rv>Na imprensa</span>
      <h2 class="sec-title ttl">O que os jornais <em>estão dizendo</em></h2>
      <p class="sec-lead" data-rv data-d="1">Nenhuma dessas manchetes é nossa. Todas têm data e link para a matéria original.</p>
    </div>

    <div class="news-grid">

      <article class="news-card news-destaque" data-rv>
        <img class="news-logo" src="../../../showroom/demo/logo-1.svg" alt="Jornal Meridiano" loading="lazy" decoding="async">
        <h3 class="news-titulo">
          <a class="news-link" href="https://exemplo.invalid/materia-1" rel="noopener nofollow" target="_blank">
            Custo de vida alto enfraquece o discurso de inflação sob controle
          </a>
        </h3>
        <p class="news-lead">O índice acumulado em doze meses voltou a subir, e o descompasso entre o dado oficial e a percepção de quem faz compra virou tema de campanha.</p>
        <footer class="news-pe">
          <time class="news-data" datetime="2026-08-14">14 ago 2026</time>
          <span class="news-ir" aria-hidden="true">Ler no site</span>
        </footer>
      </article>

      <article class="news-card" data-rv data-d="1">
        <img class="news-logo" src="../../../showroom/demo/logo-2.svg" alt="Boletim Altamira" loading="lazy" decoding="async">
        <h3 class="news-titulo">
          <a class="news-link" href="https://exemplo.invalid/materia-2" rel="noopener nofollow" target="_blank">
            Carga tributária atinge o nível mais alto em quinze anos
          </a>
        </h3>
        <p class="news-lead">A arrecadação cresceu acima do PIB pelo terceiro ano seguido.</p>
        <footer class="news-pe">
          <time class="news-data" datetime="2026-07-30">30 jul 2026</time>
          <span class="news-ir" aria-hidden="true">Ler no site</span>
        </footer>
      </article>

      <article class="news-card" data-rv data-d="2">
        <img class="news-logo" src="../../../showroom/demo/logo-3.svg" alt="Agência Northbay" loading="lazy" decoding="async">
        <h3 class="news-titulo">
          <a class="news-link" href="https://exemplo.invalid/materia-3" rel="noopener nofollow" target="_blank">
            Famílias buscam estrutura no exterior antes da mudança de regra
          </a>
        </h3>
        <p class="news-lead">Escritórios relatam fila para constituição de holding e revisão de testamento.</p>
        <footer class="news-pe">
          <time class="news-data" datetime="2026-07-11">11 jul 2026</time>
          <span class="news-ir" aria-hidden="true">Ler no site</span>
        </footer>
      </article>

      <article class="news-card" data-rv data-d="3">
        <img class="news-logo" src="../../../showroom/demo/logo-4.svg" alt="Diário Quadrant" loading="lazy" decoding="async">
        <h3 class="news-titulo">
          <a class="news-link" href="https://exemplo.invalid/materia-4" rel="noopener nofollow" target="_blank">
            Juro alto muda a conta de quem vive de renda fixa
          </a>
        </h3>
        <p class="news-lead">Com a curva invertida, o prazo voltou a pesar mais que o indexador.</p>
        <footer class="news-pe">
          <time class="news-data" datetime="2026-06-28">28 jun 2026</time>
          <span class="news-ir" aria-hidden="true">Ler no site</span>
        </footer>
      </article>

    </div>
  </div>
</section>

estilo.css · 193 linhas · 5,5 KB

/* ==========================================================================
   MANCHETES DE IMPRENSA — news-
   Recorte de jornal em HTML: logo, manchete, linha fina, data e link.
   Nenhuma cor escrita a mao: o tom vem do escopo da secao (.sec-paper,
   .sec-dark), e e' por isso que o mesmo arquivo serve aos dois casos.
   ========================================================================== */

.news-grid{
  display:grid;
  grid-template-columns:repeat(3, minmax(0, 1fr));
  gap:1px;
  /* O fio entre os cards E' o fundo da grade aparecendo pelo gap de 1px, em
     vez de uma borda por card. Borda por card dobra na divisa e vira 2px em
     algumas telas; o gap nunca dobra. E' a mesma conta que a
     prova/grade-logos-miolo faz com a malha dela. */
  background:var(--rule);
  border-block:1px solid var(--rule);
}

.news-card{
  position:relative;
  display:flex;
  flex-direction:column;
  gap:14px;
  padding:30px 28px 24px;
  background:var(--bg);
}

/* O realce de hover e' um veu em OPACIDADE, nao uma troca de background-color.
   Medido, e a razao e' especifica desta biblioteca: com
   `transition:background-color` no card, trocar o escopo de tom da secao
   (.sec-paper para .sec-dark) deixa o fundo TRAVADO no valor antigo -- o
   --bg novo resolve certo no computado, o fio e o texto invertem, e so' o
   background fica para tras, para sempre. Transicao sobre propriedade que le
   custom property nao acompanha a troca da propria variavel. Opacidade nao
   depende de --bg, entao o veu anima e o tom continua livre para mudar. */
.news-card::before{
  content:"";
  position:absolute;
  inset:0;
  background:var(--fg);
  opacity:0;
  pointer-events:none;
  transition:opacity .4s var(--ease);
}

/* Filho posicionado paira sobre conteudo em fluxo: sem levantar o conteudo,
   o veu cobriria o texto. Mesma linha que o .grain do core exige de quem o
   usa dentro de um card. */
.news-logo,
.news-titulo,
.news-lead,
.news-pe{
  position:relative;
  z-index:1;
}

/* O destaque ocupa a fileira inteira e sobe o corpo da manchete. Serve a
   primeira noticia, que e' a que decide se a pessoa le as outras. */
.news-destaque{
  grid-column:1 / -1;
  padding-block:38px;
}

.news-logo{
  /* Logo se dimensiona pela ALTURA, nunca pela largura: os arquivos vem em
     proporcoes que variam de 1:1 a 6:1, e travar a largura faz o quadrado
     virar gigante ao lado do retangulo. O max-width e' so' um limite de
     seguranca para o logo muito deitado. */
  block-size:22px;
  inline-size:auto;
  max-inline-size:150px;
  object-fit:contain;
  object-position:left center;
  display:block;
  /* Alinha o logo pela esquerda mesmo dentro do flex column. */
  align-self:flex-start;
}

.news-titulo{
  font-family:var(--display);
  font-weight:700;
  font-size:clamp(1.16rem, 1.9vw, 1.44rem);
  line-height:1.14;
  letter-spacing:-.018em;
  color:var(--fg);
  margin:0;
  /* O core da' text-wrap:balance a todo h1..h4. Numa manchete de tres linhas
     o balance produz a ultima linha orfa com uma palavra; pretty quebra pelo
     fim e mantem o bloco cheio, que e' como jornal compoe. */
  text-wrap:pretty;
}

.news-destaque .news-titulo{
  font-size:clamp(1.5rem, 3.1vw, 2.3rem);
  line-height:1.06;
  letter-spacing:-.026em;
}

.news-link{
  color:inherit;
  text-decoration:none;
}

/* O link se estica por cima do card inteiro. Um link so' no HTML, area de
   clique do tamanho do card -- em vez de um <a> na manchete mais um onclick
   no <article>, que daria dois alvos para o leitor de tela e um deles sem
   destino. O custo esta' no gotcha da ficha. */
.news-link::after{
  content:"";
  position:absolute;
  inset:0;
}

.news-link:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:4px;
}

.news-lead{
  color:var(--fg-2);
  font-size:.95rem;
  line-height:1.56;
  margin:0;
  /* A linha fina e' apoio, nao materia: tres linhas e' o teto antes de o card
     competir com a manchete que ele deveria servir. */
  display:-webkit-box;
  -webkit-line-clamp:3;
  -webkit-box-orient:vertical;
  overflow:hidden;
}

.news-destaque .news-lead{
  font-size:1.02rem;
  max-inline-size:62ch;
  -webkit-line-clamp:2;
}

.news-pe{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:14px;
  margin-block-start:auto;
  padding-block-start:14px;
  border-block-start:1px solid var(--rule);
  font-size:.78rem;
  letter-spacing:.07em;
  text-transform:uppercase;
  color:var(--fg-muted);
}

.news-ir{
  display:inline-flex;
  align-items:center;
  gap:7px;
  color:var(--accent);
  transition:gap .3s var(--ease);
}

.news-ir::after{
  content:"→";
  /* A seta e' decoracao dentro de um span aria-hidden. O destino de verdade
     esta' no href da manchete, que e' o unico link do card. */
  transition:transform .3s var(--ease);
}

.news-card:hover::before{opacity:.04}

.news-card:hover .news-ir{gap:11px}
.news-card:hover .news-ir::after{transform:translateX(2px)}

@media (prefers-reduced-motion: reduce){
  /* Colado nas regras que animam. O realce de fundo no hover fica -- ele diz
     onde o ponteiro esta', e isso e' informacao. Sai so' o deslocamento da
     seta, que e' enfeite. */
  .news-card::before,
  .news-ir,
  .news-ir::after{transition:none}
  .news-card:hover .news-ir{gap:7px}
  .news-card:hover .news-ir::after{transform:none}
}

@media (max-width: 900px){
  .news-grid{grid-template-columns:repeat(2, minmax(0, 1fr))}
}

@media (max-width: 620px){
  .news-grid{grid-template-columns:1fr}
  .news-card{padding:24px 22px 20px}
  .news-destaque{padding-block:28px}
  .news-logo{block-size:19px}
}

Um recorte de jornal montado em HTML, no lugar do print de matéria: logo do veículo, manchete, linha fina, data e link para o original. O primeiro card ocupa a fileira inteira.

Ele nasceu de um problema concreto da casa: as páginas colavam captura de tela de matéria de jornal. Print não escala, não quebra no celular, não tem alt, o buscador não lê, pesa como imagem e amarela no dia em que o site do veículo troca de layout. Em HTML, a mesma manchete é texto — e vira link para a matéria, que é o que a citação pede.


Quando usar

Quando não usar


Compliance

A regra é uma só: manchete real, veículo real, data real, link real. Os quatro juntos.

Um card com o logo de um jornal de verdade e uma manchete sem data nem link não é peça de marketing — é notícia falsa atribuída a um veículo. Com data e link, é citação: a forma que a imprensa espera e que a lei protege.

Por isso <time datetime> e o href da manchete estão no markup como estrutura, não como opção. Se você está montando a seção e ainda não tem o link, o card não está pronto.

O que segue disso, na prática:


Padrão editorial

A manchete manda; a linha fina serve. O corpo da manchete é o dobro do da linha fina, e o card cabe em três linhas de título mais duas de apoio. Se a manchete não couber em três linhas, ela é longa demais para uma grade — vai para o destaque.

O destaque é a primeira, e é a que decide se a pessoa lê as outras. Escolha a de veículo mais conhecido, ou a mais dura. Não a mais elogiosa: seção de imprensa que só traz elogio lê como publicidade paga.

A ordem é cronológica inversa. Data recente primeiro. Uma seção de imprensa cuja manchete mais nova é de dois anos atrás diz que ninguém fala da empresa desde então.

Três a seis cards. Menos que três não enche a grade; mais que seis vira arquivo, e aí é uma página própria com paginação.


Especificação dos assets

Um logo por veículo, SVG de preferência, PNG com fundo transparente serve.

O critério é legibilidade a 22px de altura — é o tamanho em que o componente o desenha. Logo com assinatura embaixo ("desde 1921") ou com muita palavra some nesse corpo: use a versão reduzida da marca, que quase todo veículo publica no próprio kit de imprensa.

O logo é asset do consumidor e não vive nesta biblioteca. Marca de terceiro não atravessa (§11). O preview usa os placeholders de showroom/demo/ com veículos fictícios — Meridiano, Altamira, Northbay, Quadrant —, os mesmos nomes inventados que a midia/galeria-scroll-horizontal já usa.


Como usar

Cole a seção, troque os quatro cards. Por card: src e alt do logo, texto e href da manchete, linha fina, datetime e data legível.

O alt do logo é o nome do veículo, e não "logo do X": para quem ouve a página, o nome é a informação; a palavra "logo" é ruído.

Ganchos

Gancho O quê
.news-destaque no primeiro card. Ocupa a fileira inteira e sobe o corpo da manchete
escopo da seção .sec-paper para cara de papel, .sec-dark para o tom da marca. Nenhuma linha de CSS muda

Variações

Variação Como
Sem destaque tirar .news-destaque. Quatro cards de mesmo peso
No tom da marca trocar .sec-paper por .sec-dark na seção
Faixa horizontal grid-auto-flow: column, grid-auto-columns: min(78vw, 340px) e overflow-x: auto com scroll-snap no .news-grid. Para seis ou mais
Sem linha fina apagar as .news-lead. Mais perto do recorte físico

Gotchas


Movimento reduzido / toque

O componente é CSS puro e não tem movimento próprio além da entrada do core e do hover.

Com prefers-reduced-motion: reduce, o realce de fundo no hover fica — ele diz onde o ponteiro está, e isso é informação. Sai só o deslocamento da seta, que é enfeite.

No toque não há hover, e nada se perde: o card inteiro é a área de toque, e a seta é decorativa (aria-hidden).


Histórico

Origem Quando O quê
autoral 2026-09-04 Construído do zero, a partir de um problema real da casa

Origem. Não há referência única: a dobra "na imprensa" existe em quase todo site institucional. O que originou este componente foi uma copy da casa em que as menções de jornal estavam como captura de tela — e o pedido de trocar print por HTML. Nada foi copiado: reescrito do zero dentro do contrato desta biblioteca. O registro consolidado vai em projetos/autorais.md.

Qual irmão ele substitui. A prova/marquee-logos mostra de quem se falou, sem dizer o quê; a prova/carrossel-depoimentos traz citação de pessoa, com retrato. Faltava a citação de veículo, com logo, data e link — que é o que transforma menção em prova verificável.

Decisões da tradução para o contrato. Nenhuma cor escrita no componente, então o escopo de tom da seção decide o visual inteiro — e foi essa exigência que derrubou a transição de background-color no hover, pelo motivo do gotcha correspondente. O fio pelo gap. O logo pela altura. text-wrap:pretty na manchete. Link único esticado. E data e link como estrutura, pela razão da seção de Compliance.

Calibragem no primeiro uso. Espere ajustar a altura do logo: 22px serve à maioria, mas veículo com marca muito horizontal pede 18px e o max-inline-size mais apertado. E confira o -webkit-line-clamp contra as suas linhas finas reais — três linhas é o teto do card comum, duas o do destaque.