<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vinicius Fantinatto</title>
    <description>The latest articles on DEV Community by Vinicius Fantinatto (@fantinatto).</description>
    <link>https://dev.to/fantinatto</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3625744%2F834cc8f1-c24a-48c8-ab3d-9c2a6d7a95c1.png</url>
      <title>DEV Community: Vinicius Fantinatto</title>
      <link>https://dev.to/fantinatto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fantinatto"/>
    <language>en</language>
    <item>
      <title>hello world</title>
      <dc:creator>Vinicius Fantinatto</dc:creator>
      <pubDate>Tue, 25 Nov 2025 00:33:10 +0000</pubDate>
      <link>https://dev.to/fantinatto/hello-world-2hm6</link>
      <guid>https://dev.to/fantinatto/hello-world-2hm6</guid>
      <description>&lt;p&gt;hello world&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🚀 Guia Completo: Otimização de Performance Web com Core Web Vitals</title>
      <dc:creator>Vinicius Fantinatto</dc:creator>
      <pubDate>Sun, 23 Nov 2025 21:19:36 +0000</pubDate>
      <link>https://dev.to/fantinatto/guia-completo-otimizacao-de-performance-web-com-core-web-vitals-3nho</link>
      <guid>https://dev.to/fantinatto/guia-completo-otimizacao-de-performance-web-com-core-web-vitals-3nho</guid>
      <description>&lt;h2&gt;
  
  
  📊 O que são Core Web Vitals?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Core Web Vitals&lt;/strong&gt; são métricas essenciais definidas pelo Google para medir a experiência do usuário em websites. Elas impactam diretamente o &lt;strong&gt;SEO&lt;/strong&gt; e o &lt;strong&gt;ranking&lt;/strong&gt; do site nos resultados de busca.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 As 3 Métricas Principais
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1️⃣ LCP - Largest Contentful Paint
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;(Maior Renderização de Conteúdo)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que mede:&lt;/strong&gt; Tempo para carregar o maior elemento visível na tela&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Metas de Performance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🟢 &lt;strong&gt;&amp;lt; 2.5s&lt;/strong&gt; - Bom&lt;/li&gt;
&lt;li&gt;🟡 &lt;strong&gt;2.5-4s&lt;/strong&gt; - Precisa melhorar
&lt;/li&gt;
&lt;li&gt;🔴 &lt;strong&gt;&amp;gt; 4s&lt;/strong&gt; - Ruim&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfc1s5q3s16i5byqpjly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfc1s5q3s16i5byqpjly.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elementos comuns:&lt;/strong&gt; Imagens hero, banners, blocos de texto grandes&lt;/p&gt;

&lt;p&gt;
  Exemplo de otimização LCP
  &lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- ❌ Ruim: Imagem sem otimização --&amp;gt;
&amp;lt;img src="banner-grande.jpg" alt="Banner"&amp;gt;

&amp;lt;!-- ✅ Bom: Imagem otimizada com loading priority --&amp;gt;
&amp;lt;img src="banner-otimizado.webp" 
     alt="Banner" 
     loading="eager" 
     fetchpriority="high"
     width="1200" 
     height="600"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;/p&gt;




&lt;h3&gt;
  
  
  2️⃣ FID - First Input Delay
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;(Atraso da Primeira Interação)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que mede:&lt;/strong&gt; Tempo entre a primeira interação do usuário e a resposta do navegador&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Metas de Performance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🟢 &lt;strong&gt;&amp;lt; 100ms&lt;/strong&gt; - Bom&lt;/li&gt;
&lt;li&gt;🟡 &lt;strong&gt;100-300ms&lt;/strong&gt; - Precisa melhorar&lt;/li&gt;
&lt;li&gt;🔴 &lt;strong&gt;&amp;gt; 300ms&lt;/strong&gt; - Ruim&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34qmcoroiaw8xhdpcwlk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34qmcoroiaw8xhdpcwlk.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eventos comuns:&lt;/strong&gt; Cliques em botões, links, inputs&lt;/p&gt;

&lt;p&gt;
  Exemplo de otimização FID
  &lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Ruim: Código pesado bloqueando thread principal&lt;/span&gt;
&lt;span class="nf"&gt;ngOnInit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;processarDadosPesados&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Bloqueia interações&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ Bom: Adiar processamento pesado&lt;/span&gt;
&lt;span class="nf"&gt;ngOnInit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;processarDadosPesados&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Permite interações imediatas&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;/p&gt;




&lt;h3&gt;
  
  
  3️⃣ CLS - Cumulative Layout Shift
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;(Mudança Cumulativa de Layout)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que mede:&lt;/strong&gt; Instabilidade visual durante o carregamento&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Metas de Performance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🟢 &lt;strong&gt;&amp;lt; 0.1&lt;/strong&gt; - Bom&lt;/li&gt;
&lt;li&gt;🟡 &lt;strong&gt;0.1-0.25&lt;/strong&gt; - Precisa melhorar&lt;/li&gt;
&lt;li&gt;🔴 &lt;strong&gt;&amp;gt; 0.25&lt;/strong&gt; - Ruim&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Causas comuns:&lt;/strong&gt; Imagens sem dimensões, anúncios, fontes web, animações&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Este será o foco principal deste artigo!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔍 Caso Real: Otimizando CLS de 0.27 para &amp;lt; 0.1
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚨 O Problema
&lt;/h3&gt;

&lt;p&gt;Ao analisar meu portfólio com &lt;strong&gt;Vercel Speed Insights&lt;/strong&gt;, identifiquei um &lt;strong&gt;CLS de 0.27&lt;/strong&gt; - classificado como &lt;strong&gt;RUIM&lt;/strong&gt; 🔴.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elementos causando Layout Shifts:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;button.lang-btn&lt;/code&gt; - Botão de idioma com transform scale&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;div.hero-stats&lt;/code&gt; - Cards de estatística sem dimensões fixas
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;section.explore-section&lt;/code&gt; - Seção sem altura reservada&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;nav.nav&lt;/code&gt; - Menu com transitions em "all"&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;div.explore-column&lt;/code&gt; - Colunas sem altura mínima&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 6 Técnicas de Otimização Aplicadas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ 1. Reservar Espaço com Min-Height
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;O Problema:&lt;/strong&gt; Elementos dinâmicos sem altura definida causam "pulos" quando o conteúdo carrega.&lt;/p&gt;

&lt;p&gt;
  Ver código antes/depois
  &lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Antes: Elemento sem altura definida&lt;/span&gt;
&lt;span class="nc"&gt;.hero-stats&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ Depois: Espaço reservado antes do conteúdo&lt;/span&gt;
&lt;span class="nc"&gt;.hero-stats&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ← Reserva espaço&lt;/span&gt;
  &lt;span class="na"&gt;contain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// ← Isola o elemento&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Elimina shift de &lt;strong&gt;0.15&lt;/strong&gt; em cards de estatísticas.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ 2. Evitar Transform Scale em Estados Ativos
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;O Problema:&lt;/strong&gt; &lt;code&gt;transform: scale()&lt;/code&gt; altera dimensões físicas, causando reflow.&lt;/p&gt;

&lt;p&gt;
  Ver código antes/depois
  &lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* ❌ Antes: Scale causa layout shift */&lt;/span&gt;
&lt;span class="nc"&gt;.lang-btn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.lang-btn.active&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c"&gt;/* ← CAUSA SHIFT! */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* ✅ Depois: Apenas opacity e background */&lt;/span&gt;
&lt;span class="nc"&gt;.lang-btn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;48px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;36px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* ← Dimensões fixas */&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;opacity&lt;/span&gt; &lt;span class="m"&gt;0.2s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;background-color&lt;/span&gt; &lt;span class="m"&gt;0.2s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateZ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c"&gt;/* ← GPU acceleration */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.lang-btn.active&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* ← Sem mudança de tamanho */&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;59&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;214&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;113&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Reduz shift de &lt;strong&gt;0.08&lt;/strong&gt; ao trocar idiomas.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ 3. CSS Containment para Isolar Elementos
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;O Problema:&lt;/strong&gt; Mudanças em um elemento podem afetar elementos vizinhos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ✅ Isola renderização do elemento&lt;/span&gt;
&lt;span class="nc"&gt;.stat-card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;contain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt; &lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ← Mudanças não afetam vizinhos&lt;/span&gt;
  &lt;span class="na"&gt;will-change&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ← Otimiza animação&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.explore-column&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;400px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="na"&gt;contain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt; &lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Dica:&lt;/strong&gt; Use &lt;code&gt;contain: layout style&lt;/code&gt; em cards, modais e componentes isolados.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h3&gt;
  
  
  ✅ 4. Otimizar Transitions - Evitar "all"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;O Problema:&lt;/strong&gt; &lt;code&gt;transition: all&lt;/code&gt; anima propriedades desnecessárias.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* ❌ Antes: Transition em todas propriedades */&lt;/span&gt;
&lt;span class="nc"&gt;.nav-link&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="m"&gt;0.2s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* ← Pesado */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* ✅ Depois: Apenas propriedades necessárias */&lt;/span&gt;
&lt;span class="nc"&gt;.nav-link&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="m"&gt;0.2s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;background-color&lt;/span&gt; &lt;span class="m"&gt;0.2s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;contain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt; &lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ 5. GPU Acceleration com TranslateZ
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;O Problema:&lt;/strong&gt; Animações em CPU causam jank e shifts.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ✅ Força renderização em GPU (mais suave)&lt;/span&gt;
&lt;span class="nc"&gt;.hero-stats&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.explore-section&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.app-header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;translateZ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// ← GPU layer&lt;/span&gt;
  &lt;span class="na"&gt;will-change&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;          &lt;span class="c1"&gt;// ← Informa mudanças futuras&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="runkit-element"&gt;
  &lt;code&gt;
    
  &lt;/code&gt;
  &lt;code&gt;
    
// Teste de performance: CPU vs GPU
const startCPU = performance.now();
// Animação em CPU
document.querySelector('.cpu').style.marginLeft = '100px';
const endCPU = performance.now();

const startGPU = performance.now();
// Animação em GPU
document.querySelector('.gpu').style.transform = 'translateX(100px)';
const endGPU = performance.now();

console.log(CPU: ${endCPU - startCPU}ms);
console.log(GPU: ${endGPU - startGPU}ms);

  &lt;/code&gt;
&lt;/div&gt;






&lt;h3&gt;
  
  
  ✅ 6. Dimensões Fixas em Imagens e Cards
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;O Problema:&lt;/strong&gt; Imagens sem dimensões expandem quando carregam.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ✅ Previne shift quando imagens carregam&lt;/span&gt;
&lt;span class="nc"&gt;.post-image&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;140px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ← Altura fixa&lt;/span&gt;
  &lt;span class="na"&gt;contain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt; &lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;object-fit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cover&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.post-card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ← Altura mínima garantida&lt;/span&gt;
  &lt;span class="na"&gt;contain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt; &lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📈 Resultados Obtidos
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Antes das Otimizações ❌
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLS Score: 0.2709 (RUIM)
Performance: 65/100
Elementos problemáticos: 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Depois das Otimizações ✅
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLS Score: &amp;lt; 0.1 (BOM)
Performance: 90/100
Elementos problemáticos: 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Impactos Medidos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;⚡ &lt;strong&gt;Performance Score&lt;/strong&gt;: +25 pontos&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Tempo de Interatividade&lt;/strong&gt;: -40%&lt;/li&gt;
&lt;li&gt;👤 &lt;strong&gt;Experiência do Usuário&lt;/strong&gt;: Sem "pulos" visuais&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;SEO&lt;/strong&gt;: Melhor ranking potencial&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  📋 Checklist de Otimização CLS
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Imagens e Media
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Sempre definir &lt;code&gt;width&lt;/code&gt; e &lt;code&gt;height&lt;/code&gt; em imagens&lt;/li&gt;
&lt;li&gt;[ ] Usar &lt;code&gt;aspect-ratio&lt;/code&gt; em containers de imagem&lt;/li&gt;
&lt;li&gt;[ ] Adicionar dimensões em &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Pré-carregar imagens críticas com &lt;code&gt;&amp;lt;link rel="preload"&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Fontes Web
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Usar &lt;code&gt;font-display: swap&lt;/code&gt; ou &lt;code&gt;optional&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Pré-carregar fontes críticas&lt;/li&gt;
&lt;li&gt;[ ] Definir fallback fonts com métricas similares&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Conteúdo Dinâmico
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Reservar espaço com &lt;code&gt;min-height&lt;/code&gt; antes de carregar dados&lt;/li&gt;
&lt;li&gt;[ ] Usar skeleton screens durante loading&lt;/li&gt;
&lt;li&gt;[ ] Evitar injetar conteúdo acima do conteúdo existente&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Animações e Transitions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Evitar &lt;code&gt;transition: all&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Não animar &lt;code&gt;width&lt;/code&gt;, &lt;code&gt;height&lt;/code&gt;, &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;left&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Preferir &lt;code&gt;transform&lt;/code&gt; e &lt;code&gt;opacity&lt;/code&gt; (composited properties)&lt;/li&gt;
&lt;li&gt;[ ] Usar &lt;code&gt;will-change&lt;/code&gt; com moderação&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  CSS Containment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Aplicar &lt;code&gt;contain: layout style&lt;/code&gt; em componentes isolados&lt;/li&gt;
&lt;li&gt;[ ] Usar em cards, modais, sidebars&lt;/li&gt;
&lt;li&gt;[ ] Combinar com &lt;code&gt;transform: translateZ(0)&lt;/code&gt; para GPU&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🛠️ Ferramentas de Medição
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Vercel Speed Insights
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;(Usado neste projeto)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;injectSpeedInsights&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@vercel/speed-insights&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;ngOnInit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;injectSpeedInsights&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// ← Coleta métricas reais&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Google Lighthouse
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Via CLI&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; lighthouse
lighthouse &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;seu&lt;/span&gt;&lt;span class="sh"&gt;-site&amp;gt; --view
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3. PageSpeed Insights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔗 [pagespeed.web.dev]&lt;/li&gt;
&lt;li&gt;Analisa mobile e desktop&lt;/li&gt;
&lt;li&gt;Fornece sugestões específicas&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  4. Web Vitals Extension
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Extensão Chrome oficial&lt;/li&gt;
&lt;li&gt;Métricas em tempo real&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  💡 Boas Práticas Resumidas
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Sempre Reserve Espaço
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nc"&gt;.dynamic-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Evita shift quando dados chegam&lt;/span&gt;
  &lt;span class="na"&gt;contain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Prefira Composited Properties
&lt;/h3&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;GPU Properties=transform+opacity
\text{GPU Properties} = \text{transform} + \text{opacity}
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;GPU Properties&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;transform&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;opacity&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ✅ Bom: Renderizado em GPU&lt;/span&gt;
&lt;span class="nc"&gt;.animado&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="mi"&gt;.3s&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opacity&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="mi"&gt;.3s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ❌ Ruim: Causa reflow&lt;/span&gt;
&lt;span class="nc"&gt;.animado&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="mi"&gt;.3s&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="mi"&gt;.3s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Use Will-Change com Moderação
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ✅ Apenas em elementos que animam&lt;/span&gt;
&lt;span class="nc"&gt;.hover-card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;will-change&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ❌ Não use globalmente&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;will-change&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Consome memória! */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔄 Monitoramento Contínuo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Budget de Performance no Angular
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;angular.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"budgets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"anyComponentStyle"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"maximumWarning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"15kb"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"maximumError"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"20kb"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CI/CD Integration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# GitHub Actions&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Lighthouse CI&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;npm install -g @lhci/cli&lt;/span&gt;
    &lt;span class="s"&gt;lhci autorun --assert.assertions.cumulative-layout-shift=0.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎯 Conclusão
&lt;/h2&gt;

&lt;p&gt;Otimizar CLS não é apenas sobre performance técnica - é sobre &lt;strong&gt;respeitar o usuário&lt;/strong&gt;. Quando elementos não "pulam" durante o carregamento, criamos uma experiência mais profissional e confiável.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Takeaways
&lt;/h3&gt;

&lt;p&gt;✅ Dimensões fixas previnem surpresas visuais&lt;br&gt;&lt;br&gt;
✅ CSS containment isola componentes&lt;br&gt;&lt;br&gt;
✅ GPU acceleration suaviza animações&lt;br&gt;&lt;br&gt;
✅ Transitions específicas economizam recursos  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resultado:&lt;/strong&gt; Site mais rápido, usuários mais felizes, melhor SEO. 🚀&lt;/p&gt;




&lt;p&gt;💬 &lt;strong&gt;Você já otimizou CLS no seu projeto? Compartilhe sua experiência nos comentários!&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  webperf #performance #css #frontend #webdev
&lt;/h1&gt;

</description>
      <category>webperf</category>
      <category>performance</category>
      <category>css</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Automation for Request Transport by Copy ‐ [TOC][zse09]</title>
      <dc:creator>Vinicius Fantinatto</dc:creator>
      <pubDate>Sun, 23 Nov 2025 15:03:38 +0000</pubDate>
      <link>https://dev.to/fantinatto/automation-for-request-transport-by-copy-toczse09-3jm7</link>
      <guid>https://dev.to/fantinatto/automation-for-request-transport-by-copy-toczse09-3jm7</guid>
      <description>&lt;p&gt;These days, I'm working on a new form layout using Adobe Forms. I don’t know about you, but I’m terrible at visual design when it comes to forms. To make things worse, there isn’t enough data in the Development System for proper unit testing, forcing me to manually copy and transport requests multiple times.&lt;/p&gt;

&lt;p&gt;I’m not sure if this is a common problem, but I decided to write a simple piece of code to make my life easier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/fantinatto/ABAP/wiki/Automation-for-Request-Transport-by-Copy-%E2%80%90-%5BTOC%5D%5Bzse09%5D" rel="noopener noreferrer"&gt;Automation for Request Transport by Copy ‐ [TOC][zse09]&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;#SAP #ABAP&lt;/p&gt;

</description>
      <category>automation</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
